<?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>CGWebPush</name>
	<version>1.4.3</version>
    <mincmsversion>2.2.10</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgaXMgdGhpcz88L2gzPgo8cD5UaGlzIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHByb3ZpZGVzIGEgc2ltcGxlIGFuZCBjb252ZW5pZW50IHdheSB0bzo8L3A+Cjx1bD4KICAgPGxpPkFsbG93IGxvZ2dlZCBpbiBGRVUgdXNlcnMgdG8gc3Vic2NyaWJlIHRvIHB1c2ggbm90aWZpY2F0aW9ucy48L2xpPgogICA8bGk+U2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMgdG8gYSBncm91cCBvZiBGRVUgdXNlcnMgKHdobyBoYXZlIHN1YnNjcmliZWQgd2l0aCBvbmUgb3IgbW9yZSBkZXZpY2VzKS48L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCB0aGUgc2FtZSBhcyBtb2JpbGUgcHVzaCBub3RpZmljYXRpb25zIG9uIEFuZHJvaWQgYW5kIElPUyAod2hpY2ggYm90aCB1c2UgZGlmZmVyZW50IG1ldGhvZG9sb2dpZXMpLiAgVGhpcyB0ZWNobm9sb2d5IGlzIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyJ3MgamF2YXNjcmlwdCBlbmdpbmUuICAgVGhlcmUgaXMgc3VwcG9ydCBmb3Igd2ViLXB1c2ggb24gQW5kcm9pZCBkZXZpY2VzIHVzaW5nIEZpcmVmb3ggb3IgQ2hyb21lIGJyb3dzZXJzLiAgV2ViLXB1c2ggaXMgYWxzbyBzdXBwb3J0ZWQgb24gbW9zdCBtYWpvciBkZXNrdG9wIGJyb3dzZXJzLjwvcD4KCjxoMz5Ib3cgZG8gSSB1c2UgaXQ/PC9oMz4KPHVsPgogIDxsaT5FbnN1cmUgdGhhdCBqcXVlcnkgaXMgYmVpbmcgaW5jbHVkZWQgaW4geW91ciBwYWdlIGphdmFzY3JpcHQgPGVtPihUaGUgaW5pdGlhbGl6YXRpb24gamF2YXNjcmlwdCByZXF1aXJlcyBpdCk8L2VtPjwvbGk+CiAgPGxpPkluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgQ0dTaW1wbGVQV0EgbW9kdWxlLCBhbmQgZ2V0IGl0IHdvcmtpbmcgcHJvcGVybHkuPC9saT4KICA8bGk+VmlzaXQgdGhlIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFuZCBzZXQgYW4gb3B0aW9uYWwgdGl0bGUsIGFuZCBpY29uLgogICAgIDxwPlRoZSB0aXRsZSBzaG91bGQgYmUgcmVsYXRpdmVseSBicmllZi4gIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGFuZCBub3Qgc3VwcGxpZWQgd2l0aCBpbmRpdmlkdWFsIG1lc3NhZ2VzLCB0aGVuIHRoZSBzaXRlIG5hbWUgd2lsbCBiZSB1c2VkLjwvcD4KICAgICA8cD5UaGUgaWNvbiwgaWYgdXNlZCBzaG91bGQgYmUgYSBzcXVhcmUgaW1hZ2Ugb2YgYXQgbGVhc3QgOTZ4OTYgcGl4ZWxzLCBidXQgbm90IHRvbyBsYXJnZSBlaXRoZXIuICBJIHJlY29tbWVuZCBubyBsYXJnZXIgdGhhbiAyNTZ4MjU2IGF0IHRoaXMgdGltZS48L3A+CiAgPC9saT4KICA8bGk+SW4geW91ciBwYWdlIHRlbXBsYXRlLCBBRlRFUiBhbGwgb2YgdGhlIENHU2ltcGxlUFdBIGNvZGUgaGFzIGJlZW4gaW5pdGlhdGVkLCB0cmlnZ2VyIHRoZSBjZ1dlYlB1c2guc3Vic2NyaWJlKCkgbWV0aG9kLiAgaS5lOgo8cHJlPjxjb2RlPntDR1dlYlB1c2ggYWN0aW9uPWpzfQombHQ7c2NyaXB0Jmd0O1wkKGZ1bmN0aW9uKCl7CiAgIGlmKCB0eXBlb2YgY2dXZWJQdXNoICE9ICd1bmRlZmluZWQnICkgY2dXZWJQdXNoLnN1YnNjcmliZSgpCn0pCiZsdDsvc2NyaXB0Jmd0OwombHQ7L2JvZHkmZ3Q7PC9jb2RlPjwvcHJlPgogIDwvbGk+CiAgPGxpPlZpc2l0IHRoZSBwYWdlIHlvdSBjcmVhdGVkIGluIHN0ZXAgMiBhYm92ZSB3aXRoIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGxvZ2luIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSwgYW5kIHN1YnNjcmliZSB0byBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+VXNlIHRoZSBtb2R1bGUncyBhZG1pbiBwYW5lbCB0byBzZW5kIGEgdGVzdCBub3RpZmljYXRpb24uPC9saT4KICA8bGk+WW91IGNhbiBvcHRpb25hbGx5IHVzZSA8Y29kZT48YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Ntc2NsaSI+Y21zY2xpPC9hPiB3ZWJwdXNoLWZldS1ncm91cDwvY29kZT4gdG8gc2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLjwvbGk+CjwvdWw+Cgo8aDM+U2V0dGluZ3MgYW5kIFNlcnZpY2UgV29ya2VyPC9oMz4KPHA+VGhlIHNldHRpbmdzIHRhYiBpbiB0aGlzIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFsbG93cyBzZXR0aW5nIGEgdGl0bGUsIGFuZCBhbiBpY29uLjxwPgo8cD5UaGUgdGl0bGUgaXMgYSBzdHJpbmcgdG8gdXNlIGFzIHRoZSBkZWZhdWx0IHRpdGxlIGZvciBub3RpZmljYXRpb25zIGlmIGl0IGlzIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkLiAgSWYgdGhpcyBmaWVsZCBpcyBsZWZ0IGVtcHR5IHRoZW4gdGhlIHNpdGUgbmFtZSB3aWxsIGJlIHVzZWQuPC9wPgo8cD5UaGUgaWNvbiBpcyBhIFVSTCB0byBhIHNxdWFyZSBpY29uIChtaW5pbXVtIHJlY29tbWVuZGVkIHNpemUgb2YgOTZ4OTYpIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gZWFjaCBhbmQgZXZlcnkgbm90aWZpY2F0aW9uLjwvcD4KPHA+RWFjaCB0aW1lIHRoZXNlIHNldHRpbmdzIGFyZSBjaGFuZ2VkIHRoZSBzZXJ2aWNlIHdvcmtlciBzY3JpcHQgaXMgcmUtZ2VuZXJhdGVkLDwvcD4KPHA+V2hlbiB0aGUgc2VydmljZSB3b3JrZXIgc2NyaXB0IGlzIHJlLWdlbmVyYXRlZCBpdCBtYXkgbm90IGJlIHJlZnJlc2hlZCBvbiB0aGUgdXNlcnMgYnJvd3NlciB1bnRpbCB0aGUgbmV4dCB0aW1lIGEgdmlzaXRzIGEgcGFnZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBqYXZhc2NyaXB0IHRhZ3Mgd2hlcmUgdGhlIHNlcnZpY2Ugd29ya2VyIGlzIHJlZ2lzdGVyZWQuPC9wPgoKPGgzPlNlbmRpbmcgd2ViLXB1c2ggbm90aWZmaWNhdGlvbnMuPC9oMz4KPHA+QSB0YWIgaW4gdGhlIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFsbG93cyBzZW5kaW5nIGEgd2ViIHB1c2ggbm90aWZpY2F0aW9uIHRvIGFuIEZFVSBncm91cC4gIEl0IHByb3ZpZGVzIGZvciBmaWVsZHMgdG8gc3BlY2lmeSBhIHJlcXVpcmVkIG1lc3NhZ2UgYm9keSAodXAgdG8gMTAwMCBjaGFycyksIGFuIG9wdGlvbmFsIHRpdGxlLCBhbmQgYSBVUkwgdG8gb3BlbiB3aGVuIHRoZSBub3RpZmljYXRpb24gaXMgY2xpY2tlZCBvbi48L3A+Cgo8aDM+UmVxdWlyZW1lbnRzOjwvaDM+Cjx1bD4KICA8bGk+WW91ciBzaXRlIG11c3QgYmUgdXNpbmcgSFRUUFMuPC9saT4KICA8bGk+VGhlIGh0dHAgcHJvY2VzcyBtdXN0IGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIHJvb3Qgb2YgeW91ciBDTVNNUyBpbnN0YWxsYXRpb24uPC9saT4KICA8bGk+T3BlblNTTCwgY3VybCwgbXVsdGlieXRlIHN1cHBvcnQsIG1jcnlwdCwgYW5kIG90aGVyIGxpYnJhcmllcyBpbnN0YWxsZWQgaW4gdGhlIFBIUCBlbnZpcm9ubWVudC48L2xpPgogIDxsaT5JbiBvcmRlciB0byByZWNlaXZlIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMsIHVzZXJzIG11c3QgaGF2ZSB0aGUgc3VwcG9ydGVkIGJyb3dzZXIgdGhhdCB0aGV5IHVzZWQgdG8gc3Vic2NyaWJlIG9wZW4gYW5kIHJ1bm5pbmcuICBCdXQgdGhleSBkbyBub3QgaGF2ZSB0byBoYXZlIGEgdGFiIG9yIGEgd2luZG93IGFjdGl2ZWx5IHBvaW50aW5nIHRvIHlvdXIgd2Vic2l0ZS48L2xpPgo8L3VsPgoKPGgzPkF2YWlsYWJsZSBBY3Rpb25zPC9oMz4KPHVsPgogIDxsaT5qcyAtIEluc2VydHMgdGhlIGphdmFzY3JpcHQgcmVxdWlyZWQgdG8gcmVnaXN0ZXIgYW5kIGFjdGl2YXRlIHRoZSBzZXJ2aWNlIHdvcmtlciwgIGFuZCB0byB3b3JrIHdpdGggdGhlIHN1YnNjcmlwdGlvbiBVSS48L2xpPgogIDxsaT5zdWJzY3JpYmUgLSBEaXNwbGF5cyBhIGJ1dHRvbiB0aGF0IGFsbG93cyBhIGxvZ2dlZCBpbiBGRVUgdXNlciB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlLiAgV2lsbCBhbHNvIGRpc3BsYXkgYSBzdGF0dXMgaWYgdGhlIGJyb3dzZXIgaXMgbm90IGNvbXBhdGlibGUuPC9saT4KICA8bGk+dW5zdWJzY3JpYmVfYWxsIC0gQSBzaW1wbGUgYWN0aW9uIHRvIGFsbG93IGEgbG9nZ2VkIGluIEZFVSB1c2VyIHRvIHVuc3Vic2NyaWJlIGZyb20gYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwgb2YgaGlzIHJlZ2lzdGVyZWQgZGV2aWNlcy4gIE9uY2UgY29tcGxldGUsIHRoaXMgYWN0aW9uIHdpbGwgcmVkaXJlY3QgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGVudCBwYWdlLjwvbGk+CjwvdWw+Cgo8aDM+QnJvd3NlciBjb21wYXRpYmlsaXR5PC9oMz4KPHA+Q3VycmVudGx5IHdlYi1wdXNoIHRlY2hub2xvZ3kgaXMgc3VwcG9ydGVkIGJ5IG9ubHkgc29tZSBicm93c2Vycy4gICBNb3N0IG9mIHRoZXNlIGFyZTo8L3A+Cjx1bD4KICAgPGxpPkNocm9tZSBvbiBBbmRyb2lkLCBXaW5kb3dzLCBMaW51eCwgYW5kIE1hY09TPC9saT4KICAgPGxpPkZpcmVmb3ggb24gQW5kcm9pZCwgV2luZG93cywgTGludXgsIGFuZCBNYWNPUzwvbGk+CiAgIDxsaT5TYWZhcmkgb24gTWFjT1MgYW5kIExpbnV4PC9saT4KPC91bD4KPHA+SW9zIHN1cHBvcnQgaXMgcHVycG9ydGVkbHkgJnF1b3Q7aW4gZGV2ZWxvcG1lbnQmcXVvdDsgc28gc3RheSB0dW5lZC48L3A+Cgo8aDM+T3RoZXIgY2FwYWJpbGl0aWVzPC9oMz4KPHVsPgogIDxsaT5UaGlzIG1vZHVsZSBjYW4gYWN0IGFzIGEgbm90aWZpY2F0aW9uLXRyYW5zcG9ydCBmb3IgdGhlIENHTm90aWZpZXIgbW9kdWxlLgogICAgICA8cD5UaGlzIGFsbG93cyBzZW5kaW5nIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgdG8gYWRtaW4gdXNlcnMgb3IgZnJvbnRlbmQgdXNlcnMgd2hlbiB2YXJpb3VzIGV2ZW50cyBoYXBwZW4gaW4geW91ciB3ZWJzaXRlLjwvcD4KICA8L2xpPgogIDxsaT5UaGlzIG1vZHVsZSBjYW4gYWN0IGFzIGEgY2dzb2NpYWxibGFzdGVyLXRyYW5zcG9ydCBmb3IgdGhlIFNvY2lhbEJsYXN0ZXIgbW9kdWxlLgogICAgICA8cD5UaGlzIGFsbG93cyBzZW5kaW5nIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBhcyB1c2luZyBvdGhlciB0cmFuc3BvcnQgbWVjaGFuaXNtcyB0byBibGFzdCBtZXNzYWdlcyB0byB5b3VyIHVzZXJzIG9uIG11bHRpcGxlIG1lZGlhIGZyb20gb25lIGxvY2F0aW9uLjwvcD4KICA8L2xpPgo8L3VsPgoKPGgzPkNhdmVhdHM8L2gzPgo8cD5TZW5kaW5nIGxhcmdlIGFtb3VudHMgb2Ygbm90aWZpY2F0aW9ucyBjYW4gYmUgcGFydGljdWxhcmx5IHNsb3cgZHVlIHRvIHRoZSBuZWVkIHRvIHBlcmZvcm0gbXVsdGlwbGUgb3V0Z29pbmcgcmVxdWVzdHMuICBUaGVyZWZvcmUgaXQgaXMgYmVzdCBpZiB5b3UgdXNlIHRoZSAid2VicHVzaC1mZXUtZ3JvdXAiIGNvbW1hbmQgcHJvdmlkZWQgYnkgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jbXNjbGkiPmNtc2NsaTwvYT4uIEFzIHRoZXJlIGFyZSBubyB0aW1lIHJlc3RyaWN0aW9ucyBpbiB0aGUgQ0xJIGVudmlyb25tZW50IGFzIG9wcG9zZWQgdG8gdGhlIHdlYiBlbnZpcm9ubWVudC48L3A+Cgo8aDM+SmF2YXNjcmlwdCBBUEk8L2gzPgo8cD5hbGwgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBnbG9iYWwgamF2YXNjcmlwdCBvYmplY3QgbmFtZWQgJnF1b3Q7Y2dXZWJQdXNoJnF1b3Q7LiAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhcmU6PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmJvb2wgY2dXZWJQdXNoLmlzX3N1YnNjcmliZWQoKTwvY29kZT4gLSBBIGZ1bmN0aW9uIHRvIHJldHVybiBpZiB0aGUgdXNlciBpcyBzdWJzY3JpYmVkIG9yIG5vdC4gIFdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHVzZXIgaGFzIGNvbXBsZXRlZCBhbGwgc3RlcHMgaW4gdGhpcyBicm93c2VyIHRvIHN1YnNjcmliZSB0byBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2guaXNfY29tcGF0aWJsZSgpPC9jb2RlPiAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2guaXNfZGVuaWVkKCk8L2NvZGU+IC0gUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGhhcyBhY3RpdmVseSBkZW5pZWQgcHVzaCBub3RpZmljYXRpb25zLjwvbGk+CiAgPGxpPjxjb2RlPmJvb2wgY2dXZWJQdXNoLnN1YnNjcmliZSgpPC9jb2RlPiAtIFdpbGwgc3Vic2NyaWJlIGEgdXNlciwgaWYgdGhleSBoYXZlIG5vdCBleHBsaWNpdGx5IGJsb2NrZWQgcHVzaCBub3RpZmljYXRpb25zIEFORCB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2gudW5zdWJzY3JpYmUoKTwvY29kZT4gLSBXaWxsIHVuc3Vic2NyaWJlIGEgc3Vic2NyaWJlZCB1c2VyLCBpZiB0aGUgYnJvd3NlciBwZXJtaXRzIGl0LjwvbGk+CjwvdWw+Cgo8aDM+UEhQIEFQSTwvaDM+CjxwPlRoaXMgbW9kdWxlIGhhcyBhIHNpbXBsZSBBUEkgdG8gYWxsb3cgY3JlYXRpbmcgYW5kIHNlbmRpbmcgd2ViLXB1c2ggbm90aWZpY3Rpb25zLiAgIERvY3VtZW50YXRpb24gY29taW5nIHNvb24uPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZnJvbnRlbmR1c2VycyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcm92aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q0dFeHRlbnNpb25zID0mZ3Q7IDEuNjE8L2xpPjxsaT5DR1NpbXBsZVBXQSA9Jmd0OyAxLjI8L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuNC4zPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogICA8bGk+VmVyc2lvbiAxLjAuMCAtIEluaXRpYWwgcmVsZWFzZS48L2xpPgogICA8bGk+VmVyc2lvbiAxLjEKIAk8dWw+Cgk8bGk+Tm93IGFjdHMgYXMgYSBzb2NpYWwgYmxhc3QgdHJhbnNwb3J0IGZvciB0aGUgQ0dTb2NpYWxCbGFzdCBtb2R1bGUuPC9saT4KCTxsaT5Ob3cgYWN0cyBhcyBhIG5vdGlmaWVyIHRyYW5zcG9ydCBmb3IgdGhlIENHTm90aWZpdGVyIG1vZHVsZS48L2xpPgoJPGxpPk5vdyBzdXBwb3J0cyBpbWFnZXMuPC9saT4KCTxsaT5DYW4gbm93IHNlbmQgd2ViIHB1c2ggbWVzc2FnZXMgdG8gYWRtaW4gdXNlcnMuPC9saT4KCTxsaT5ObyBsb25nZXIgZGVwZW5kcyBvbiBGRVUuPC9saT4KCTwvdWw+CiAgIDwvbGk+CiAgIDxsaT5WZXJzaW9uIDEuMgogICAgICAgPHVsPgogICAgICAgPGxpPkNIQU5HRTogTm93IHJlcXVpcmVzIENHU2ltcGxlUFdBIGFzIHRoaXMgbW9kdWxlIGRvZXMgbm90IGdlbmVyYXRlIGl0J3Mgb3duIHNlcnZpY2Ugd29ya2VyLjwvbGk+CiAgICAgICA8bGk+Q0hBTkdFOiBTZXBhcmF0ZSB0aGUgY2dXZWJQdXNoIGNvcmUgbGlicmFyeSBmcm9tIHRoZSBqcXVlcnkgcGx1Z2luLiAgU28gdGhhdCB5b3UgY2FuIGhhdmUgYnJvd3Nlci1vbmx5IGludGVncmF0aW9uLjwvbGk+CiAgICAgICA8bGk+QlJFQUtJTkc6IFlvdSBub3cgbXVzdCBleHBsaWNpdGx5IGluY2x1ZGUgdGhlIG1vZHVsZXMvQ0dXZWJQdXNoL2xpYi9jZ1dlYlB1c2gtanF1ZXJ5LmpzIHNjcmlwdCBpZiB5b3Ugd2FudCB0aGUgb2xkIGZ1bmN0aW9uYWxpdHkuPC9saT4KICAgICAgIDxsaT5JbXByb3ZlbWVudHMgdG8gdGhlIHNlcnZpY2Ugd29ya2VyIGZvciBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICAgICAgIDxsaT5CUkVBS0lORzogVXBkYXRlIGFsbCBkZXBlbmRlbmNpZXMuLi4gTm93IHJlcXVpcmVzIFBIUCA3LjErLCBnbXAsIGN1cmwsIGFuZCBtYnN0cmluZyBwbHVnaW5zLjwvbGk+CiAgICAgICA8bGk+QnVnIGZpeGVzIGFuZCBtaW5vciBlbmhhbmNlbWVudHMgaW4gdGhlIFVJLjwvbGk+CiAgICAgICA8L3VsPgogICA8L2xpPgo8L3VsPgo8YnIgLz4=]]></about>
	<description><![CDATA[Send notifications to users browsers, even when not visiting your site.]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.61</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGSimplePWA</requiredname>
	  <requiredversion>1.2</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_prefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKSApIGV4aXQ7CiR0aGlzLT5TZXRDdXJyZW50VGFiKCdwcmVmcycpOwoKaWYoIFxjZ2VfcGFyYW06OmV4aXN0cygkcGFyYW1zLCduZXdrZXlzJykgKSB7CiAgICByZXF1aXJlX29uY2UoICd2ZW5kb3IvYXV0b2xvYWQucGhwJyApOwogICAgJGtleXMgPSBcTWluaXNobGlua1xXZWJQdXNoXFZBUElEOjpjcmVhdGVWYXBpZEtleXMoKSA7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndmFwaWRfcHVibGljJywgJGtleXNbJ3B1YmxpY0tleSddICk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndmFwaWRfcHJpdmF0ZScsICRrZXlzWydwcml2YXRlS2V5J10gKTsKICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCk7Cn0KaWYoIFxjZ2VfcGFyYW06OmV4aXN0cygkcGFyYW1zLCdzdWJtaXQnKSApIHsKICAgICR0aXRsZSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywndGl0bGUnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aXRsZScsJHRpdGxlKTsKICAgICRpY29uID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdpY29uJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaWNvbicsJGljb24pOwogICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoKTsKfQoKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnYWRtaW5fcHJlZnMudHBsJyk7CiR0cGwtPmFzc2lnbignaGF2ZV9rZXlzJywgXENHV2ViUHVzaFx1dGlsczo6aGF2ZUtleXMoKSApOwokdHBsLT5hc3NpZ24oJ3RpdGxlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGUnKSk7CiR0cGwtPmFzc2lnbignaWNvbicsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ljb24nKSk7CiR0cGwtPmRpc3BsYXkoKTs=]]></data>
	</file>
	<file>
	  <filename>/action.admin_push.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oIFxDR1dlYlB1c2g6OlNFTkRfUEVSTSApICkgZXhpdDsKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3NlbmQnKTsKCiRtc2cgPSBuZXcgUHVzaE1lc3NhZ2U7CmlmKCBcY2dlX3BhcmFtOjpleGlzdHMoJHBhcmFtcywnc3VibWl0JykgKSB7CiAgICB0cnkgewogICAgICAgICRzZW5kdG8gPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCAkcGFyYW1zLCAnc2VuZHRvJyApOwogICAgICAgICRncm91cCA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoICRwYXJhbXMsICdncm91cCcgKTsKICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCggJ3RpdGxlJywgXGNnZV9wYXJhbTo6Z2V0X3N0cmluZyggJHBhcmFtcywgJ3RpdGxlJykgKTsKICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCggJ2JvZHknLCBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCAkcGFyYW1zLCAnYm9keScpICk7CiAgICAgICAgJG1zZyA9ICRtc2ctPmFkanVzdFdpdGgoICd1cmwnLCBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCAkcGFyYW1zLCAndXJsJykgKTsKICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCggJ3RvcGljJywgXGNnZV9wYXJhbTo6Z2V0X3N0cmluZyggJHBhcmFtcywgJ3RvcGljJykgKTsKCiAgICAgICAgJGxpc3QgPSBudWxsOwogICAgICAgIHN3aXRjaCggJHNlbmR0byApIHsKICAgICAgICBjYXNlICdhbGxfZmV1X3VzZXJzJzoKICAgICAgICAgICAgJGxpc3QgPSAkdGhpcy0+c3RvcmFnZS0+bG9hZF9mb3JfZnJvbnRlbmQoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnYWxsX2FkbWluX3VzZXJzJzoKICAgICAgICAgICAgJGxpc3QgPSAkdGhpcy0+c3RvcmFnZS0+bG9hZF9mb3JfYWRtaW4oKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmKCAhJGxpc3QgJiYgJGdyb3VwICkgewogICAgICAgICAgICBzd2l0Y2goICRzZW5kdG8gKSB7CiAgICAgICAgICAgIGNhc2UgJ2FkbWluX2dyb3VwJzoKICAgICAgICAgICAgICAgIGlmKCAkZ3JvdXAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGFsbF9ncm91cHMgPSBcR3JvdXBPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+TG9hZEdyb3VwcygpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRhbGxfZ3JvdXBzIGFzICRvYmogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdHJ0b2xvd2VyKCRvYmotPm5hbWUpID09IHN0cnRvbG93ZXIoJGdyb3VwKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaXN0ID0gJHRoaXMtPnN0b3JhZ2UtPmxvYWRfZm9yX2FkbWluX2dyb3VwKCAkb2JqLT5pZCApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2ZldV9ncm91cCc6CiAgICAgICAgICAgICAgICBpZiggJGdyb3VwICkgewogICAgICAgICAgICAgICAgICAgICRmZXUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoICRmZXUgKSAkZ2lkID0gKGludCkgJGZldS0+R2V0R3JvdXBJRCggJGdyb3VwICk7CiAgICAgICAgICAgICAgICAgICAgaWYoICRnaWQgKSAkbGlzdCA9ICR0aGlzLT5zdG9yYWdlLT5sb2FkX2Zvcl9ncm91cCggJGdpZCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCAhJGxpc3QgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIGFueSB2YWxpZCB1c2VycycpOwogICAgICAgIH0KCiAgICAgICAgaWYoICEkbGlzdCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTm8gdXNlcnMgc2VsZWN0ZWQvZm91bmQnKTsKICAgICAgICBpZiggISRtc2ctPmJvZHkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9ib2R5cmVxdWlyZWQnKSk7CiAgICAgICAgaWYoICEkZ3JvdXAgKSAkbGlzdCA9ICR0aGlzLT5zdG9yYWdlLT5sb2FkX2FsbCgpOwoKICAgICAgICAkbl9zZW50ID0gMDsKICAgICAgICBpZiggJGxpc3QgKSB7CiAgICAgICAgICAgICRkaXNwYXRjaGVyID0gbmV3IFdlYlB1c2hEaXNwYXRjaGVyKCAkbGlzdCwgJG1zZyApOwogICAgICAgICAgICAkbl9zZW50ID0gJGRpc3BhdGNoZXItPmRpc3BhdGNoKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5TZXRNZXNzYWdlKCAkdGhpcy0+TGFuZygncHVzaF9zdWNjZXNzZnVsX24nLCAkbl9zZW50KSApOwogICAgICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCk7CiAgICB9CiAgICBjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsKICAgICAgICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoKTsKICAgICAgICAvL2VjaG8gJHRoaXMtPlNob3dFcnJvcnMoICRlLT5HZXRtZXNzYWdlKCkgKTsKICAgIH0KfQoKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnYWRtaW5fcHVzaC50cGwnKTsKJHRwbC0+YXNzaWduKCdkYXRhJywkbXNnKTsKJHRwbC0+ZGlzcGxheSgpOw==]]></data>
	</file>
	<file>
	  <filename>/action.admin_use_push.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oIENHV2ViUHVzaDo6VVNFX1BFUk0gKSApIGV4aXQ7CgokdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdhZG1pbl91c2VfcHVzaC50cGwnKTsKJHRwbC0+ZGlzcGxheSgpOw==]]></data>
	</file>
	<file>
	  <filename>/action.ajax_subscribe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwpmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQoKdHJ5IHsKICAgICRzaWcgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRfU0VSVkVSLCdIVFRQX1hfU0lHTkFUVVJFJyk7CiAgICBpZiggISRzaWcgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgb3IgbWlzc2luZyBzaWduYXR1cmUnKTsKCiAgICAkYm9keSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwogICAgaWYoIHNoYTEoIHV0aWxzOjpnZXRfc2FsdCgpLiRib2R5KSAhPSAkc2lnICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIG9yIG1pc3Npbmcgc2lnbmF0dXJlJyApOwoKICAgICRzdWJzY3JpcHRpb24gPSBqc29uX2RlY29kZSgkYm9keSxUUlVFKTsKICAgIGlmKCAhJHN1YnNjcmlwdGlvbiApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIk5vdCBhIHN1YnNjcmlwdGlvbiIpOwogICAgaWYgKCAhaXNzZXQoJHN1YnNjcmlwdGlvblsnZW5kcG9pbnQnXSkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJOb3QgYSBzdWJzY3JpcHRpb24iKTsKCiAgICAkYWRtaW5fdWlkID0gKGludCkgZ2V0X3VzZXJpZCggRkFMU0UgKTsKICAgICRmZXVfdWlkID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkc3Vic2NyaXB0aW9uLCdmZXVfdWlkJyk7CiAgICBpZiggaXNzZXQoJHN1YnNjcmlwdGlvblsnZmV1X3VpZCddKSApIHVuc2V0KCRzdWJzY3JpcHRpb25bJ2ZldV91aWQnXSk7CiAgICAkc3Vic2NyaXB0aW9uID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHN1YnNjcmlwdGlvbikpOwogICAgaWYoICEkZmV1X3VpZCApIHsKICAgICAgICAkZmV1ID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogICAgICAgIGlmKCAkZmV1ICkgJGZldV91aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CiAgICB9CgogICAgJHN1YnNjcmlwdGlvbnMgPSBbXTsKICAgICRrZXkgPSBtZDUoJHN1YnNjcmlwdGlvbi0+ZW5kcG9pbnQpOwogICAgJG1ldGhvZCA9ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwogICAgc3dpdGNoKCAkbWV0aG9kICkgewogICAgY2FzZSAnUE9TVCc6CiAgICBjYXNlICdQVVQnOgogICAgICAgICRvYmogPSBuZXcgU3Vic2NyaXB0aW9uOwogICAgICAgICRvYmotPnN1YnNjcmlwdGlvbiA9ICRzdWJzY3JpcHRpb247CiAgICAgICAgJG9iai0+ZmV1X3VpZCA9ICRmZXVfdWlkOwogICAgICAgICRvYmotPmFkbWluX3VpZCA9ICRhZG1pbl91aWQ7CiAgICAgICAgJHRoaXMtPnN0b3JhZ2UtPnNhdmUoICRvYmogKTsKICAgICAgICBhdWRpdCgkZmV1X3VpZCwnQ0dXZWJQdXNoJywnU3Vic2NyaXB0aW9uIGFkZGVkJyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAnREVMRVRFJzoKICAgICAgICAkdGhpcy0+c3RvcmFnZS0+ZGVsZXRlKCAka2V5ICk7CiAgICAgICAgYXVkaXQoJ0NHV2ViUHVzaCcsJ1N1YnNjcmlwdGlvbiBkZWxldGVkJyk7CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJyZXF1ZXN0IG1ldGhvZCAkbWV0aG9kIG5vdCBoYW5kbGVkIik7CiAgICB9Cn0KY2F0Y2goIFxSdW50aW1lRXhjZXB0aW9uICRlICkgewogICAgXGNnZV91dGlsczo6bG9nX2V4Y2VwdGlvbiggJGUgKTsKICAgIGhlYWRlcigiSFRUUC8xLjAgNDAzICIuJGUtPkdldE1lc3NhZ2UoKSk7CiAgICBoZWFkZXIoIlN0YXR1czogNDAzICIuJGUtPkdldE1lc3NhZ2UoKSk7Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBcY2dlX3V0aWxzOjpsb2dfZXhjZXB0aW9uKCAkZSApOwogICAgaGVhZGVyKCJIVFRQLzEuMCA1MDAgIi4kZS0+R2V0TWVzc2FnZSgpKTsKICAgIGhlYWRlcigiU3RhdHVzOiA1MDAgIi4kZS0+R2V0TWVzc2FnZSgpKTsKfQpleGl0KCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApIGV4aXQ7CgplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oIENHV2ViUHVzaDo6VVNFX1BFUk0gKSApIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigndXNlJywkdGhpcy0+TGFuZygndGFiX3VzZXB1c2gnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oIENHV2ViUHVzaDo6U0VORF9QRVJNICkgKSB7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NlbmQnLCR0aGlzLT5MYW5nKCd0YWJfc2VuZHB1c2gnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKSApIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigncHJlZnMnLCR0aGlzLT5MYW5nKCd0YWJfcHJlZnMnKSk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCBDR1dlYlB1c2g6OlVTRV9QRVJNICkgKSB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYigndXNlJywkcGFyYW1zKTsKICAgIGluY2x1ZGVfb25jZSggX19ESVJfXy4nL2FjdGlvbi5hZG1pbl91c2VfcHVzaC5waHAnICk7CiAgICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggQ0dXZWJQdXNoOjpTRU5EX1BFUk0gKSApIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZW5kJywkcGFyYW1zKTsKICAgIGluY2x1ZGVfb25jZSggX19ESVJfXy4nL2FjdGlvbi5hZG1pbl9wdXNoLnBocCcgKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwp9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnICkgKSB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYigncHJlZnMnKTsKICAgIGluY2x1ZGVfb25jZShfX0RJUl9fLicvYWN0aW9uLmFkbWluX3ByZWZzLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.subscribe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJHRlbXBsYXRlID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd0ZW1wbGF0ZScsJ3N1YnNjcmliZS50cGwnKTsKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgkdGVtcGxhdGUpOwokdHBsLT5kaXNwbGF5KCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.unsubscribe_all.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokZmV1ID0gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfRlJPTlRFTkRVU0VSUyk7CmlmKCAhJGZldSApIHJldHVybjsKJHVpZCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKaWYoICEkdWlkICkgewogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnU3Vic2NyaXB0aW9uIHJlcXVpcmVzIGxvZ2luIHRvIEZFVScpOwogICAgcmV0dXJuOwp9CgokZmV1LT5EZWxldGVVc2VyUHJvcGVydHlGdWxsKCBDR1dlYlB1c2g6OlBVU0hfUFJPUEVSVFksICR1aWQgKTsKJHRoaXMtPlJlZGlyZWN0Q29udGVudCggJHVpZCApOw==]]></data>
	</file>
	<file>
	  <filename>/CGWebPush.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNpYm1wbGVEaWdpdGFsUHJvZHVjdHMgLSBBIHNpbXBsZSBtb2R1bGUgZm9yIGhhbmRsaW5nIHB1cmNoYXNlIG9mIGRpZ2l0YWwgcHJvZHVjdHMKIyBWZXJzaW9uOiAxLjAsIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAaG90bWFpbC5jb20+CiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdXNlIENHV2ViUHVzaFxQdXNoTWVzc2FnZTsKdXNlIENHV2ViUHVzaFxTdWJzY3JpcHRpb25TdG9yYWdlOwp1c2UgQ0dXZWJQdXNoXFB1c2hTZXJ2aWNlV29ya2VyQWRkb247CnVzZSBDR1dlYlB1c2hcV2ViUHVzaENvbW1hbmQ7CgpmaW5hbCBjbGFzcyBDR1dlYlB1c2ggZXh0ZW5kcyBDR0V4dGVuc2lvbnMKewogICAgcHJvdGVjdGVkICRzdG9yYWdlOwogICAgY29uc3QgU0VORF9QRVJNID0gJ1NlbmQgV2ViUHVzaCBOb3RpZmljYXRpb25zJzsKICAgIGNvbnN0IFVTRV9QRVJNID0gJ1JlY2VpdmUgV2ViUHVzaCBOb3RpZmljYXRpb25zJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgICAgICAkc21hcnR5ID0gQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgaWYoICEkc21hcnR5ICkgcmV0dXJuOwoKICAgICAgICAkdGhpcy0+c3RvcmFnZSA9IG5ldyBTdWJzY3JpcHRpb25TdG9yYWdlKCAkdGhpcy0+R2V0RGIoKSApOwogICAgfQoKICAgIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQogICAgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjQuMyc7IH0KICAgIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsgfQogICAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyc7IH0KICAgIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9CiAgICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICAgIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gJzIuMi4xMCc7IH0KICAgIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgICBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsgfQogICAgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gRkFMU0U7IH0KICAgIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFsgJ0NHRXh0ZW5zaW9ucyc9PicxLjYxJywgJ0NHU2ltcGxlUFdBJz0+JzEuMicgXTsgfQoKICAgIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oIHNlbGY6OlVTRV9QRVJNICkgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggc2VsZjo6U0VORF9QRVJNICkKICAgICAgICAgICAgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCiAgICB7CiAgICAgICAgJGNnc2ltcGxlcHdhID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDR1NpbXBsZVBXQScpOwogICAgICAgIGlmKCAkY2dzaW1wbGVwd2EgKSB7CiAgICAgICAgICAgICRjZ3dlYnB1c2hfYWRkb24gPSBuZXcgUHVzaFNlcnZpY2VXb3JrZXJBZGRvbiggJHRoaXMgKTsKICAgICAgICAgICAgJGNnc2ltcGxlcHdhLT5yZWdpc3RlclNlcnZpY2VXb3JrZXJBZGRvbiggJGNnd2VicHVzaF9hZGRvbiApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpCiAgICB7CiAgICAgICAgLy8gdGhpcyBpcyBhIHRyaWNrIHRvIGxldCBDR1dlYlB1c2ggaGFuZGxlIG91ciBpbml0aWFsaXphdGlvbiBzdHVmZgogICAgICAgIC8vIGZvciBvdXIgYWRtaW4gcmVxdWVzdHMuCiAgICAgICAgJGNnc2ltcGxlcHdhID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9DR1NJTVBMRVBXQSk7CiAgICAgICAgJG91dCA9ICRjZ3NpbXBsZXB3YS0+R2V0SGVhZGVySFRNTCgpOwogICAgICAgICRvdXQgLj0gc3ByaW50ZignPHNjcmlwdCBzcmM9IiVzIj48L3NjcmlwdD4nLCR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9qcy9jZ1dlYlB1c2gtanF1ZXJ5LmpzJyk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpJbml0aWFsaXplRnJvbnRlbmQoKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGVtcGxhdGUnLENMRUFOX1NUUklORyk7CiAgICAgICAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksJHBhcmFtcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgaWYoICRjYXBhYmlsaXR5ID09ICdjbGljb21tYW5kcycgKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiggJGNhcGFiaWxpdHkgPT0gJ25vdGlmaWNhdGlvbl90cmFuc3BvcnQnICkgcmV0dXJuIFRSVUU7CiAgICAgICAgaWYoICRjYXBhYmlsaXR5ID09ICdjZ19zb2NpYWxibGFzdF90cmFuc3BvcnQnICkgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jbGlfY29tbWFuZHMoICRhcHAgKQogICAgewogICAgICAgIGlmKCAhICRhcHAgaW5zdGFuY2VvZiBcQ01TTVNcQ0xJXEFwcCApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oX19NRVRIT0RfXy4nIENhbGxlZCBmcm9tIG91dHNpZGUgb2YgY21zY2xpJyk7CiAgICAgICAgaWYoICFjbGFzc19leGlzdHMoJ1xcQ01TTVNcXENMSVxcR2V0T3B0RXh0XFxDb21tYW5kJykgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKF9fTUVUSE9EX18uJyBDYWxsZWQgZnJvbSBvdXRzaWRlIG9mIGNtc2NsaScpOwoKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgJG91dFtdID0gbmV3IFdlYlB1c2hDb21tYW5kKCAkYXBwLCAkdGhpcy0+c3RvcmFnZSApOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldF90cmFuc3BvcnRfbmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCd0cmFuc3BvcnRfbmFtZScpOyB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF90cmFuc3BvcnRfcHJvZmlsZSgpCiAgICB7CiAgICAgICAgJHByb2ZpbGUgPSBuZXcgXENHTm90aWZpZXJcdHJhbnNwb3J0X3Byb2ZpbGU7CiAgICAgICAgJHByb2ZpbGUtPm1vZHVsZSA9ICR0aGlzLT5HZXROYW1lKCk7CiAgICAgICAgJHByb2ZpbGUtPnRyYW5zcG9ydF9kZXNjID0gJHRoaXMtPkxhbmcoJ3RyYW5zcG9ydF9kZXNjJyk7CiAgICAgICAgJHByb2ZpbGUtPnRyYW5zcG9ydCA9ICd3ZWItcHVzaCc7CiAgICAgICAgJHByb2ZpbGUtPmNoYXJsaW1pdCA9IDEwMjQ7CiAgICAgICAgJHByb2ZpbGUtPnRpdGxlID0gdHJ1ZTsKICAgICAgICAkcHJvZmlsZS0+cGljdHVyZSA9IHRydWU7CiAgICAgICAgJHByb2ZpbGUtPmxpbmsgPSB0cnVlOwogICAgICAgIHJldHVybiAkcHJvZmlsZTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRfc2VuZGVyX2luZm8oKQogICAgewogICAgICAgICRyZXMgPSBuZXcgc2Jfc2VuZGVyX2luZm8oJHRoaXMtPkdldE5hbWUoKSwnV2ViIFB1c2ggTm90aWZpY2F0aW9uJywxMDI0LDEpOwogICAgICAgICRyZXNbJ2xpbmsnXSA9ICRyZXNbJ3RpdGxlJ10gPSAxOwogICAgICAgICRyZXNbJ2luZm9fbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2luZm9fc2VuZGVyX3dlYnB1c2gnKTsKICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvLyBjZ25vdGlmaWVyCiAgICBmdW5jdGlvbiBzZW5kX21lc3NhZ2Uobm90aWZpY2F0aW9uX21lc3NhZ2UgJG1zZywkcHJlcGFyZWQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkbXNnID0gXENHV2ViUHVzaFxQdXNoTWVzc2FnZTo6ZnJvbV9ub3RpZmljYXRpb24oICRtc2cgKTsKCiAgICAgICAgJGRhdGEgPSBudWxsOwogICAgICAgIGlmKCAhJG1zZy0+dG8gKSByZXR1cm47CiAgICAgICAgaWYoICRtc2ctPnRvID4gMCApIHsKICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+c3RvcmFnZS0+bG9hZF9mb3JfdXNlciggJG1zZy0+dG8gKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiggJG1zZy0+dG8gPCAwICkgewogICAgICAgICAgICAvLyBzaWxlbnRseSBpZ25vcmUKICAgICAgICAgICAgJGRhdGEgPSAkdGhpcy0+c3RvcmFnZS0+bG9hZF9mb3JfYWRtaW5fdXNlciggJG1zZy0+dG8gKiAtMSApOwogICAgICAgIH0KCiAgICAgICAgaWYoICFjb3VudCgkZGF0YSkgKSByZXR1cm47CiAgICAgICAgJGRpc3BhdGNoZXIgPSBuZXcgXENHV2ViUHVzaFxXZWJQdXNoRGlzcGF0Y2hlciggJGRhdGEsICRtc2cgKTsKICAgICAgICAkZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICAvLyBjZ3NvY2lhbGJsYXN0ZXIKICAgIHB1YmxpYyBmdW5jdGlvbiBicm9hZGNhc3RfbWVzc2FnZShub3RpZmljYXRpb25fbWVzc2FnZSAkbXNnKQogICAgewogICAgICAgIC8vIGlnbm9yZXMgdGhlIHRvLCBhbmQgdG9fZ3JvdXAgZm9ybWF0Li4uIGFuZCBzZW5kcyBhIHdlYiBwdXNoIHRvIGV2ZXJ5IGRldmljZSB3ZSBrbm93IGFib3V0LgogICAgICAgICRtc2cgPSBcQ0dXZWJQdXNoXFB1c2hNZXNzYWdlOjpmcm9tX25vdGlmaWNhdGlvbiggJG1zZyApOwogICAgICAgICRsaXN0ID0gJHRoaXMtPnN0b3JhZ2UtPmxvYWRfYWxsKCk7CiAgICAgICAgaWYoICFjb3VudCgkbGlzdCkgKSByZXR1cm47CiAgICAgICAgJGRpc3BhdGNoZXIgPSBuZXcgXENHV2ViUHVzaFxXZWJQdXNoRGlzcGF0Y2hlciggJGxpc3QsICRtc2cgKTsKICAgICAgICAkZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX25ld19tZXNzYWdlKCkgOiBQdXNoTWVzc2FnZQogICAgewogICAgICAgIHJldHVybiBuZXcgUHVzaE1lc3NhZ2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRfdG9fZmV1X3VzZXJzKCBhcnJheSAkZmV1X3VpZF9saXN0LCBQdXNoTWVzc2FnZSAkbXNnICkKICAgIHsKICAgICAgICAvLyBkb2VzIG5vdCBjaGVjayBpZiBGRVUgdXNlcnMgYXJlIGRpc2FibGVkIG9yIGV4cGlyZWQgZXRjLgoKICAgICAgICAvLyAkaW4gbXVzdCBiZSBhbiBhcnJheSBvZiBpbnRzCgogICAgICAgIC8vICRtc2cgbmVlZHMgYXQgbGVhc3QgYSBib2R5CiAgICAgICAgaWYoICEkbXNnLT5ib2R5ICkgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgbXNnIHBhc3NlZCB0byAiLl9fTUVUSE9EX18pOwoKICAgICAgICAkbGlzdCA9ICR0aGlzLT5zdG9yYWdlLT5sb2FkX2J5X2ZldV9saXN0KCAkZmV1X3VpZF9saXN0ICk7CiAgICAgICAgaWYoICEkbGlzdCApIHJldHVybjsgLy8gbm8gc3Vic2NyaXB0aW9ucwoKICAgICAgICAkZGlzcGF0Y2hlciA9IG5ldyBcQ0dXZWJQdXNoXFdlYlB1c2hEaXNwYXRjaGVyKCAkbGlzdCwgJG1zZyApOwogICAgICAgICRkaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwogICAgfQoKfSAvLyBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgInJlcXVpcmUiOiB7CiAgICAgICAgIm1pbmlzaGxpbmsvd2ViLXB1c2giOiAiXjUuMiIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/composer.lock</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNjb21wb3Nlci1sb2NrLXRoZS1sb2NrLWZpbGUiLAogICAgICAgICJUaGlzIGZpbGUgaXMgQGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IgogICAgXSwKICAgICJjb250ZW50LWhhc2giOiAiMDFmYWM3ZDVhM2VkMGUzNzc3MWEyM2U2ZDhmYzE3MGUiLAogICAgInBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZmdyb3NzZS9waHBhc24xIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjIuMS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiN2ViZjJhMDkwODRhN2JiZGI3Yjg3OWM2NmZkZjdhZDgwNDYxYmJlOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2Zncm9zc2UvUEhQQVNOMS96aXBiYWxsLzdlYmYyYTA5MDg0YTdiYmRiN2I4NzljNjZmZGY3YWQ4MDQ2MWJiZTgiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3ZWJmMmEwOTA4NGE3YmJkYjdiODc5YzY2ZmRmN2FkODA0NjFiYmU4IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjAuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+Ni4zIiwKICAgICAgICAgICAgICAgICJzYXRvb3NoaS9waHAtY292ZXJhbGxzIjogIn4yLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIGlzIHRoZSBwcmVmZXJyZWQgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAgICAgInBocC1jdXJsIjogIkZvciBsb2FkaW5nIE9JRCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3ZWIgaWYgdGhleSBoYXZlIG5vdCBiZWUgZGVmaW5lZCBzdGF0aWNhbGx5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRkdcXCI6ICJsaWIvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRnJpZWRyaWNoIEdyb8OfZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkF1dGhvciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgRnJhbWV3b3JrIHRoYXQgYWxsb3dzIHlvdSB0byBlbmNvZGUgYW5kIGRlY29kZSBhcmJpdHJhcnkgQVNOLjEgc3RydWN0dXJlcyB1c2luZyB0aGUgSVRVLVQgWC42OTAgRW5jb2RpbmcgUnVsZXMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiREVSIiwKICAgICAgICAgICAgICAgICJhc24uMSIsCiAgICAgICAgICAgICAgICAiYXNuMSIsCiAgICAgICAgICAgICAgICAiYmVyIiwKICAgICAgICAgICAgICAgICJiaW5hcnkiLAogICAgICAgICAgICAgICAgImRlY29kaW5nIiwKICAgICAgICAgICAgICAgICJlbmNvZGluZyIsCiAgICAgICAgICAgICAgICAieC41MDkiLAogICAgICAgICAgICAgICAgInguNjkwIiwKICAgICAgICAgICAgICAgICJ4NTA5IiwKICAgICAgICAgICAgICAgICJ4NjkwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTEyLTAyVDAxOjM0OjM0KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL2d1enpsZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMy4zIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlL3ppcGJhbGwvNDA3YjBjYjg4MGFjZTg1YzliNjNjNWY5NTUxZGI0OThjYjJkNTBiYSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4xLjQiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC44LjM1IHx8IF41LjcgfHwgXjYuNCB8fCBeNy4wIiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiUmVxdWlyZWQgZm9yIHVzaW5nIHRoZSBMb2cgbWlkZGxld2FyZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiNi4zLWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9ndXp6bGVwaHAub3JnLyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjbGllbnQiLAogICAgICAgICAgICAgICAgImN1cmwiLAogICAgICAgICAgICAgICAgImZyYW1ld29yayIsCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAiaHR0cCBjbGllbnQiLAogICAgICAgICAgICAgICAgInJlc3QiLAogICAgICAgICAgICAgICAgIndlYiBzZXJ2aWNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTA0LTIyVDE1OjQ2OjU2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTU5ZGE2Y2Y2MWQ4MDA2MDY0N2ZmNGQzZWIyYzAzYTJiYzY5NDY0NiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9wcm9taXNlcy96aXBiYWxsL2E1OWRhNmNmNjFkODAwNjA2NDdmZjRkM2ViMmMwM2EyYmM2OTQ2NDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjUuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjQtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXFByb21pc2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAicHJvbWlzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNi0xMi0yMFQxMDowNzoxMSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS41LjIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjlmODNkZGVkOTE3ODFhMDFjNjM1NzRlMzg3ZWFhNzY5YmU3NjkxMTUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvcHNyNy96aXBiYWxsLzlmODNkZGVkOTE3ODFhMDFjNjM1NzRlMzg3ZWFhNzY5YmU3NjkxMTUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5ZjgzZGRlZDkxNzgxYTAxYzYzNTc0ZTM4N2VhYTc2OWJlNzY5MTE1IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjQuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJ+MS4wIiwKICAgICAgICAgICAgICAgICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyI6ICJeMi4wLjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UtaW1wbGVtZW50YXRpb24iOiAiMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIn40LjguMzYgfHwgXjUuNy4yNyB8fCBeNi41LjgiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuNS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgICAic3RyZWFtIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0xMi0wNFQyMDo0Njo0NSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibWluaXNobGluay93ZWItcHVzaCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInY1LjIuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXB1c2gtbGlicy93ZWItcHVzaC1waHAuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGIzYmNhOTJmMTUwZTE4YmU0ZTc3ZWZiZGM5ZDExZDQwZmU0OGRiOSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi1wdXNoLWxpYnMvd2ViLXB1c2gtcGhwL3ppcGJhbGwvZGIzYmNhOTJmMTUwZTE4YmU0ZTc3ZWZiZGM5ZDExZDQwZmU0OGRiOSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImRiM2JjYTkyZjE1MGUxOGJlNGU3N2VmYmRjOWQxMWQ0MGZlNDhkYjkiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9ndXp6bGUiOiAiXjYuMiIsCiAgICAgICAgICAgICAgICAibGliLW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qta2V5LW1nbXQiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiXjIuMTQiLAogICAgICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIk1pbmlzaGxpbmtcXFdlYlB1c2hcXCI6ICJzcmMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJMb3VpcyBMYWdyYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImxhZ3JhbmdlLmxvdWlzQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9NaW5pc2hsaW5rIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiV2ViIFB1c2ggbGlicmFyeSBmb3IgUEhQIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcHVzaC1saWJzL3dlYi1wdXNoLXBocCIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJQdXNoIEFQSSIsCiAgICAgICAgICAgICAgICAiV2ViUHVzaCIsCiAgICAgICAgICAgICAgICAibm90aWZpY2F0aW9ucyIsCiAgICAgICAgICAgICAgICAicHVzaCIsCiAgICAgICAgICAgICAgICAid2ViIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAyLTI1VDE4OjQzOjQ3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwYXJhZ29uaWUvcmFuZG9tX2NvbXBhdCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInY5Ljk5Ljk5IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhZ29uaWUvcmFuZG9tX2NvbXBhdC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4NGI0ZGZiMTIwYzZmOWI0ZmY3YjM2ODVmOWI4ZjFhYTM2NWEwYzk1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGFyYWdvbmllL3JhbmRvbV9jb21wYXQvemlwYmFsbC84NGI0ZGZiMTIwYzZmOWI0ZmY3YjM2ODVmOWI4ZjFhYTM2NWEwYzk1IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiODRiNGRmYjEyMGM2ZjliNGZmN2IzNjg1ZjliOGYxYWEzNjVhMGM5NSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIjQuKnw1LioiLAogICAgICAgICAgICAgICAgInZpbWVvL3BzYWxtIjogIl4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtbGlic29kaXVtIjogIlByb3ZpZGVzIGEgbW9kZXJuIGNyeXB0byBBUEkgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gYnl0ZXMuIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBhcmFnb24gSW5pdGlhdGl2ZSBFbnRlcnByaXNlcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlY3VyaXR5QHBhcmFnb25pZS5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3BhcmFnb25pZS5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQSFAgNS54IHBvbHlmaWxsIGZvciByYW5kb21fYnl0ZXMoKSBhbmQgcmFuZG9tX2ludCgpIGZyb20gUEhQIDciLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY3Nwcm5nIiwKICAgICAgICAgICAgICAgICJwb2x5ZmlsbCIsCiAgICAgICAgICAgICAgICAicHNldWRvcmFuZG9tIiwKICAgICAgICAgICAgICAgICJyYW5kb20iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTgtMDctMDJUMTU6NTU6NTYrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuOS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4NzEyNWQ1YjI2NWY5OGM0ZDFiOGQ4M2ExZjA3MjY2MDdjMjI5NDIxIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGFyYWdvbmllL3NvZGl1bV9jb21wYXQvemlwYmFsbC84NzEyNWQ1YjI2NWY5OGM0ZDFiOGQ4M2ExZjA3MjY2MDdjMjI5NDIxIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiODcxMjVkNWIyNjVmOThjNGQxYjhkODNhMWYwNzI2NjA3YzIyOTQyMSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbV9jb21wYXQiOiAiPj0xIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjUuMi40fF41LjN8XjUuNHxeNS41fF41LjZ8Xjd8XjgiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjN8XjR8XjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1saWJzb2RpdW0iOiAiUEhQIDwgNy4wOiBCZXR0ZXIgcGVyZm9ybWFuY2UsIHBhc3N3b3JkIGhhc2hpbmcgKEFyZ29uMmkpLCBzZWN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXplcm8pLCBhbmQgYmV0dGVyIHNlY3VyaXR5LiIsCiAgICAgICAgICAgICAgICAiZXh0LXNvZGl1bSI6ICJQSFAgPj0gNy4wOiBCZXR0ZXIgcGVyZm9ybWFuY2UsIHBhc3N3b3JkIGhhc2hpbmcgKEFyZ29uMmkpLCBzZWN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXplcm8pLCBhbmQgYmV0dGVyIHNlY3VyaXR5LiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiYXV0b2xvYWQucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIklTQyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUGFyYWdvbiBJbml0aWF0aXZlIEVudGVycHJpc2VzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2VjdXJpdHlAcGFyYWdvbmllLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRnJhbmsgRGVuaXMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJqZWRpc2N0MUBwdXJlZnRwZC5vcmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQdXJlIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBsaWJzb2RpdW07IHVzZXMgdGhlIFBIUCBleHRlbnNpb24gaWYgaXQgZXhpc3RzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIiwKICAgICAgICAgICAgICAgICJCTEFLRTJiIiwKICAgICAgICAgICAgICAgICJDaGFDaGEyMCIsCiAgICAgICAgICAgICAgICAiQ2hhQ2hhMjAtUG9seTEzMDUiLAogICAgICAgICAgICAgICAgIkNoYXBvbHkiLAogICAgICAgICAgICAgICAgIkN1cnZlMjU1MTkiLAogICAgICAgICAgICAgICAgIkVkMjU1MTkiLAogICAgICAgICAgICAgICAgIkVkRFNBIiwKICAgICAgICAgICAgICAgICJFZHdhcmRzLWN1cnZlIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSIsCiAgICAgICAgICAgICAgICAiRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4iLAogICAgICAgICAgICAgICAgIlBvbHkxMzA1IiwKICAgICAgICAgICAgICAgICJQdXJlLVBIUCBjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAgICAgIlJGQyA3NzQ4IiwKICAgICAgICAgICAgICAgICJSRkMgODAzMiIsCiAgICAgICAgICAgICAgICAiU2FscG9seSIsCiAgICAgICAgICAgICAgICAiU2Fsc2EyMCIsCiAgICAgICAgICAgICAgICAiWDI1NTE5IiwKICAgICAgICAgICAgICAgICJYQ2hhQ2hhMjAtUG9seTEzMDUiLAogICAgICAgICAgICAgICAgIlhTYWxzYTIwLVBvbHkxMzA1IiwKICAgICAgICAgICAgICAgICJYY2hhY2hhMjAiLAogICAgICAgICAgICAgICAgIlhzYWxzYTIwIiwKICAgICAgICAgICAgICAgICJhZWFkIiwKICAgICAgICAgICAgICAgICJjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAgICAgImVjZGgiLAogICAgICAgICAgICAgICAgImVsbGlwdGljIGN1cnZlIiwKICAgICAgICAgICAgICAgICJlbGxpcHRpYyBjdXJ2ZSBjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAgICAgImVuY3J5cHRpb24iLAogICAgICAgICAgICAgICAgImxpYnNvZGl1bSIsCiAgICAgICAgICAgICAgICAicGhwIiwKICAgICAgICAgICAgICAgICJwdWJsaWMta2V5IGNyeXB0b2dyYXBoeSIsCiAgICAgICAgICAgICAgICAic2VjcmV0LWtleSBjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAgICAgInNpZGUtY2hhbm5lbCByZXNpc3RhbnQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDMtMjBUMTc6MTk6MDUrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBzci9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjY1NjFiZjI4ZDUyMDE1NGU0YjBlYzcyYmU5NTQxOGFiZTZkOTM2MyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocC1maWcvaHR0cC1tZXNzYWdlL3ppcGJhbGwvZjY1NjFiZjI4ZDUyMDE1NGU0YjBlYzcyYmU5NTQxOGFiZTZkOTM2MyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImY2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuMy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgbWVzc2FnZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgImh0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICAgICAicHNyIiwKICAgICAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICAicmVzcG9uc2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTYtMDgtMDZUMTQ6Mzk6NTErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInJhbG91cGhpZS9nZXRhbGxoZWFkZXJzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjU2MDFjOGE4M2ZiYmE3ZWY2NzRhNzM2OTQ1NmQxMmYxZTBkMGVhZmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy96aXBiYWxsLzU2MDFjOGE4M2ZiYmE3ZWY2NzRhNzM2OTQ1NmQxMmYxZTBkMGVhZmEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1NjAxYzhhODNmYmJhN2VmNjc0YTczNjk0NTZkMTJmMWUwZDBlYWZhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjMuNy4wIiwKICAgICAgICAgICAgICAgICJzYXRvb3NoaS9waHAtY292ZXJhbGxzIjogIj49MS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZ2V0YWxsaGVhZGVycy5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJSYWxwaCBLaGF0dGFyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHBvbHlmaWxsIGZvciBnZXRhbGxoZWFkZXJzLiIsCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTYtMDItMTFUMDc6MDU6MjcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNwb21reS1sYWJzL2Jhc2U2NHVybCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYyLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjNlYjQ2YTFkZTgwM2YwMDc4OTYyZDkxMGUzYTI3NTkyMjRhNjhjNjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9TcG9ta3ktTGFicy9iYXNlNjR1cmwvemlwYmFsbC8zZWI0NmExZGU4MDNmMDA3ODk2MmQ5MTBlM2EyNzU5MjI0YTY4YzYxIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiM2ViNDZhMWRlODAzZjAwNzg5NjJkOTEwZTNhMjc1OTIyNGE2OGM2MSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHAtY292ZXJhbGxzL3BocC1jb3ZlcmFsbHMiOiAiXjIuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJCYXNlNjRVcmxcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQmFzZSA2NCBVUkwgU2FmZSBFbmNvZGluZy9EZWNvZGluZyBQSFAgTGlicmFyeSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImJhc2U2NCIsCiAgICAgICAgICAgICAgICAicmZjNDY0OCIsCiAgICAgICAgICAgICAgICAic2FmZSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTA4LTE2VDE1OjQ0OjIwKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LWNvcmUiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhMTZhNjhmNDg4YTQ3MzJlZDdiYWY0YjhhYjZjMDU2MWYyZGM2ODIyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1jb3JlL3ppcGJhbGwvYTE2YTY4ZjQ4OGE0NzMyZWQ3YmFmNGI4YWI2YzA1NjFmMmRjNjgyMiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImExNmE2OGY0ODhhNDczMmVkN2JhZjRiOGFiNmMwNTYxZjJkYzY4MjIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSIsCiAgICAgICAgICAgICAgICAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIjogIl4xLjB8XjIuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAgICAgInNwb21reS1sYWJzL2pvc2UiOiAiKiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXENvcmVcXCI6ICIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29yZSBjb21wb25lbnQgb2YgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDEtMjFUMTE6Mzc6MzcrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qta2V5LW1nbXQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3Qta2V5LW1nbXQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmEzM2EyMDcyZGJiOTY2ZTFjMTBjNDFhNzFlOGE2NGNlYWFhOTVmOSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi10b2tlbi9qd3Qta2V5LW1nbXQvemlwYmFsbC9iYTMzYTIwNzJkYmI5NjZlMWMxMGM0MWE3MWU4YTY0Y2VhYWE5NWY5IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYmEzM2EyMDcyZGJiOTY2ZTFjMTBjNDFhNzFlOGE2NGNlYWFhOTVmOSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAibGliLW9wZW5zc2wiOiAiKiIsCiAgICAgICAgICAgICAgICAicGFyYWdvbmllL3NvZGl1bV9jb21wYXQiOiAiXjEuMiIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1jb3JlIjogIl4xLjMiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3QtdXRpbC1lY2MiOiAiXjEuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocC1odHRwL2h0dHBsdWciOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAicGhwLWh0dHAvbWVzc2FnZS1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocC1odHRwL21vY2stY2xpZW50IjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgInBocC1odHRwL2h0dHBsdWciOiAiVG8gZW5hYmxlIEpLVS9YNVUgc3VwcG9ydC4iLAogICAgICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJUbyBlbmFibGUgSktVL1g1VSBzdXBwb3J0LiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcS2V5TWFuYWdlbWVudFxcIjogIiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3Qta2V5LW1nbXQvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IE1hbmFnZW1lbnQgY29tcG9uZW50IG9mIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkpPU0UiLAogICAgICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICAgICAiSldLIiwKICAgICAgICAgICAgICAgICJKV0tTZXQiLAogICAgICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICAgICAiSm90IiwKICAgICAgICAgICAgICAgICJSRkM3NTE1IiwKICAgICAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgICAgICJSRkM3NTE3IiwKICAgICAgICAgICAgICAgICJSRkM3NTE4IiwKICAgICAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgICAgICJSRkM3NTIwIiwKICAgICAgICAgICAgICAgICJidW5kbGUiLAogICAgICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICAgICAiand0IiwKICAgICAgICAgICAgICAgICJzeW1mb255IgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAzLTExVDEyOjU5OjE0KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMmQ4MmZiZjZjN2IxNGEzYWU3MDY2Y2MwM2VmYWFkOGZiZGM4MmNlZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlL3ppcGJhbGwvMmQ4MmZiZjZjN2IxNGEzYWU3MDY2Y2MwM2VmYWFkOGZiZGM4MmNlZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjJkODJmYmY2YzdiMTRhM2FlNzA2NmNjMDNlZmFhZDhmYmRjODJjZWUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3QtY29yZSI6ICJeMS4zIiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiXjEuMyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIl4xLjMiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjIjogIl4xLjMiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lIjogIl4xLjMiLAogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1yc2EiOiAiXjEuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lY2RzYSI6ICJFQ0RTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIkVkRFNBIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZXhwZXJpbWVudGFsIjogIkV4cGVyaW1lbnRhbCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWhtYWMiOiAiSE1BQyBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLW5vbmUiOiAiTm9uZSBTaWduYXR1cmUgQWxnb3JpdGhtIiwKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIlJTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFwiOiAiIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2lnbmF0dXJlIGNvbXBvbmVudCBvZiB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgICAgICJKV0UiLAogICAgICAgICAgICAgICAgIkpXSyIsCiAgICAgICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgICAgICJKV1MiLAogICAgICAgICAgICAgICAgIkpvdCIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNiIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNyIsCiAgICAgICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICAgICAiUkZDNzUxOSIsCiAgICAgICAgICAgICAgICAiUkZDNzUyMCIsCiAgICAgICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgICAgICJqd2EiLAogICAgICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOS0wMS0yMVQxMTozNzozNyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4yIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDc5MDAyMjhlOTBmMjc5MzZlYjY5NTFhYzI5YmFhMGFlN2FmMzgwNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lY2RzYS96aXBiYWxsL2Q3OTAwMjI4ZTkwZjI3OTM2ZWI2OTUxYWMyOWJhYTBhZTdhZjM4MDQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJkNzkwMDIyOGU5MGYyNzkzNmViNjk1MWFjMjliYWEwYWU3YWYzODA0IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZSI6ICJeMS4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRUNEU0EgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDEtMTBUMTE6NDk6MTErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lZGRzYSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjEwMTRhMzJmNmUzYzkyNjQ5NmY0M2IyNDgwYWYxY2JiNWM4YmQ3N2QiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EvemlwYmFsbC8xMDE0YTMyZjZlM2M5MjY0OTZmNDNiMjQ4MGFmMWNiYjVjOGJkNzdkIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTAxNGEzMmY2ZTNjOTI2NDk2ZjQzYjI0ODBhZjFjYmI1YzhiZDc3ZCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAiIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVkRFNBIFNpZ25hdHVyZSBBbGdvcml0aG0gdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDMtMTFUMTI6NTk6MTQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4yIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0taG1hYy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1MmUyYzI5OTQ0ZThmNDUxYWUwZTZiZjJkMTFlM2VkMTExOWQ3N2E0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWhtYWMvemlwYmFsbC81MmUyYzI5OTQ0ZThmNDUxYWUwZTZiZjJkMTFlM2VkMTExOWQ3N2E0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNTJlMmMyOTk0NGU4ZjQ1MWFlMGU2YmYyZDExZTNlZDExMTlkNzdhNCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAiIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkhNQUMgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDEtMTBUMTE6NDk6MTErMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4yIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tbm9uZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjMWNhMzRhNDI1YzhjN2JmYmNiMjMzMmE3YzFkYzhmN2Y2YTRjM2IwIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLW5vbmUvemlwYmFsbC9jMWNhMzRhNDI1YzhjN2JmYmNiMjMzMmE3YzFkYzhmN2Y2YTRjM2IwIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYzFjYTM0YTQyNWM4YzdiZmJjYjIzMzJhN2MxZGM4ZjdmNmE0YzNiMCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAiIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk5vbmUgU2lnbmF0dXJlIEFsZ29yaXRobSB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgICAgICJKV0UiLAogICAgICAgICAgICAgICAgIkpXSyIsCiAgICAgICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgICAgICJKV1MiLAogICAgICAgICAgICAgICAgIkpvdCIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNiIsCiAgICAgICAgICAgICAgICAiUkZDNzUxNyIsCiAgICAgICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICAgICAiUkZDNzUxOSIsCiAgICAgICAgICAgICAgICAiUkZDNzUyMCIsCiAgICAgICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgICAgICJqd2EiLAogICAgICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOS0wMS0xMFQxMTo0OToxMSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyMTJkNTBkMjU4Yjk0ZmFkYjk3MWIyMzljNWUyZDJjNGExMTVkNTJjIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYS96aXBiYWxsLzIxMmQ1MGQyNThiOTRmYWRiOTcxYjIzOWM1ZTJkMmM0YTExNWQ1MmMiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyMTJkNTBkMjU4Yjk0ZmFkYjk3MWIyMzljNWUyZDJjNGExMTVkNTJjIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZSI6ICJeMS4zIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUlNBIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkpPU0UiLAogICAgICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICAgICAiSldLIiwKICAgICAgICAgICAgICAgICJKV0tTZXQiLAogICAgICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICAgICAiSm90IiwKICAgICAgICAgICAgICAgICJSRkM3NTE1IiwKICAgICAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgICAgICJSRkM3NTE3IiwKICAgICAgICAgICAgICAgICJSRkM3NTE4IiwKICAgICAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgICAgICJSRkM3NTIwIiwKICAgICAgICAgICAgICAgICJidW5kbGUiLAogICAgICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICAgICAiand0IiwKICAgICAgICAgICAgICAgICJzeW1mb255IgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE5LTAxLTEwVDExOjQ5OjExKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LXV0aWwtZWNjIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4yIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXV0aWwtZWNjLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjE1ZDUzNmZmYWQwOWY4ZDYxMjA1N2ZiNDgzYzdiNzUyNjRmYTI4MDAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LXV0aWwtZWNjL3ppcGJhbGwvMTVkNTM2ZmZhZDA5ZjhkNjEyMDU3ZmI0ODNjN2I3NTI2NGZhMjgwMCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjE1ZDUzNmZmYWQwOWY4ZDYxMjA1N2ZiNDgzYzdiNzUyNjRmYTI4MDAiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1nbXAiOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcQ29yZVxcVXRpbFxcRWNjXFwiOiAiIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVDQyBUb29scyBmb3IgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTktMDEtMTBUMTE6NDk6MTErMDA6MDAiCiAgICAgICAgfQogICAgXSwKICAgICJwYWNrYWdlcy1kZXYiOiBbXSwKICAgICJhbGlhc2VzIjogW10sCiAgICAibWluaW11bS1zdGFiaWxpdHkiOiAic3RhYmxlIiwKICAgICJzdGFiaWxpdHktZmxhZ3MiOiBbXSwKICAgICJwcmVmZXItc3RhYmxlIjogZmFsc2UsCiAgICAicHJlZmVyLWxvd2VzdCI6IGZhbHNlLAogICAgInBsYXRmb3JtIjogW10sCiAgICAicGxhdGZvcm0tZGV2IjogW10KfQo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogICA8bGk+VmVyc2lvbiAxLjAuMCAtIEluaXRpYWwgcmVsZWFzZS48L2xpPgogICA8bGk+VmVyc2lvbiAxLjEKIAk8dWw+Cgk8bGk+Tm93IGFjdHMgYXMgYSBzb2NpYWwgYmxhc3QgdHJhbnNwb3J0IGZvciB0aGUgQ0dTb2NpYWxCbGFzdCBtb2R1bGUuPC9saT4KCTxsaT5Ob3cgYWN0cyBhcyBhIG5vdGlmaWVyIHRyYW5zcG9ydCBmb3IgdGhlIENHTm90aWZpdGVyIG1vZHVsZS48L2xpPgoJPGxpPk5vdyBzdXBwb3J0cyBpbWFnZXMuPC9saT4KCTxsaT5DYW4gbm93IHNlbmQgd2ViIHB1c2ggbWVzc2FnZXMgdG8gYWRtaW4gdXNlcnMuPC9saT4KCTxsaT5ObyBsb25nZXIgZGVwZW5kcyBvbiBGRVUuPC9saT4KCTwvdWw+CiAgIDwvbGk+CiAgIDxsaT5WZXJzaW9uIDEuMgogICAgICAgPHVsPgogICAgICAgPGxpPkNIQU5HRTogTm93IHJlcXVpcmVzIENHU2ltcGxlUFdBIGFzIHRoaXMgbW9kdWxlIGRvZXMgbm90IGdlbmVyYXRlIGl0J3Mgb3duIHNlcnZpY2Ugd29ya2VyLjwvbGk+CiAgICAgICA8bGk+Q0hBTkdFOiBTZXBhcmF0ZSB0aGUgY2dXZWJQdXNoIGNvcmUgbGlicmFyeSBmcm9tIHRoZSBqcXVlcnkgcGx1Z2luLiAgU28gdGhhdCB5b3UgY2FuIGhhdmUgYnJvd3Nlci1vbmx5IGludGVncmF0aW9uLjwvbGk+CiAgICAgICA8bGk+QlJFQUtJTkc6IFlvdSBub3cgbXVzdCBleHBsaWNpdGx5IGluY2x1ZGUgdGhlIG1vZHVsZXMvQ0dXZWJQdXNoL2xpYi9jZ1dlYlB1c2gtanF1ZXJ5LmpzIHNjcmlwdCBpZiB5b3Ugd2FudCB0aGUgb2xkIGZ1bmN0aW9uYWxpdHkuPC9saT4KICAgICAgIDxsaT5JbXByb3ZlbWVudHMgdG8gdGhlIHNlcnZpY2Ugd29ya2VyIGZvciBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICAgICAgIDxsaT5CUkVBS0lORzogVXBkYXRlIGFsbCBkZXBlbmRlbmNpZXMuLi4gTm93IHJlcXVpcmVzIFBIUCA3LjErLCBnbXAsIGN1cmwsIGFuZCBtYnN0cmluZyBwbHVnaW5zLjwvbGk+CiAgICAgICA8bGk+QnVnIGZpeGVzIGFuZCBtaW5vciBlbmhhbmNlbWVudHMgaW4gdGhlIFVJLjwvbGk+CiAgICAgICA8L3VsPgogICA8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCgogQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCnNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQp0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAppZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAppbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCgogIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgpUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQpkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CnlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCnNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCigyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCmRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCgogIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCnRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCnNvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQp3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwp0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAphdXRob3JzJyByZXB1dGF0aW9ucy4KCiAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQpwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCnByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQpwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LgoKICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAplaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KCllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgoKICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAp0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CmNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKCiAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQpwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CmJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQptb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgoKWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgoKICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCiAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCgogIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQogIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCgpUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCmxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgo=]]></data>
	</file>
	<file>
	  <filename>/doc/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgaXMgdGhpcz88L2gzPgo8cD5UaGlzIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHByb3ZpZGVzIGEgc2ltcGxlIGFuZCBjb252ZW5pZW50IHdheSB0bzo8L3A+Cjx1bD4KICAgPGxpPkFsbG93IGxvZ2dlZCBpbiBGRVUgdXNlcnMgdG8gc3Vic2NyaWJlIHRvIHB1c2ggbm90aWZpY2F0aW9ucy48L2xpPgogICA8bGk+U2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMgdG8gYSBncm91cCBvZiBGRVUgdXNlcnMgKHdobyBoYXZlIHN1YnNjcmliZWQgd2l0aCBvbmUgb3IgbW9yZSBkZXZpY2VzKS48L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCB0aGUgc2FtZSBhcyBtb2JpbGUgcHVzaCBub3RpZmljYXRpb25zIG9uIEFuZHJvaWQgYW5kIElPUyAod2hpY2ggYm90aCB1c2UgZGlmZmVyZW50IG1ldGhvZG9sb2dpZXMpLiAgVGhpcyB0ZWNobm9sb2d5IGlzIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyJ3MgamF2YXNjcmlwdCBlbmdpbmUuICAgVGhlcmUgaXMgc3VwcG9ydCBmb3Igd2ViLXB1c2ggb24gQW5kcm9pZCBkZXZpY2VzIHVzaW5nIEZpcmVmb3ggb3IgQ2hyb21lIGJyb3dzZXJzLiAgV2ViLXB1c2ggaXMgYWxzbyBzdXBwb3J0ZWQgb24gbW9zdCBtYWpvciBkZXNrdG9wIGJyb3dzZXJzLjwvcD4KCjxoMz5Ib3cgZG8gSSB1c2UgaXQ/PC9oMz4KPHVsPgogIDxsaT5FbnN1cmUgdGhhdCBqcXVlcnkgaXMgYmVpbmcgaW5jbHVkZWQgaW4geW91ciBwYWdlIGphdmFzY3JpcHQgPGVtPihUaGUgaW5pdGlhbGl6YXRpb24gamF2YXNjcmlwdCByZXF1aXJlcyBpdCk8L2VtPjwvbGk+CiAgPGxpPkluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgQ0dTaW1wbGVQV0EgbW9kdWxlLCBhbmQgZ2V0IGl0IHdvcmtpbmcgcHJvcGVybHkuPC9saT4KICA8bGk+VmlzaXQgdGhlIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFuZCBzZXQgYW4gb3B0aW9uYWwgdGl0bGUsIGFuZCBpY29uLgogICAgIDxwPlRoZSB0aXRsZSBzaG91bGQgYmUgcmVsYXRpdmVseSBicmllZi4gIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGFuZCBub3Qgc3VwcGxpZWQgd2l0aCBpbmRpdmlkdWFsIG1lc3NhZ2VzLCB0aGVuIHRoZSBzaXRlIG5hbWUgd2lsbCBiZSB1c2VkLjwvcD4KICAgICA8cD5UaGUgaWNvbiwgaWYgdXNlZCBzaG91bGQgYmUgYSBzcXVhcmUgaW1hZ2Ugb2YgYXQgbGVhc3QgOTZ4OTYgcGl4ZWxzLCBidXQgbm90IHRvbyBsYXJnZSBlaXRoZXIuICBJIHJlY29tbWVuZCBubyBsYXJnZXIgdGhhbiAyNTZ4MjU2IGF0IHRoaXMgdGltZS48L3A+CiAgPC9saT4KICA8bGk+SW4geW91ciBwYWdlIHRlbXBsYXRlLCBBRlRFUiBhbGwgb2YgdGhlIENHU2ltcGxlUFdBIGNvZGUgaGFzIGJlZW4gaW5pdGlhdGVkLCB0cmlnZ2VyIHRoZSBjZ1dlYlB1c2guc3Vic2NyaWJlKCkgbWV0aG9kLiAgaS5lOgo8cHJlPjxjb2RlPntDR1dlYlB1c2ggYWN0aW9uPWpzfQombHQ7c2NyaXB0Jmd0O1wkKGZ1bmN0aW9uKCl7CiAgIGlmKCB0eXBlb2YgY2dXZWJQdXNoICE9ICd1bmRlZmluZWQnICkgY2dXZWJQdXNoLnN1YnNjcmliZSgpCn0pCiZsdDsvc2NyaXB0Jmd0OwombHQ7L2JvZHkmZ3Q7PC9jb2RlPjwvcHJlPgogIDwvbGk+CiAgPGxpPlZpc2l0IHRoZSBwYWdlIHlvdSBjcmVhdGVkIGluIHN0ZXAgMiBhYm92ZSB3aXRoIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGxvZ2luIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSwgYW5kIHN1YnNjcmliZSB0byBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+VXNlIHRoZSBtb2R1bGUncyBhZG1pbiBwYW5lbCB0byBzZW5kIGEgdGVzdCBub3RpZmljYXRpb24uPC9saT4KICA8bGk+WW91IGNhbiBvcHRpb25hbGx5IHVzZSA8Y29kZT48YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Ntc2NsaSI+Y21zY2xpPC9hPiB3ZWJwdXNoLWZldS1ncm91cDwvY29kZT4gdG8gc2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLjwvbGk+CjwvdWw+Cgo8aDM+U2V0dGluZ3MgYW5kIFNlcnZpY2UgV29ya2VyPC9oMz4KPHA+VGhlIHNldHRpbmdzIHRhYiBpbiB0aGlzIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFsbG93cyBzZXR0aW5nIGEgdGl0bGUsIGFuZCBhbiBpY29uLjxwPgo8cD5UaGUgdGl0bGUgaXMgYSBzdHJpbmcgdG8gdXNlIGFzIHRoZSBkZWZhdWx0IHRpdGxlIGZvciBub3RpZmljYXRpb25zIGlmIGl0IGlzIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkLiAgSWYgdGhpcyBmaWVsZCBpcyBsZWZ0IGVtcHR5IHRoZW4gdGhlIHNpdGUgbmFtZSB3aWxsIGJlIHVzZWQuPC9wPgo8cD5UaGUgaWNvbiBpcyBhIFVSTCB0byBhIHNxdWFyZSBpY29uIChtaW5pbXVtIHJlY29tbWVuZGVkIHNpemUgb2YgOTZ4OTYpIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gZWFjaCBhbmQgZXZlcnkgbm90aWZpY2F0aW9uLjwvcD4KPHA+RWFjaCB0aW1lIHRoZXNlIHNldHRpbmdzIGFyZSBjaGFuZ2VkIHRoZSBzZXJ2aWNlIHdvcmtlciBzY3JpcHQgaXMgcmUtZ2VuZXJhdGVkLDwvcD4KPHA+V2hlbiB0aGUgc2VydmljZSB3b3JrZXIgc2NyaXB0IGlzIHJlLWdlbmVyYXRlZCBpdCBtYXkgbm90IGJlIHJlZnJlc2hlZCBvbiB0aGUgdXNlcnMgYnJvd3NlciB1bnRpbCB0aGUgbmV4dCB0aW1lIGEgdmlzaXRzIGEgcGFnZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBqYXZhc2NyaXB0IHRhZ3Mgd2hlcmUgdGhlIHNlcnZpY2Ugd29ya2VyIGlzIHJlZ2lzdGVyZWQuPC9wPgoKPGgzPlNlbmRpbmcgd2ViLXB1c2ggbm90aWZmaWNhdGlvbnMuPC9oMz4KPHA+QSB0YWIgaW4gdGhlIG1vZHVsZSdzIGFkbWluIHBhbmVsIGFsbG93cyBzZW5kaW5nIGEgd2ViIHB1c2ggbm90aWZpY2F0aW9uIHRvIGFuIEZFVSBncm91cC4gIEl0IHByb3ZpZGVzIGZvciBmaWVsZHMgdG8gc3BlY2lmeSBhIHJlcXVpcmVkIG1lc3NhZ2UgYm9keSAodXAgdG8gMTAwMCBjaGFycyksIGFuIG9wdGlvbmFsIHRpdGxlLCBhbmQgYSBVUkwgdG8gb3BlbiB3aGVuIHRoZSBub3RpZmljYXRpb24gaXMgY2xpY2tlZCBvbi48L3A+Cgo8aDM+UmVxdWlyZW1lbnRzOjwvaDM+Cjx1bD4KICA8bGk+WW91ciBzaXRlIG11c3QgYmUgdXNpbmcgSFRUUFMuPC9saT4KICA8bGk+VGhlIGh0dHAgcHJvY2VzcyBtdXN0IGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIHJvb3Qgb2YgeW91ciBDTVNNUyBpbnN0YWxsYXRpb24uPC9saT4KICA8bGk+T3BlblNTTCwgY3VybCwgbXVsdGlieXRlIHN1cHBvcnQsIG1jcnlwdCwgYW5kIG90aGVyIGxpYnJhcmllcyBpbnN0YWxsZWQgaW4gdGhlIFBIUCBlbnZpcm9ubWVudC48L2xpPgogIDxsaT5JbiBvcmRlciB0byByZWNlaXZlIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMsIHVzZXJzIG11c3QgaGF2ZSB0aGUgc3VwcG9ydGVkIGJyb3dzZXIgdGhhdCB0aGV5IHVzZWQgdG8gc3Vic2NyaWJlIG9wZW4gYW5kIHJ1bm5pbmcuICBCdXQgdGhleSBkbyBub3QgaGF2ZSB0byBoYXZlIGEgdGFiIG9yIGEgd2luZG93IGFjdGl2ZWx5IHBvaW50aW5nIHRvIHlvdXIgd2Vic2l0ZS48L2xpPgo8L3VsPgoKPGgzPkF2YWlsYWJsZSBBY3Rpb25zPC9oMz4KPHVsPgogIDxsaT5qcyAtIEluc2VydHMgdGhlIGphdmFzY3JpcHQgcmVxdWlyZWQgdG8gcmVnaXN0ZXIgYW5kIGFjdGl2YXRlIHRoZSBzZXJ2aWNlIHdvcmtlciwgIGFuZCB0byB3b3JrIHdpdGggdGhlIHN1YnNjcmlwdGlvbiBVSS48L2xpPgogIDxsaT5zdWJzY3JpYmUgLSBEaXNwbGF5cyBhIGJ1dHRvbiB0aGF0IGFsbG93cyBhIGxvZ2dlZCBpbiBGRVUgdXNlciB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlLiAgV2lsbCBhbHNvIGRpc3BsYXkgYSBzdGF0dXMgaWYgdGhlIGJyb3dzZXIgaXMgbm90IGNvbXBhdGlibGUuPC9saT4KICA8bGk+dW5zdWJzY3JpYmVfYWxsIC0gQSBzaW1wbGUgYWN0aW9uIHRvIGFsbG93IGEgbG9nZ2VkIGluIEZFVSB1c2VyIHRvIHVuc3Vic2NyaWJlIGZyb20gYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwgb2YgaGlzIHJlZ2lzdGVyZWQgZGV2aWNlcy4gIE9uY2UgY29tcGxldGUsIHRoaXMgYWN0aW9uIHdpbGwgcmVkaXJlY3QgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGVudCBwYWdlLjwvbGk+CjwvdWw+Cgo8aDM+QnJvd3NlciBjb21wYXRpYmlsaXR5PC9oMz4KPHA+Q3VycmVudGx5IHdlYi1wdXNoIHRlY2hub2xvZ3kgaXMgc3VwcG9ydGVkIGJ5IG9ubHkgc29tZSBicm93c2Vycy4gICBNb3N0IG9mIHRoZXNlIGFyZTo8L3A+Cjx1bD4KICAgPGxpPkNocm9tZSBvbiBBbmRyb2lkLCBXaW5kb3dzLCBMaW51eCwgYW5kIE1hY09TPC9saT4KICAgPGxpPkZpcmVmb3ggb24gQW5kcm9pZCwgV2luZG93cywgTGludXgsIGFuZCBNYWNPUzwvbGk+CiAgIDxsaT5TYWZhcmkgb24gTWFjT1MgYW5kIExpbnV4PC9saT4KPC91bD4KPHA+SW9zIHN1cHBvcnQgaXMgcHVycG9ydGVkbHkgJnF1b3Q7aW4gZGV2ZWxvcG1lbnQmcXVvdDsgc28gc3RheSB0dW5lZC48L3A+Cgo8aDM+T3RoZXIgY2FwYWJpbGl0aWVzPC9oMz4KPHVsPgogIDxsaT5UaGlzIG1vZHVsZSBjYW4gYWN0IGFzIGEgbm90aWZpY2F0aW9uLXRyYW5zcG9ydCBmb3IgdGhlIENHTm90aWZpZXIgbW9kdWxlLgogICAgICA8cD5UaGlzIGFsbG93cyBzZW5kaW5nIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgdG8gYWRtaW4gdXNlcnMgb3IgZnJvbnRlbmQgdXNlcnMgd2hlbiB2YXJpb3VzIGV2ZW50cyBoYXBwZW4gaW4geW91ciB3ZWJzaXRlLjwvcD4KICA8L2xpPgogIDxsaT5UaGlzIG1vZHVsZSBjYW4gYWN0IGFzIGEgY2dzb2NpYWxibGFzdGVyLXRyYW5zcG9ydCBmb3IgdGhlIFNvY2lhbEJsYXN0ZXIgbW9kdWxlLgogICAgICA8cD5UaGlzIGFsbG93cyBzZW5kaW5nIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMgYXQgdGhlIHNhbWUgdGltZSBhcyB1c2luZyBvdGhlciB0cmFuc3BvcnQgbWVjaGFuaXNtcyB0byBibGFzdCBtZXNzYWdlcyB0byB5b3VyIHVzZXJzIG9uIG11bHRpcGxlIG1lZGlhIGZyb20gb25lIGxvY2F0aW9uLjwvcD4KICA8L2xpPgo8L3VsPgoKPGgzPkNhdmVhdHM8L2gzPgo8cD5TZW5kaW5nIGxhcmdlIGFtb3VudHMgb2Ygbm90aWZpY2F0aW9ucyBjYW4gYmUgcGFydGljdWxhcmx5IHNsb3cgZHVlIHRvIHRoZSBuZWVkIHRvIHBlcmZvcm0gbXVsdGlwbGUgb3V0Z29pbmcgcmVxdWVzdHMuICBUaGVyZWZvcmUgaXQgaXMgYmVzdCBpZiB5b3UgdXNlIHRoZSAid2VicHVzaC1mZXUtZ3JvdXAiIGNvbW1hbmQgcHJvdmlkZWQgYnkgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jbXNjbGkiPmNtc2NsaTwvYT4uIEFzIHRoZXJlIGFyZSBubyB0aW1lIHJlc3RyaWN0aW9ucyBpbiB0aGUgQ0xJIGVudmlyb25tZW50IGFzIG9wcG9zZWQgdG8gdGhlIHdlYiBlbnZpcm9ubWVudC48L3A+Cgo8aDM+SmF2YXNjcmlwdCBBUEk8L2gzPgo8cD5hbGwgZnVuY3Rpb25zIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBnbG9iYWwgamF2YXNjcmlwdCBvYmplY3QgbmFtZWQgJnF1b3Q7Y2dXZWJQdXNoJnF1b3Q7LiAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucyBhcmU6PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmJvb2wgY2dXZWJQdXNoLmlzX3N1YnNjcmliZWQoKTwvY29kZT4gLSBBIGZ1bmN0aW9uIHRvIHJldHVybiBpZiB0aGUgdXNlciBpcyBzdWJzY3JpYmVkIG9yIG5vdC4gIFdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHVzZXIgaGFzIGNvbXBsZXRlZCBhbGwgc3RlcHMgaW4gdGhpcyBicm93c2VyIHRvIHN1YnNjcmliZSB0byBwdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2guaXNfY29tcGF0aWJsZSgpPC9jb2RlPiAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2guaXNfZGVuaWVkKCk8L2NvZGU+IC0gUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGhhcyBhY3RpdmVseSBkZW5pZWQgcHVzaCBub3RpZmljYXRpb25zLjwvbGk+CiAgPGxpPjxjb2RlPmJvb2wgY2dXZWJQdXNoLnN1YnNjcmliZSgpPC9jb2RlPiAtIFdpbGwgc3Vic2NyaWJlIGEgdXNlciwgaWYgdGhleSBoYXZlIG5vdCBleHBsaWNpdGx5IGJsb2NrZWQgcHVzaCBub3RpZmljYXRpb25zIEFORCB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHdlYi1wdXNoIG5vdGlmaWNhdGlvbnMuPC9saT4KICA8bGk+PGNvZGU+Ym9vbCBjZ1dlYlB1c2gudW5zdWJzY3JpYmUoKTwvY29kZT4gLSBXaWxsIHVuc3Vic2NyaWJlIGEgc3Vic2NyaWJlZCB1c2VyLCBpZiB0aGUgYnJvd3NlciBwZXJtaXRzIGl0LjwvbGk+CjwvdWw+Cgo8aDM+UEhQIEFQSTwvaDM+CjxwPlRoaXMgbW9kdWxlIGhhcyBhIHNpbXBsZSBBUEkgdG8gYWxsb3cgY3JlYXRpbmcgYW5kIHNlbmRpbmcgd2ViLXB1c2ggbm90aWZpY3Rpb25zLiAgIERvY3VtZW50YXRpb24gY29taW5nIHNvb24uPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZnJvbnRlbmR1c2VycyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcm92aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/cgWebPush-jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8KLy8gYmVnaW4ganF1ZXJ5IHBsdWdpbgovLwooZnVuY3Rpb24gKCAkICkgewoKICAgICQuX2NnV2ViUHVzaCA9IGZ1bmN0aW9uKCBlbGVtZW50LCBvcHRpb25zICkgewoJdmFyIHBsdWdpbiA9IHRoaXM7Cgl2YXIgJGVsZW1lbnQgPSAkKGVsZW1lbnQpOwoKCXZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHsKICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0cy4KCSAgICBjaGFuZ2VCdXR0b25TdGF0ZTogbnVsbAogICAgICAgIH0sIG9wdGlvbnMgKTsKCgl2YXIgY2hhbmdlQnV0dG9uU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUgKSB7CgkgICAgdmFyIGVsID0gZWxlbWVudDsKICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgICAgICAgICBjYXNlICdlbmFibGVkJzoKCQkvLyBwdXNoIG5vdGlmaWNhdGlvbnMgZW5hYmxlZAoJCWVsLmRpc2FibGVkID0gZmFsc2U7CgkJJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3B1c2hfZGlzYWJsZWQgcHVzaF9jb21wdXRpbmcgcHVzaF9pbmNvbXBhdGlibGUgcHVzaF9lbmFibGVkJykuYWRkQ2xhc3MoJ3B1c2hfZW5hYmxlZCcpOwoJCWJyZWFrOwogICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6CgkJLy8gcHVzaCBub3RpZmljYXRpb25zIGRpc2FibGVkCgkJZWwuZGlzYWJsZWQgPSBmYWxzZTsKCQkkZWxlbWVudC5yZW1vdmVDbGFzcygncHVzaF9kaXNhYmxlZCBwdXNoX2NvbXB1dGluZyBwdXNoX2luY29tcGF0aWJsZSBwdXNoX2VuYWJsZWQnKS5hZGRDbGFzcygncHVzaF9kaXNhYmxlZCcpOwoJCWJyZWFrOwogICAgICAgICAgICBjYXNlICdjb21wdXRpbmcnOgoJCWVsLmRpc2FibGVkID0gdHJ1ZTsKCQkkZWxlbWVudC5yZW1vdmVDbGFzcygncHVzaF9kaXNhYmxlZCBwdXNoX2NvbXB1dGluZyBwdXNoX2luY29tcGF0aWJsZSBwdXNoX2VuYWJsZWQnKS5hZGRDbGFzcygncHVzaF9jb21wdXRpbmcnKTsKCQlicmVhazsKICAgICAgICAgICAgY2FzZSAnaW5jb21wYXRpYmxlJzoKCQllbC5kaXNhYmxlZCA9IHRydWU7CgkJJGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3B1c2hfZGlzYWJsZWQgcHVzaF9jb21wdXRpbmcgcHVzaF9pbmNvbXBhdGlibGUgcHVzaF9lbmFibGVkJykuYWRkQ2xhc3MoJ3B1c2hfaW5jb21wYXRpYmxlJyk7CgkJYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CgkJdGhyb3cgJ1VuaGFuZGxlZCBwdXNoIGJ1dHRvbiBzdGF0ZSAnK3N0YXRlOwogICAgICAgICAgICB9CgoJICAgIGlmKCB0eXBlb2Ygc2V0dGluZ3MuY2hhbmdlQnV0dG9uU3RhdGUgPT0gJ2Z1bmN0aW9uJyApIHsKCQlzZXR0aW5ncy5jaGFuZ2VCdXR0b25TdGF0ZS5jYWxsKCAkZWxlbWVudCwgc3RhdGUgKTsKCSAgICB9Cgl9OwoKCS8vIHByaXZhdGUgbWV0aG9kLgoJdmFyIG9uQ2xpY2sgPSBmdW5jdGlvbihldikgewoJICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CgkgICAgaWYoIGNnV2ViUHVzaC5pc1N1YnNjcmliZWQoKSApIHsKCQljZ1dlYlB1c2gudW5zdWJzY3JpYmUoKS50aGVuKCgpID0+IHsKCQkgICAgY2hhbmdlQnV0dG9uU3RhdGUoJ2Rpc2FibGVkJyk7CgkJfSkKCSAgICB9IGVsc2UgewoJCWNnV2ViUHVzaC5zdWJzY3JpYmUoKS50aGVuKCgpID0+IHsKCQkgICAgY2hhbmdlQnV0dG9uU3RhdGUoJ2VuYWJsZWQnKTsKCQl9KQoJICAgIH0KCX07CgoJLy8gcHJpdmF0ZSBtZXRob2QuCgl2YXIgaW5pdCA9IGZ1bmN0aW9uKCkgewoJICAgIHRyeSB7CgkJLy8gc2V0dXAgY2xpY2sgaGFuZGxlcgoJCSRlbGVtZW50LmNsaWNrKCBvbkNsaWNrICk7CgoJCWNoYW5nZUJ1dHRvblN0YXRlKCAnY29tcHV0aW5nJyApOwoJCWNnV2ViUHVzaC5jaGVja0NvbXBhdGlibGUoKTsKCQlpZiggY2dXZWJQdXNoLmNoZWNrRGVuaWVkKCkgKSB0aHJvdyAnVXNlciBkZW5pZWQgcHVzaCBub3RpZmljYXRpb25zIGZvciB0aGlzIHNpdGUnOwoJCSAgICBjZ1dlYlB1c2guc2VydmljZVdvcmtlclJlYWR5KCkudGhlbihzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uID0+IHsKCQkJc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5nZXRTdWJzY3JpcHRpb24oKS50aGVuKHN1YnNjciA9PiB7CiAgIAkJCSAgICBpZiggIXN1YnNjciApIHsKCQkJICAgICAgICBjaGFuZ2VCdXR0b25TdGF0ZSgnZGlzYWJsZWQnKTsKCQkJICAgIH0gZWxzZSB7CgkJCSAgICAgICAgY2dXZWJQdXNoLnNlbmRTdWJzY3JpcHRpb24oIHN1YnNjciApLnRoZW4oKCkgPT4gewoJCQkJICAgIGNoYW5nZUJ1dHRvblN0YXRlKCdlbmFibGVkJyk7CgkJCSAgICAgICAgfSwgZSA9PiB7CgkJCQkgICAgdGhyb3cgJ0Vycm9yIHNlbmRpbmcgc3Vic2NyaXB0aW9uIHRvIHNlcnZlciAnICsgZTsKCQkJICAgICAgICB9KQoJCQkgICAgfQoJCQl9KQoJCSAgICB9LCBlID0+IHsKCQkJY29uc29sZS5lcnJvciggJ3Rlc3QgJyApOwoJCQljb25zb2xlLmVycm9yKCBlICk7CgkJICAgIH0pCgkgICAgfQoJICAgIGNhdGNoKCBlcnIgKSB7CgkJY29uc29sZS5lcnJvciggZXJyICk7CgkJY2hhbmdlQnV0dG9uU3RhdGUoJ2luY29tcGF0aWJsZScpOwoJICAgIH0KCX0KCglpbml0KCk7CiAgICB9OwoKICAgICQuZm4uY2dXZWJQdXNoID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CglyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkgICAgaWYoIHVuZGVmaW5lZCA9PSAkKHRoaXMpLmRhdGEoJ2NnV2ViUHVzaCcpICkgewoJCXZhciBwbHVnaW4gPSBuZXcgJC5fY2dXZWJQdXNoKCB0aGlzLCBvcHRpb25zICk7CgkJJCh0aGlzKS5kYXRhKCdjZ1dlYlB1c2gnLHBsdWdpbik7CgkgICAgfQoJfSk7CiAgICB9Cn0oIGpRdWVyeSApKTsK]]></data>
	</file>
	<file>
	  <filename>/js/cgWebPush.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIGNnV2ViUHVzaCA9IG5ldyBmdW5jdGlvbigpIHsKICAgIHZhciAgX2VsLCBfa2V5LCBfYWpheF91cmwsIF9zdWJzY3JpYmVkLCBfZGVuaWVkLCBfY29tcGF0aWJsZSwgX3NhbHQsIF9mZXVfdWlkOwoKICAgIGZ1bmN0aW9uIHVybEJhc2U2NFRvVWludDhBcnJheShiYXNlNjRTdHJpbmcpIHsKICAgICAgICBjb25zdCBwYWRkaW5nID0gJz0nLnJlcGVhdCgoNCAtIGJhc2U2NFN0cmluZy5sZW5ndGggJSA0KSAlIDQpOwogICAgICAgIGNvbnN0IGJhc2U2NCA9IChiYXNlNjRTdHJpbmcgKyBwYWRkaW5nKQogICAgICAgICAgICAucmVwbGFjZSgvXC0vZywgJysnKQogICAgICAgICAgICAucmVwbGFjZSgvXy9nLCAnLycpOwoKICAgICAgICBjb25zdCByYXdEYXRhID0gd2luZG93LmF0b2IoYmFzZTY0KTsKICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IG5ldyBVaW50OEFycmF5KHJhd0RhdGEubGVuZ3RoKTsKCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdEYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIG91dHB1dEFycmF5W2ldID0gcmF3RGF0YS5jaGFyQ29kZUF0KGkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXk7CiAgICB9CgogICAgdGhpcy5zZXJ2aWNlV29ya2VyUmVhZHkgPSBmdW5jdGlvbigpIHsKCXJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKICAgIH0KCiAgICB0aGlzLmdldFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uKCkgewoJcmV0dXJuIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuZ2V0U3Vic2NyaXB0aW9uKCkudGhlbihzdWJzY3IgPT4gewoJICAgIGlmKCBzdWJzY3IgKSBfc3Vic2NyaWJlZCA9IDE7Cgl9KTsKICAgIH0KCiAgICB0aGlzLnNlbmRTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiggc3Vic2NyaXB0aW9uLCBtZXRob2QgKSB7CiAgICAgICAgY29uc3Qga2V5ID0gc3Vic2NyaXB0aW9uLmdldEtleSgncDI1NmRoJyk7CiAgICAgICAgY29uc3QgdG9rZW4gPSBzdWJzY3JpcHRpb24uZ2V0S2V5KCdhdXRoJyk7CglpZiggISBfYWpheF91cmwgKSByZXR1cm47CglpZiggdHlwZW9mIG1ldGhvZCA9PSAndW5kZWZpbmVkJyB8fCAhbWV0aG9kICkgbWV0aG9kID0gJ1BPU1QnOwoKCS8vIHNpZ24gdGhlIGRhdGEgd2l0aCB0aGUgaGFzaAoJbGV0IGRhdGEgPSB7CiAgICAgICAgICAgIGVuZHBvaW50OiBzdWJzY3JpcHRpb24uZW5kcG9pbnQsCiAgICAgICAgICAgIGtleToga2V5ID8gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KGtleSkpKSA6IG51bGwsCiAgICAgICAgICAgIHRva2VuOiB0b2tlbiA/IGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSh0b2tlbikpKSA6IG51bGwKCX0KCWlmKCBfZmV1X3VpZCApIGRhdGEuZmV1X3VpZCA9IF9mZXVfdWlkCglsZXQgYm9keV9zdHIgPSBKU09OLnN0cmluZ2lmeShkYXRhKQoJbGV0IHNpZyA9IHNoYTEoIF9zYWx0ICsgYm9keV9zdHIgKQogICAgICAgIHJldHVybiBmZXRjaCggX2FqYXhfdXJsLCB7CiAgICAgICAgICAgIG1ldGhvZCwKICAgICAgICAgICAgYm9keTogYm9keV9zdHIsCgkgICAgaGVhZGVyczogewoJCSdBY2NlcHQnOiAgJ2FwcGxpY2F0aW9uL2pzb24nLAoJCSdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCgkJJ0NhY2hlJzogJ25vLWNhY2hlJywKCSAgICAgICAgJ1gtc2lnbmF0dXJlJzogc2lnLAogICAgICAgICAgICB9LAoJICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nCiAgICAgICAgfSkudGhlbigoKSA9PiBzdWJzY3JpcHRpb24pOwogICAgfQoKICAgIHRoaXMuc2V0X3NhbHQgPSBmdW5jdGlvbiggc3RyICkgewogICAgICAgIF9zYWx0ID0gc3RyCiAgICB9CgogICAgdGhpcy5zZXRfZmV1X3VpZCA9IGZ1bmN0aW9uKCB2YWwgKSB7CiAgICAgICAgX2ZldV91aWQgPSB2YWwKICAgIH0KCiAgICB0aGlzLnNldF92YXBpZF9rZXkgPSBmdW5jdGlvbigga2V5ICkgewoJX2tleSA9IGtleTsKICAgIH0KCiAgICB0aGlzLnNldF9lbGVtZW50ID0gZnVuY3Rpb24oIGVsZW1lbnQgKSB7CglfZWwgPSAkKGVsZW1lbnQpOwogICAgfQoKICAgIHRoaXMuc2V0X2FqYXhfdXJsID0gZnVuY3Rpb24oIHVybCApIHsKCV9hamF4X3VybCA9IHVybDsKICAgIH0KCiAgICB0aGlzLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uKCkgewoJaWYoIF9jb21wYXRpYmxlICkgcmV0dXJuIF9zdWJzY3JpYmVkOwogICAgfQoKICAgIHRoaXMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBUbyB1bnN1YnNjcmliZSBmcm9tIHB1c2ggbWVzc2FnaW5nLCB5b3UgbmVlZCB0byBnZXQgdGhlIHN1YnNjcmlwdGlvbiBvYmplY3QKCXZhciBzZWxmID0gdGhpczsKCWlmKCAhX2NvbXBhdGlibGUgKSB0aHJvdyAnUGxlYXNlIGNhbGwgdGhlIGNoZWNrQ29tcGF0aWJsZSgpIG1ldGhvZCBmaXJzdCcKICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHkKICAgICAgICAgICAgLnRoZW4oc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiA9PiBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbigpKQogICAgICAgICAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gewoJCS8vIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHN1YnNjcmlwdGlvbiB0byB1bnN1YnNjcmliZSB0ZXN0aW5nCgkJaWYgKCFzdWJzY3JpcHRpb24pIHsKCQkgICAgX3N1YnNjcmliZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CgkJfQoKCQlyZXR1cm4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkKCQkgICAgLnRoZW4oZnVuY3Rpb24oKXsKCQkJcmV0dXJuIHNlbGYuc2VuZFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sJ0RFTEVURScpCgkJCSAgICAudGhlbihmdW5jdGlvbigpewoJCQkJX3N1YnNjcmliZWQgPSBmYWxzZTsKCQkJCXJldHVybjsKCQkJICAgIH0pOwoJCSAgICB9KQoKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGUgPT4gewoJCS8vIFdlIGZhaWxlZCB0byB1bnN1YnNjcmliZSwgdGhpcyBjYW4gbGVhZCB0bwoJCS8vIGFuIHVudXN1YWwgc3RhdGUsIHNvICBpdCBtYXkgYmUgYmVzdCB0byByZW1vdmUKCQkvLyB0aGUgdXNlcnMgZGF0YSBmcm9tIHlvdXIgZGF0YSBzdG9yZSBhbmQKCQkvLyBpbmZvcm0gdGhlIHVzZXIgdGhhdCB5b3UgaGF2ZSBkb25lIHNvCgkJX3N1YnNjcmliZWQgPSBmYWxzZTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgdGhpcy5zdWJzY3JpYmUgPSBmdW5jdGlvbihmb3JjZSkgewoJdmFyIHNlbGYgPSB0aGlzCglpZiggIV9jb21wYXRpYmxlICkgdGhyb3cgJ1BsZWFzZSBjYWxsIHRoZSBjaGVja0NvbXBhdGlibGUoKSBtZXRob2QgZmlyc3QnCiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5CiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24pIHsKCQlyZXR1cm4gc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5nZXRTdWJzY3JpcHRpb24oKQoJCSAgICAudGhlbihzdWJzY3JpcHRpb24gPT4gewoJCQlpZiggIXN1YnNjcmlwdGlvbiApIGNvbnNvbGUubG9nKCdoYXZlIG5vIHN1YnNjcmlwdGlvbicpCgkJCWlmKCAhc3Vic2NyaXB0aW9uIHx8IGZvcmNlICkgewoJCQkgICAgcmV0dXJuIHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKCQkJCXVzZXJWaXNpYmxlT25seTogdHJ1ZSwKCQkJCWFwcGxpY2F0aW9uU2VydmVyS2V5OiB1cmxCYXNlNjRUb1VpbnQ4QXJyYXkoX2tleSksCgkJCSAgICB9KQoJCQkgICAgLnRoZW4oc3Vic2NyaXB0aW9uID0+IHsKCQkJCS8vIFN1YnNjcmlwdGlvbiB3YXMgc3VjY2Vzc2Z1bAoJCQkJLy8gY3JlYXRlIHN1YnNjcmlwdGlvbiBvbiB5b3VyIHNlcnZlcgoJCQkJcmV0dXJuIHNlbGYuc2VuZFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sICdQT1NUJykKCQkJICAgIH0pCgkJCX0vKiBpZiAqLwoJCSAgICB9KQoJICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChlID0+IHsKCQlpZiggX3N1YnNjcmliZWQgKSB7CgkJICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIGFscmVhZHkgc3Vic2NyaWJlZCcpCgkJICAgIHJldHVybjsgIC8vIGFscmVhZHkgc3Vic2NyaWJlZAoJCX0KCgkJX3N1YnNjcmliZWQgPSBmYWxzZTsKCQlpZiAoTm90aWZpY2F0aW9uLnBlcm1pc3Npb24gPT09ICdkZW5pZWQnKSB7CgkJICAgIF9kZW5pZWQgPSB0cnVlCiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgZGVuaWVkIHRoZSBub3RpZmljYXRpb24gcGVybWlzc2lvbiB3aGljaAogICAgICAgICAgICAgICAgICAgIC8vIG1lYW5zIHdlIGZhaWxlZCB0byBzdWJzY3JpYmUgYW5kIHRoZSB1c2VyIHdpbGwgbmVlZAogICAgICAgICAgICAgICAgICAgIC8vIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gdG8KICAgICAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gcHVzaCBtZXNzYWdlcwogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm90aWZpY2F0aW9ucyBhcmUgZGVuaWVkIGJ5IHRoZSB1c2VyLicpCgkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBBIHByb2JsZW0gb2NjdXJyZWQgd2l0aCB0aGUgc3Vic2NyaXB0aW9uOyBjb21tb24gcmVhc29ucwogICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgbmV0d29yayBlcnJvcnMgb3IgdGhlIHVzZXIgc2tpcHBlZCB0aGUgcGVybWlzc2lvbgogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ltcG9zc2libGUgdG8gc3Vic2NyaWJlIHRvIHB1c2ggbm90aWZpY2F0aW9ucycsIGUpCgkJfQogICAgICAgICAgICB9KQogICAgfQoKICAgIHRoaXMuY2hlY2tDb21wYXRpYmxlID0gZnVuY3Rpb24oKSB7CglpZiggISgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSApIHRocm93ICdTZXJ2aWNlIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyJzsKCWlmKCAhKCdQdXNoTWFuYWdlcicgaW4gd2luZG93KSApIHRocm93ICdQdXNoIG5vdGlmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyJzsKCWlmKCAhKCdzaG93Tm90aWZpY2F0aW9uJyBpbiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLnByb3RvdHlwZSkgKSB0aHJvdyAnTm90aWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXInOwoJX2NvbXBhdGlibGUgPSB0cnVlOwoJcmV0dXJuIHRydWU7CiAgICB9CgogICAgdGhpcy5jaGVja0RlbmllZCA9IGZ1bmN0aW9uKCkgewoJcmV0dXJuIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2RlbmllZCcpOwogICAgfQp9IC8vIGVuZCBvZiBjZ1dlYlB1c2gK]]></data>
	</file>
	<file>
	  <filename>/js/sha1.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogW2pzLXNoYTFde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvanMtc2hhMX0KICoKICogQHZlcnNpb24gMC42LjAKICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV0KICogQGNvcHlyaWdodCBDaGVuLCBZaS1DeXVhbiAyMDE0LTIwMTcKICogQGxpY2Vuc2UgTUlUCiAqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0KXt0PyhmWzBdPWZbMTZdPWZbMV09ZlsyXT1mWzNdPWZbNF09Zls1XT1mWzZdPWZbN109Zls4XT1mWzldPWZbMTBdPWZbMTFdPWZbMTJdPWZbMTNdPWZbMTRdPWZbMTVdPTAsdGhpcy5ibG9ja3M9Zik6dGhpcy5ibG9ja3M9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5oMD0xNzMyNTg0MTkzLHRoaXMuaDE9NDAyMzIzMzQxNyx0aGlzLmgyPTI1NjIzODMxMDIsdGhpcy5oMz0yNzE3MzM4NzgsdGhpcy5oND0zMjg1Mzc3NTIwLHRoaXMuYmxvY2s9dGhpcy5zdGFydD10aGlzLmJ5dGVzPXRoaXMuaEJ5dGVzPTAsdGhpcy5maW5hbGl6ZWQ9dGhpcy5oYXNoZWQ9ITEsdGhpcy5maXJzdD0hMH12YXIgaD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz93aW5kb3c6e30scz0haC5KU19TSEExX05PX05PREVfSlMmJiJvYmplY3QiPT10eXBlb2YgcHJvY2VzcyYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO3MmJihoPWdsb2JhbCk7dmFyIGk9IWguSlNfU0hBMV9OT19DT01NT05fSlMmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyxlPSJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQscj0iMDEyMzQ1Njc4OWFiY2RlZiIuc3BsaXQoIiIpLG89Wy0yMTQ3NDgzNjQ4LDgzODg2MDgsMzI3NjgsMTI4XSxuPVsyNCwxNiw4LDBdLGE9WyJoZXgiLCJhcnJheSIsImRpZ2VzdCIsImFycmF5QnVmZmVyIl0sZj1bXSx1PWZ1bmN0aW9uKGgpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbmV3IHQoITApLnVwZGF0ZShzKVtoXSgpfX0sYz1mdW5jdGlvbigpe3ZhciBoPXUoImhleCIpO3MmJihoPXAoaCkpLGguY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaC5jcmVhdGUoKS51cGRhdGUodCl9O2Zvcih2YXIgaT0wO2k8YS5sZW5ndGg7KytpKXt2YXIgZT1hW2ldO2hbZV09dShlKX1yZXR1cm4gaH0scD1mdW5jdGlvbih0KXt2YXIgaD1ldmFsKCJyZXF1aXJlKCdjcnlwdG8nKSIpLHM9ZXZhbCgicmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyIiksaT1mdW5jdGlvbihpKXtpZigic3RyaW5nIj09dHlwZW9mIGkpcmV0dXJuIGguY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShpLCJ1dGY4IikuZGlnZXN0KCJoZXgiKTtpZihpLmNvbnN0cnVjdG9yPT09QXJyYXlCdWZmZXIpaT1uZXcgVWludDhBcnJheShpKTtlbHNlIGlmKHZvaWQgMD09PWkubGVuZ3RoKXJldHVybiB0KGkpO3JldHVybiBoLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUobmV3IHMoaSkpLmRpZ2VzdCgiaGV4Iil9O3JldHVybiBpfTt0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuZmluYWxpemVkKXt2YXIgcz0ic3RyaW5nIiE9dHlwZW9mIHQ7cyYmdC5jb25zdHJ1Y3Rvcj09PWguQXJyYXlCdWZmZXImJih0PW5ldyBVaW50OEFycmF5KHQpKTtmb3IodmFyIGksZSxyPTAsbz10Lmxlbmd0aHx8MCxhPXRoaXMuYmxvY2tzO3I8bzspe2lmKHRoaXMuaGFzaGVkJiYodGhpcy5oYXNoZWQ9ITEsYVswXT10aGlzLmJsb2NrLGFbMTZdPWFbMV09YVsyXT1hWzNdPWFbNF09YVs1XT1hWzZdPWFbN109YVs4XT1hWzldPWFbMTBdPWFbMTFdPWFbMTJdPWFbMTNdPWFbMTRdPWFbMTVdPTApLHMpZm9yKGU9dGhpcy5zdGFydDtyPG8mJmU8NjQ7KytyKWFbZT4+Ml18PXRbcl08PG5bMyZlKytdO2Vsc2UgZm9yKGU9dGhpcy5zdGFydDtyPG8mJmU8NjQ7KytyKShpPXQuY2hhckNvZGVBdChyKSk8MTI4P2FbZT4+Ml18PWk8PG5bMyZlKytdOmk8MjA0OD8oYVtlPj4yXXw9KDE5MnxpPj42KTw8blszJmUrK10sYVtlPj4yXXw9KDEyOHw2MyZpKTw8blszJmUrK10pOmk8NTUyOTZ8fGk+PTU3MzQ0PyhhW2U+PjJdfD0oMjI0fGk+PjEyKTw8blszJmUrK10sYVtlPj4yXXw9KDEyOHxpPj42JjYzKTw8blszJmUrK10sYVtlPj4yXXw9KDEyOHw2MyZpKTw8blszJmUrK10pOihpPTY1NTM2KygoMTAyMyZpKTw8MTB8MTAyMyZ0LmNoYXJDb2RlQXQoKytyKSksYVtlPj4yXXw9KDI0MHxpPj4xOCk8PG5bMyZlKytdLGFbZT4+Ml18PSgxMjh8aT4+MTImNjMpPDxuWzMmZSsrXSxhW2U+PjJdfD0oMTI4fGk+PjYmNjMpPDxuWzMmZSsrXSxhW2U+PjJdfD0oMTI4fDYzJmkpPDxuWzMmZSsrXSk7dGhpcy5sYXN0Qnl0ZUluZGV4PWUsdGhpcy5ieXRlcys9ZS10aGlzLnN0YXJ0LGU+PTY0Pyh0aGlzLmJsb2NrPWFbMTZdLHRoaXMuc3RhcnQ9ZS02NCx0aGlzLmhhc2goKSx0aGlzLmhhc2hlZD0hMCk6dGhpcy5zdGFydD1lfXJldHVybiB0aGlzLmJ5dGVzPjQyOTQ5NjcyOTUmJih0aGlzLmhCeXRlcys9dGhpcy5ieXRlcy80Mjk0OTY3Mjk2PDwwLHRoaXMuYnl0ZXM9dGhpcy5ieXRlcyU0Mjk0OTY3Mjk2KSx0aGlzfX0sdC5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oKXtpZighdGhpcy5maW5hbGl6ZWQpe3RoaXMuZmluYWxpemVkPSEwO3ZhciB0PXRoaXMuYmxvY2tzLGg9dGhpcy5sYXN0Qnl0ZUluZGV4O3RbMTZdPXRoaXMuYmxvY2ssdFtoPj4yXXw9b1szJmhdLHRoaXMuYmxvY2s9dFsxNl0saD49NTYmJih0aGlzLmhhc2hlZHx8dGhpcy5oYXNoKCksdFswXT10aGlzLmJsb2NrLHRbMTZdPXRbMV09dFsyXT10WzNdPXRbNF09dFs1XT10WzZdPXRbN109dFs4XT10WzldPXRbMTBdPXRbMTFdPXRbMTJdPXRbMTNdPXRbMTRdPXRbMTVdPTApLHRbMTRdPXRoaXMuaEJ5dGVzPDwzfHRoaXMuYnl0ZXM+Pj4yOSx0WzE1XT10aGlzLmJ5dGVzPDwzLHRoaXMuaGFzaCgpfX0sdC5wcm90b3R5cGUuaGFzaD1mdW5jdGlvbigpe3ZhciB0LGgscz10aGlzLmgwLGk9dGhpcy5oMSxlPXRoaXMuaDIscj10aGlzLmgzLG89dGhpcy5oNCxuPXRoaXMuYmxvY2tzO2Zvcih0PTE2O3Q8ODA7Kyt0KWg9blt0LTNdXm5bdC04XV5uW3QtMTRdXm5bdC0xNl0sblt0XT1oPDwxfGg+Pj4zMTtmb3IodD0wO3Q8MjA7dCs9NSlzPShoPShpPShoPShlPShoPShyPShoPShvPShoPXM8PDV8cz4+PjI3KSsoaSZlfH5pJnIpK28rMTUxODUwMDI0OStuW3RdPDwwKTw8NXxvPj4+MjcpKyhzJihpPWk8PDMwfGk+Pj4yKXx+cyZlKStyKzE1MTg1MDAyNDkrblt0KzFdPDwwKTw8NXxyPj4+MjcpKyhvJihzPXM8PDMwfHM+Pj4yKXx+byZpKStlKzE1MTg1MDAyNDkrblt0KzJdPDwwKTw8NXxlPj4+MjcpKyhyJihvPW88PDMwfG8+Pj4yKXx+ciZzKStpKzE1MTg1MDAyNDkrblt0KzNdPDwwKTw8NXxpPj4+MjcpKyhlJihyPXI8PDMwfHI+Pj4yKXx+ZSZvKStzKzE1MTg1MDAyNDkrblt0KzRdPDwwLGU9ZTw8MzB8ZT4+PjI7Zm9yKDt0PDQwO3QrPTUpcz0oaD0oaT0oaD0oZT0oaD0ocj0oaD0obz0oaD1zPDw1fHM+Pj4yNykrKGleZV5yKStvKzE4NTk3NzUzOTMrblt0XTw8MCk8PDV8bz4+PjI3KSsoc14oaT1pPDwzMHxpPj4+MileZSkrcisxODU5Nzc1MzkzK25bdCsxXTw8MCk8PDV8cj4+PjI3KSsob14ocz1zPDwzMHxzPj4+MileaSkrZSsxODU5Nzc1MzkzK25bdCsyXTw8MCk8PDV8ZT4+PjI3KSsocl4obz1vPDwzMHxvPj4+MilecykraSsxODU5Nzc1MzkzK25bdCszXTw8MCk8PDV8aT4+PjI3KSsoZV4ocj1yPDwzMHxyPj4+MilebykrcysxODU5Nzc1MzkzK25bdCs0XTw8MCxlPWU8PDMwfGU+Pj4yO2Zvcig7dDw2MDt0Kz01KXM9KGg9KGk9KGg9KGU9KGg9KHI9KGg9KG89KGg9czw8NXxzPj4+MjcpKyhpJmV8aSZyfGUmcikrby0xODk0MDA3NTg4K25bdF08PDApPDw1fG8+Pj4yNykrKHMmKGk9aTw8MzB8aT4+PjIpfHMmZXxpJmUpK3ItMTg5NDAwNzU4OCtuW3QrMV08PDApPDw1fHI+Pj4yNykrKG8mKHM9czw8MzB8cz4+PjIpfG8maXxzJmkpK2UtMTg5NDAwNzU4OCtuW3QrMl08PDApPDw1fGU+Pj4yNykrKHImKG89bzw8MzB8bz4+PjIpfHImc3xvJnMpK2ktMTg5NDAwNzU4OCtuW3QrM108PDApPDw1fGk+Pj4yNykrKGUmKHI9cjw8MzB8cj4+PjIpfGUmb3xyJm8pK3MtMTg5NDAwNzU4OCtuW3QrNF08PDAsZT1lPDwzMHxlPj4+Mjtmb3IoO3Q8ODA7dCs9NSlzPShoPShpPShoPShlPShoPShyPShoPShvPShoPXM8PDV8cz4+PjI3KSsoaV5lXnIpK28tODk5NDk3NTE0K25bdF08PDApPDw1fG8+Pj4yNykrKHNeKGk9aTw8MzB8aT4+PjIpXmUpK3ItODk5NDk3NTE0K25bdCsxXTw8MCk8PDV8cj4+PjI3KSsob14ocz1zPDwzMHxzPj4+MileaSkrZS04OTk0OTc1MTQrblt0KzJdPDwwKTw8NXxlPj4+MjcpKyhyXihvPW88PDMwfG8+Pj4yKV5zKStpLTg5OTQ5NzUxNCtuW3QrM108PDApPDw1fGk+Pj4yNykrKGVeKHI9cjw8MzB8cj4+PjIpXm8pK3MtODk5NDk3NTE0K25bdCs0XTw8MCxlPWU8PDMwfGU+Pj4yO3RoaXMuaDA9dGhpcy5oMCtzPDwwLHRoaXMuaDE9dGhpcy5oMStpPDwwLHRoaXMuaDI9dGhpcy5oMitlPDwwLHRoaXMuaDM9dGhpcy5oMytyPDwwLHRoaXMuaDQ9dGhpcy5oNCtvPDwwfSx0LnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplKCk7dmFyIHQ9dGhpcy5oMCxoPXRoaXMuaDEscz10aGlzLmgyLGk9dGhpcy5oMyxlPXRoaXMuaDQ7cmV0dXJuIHJbdD4+MjgmMTVdK3JbdD4+MjQmMTVdK3JbdD4+MjAmMTVdK3JbdD4+MTYmMTVdK3JbdD4+MTImMTVdK3JbdD4+OCYxNV0rclt0Pj40JjE1XStyWzE1JnRdK3JbaD4+MjgmMTVdK3JbaD4+MjQmMTVdK3JbaD4+MjAmMTVdK3JbaD4+MTYmMTVdK3JbaD4+MTImMTVdK3JbaD4+OCYxNV0rcltoPj40JjE1XStyWzE1JmhdK3Jbcz4+MjgmMTVdK3Jbcz4+MjQmMTVdK3Jbcz4+MjAmMTVdK3Jbcz4+MTYmMTVdK3Jbcz4+MTImMTVdK3Jbcz4+OCYxNV0rcltzPj40JjE1XStyWzE1JnNdK3JbaT4+MjgmMTVdK3JbaT4+MjQmMTVdK3JbaT4+MjAmMTVdK3JbaT4+MTYmMTVdK3JbaT4+MTImMTVdK3JbaT4+OCYxNV0rcltpPj40JjE1XStyWzE1JmldK3JbZT4+MjgmMTVdK3JbZT4+MjQmMTVdK3JbZT4+MjAmMTVdK3JbZT4+MTYmMTVdK3JbZT4+MTImMTVdK3JbZT4+OCYxNV0rcltlPj40JjE1XStyWzE1JmVdfSx0LnByb3RvdHlwZS50b1N0cmluZz10LnByb3RvdHlwZS5oZXgsdC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5maW5hbGl6ZSgpO3ZhciB0PXRoaXMuaDAsaD10aGlzLmgxLHM9dGhpcy5oMixpPXRoaXMuaDMsZT10aGlzLmg0O3JldHVyblt0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LGg+PjI0JjI1NSxoPj4xNiYyNTUsaD4+OCYyNTUsMjU1Jmgscz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyxpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdfSx0LnByb3RvdHlwZS5hcnJheT10LnByb3RvdHlwZS5kaWdlc3QsdC5wcm90b3R5cGUuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplKCk7dmFyIHQ9bmV3IEFycmF5QnVmZmVyKDIwKSxoPW5ldyBEYXRhVmlldyh0KTtyZXR1cm4gaC5zZXRVaW50MzIoMCx0aGlzLmgwKSxoLnNldFVpbnQzMig0LHRoaXMuaDEpLGguc2V0VWludDMyKDgsdGhpcy5oMiksaC5zZXRVaW50MzIoMTIsdGhpcy5oMyksaC5zZXRVaW50MzIoMTYsdGhpcy5oNCksdH07dmFyIHk9YygpO2k/bW9kdWxlLmV4cG9ydHM9eTooaC5zaGExPXksZSYmZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSl9KCk7]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2FsbF9mZXVfdXNlcnMnXSA9ICdBbGwgZnJvbnRlbmQgdXNlcnMnOwokbGFuZ1snYWxsX2FkbWluX3VzZXJzJ10gPSAnQWxsIGFkbWluIHVzZXJzJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3JvdXAnOwokbGFuZ1snYWRtaW5fZ3JvdXAnXSA9ICdBZG1pbiBHcm91cCc7CiRsYW5nWydzZW5kdG8nXSA9ICdTZW5kIHRvJzsKJGxhbmdbJ3RhYl91c2VwdXNoJ10gPSAnU3Vic2NyaWJlJzsKJGxhbmdbJ3Byb21wdF9zdWJzY3JpYmUnXSA9ICdTdWJzY3JpYmUnOwokbGFuZ1sncHJvbXB0X3Vuc3Vic2NyaWJlJ10gPSAnVW5zdWJzY3JpYmUnOwokbGFuZ1sncHJvbXB0X2Rpc2FibGVkJ10gPSAnRGlzYWJsZWQnOwokbGFuZ1sncHJvbXB0X2luY29tcGF0aWJsZSddID0gJ0luY29tcGF0aWJsZSc7CiRsYW5nWydwcm9tcHRfbG9hZGluZyddID0gJ0xvYWRpbmcnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdTZW5kIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnMgYnJvd3NlcnMsIGV2ZW4gd2hlbiBub3QgdmlzaXRpbmcgeW91ciBzaXRlLic7CiRsYW5nWydpbmZvX3NlbmRlcl93ZWJwdXNoJ10gPSAnV2ViIFB1c2ggbm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byBGRVUgdXNlcnMgd2hvIGhhdmUgaW5kaWNhdGVkIHRoYXQgdGhleSB3b3VsZCBsaWtlIHRvIHJlY2VpdmUgcHVzaCBub3RpZmljYXRpb25zLiAgVXNlcnMgZG8gbm90IG5lZWQgdG8gYmUgbG9nZ2VkIGluIHRvIHJlY2VpdmUgdGhlc2UgbWVzc2FnZXMuPGJyLz5JZiBhIGxpbmsgaXMgZW50ZXJlZCwgdGhlbiB1c2VycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoYXQgbGluayBpZiB0aGV5IGNsaWNrIG9uIHRoZSBub3RpZmljYXRpb24uICBJZiBhbiBpbWFnZSBpcyBzZWxlY3RlZCwgYSBwcmV2aWV3IG9mIHRoYXQgaW1hZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbi4nOwokbGFuZ1sndHJhbnNwb3J0X25hbWUnXSA9ICdXZWIgUHVzaCBOb3RpZmljYXRpb24nOwokbGFuZ1sndHJhbnNwb3J0X2Rlc2MnXSA9ICdTZW5kIFdlYi1QdXNoIG5vdGlmaWNhdGlvbnMgdG8gc3Vic2NyaWJlZCB1c2Vycyc7CiRsYW5nWyd0b3BpYyddID0gJ1RvcGljJzsKJGxhbmdbJ3B1c2hfc3VjY2Vzc2Z1bF9uJ10gPSAnU2VudCAlZCBwdXNoIG5vdGlmaWNhdGlvbnMnOwokbGFuZ1snZmV1X2dyb3VwJ10gPSAnRkVVIEdyb3VwJzsKJGxhbmdbJ3NlbmQnXSA9ICdTZW5kJzsKJGxhbmdbJ2JvZHknXSA9ICdCb2R5JzsKJGxhbmdbJ3VybCddID0gJ1VSTCc7CiRsYW5nWyd0YWJfc2VuZHB1c2gnXSA9ICdTZW5kIFdlYlB1c2ggTm90aWZpY2F0aW9ucyc7CiRsYW5nWyd0YWJfcHJlZnMnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWyd1cGRhdGVfc3cnXSA9ICdVcGRhdGUgU2VydmljZSBXb3JrZXInOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGUuIEFsbCBWQVBJRCBrZXlzIGFuZCBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0JzsKJGxhbmdbJ2luZm9fdGl0bGUnXSA9ICdTcGVjaWZ5IGEgdGl0bGUgdG8gdXNlIGZvciBhbGwgbm90aWZpY2F0aW9ucy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBzaXRlIG5hbWUgd2lsbCBiZSB1c2VkJzsKJGxhbmdbJ2luZm9faWNvbiddID0gJ0FuIG9wdGlvbmFsIGljb24gdG8gZGlzcGxheSBmb3IgYWxsIG5vdGlmaWNhdGlvbnMuICBQbGVhc2Ugc2VsZWN0IGEgc3F1YXJlIGltYWdlIG9mIHNpemUgOTZ4OTYgb3IgZ3JlYXRlci4nOwokbGFuZ1snZ2VuZXJhdGVfa2V5cyddID0gJ0dlbmVyYXRlIGtleXMnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdDR1dlYlB1c2ggaXMgaW5zdGFsbGVkLiAgUGxlYXNlIHZpc2l0IHRoZSBhZG1pbiBwYW5lbCBvZiB0aGlzIG1vZHVsZSBmb3IgY29uZmlndXJhdGlvbic7CiRsYW5nWyd3YXJuX25va2V5cyddID0gJ1lvdSBoYXZlIG5vdCBjcmVhdGVkIGFueSBtZXNzYWdpbmcga2V5cy4gIFRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBub3QgZnVuY3Rpb25hbCc7CiRsYW5nWydjb25maXJtX25ld2tleXMnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZ2VuZXJhdGUgbmV3IGtleXMuICBZb3VyIGN1cnJlbnQgc3Vic2NyaWJlciBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvbXBsZXRlbHkgaW52YWxpZGF0ZWQgaWYgeW91IGNvbnRpbnVlPyc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdDR1dlYlB1c2gnOwokbGFuZ1sndGl0bGUnXSA9ICdUaXRsZSc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snaWNvbiddID0gJ0ljb24nOw==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.#class.ServiceWorkerAddon.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/class.FeuGroupPushMessage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCmNsYXNzIEZldUdyb3VwUHVzaE1lc3NhZ2UgZXh0ZW5kcyBQdXNoTWVzc2FnZQp7CiAgICBwcml2YXRlICRfZGF0YSA9IFsgJ2dpZCc9Pm51bGwgXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIGFycmF5ICRkYXRhID0gbnVsbCApCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCggJGRhdGEgKTsKICAgICAgICBpZiggaXNfYXJyYXkoICRkYXRhICYmIGNvdW50KCRkYXRhKSkgKSB7CiAgICAgICAgICAgICRnaWQgPSBcY2dlX3BhcmFtOjpnZXRfaW50KCAkcGFyYW1zLCAnZ2lkJyApOwogICAgICAgICAgICBpZiggJGdpZCA+IDAgKSAkdGhpcy0+X2RhdGFbJ2dpZCddID0gJGdpZDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCAka2V5ICkKICAgIHsKICAgICAgICBpZiggJGtleSA9PSAnZ2lkJyApIHJldHVybiAkdGhpcy0+X2RhdGFbJ2dpZCddOwogICAgICAgIHJldHVybiBwYXJlbnQ6Ol9fZ2V0KCAka2V5ICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkanVzdFdpdGgoICRrZXksICR2YWx1ZSApCiAgICB7CiAgICAgICAgaWYoICRrZXkgPT0gJ2dpZCcgKSB7CiAgICAgICAgICAgICRvYmogPSBjbG9uZSAkdGhpczsKICAgICAgICAgICAgJG9iai0+X2RhdGFbJ2dpZCddID0gKGludCkgJHZhbHVlOwogICAgICAgICAgICByZXR1cm4gJG9iajsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwYXJlbnQ6OmFkanVzdFdpdGgoICRrZXksICR2YWx1ZSApOwogICAgfQp9IC8vIGNsYXNz]]></data>
	</file>
	<file>
	  <filename>/lib/class.PushMessage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCmNsYXNzIFB1c2hNZXNzYWdlCnsKICAgIHByaXZhdGUgJF9kYXRhID0gWyd0aXRsZSc9Pm51bGwsICdib2R5Jz0+bnVsbCwgJ3VybCc9Pm51bGwsICdpY29uJz0+bnVsbCwgJ3RvcGljJz0+bnVsbCwgJ2ltYWdlJz0+bnVsbCwgJ3R0bCc9Pm51bGwsICdyZWRpcmVjdCc9PnRydWUgXTsKICAgIHByaXZhdGUgJF9leHRyYTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIGFycmF5ICRkYXRhID0gbnVsbCApCiAgICB7CiAgICAgICAgaWYoIGlzX2FycmF5KCRkYXRhKSAmJiBjb3VudCgkZGF0YSkgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbHVlICkgewogICAgICAgICAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgICAgICAgICAgY2FzZSAndGl0bGUnOgogICAgICAgICAgICAgICAgY2FzZSAnYm9keSc6CiAgICAgICAgICAgICAgICBjYXNlICd1cmwnOgogICAgICAgICAgICAgICAgY2FzZSAnaWNvbic6CiAgICAgICAgICAgICAgICBjYXNlICd0b3BpYyc6CiAgICAgICAgICAgICAgICBjYXNlICdpbWFnZSc6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gdHJpbSgkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ3JlZGlyZWN0JzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSBjbXNfdG9fYm9vbCgkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGEnOgogICAgICAgICAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdmFsKSAmJiBjb3VudCgkdmFsKSApICR0aGlzLT5fZXh0cmEgPSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ3R0bCc6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gbWF4KDAsKGludCkgJHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoIHN0cmluZyAka2V5ICkKICAgIHsKICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgY2FzZSAndGl0bGUnOgogICAgICAgIGNhc2UgJ2JvZHknOgogICAgICAgIGNhc2UgJ3VybCc6CiAgICAgICAgY2FzZSAnaWNvbic6CiAgICAgICAgY2FzZSAndG9waWMnOgogICAgICAgIGNhc2UgJ2ltYWdlJzoKICAgICAgICAgICAgcmV0dXJuIHRyaW0oJHRoaXMtPl9kYXRhWyRrZXldKTsKCiAgICAgICAgY2FzZSAncmVkaXJlY3QnOgogICAgICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5fZGF0YVska2V5XTsKCiAgICAgICAgY2FzZSAnZGF0YSc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2V4dHJhOwoKICAgICAgICBjYXNlICd0dGwnOgogICAgICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPl9kYXRhWyRrZXldOwogICAgICAgIH0KICAgIH0KCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19zZXQoIHN0cmluZyAka2V5LCAkdmFsdWUgKQogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgc2V0dGFibGUgbWVtYmVyIG9mICIuZ2V0X2NsYXNzKCR0aGlzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkanVzdFdpdGgoIHN0cmluZyAka2V5LCAkdmFsdWUgKSA6IFB1c2htZXNzYWdlCiAgICB7CiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICd0aXRsZSc6CiAgICAgICAgY2FzZSAnYm9keSc6CiAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICBjYXNlICdpY29uJzoKICAgICAgICBjYXNlICd0b3BpYyc6CiAgICAgICAgY2FzZSAnaW1hZ2UnOgogICAgICAgICAgICAkb2JqLT5fZGF0YVska2V5XSA9IHRyaW0oJHZhbHVlKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3JlZGlyZWN0JzoKICAgICAgICAgICAgJG9iai0+X2RhdGFbJGtleV0gPSBjbXNfdG9fYm9vbCgkdmFsdWUpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAndHRsJzoKICAgICAgICAgICAgJG9iai0+X2RhdGFbJGtleV0gPSBtYXgoMCwoaW50KSAkdmFsdWUpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYW4gYWRqdXN0YWJsZSBwcm9wZXJ0eSBvZiAiLmdldF9jbGFzcygkdGhpcykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2RhdGEoIHN0cmluZyAka2V5LCBzdHJpbmcgJHZhbCApIDogUHVzaE1lc3NhZ2UKICAgIHsKICAgICAgICAka2V5ID0gdHJpbSgka2V5KTsKICAgICAgICAkdmFsID0gdHJpbSgkdmFsKTsKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG9iai0+X2V4dHJhWyRrZXldID0gJHZhbDsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X29wdGlvbnMoKQogICAgewogICAgICAgICRvdXQgPSBbXTsKICAgICAgICAkb3V0WydiYXRjaFNpemUnXSA9IDUwMDsKICAgICAgICBpZiggJHRoaXMtPnR0bCA+IDAgKSAkb3V0WydUVEwnXSA9IChpbnQpICR0aGlzLT50dGwgKiAzNjAwOwogICAgICAgIGlmKCAkdGhpcy0+aWNvbiApICRvdXRbJ2ljb24nXSA9ICR0aGlzLT5pY29uOwogICAgICAgIGlmKCAkdGhpcy0+dG9waWMgKSAkb3V0Wyd0b3BpYyddID0gJHRoaXMtPnRvcGljOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGF5bG9hZF9hcnIoKQogICAgewogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBpZiggJHRoaXMtPnRpdGxlICkgJG91dFsndGl0bGUnXSA9IHRyaW0oc3RyaXBfdGFncygkdGhpcy0+dGl0bGUpKTsKICAgICAgICBpZiggJHRoaXMtPmJvZHkgKSAkb3V0Wydtc2cnXSA9ICR0aGlzLT5ib2R5OwogICAgICAgIGlmKCAkdGhpcy0+dXJsICkgJG91dFsndXJsJ10gPSBzdHJfcmVwbGFjZSgnYW1wOycsJycsJHRoaXMtPnVybCk7CiAgICAgICAgaWYoICR0aGlzLT5pbWFnZSApICRvdXRbJ2ltYWdlJ10gPSAkdGhpcy0+aW1hZ2U7CiAgICAgICAgJG91dFsncmVkaXJlY3QnXSA9IChib29sKSAkdGhpcy0+cmVkaXJlY3Q7CiAgICAgICAgJG91dFsnc2VuZGVyJ10gPSAnY2d3ZWJwdXNoJzsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgJiYgY291bnQoJHRoaXMtPl9leHRyYSkgKSAkb3V0WydkYXRhJ10gPSAkdGhpcy0+X2V4dHJhOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGF5bG9hZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGpzb25fZW5jb2RlKCR0aGlzLT5nZXRfcGF5bG9hZF9hcnIoKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tX25vdGlmaWNhdGlvbiggXG5vdGlmaWNhdGlvbl9tZXNzYWdlICRpbiApIDogUHVzaE1lc3NhZ2UKICAgIHsKICAgICAgICAkYXJyWyd0aXRsZSddID0gJGluLT5zdWJqZWN0OwogICAgICAgIGlmKCAhJGFyclsndGl0bGUnXSApICRhcnJbJ3RpdGxlJ10gPSBcY21zX3NpdGVwcmVmczo6Z2V0KCdzaXRlbmFtZScpOwoKICAgICAgICAkYXJyWydib2R5J10gPSAkaW4tPmJvZHk7CgogICAgICAgIGlmKCAkaW4tPmxpbmsgKSAkYXJyWyd1cmwnXSA9ICRpbi0+bGluazsKICAgICAgICBpZiggJGluLT5waWN0dXJlICkgJGFyclsnaW1hZ2UnXSA9ICRpbi0+cGljdHVyZTsKCiAgICAgICAgJG9iaiA9IG5ldyBzZWxmKCk7CiAgICAgICAgJG9iai0+X2RhdGEgPSBhcnJheV9tZXJnZSgkb2JqLT5fZGF0YSwkYXJyKTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCn0gLy8gY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/class.PushServiceWorkerAddon.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKdXNlIENHV2ViUHVzaDsKdXNlIENHU2ltcGxlUFdBXFNlcnZpY2VXb3JrZXJBZGRvbjsKCmNsYXNzIFB1c2hTZXJ2aWNlV29ya2VyQWRkb24gZXh0ZW5kcyBTZXJ2aWNlV29ya2VyQWRkb24KewogICAgcHJpdmF0ZSAkbW9kOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDR1dlYlB1c2ggJG1vZCkKICAgIHsKICAgICAgICAkdGhpcy0+bW9kID0gJG1vZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGlicmFyeUZpbGVzKCkgOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICR0aGlzLT5tb2QtPkdldE1vZHVsZVBhdGgoKS4nL2pzL3NoYTEubWluLmpzJywKICAgICAgICAgICAgJHRoaXMtPm1vZC0+R2V0TW9kdWxlUGF0aCgpLicvanMvY2dXZWJQdXNoLmpzJwogICAgICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2RpZmllZERhdGUoKSA6IGludAogICAgewogICAgICAgICRmaWxlcyA9IG51bGw7CiAgICAgICAgJG10aW1lID0gMDsKICAgICAgICAkZmlsZXNbXSA9ICR0aGlzLT5tb2QtPkdldE1vZHVsZVBhdGgoKS4nL2pzL2Nnd2VicHVzaC5qcyc7CiAgICAgICAgJGZpbGVzW10gPSAkdGhpcy0+bW9kLT5maW5kX21vZHVsZV9maWxlKCd0ZW1wbGF0ZXMvc2VydmljZVdvcmtlci50cGwnKTsKICAgICAgICBmb3JlYWNoKCAkZmlsZXMgYXMgJGZpbGUgKSB7CiAgICAgICAgICAgIGlmKCBpc19maWxlKCRmaWxlKSApICRtdGltZSA9IG1heCgkbXRpbWUsZmlsZW10aW1lKCRmaWxlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbXRpbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZpY2VXb3JrZXJDb2RlKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gdXRpbHM6OmdldF9zZXJ2aWNld29ya2VyX2NvZGUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhcnR1cENvZGUoKSA6IHN0cmluZwogICAgewogICAgICAgICRyZXR1cm5pZCA9IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRDb250ZW50KCk7CiAgICAgICAgcmV0dXJuIHV0aWxzOjpnZXRfaGVhZF9qYXZhc2NyaXB0KCRyZXR1cm5pZCk7CiAgICB9Cn0gLy8gY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/class.Subscription.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCmNsYXNzIFN1YnNjcmlwdGlvbgp7CiAgICBwcml2YXRlICRfZGF0YSA9IFsnaWQnPT5udWxsLCAnc3Vic2NyaXB0aW9uJz0+bnVsbCwgJ2ZldV91aWQnPT5udWxsLCAnYWRtaW5fdWlkJz0+bnVsbCBdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCggJGtleSApCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2lkJzoKICAgICAgICBjYXNlICdzdWJzY3JpcHRpb24nOgogICAgICAgIGNhc2UgJ2ZldV91aWQnOgogICAgICAgIGNhc2UgJ2FkbWluX3VpZCc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoICRrZXksICR2YWwgKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdzdWJzY3JpcHRpb24nOgogICAgICAgICAgICBpZiggIWlzX29iamVjdCggJHZhbCApIHx8ICFpc3NldCgkdmFsLT5lbmRwb2ludCkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIHN1YnNjcmlwdGlvbiBkYXRhIHNwZWNpZmllZCBmb3IgYSBzdWJzY3JpcHRpb24gb2JqZWN0Jyk7CiAgICAgICAgICAgIGlmKCAhJHRoaXMtPl9kYXRhWyRrZXldICkgewogICAgICAgICAgICAgICAgJHNpZyA9IG1kNSgkdmFsLT5lbmRwb2ludCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJ2lkJ10gPSAkc2lnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmZXVfdWlkJzoKICAgICAgICBjYXNlICdhZG1pbl91aWQnOgogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAoaW50KSAkdmFsOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBzZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.SubscriptionStorage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCmNsYXNzIFN1YnNjcmlwdGlvblN0b3JhZ2UKewogICAgcHJpdmF0ZSAkX2RiOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcQ01TTVNcRGF0YWJhc2VcQ29ubmVjdGlvbiAkZGIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kYiA9ICRkYjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSggU3Vic2NyaXB0aW9uICRvYmogKQogICAgewogICAgICAgIC8vIHJldHVybiB2b2lkLgogICAgICAgIC8vIGlmIHRoZSBpZCBleGlzdHMsIHVwZGF0ZSBpdC4KICAgICAgICAkc3FsID0gJ1NFTEVDVCBpZCBGUk9NICcuc2VsZjo6dGFibGVfbmFtZSgpLicgV0hFUkUgaWQgPSA/JzsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0T25lKCAkc3FsLCBbICRvYmotPmlkIF0gKTsKICAgICAgICBpZiggJHRtcCApIHsKICAgICAgICAgICAgJHNxbCA9ICdVUERBVEUgJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBTRVQgZmV1X3VpZCA9ID8sIGFkbWluX3VpZCA9ID8gV0hFUkUgc3Vic2NyaXB0aW9uID0gPyc7CiAgICAgICAgICAgICR0aGlzLT5fZGItPkV4ZWN1dGUoICRzcWwsIFsgJG9iai0+ZmV1X3VpZCwgJG9iai0+YWRtaW5fdWlkLCBzZXJpYWxpemUoJG9iai0+c3Vic2NyaXB0aW9uKSBdICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc3FsID0gJ0lOU0VSdCBJTlRPICcuc2VsZjo6dGFibGVfbmFtZSgpLicgKGlkLHN1YnNjcmlwdGlvbixmZXVfdWlkLGFkbWluX3VpZCkgVkFMVUVTICg/LD8sPyw/KSc7CiAgICAgICAgICAgICR0aGlzLT5fZGItPkV4ZWN1dGUoICRzcWwsIFsgJG9iai0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKCRvYmotPnN1YnNjcmlwdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iai0+ZmV1X3VpZCwgJG9iai0+YWRtaW5fdWlkIF0gKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSggJGlkICkKICAgIHsKICAgICAgICAvLyByZXR1cm4gdm9pZAogICAgICAgICRzcWwgPSAnREVMRVRFIEZST00gJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBpZCA9ID8nOwogICAgICAgICR0aGlzLT5fZGItPkV4ZWN1dGUoICRzcWwsIFsgJGlkIF0gKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZF9ieV9mZXVfbGlzdCggYXJyYXkgJGZldV91aWRfbGlzdCApCiAgICB7CiAgICAgICAgYXJyYXlfd2FsayggJGZldV91aWRfbGlzdCwgZnVuY3Rpb24oICRpdGVtICl7CiAgICAgICAgICAgICAgICBpZiggIWlzX2ludCgkaXRlbSkgfHwgJGl0ZW0gPCAxICkgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdWlkIGxpc3QgcGFzc2VkIHRvICIuX19NRVRIT0RfXyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICRmZXVfdWlkX2xpc3QgPSBhcnJheV91bmlxdWUoJGZldV91aWRfbGlzdCk7CiAgICAgICAgaWYoICFjb3VudCgkZmV1X3VpZF9saXN0KSApIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHVpZCBsaXN0IHBhc3NlZCB0byAiLl9fTUVUSE9EX18pOwoKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBmZXVfdWlkIElOICgnLmltcGxvZGUoJywnLCRmZXVfdWlkX2xpc3QpLicpJzsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoICRzcWwgKTsKICAgICAgICBpZiggISR0bXAgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgU3Vic2NyaXB0aW9uOwogICAgICAgICAgICAkb2JqLT5zdWJzY3JpcHRpb24gPSB1bnNlcmlhbGl6ZSggJHJvd1snc3Vic2NyaXB0aW9uJ10gKTsKICAgICAgICAgICAgJG9iai0+ZmV1X3VpZCA9IChpbnQpICRyb3dbJ2ZldV91aWQnXTsKICAgICAgICAgICAgJG9iai0+YWRtaW5fdWlkID0gKGludCkgJHJvd1snYWRtaW5fdWlkJ107CiAgICAgICAgICAgICRvdXRbXSA9ICRvYmo7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkX2Zvcl91c2VyKCAkZmV1X3VpZCApCiAgICB7CiAgICAgICAgLy8gcmV0dXJucyBhbiBhcnJheSBvZiBzdWJzY3JpcHRpb24gb2JqZWN0cwogICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnLnNlbGY6OnRhYmxlX25hbWUoKS4nIFdIRVJFIGZldV91aWQgPSA/JzsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoICRzcWwsIFsgKGludCkgJGZldV91aWQgXSApOwogICAgICAgIGlmKCAhJHRtcCApIHJldHVybjsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICR0bXAgYXMgJHJvdyApIHsKICAgICAgICAgICAgJG9iaiA9IG5ldyBTdWJzY3JpcHRpb247CiAgICAgICAgICAgICRvYmotPnN1YnNjcmlwdGlvbiA9IHVuc2VyaWFsaXplKCAkcm93WydzdWJzY3JpcHRpb24nXSApOwogICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gKGludCkgJHJvd1snZmV1X3VpZCddOwogICAgICAgICAgICAkb2JqLT5hZG1pbl91aWQgPSAoaW50KSAkcm93WydhZG1pbl91aWQnXTsKICAgICAgICAgICAgJG91dFtdID0gJG9iajsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRfZm9yX2FkbWluX3VzZXIoICRhZG1pbl91aWQgKQogICAgewogICAgICAgIC8vIHJldHVybnMgYW4gYXJyYXkgb2Ygc3Vic2NyaXB0aW9uIG9iamVjdHMKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBhZG1pbl91aWQgPSA/JzsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoICRzcWwsIFsgKGludCkgJGZldV91aWQgXSApOwogICAgICAgIGlmKCAhJHRtcCApIHJldHVybjsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICR0bXAgYXMgJHJvdyApIHsKICAgICAgICAgICAgJG9iaiA9IG5ldyBTdWJzY3JpcHRpb247CiAgICAgICAgICAgICRvYmotPnN1YnNjcmlwdGlvbiA9IHVuc2VyaWFsaXplKCAkcm93WydzdWJzY3JpcHRpb24nXSApOwogICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gKGludCkgJHJvd1snZmV1X3VpZCddOwogICAgICAgICAgICAkb2JqLT5hZG1pbl91aWQgPSAoaW50KSAkcm93WydhZG1pbl91aWQnXTsKICAgICAgICAgICAgJG91dFtdID0gJG9iajsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRfZm9yX2FkbWluKCkKICAgIHsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBhZG1pbl91aWQgPiAwJzsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoICRzcWwgKTsKICAgICAgICBpZiggISR0bXAgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgU3Vic2NyaXB0aW9uOwogICAgICAgICAgICAkb2JqLT5zdWJzY3JpcHRpb24gPSB1bnNlcmlhbGl6ZSggJHJvd1snc3Vic2NyaXB0aW9uJ10gKTsKICAgICAgICAgICAgJG9iai0+ZmV1X3VpZCA9IChpbnQpICRyb3dbJ2ZldV91aWQnXTsKICAgICAgICAgICAgJG9iai0+YWRtaW5fdWlkID0gKGludCkgJHJvd1snYWRtaW5fdWlkJ107CiAgICAgICAgICAgICRvdXRbXSA9ICRvYmo7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkX2Zvcl9mcm9udGVuZCgpCiAgICB7CiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuc2VsZjo6dGFibGVfbmFtZSgpLicgV0hFUkUgZmV1X3VpZCA+IDAnOwogICAgICAgICR0bXAgPSAkdGhpcy0+X2RiLT5HZXRBcnJheSggJHNxbCApOwogICAgICAgIGlmKCAhJHRtcCApIHJldHVybjsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICR0bXAgYXMgJHJvdyApIHsKICAgICAgICAgICAgJG9iaiA9IG5ldyBTdWJzY3JpcHRpb247CiAgICAgICAgICAgICRvYmotPnN1YnNjcmlwdGlvbiA9IHVuc2VyaWFsaXplKCAkcm93WydzdWJzY3JpcHRpb24nXSApOwogICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gKGludCkgJHJvd1snZmV1X3VpZCddOwogICAgICAgICAgICAkb2JqLT5hZG1pbl91aWQgPSAoaW50KSAkcm93WydhZG1pbl91aWQnXTsKICAgICAgICAgICAgJG91dFtdID0gJG9iajsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRfZm9yX2dyb3VwKCAkZmV1X2dpZCApCiAgICB7CiAgICAgICAgLy8gcmV0dXJucyBhbiBhcnJheSBvZiBzdWJzY3JpcHRpb24gb2JqZWN0cwogICAgICAgICRmZXUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9GUk9OVEVORFVTRVJTKTsKICAgICAgICBpZiggISRmZXUgKSByZXR1cm47CgogICAgICAgICRxdWVyeSA9IG5ldyBcZmV1X3VzZXJfcXVlcnk7CiAgICAgICAgJHF1ZXJ5LT5hZGRfYW5kX29wdCggXGZldV91c2VyX3F1ZXJ5X29wdDo6TUFUQ0hfR1JPVVBJRCwgJGZldV9naWQgKTsKICAgICAgICAkcXVlcnktPmFkZF9hbmRfb3B0KCBcZmV1X3VzZXJfcXVlcnlfb3B0OjpNQVRDSF9OT1RFWFBJUkVEICk7CiAgICAgICAgJHF1ZXJ5LT5hZGRfYW5kX29wdCggXGZldV91c2VyX3F1ZXJ5X29wdDo6TUFUQ0hfTk9URElTQUJMRUQgKTsKICAgICAgICAkcnMgPSAkcXVlcnktPmV4ZWN1dGUoKTsKICAgICAgICAkdG1wID0gbnVsbDsKICAgICAgICB3aGlsZSggISRycy0+RU9GKCkgKSB7CiAgICAgICAgICAgICRyb3cgPSAkcnMtPmZpZWxkczsKICAgICAgICAgICAgJHRtcFtdID0gKGludCkgJHJvd1snaWQnXTsKICAgICAgICAgICAgJHJzLT5Nb3ZlTmV4dCgpOwogICAgICAgIH0KICAgICAgICB1bnNldCggJHF1ZXJ5LCAkcnMsICRmZXUgKTsKCiAgICAgICAgJHNxbCA9ICdTRUxFQ1QgKiBGUk9NICcuc2VsZjo6dGFibGVfbmFtZSgpLicgV0hFUkUgZmV1X3VpZCBJTiAoJy5pbXBsb2RlKCcsJywkdG1wKS4nKSc7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5fZGItPkdldEFycmF5KCAkc3FsICk7CiAgICAgICAgaWYoICEkdG1wICkgcmV0dXJuOwoKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkcm93ICkgewogICAgICAgICAgICAkb2JqID0gbmV3IFN1YnNjcmlwdGlvbjsKICAgICAgICAgICAgJG9iai0+c3Vic2NyaXB0aW9uID0gdW5zZXJpYWxpemUoICRyb3dbJ3N1YnNjcmlwdGlvbiddICk7CiAgICAgICAgICAgICRvYmotPmZldV91aWQgPSAoaW50KSAkcm93WydmZXVfdWlkJ107CiAgICAgICAgICAgICRvYmotPmFkbWluX3VpZCA9IChpbnQpICRyb3dbJ2FkbWluX3VpZCddOwogICAgICAgICAgICAkb3V0W10gPSAkb2JqOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZF9mb3JfYWRtaW5fZ3JvdXAoICRhZG1pbl9naWQgKQogICAgewogICAgICAgICR1c2Vyb3BzID0gXFVzZXJPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkdXNlcnMgPSAkdXNlcm9wcy0+TG9hZFVzZXJzSW5Hcm91cCggJGFkbWluX2dpZCApOwogICAgICAgIGlmKCAhY291bnQoICR1c2VycyApICkgcmV0dXJuOwoKICAgICAgICAkdWlkX2xpc3QgPSBudWxsOwogICAgICAgIGZvcmVhY2goICR1c2VycyBhcyAkdXNlciApIHsKICAgICAgICAgICAgJHVpZF9saXN0W10gPSAoaW50KSAkdXNlci0+aWQ7CiAgICAgICAgfQoKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJy5zZWxmOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBhZG1pbl91aWQgSU4gKCcuaW1wbG9kZSgnLCcsJHVpZF9saXN0KS4nKSc7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5fZGItPkdldEFycmF5KCAkc3FsICk7CiAgICAgICAgaWYoICEkdG1wICkgcmV0dXJuOwoKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkcm93ICkgewogICAgICAgICAgICAkb2JqID0gbmV3IFN1YnNjcmlwdGlvbjsKICAgICAgICAgICAgJG9iai0+c3Vic2NyaXB0aW9uID0gdW5zZXJpYWxpemUoICRyb3dbJ3N1YnNjcmlwdGlvbiddICk7CiAgICAgICAgICAgICRvYmotPmZldV91aWQgPSAoaW50KSAkcm93WydmZXVfdWlkJ107CiAgICAgICAgICAgICRvYmotPmFkbWluX3VpZCA9IChpbnQpICRyb3dbJ2FkbWluX3VpZCddOwogICAgICAgICAgICAkb3V0W10gPSAkb2JqOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZF9hbGwoKQogICAgewogICAgICAgICRzcWwgPSAnU0VMRUNUICogRlJPTSAnLnNlbGY6OnRhYmxlX25hbWUoKTsKICAgICAgICAkdG1wID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoICRzcWwgKTsKICAgICAgICBpZiggISR0bXAgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgU3Vic2NyaXB0aW9uOwogICAgICAgICAgICAkb2JqLT5zdWJzY3JpcHRpb24gPSB1bnNlcmlhbGl6ZSggJHJvd1snc3Vic2NyaXB0aW9uJ10gKTsKICAgICAgICAgICAgJG9iai0+ZmV1X3VpZCA9IChpbnQpICRyb3dbJ2ZldV91aWQnXTsKICAgICAgICAgICAgJG9iai0+YWRtaW5fdWlkID0gKGludCkgJHJvd1snYWRtaW5fdWlkJ107CiAgICAgICAgICAgICRvdXRbXSA9ICRvYmo7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGFibGVfbmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIENNU19EQl9QUkVGSVguJ21vZF9jZ3dlYnB1c2gnOwogICAgfQp9IC8vIGNsYXNz]]></data>
	</file>
	<file>
	  <filename>/lib/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCmZpbmFsIGNsYXNzIHV0aWxzCnsKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3B1YmxpY192YXBpZF9rZXkoKQogICAgewogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9DR1dFQlBVU0gpOwogICAgICAgICRvdXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd2YXBpZF9wdWJsaWMnKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9wcml2YXRlX3ZhcGlkX2tleSgpCiAgICB7CiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX0NHV0VCUFVTSCk7CiAgICAgICAgcmV0dXJuICRtb2QtPkdldFByZWZlcmVuY2UoJ3ZhcGlkX3ByaXZhdGUnKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhdmVLZXlzKCkKICAgIHsKICAgICAgICAkYSA9IHNlbGY6OmdldF9wdWJsaWNfdmFwaWRfa2V5KCk7CiAgICAgICAgJGIgPSBzZWxmOjpnZXRfcHJpdmF0ZV92YXBpZF9rZXkoKTsKICAgICAgICByZXR1cm4gKCRhICYmICRiKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEF1dGgoKQogICAgewogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJHN1YmplY3QgPSAkY29uZmlnWydyb290X3VybCddOwogICAgICAgICRvdXQgPSBbICdWQVBJRCcgPT4gWwogICAgICAgICAgICAgICAgJ3N1YmplY3QnID0+ICRzdWJqZWN0LAogICAgICAgICAgICAgICAgJ3B1YmxpY0tleScgPT4gc2VsZjo6Z2V0X3B1YmxpY192YXBpZF9rZXkoKSwKICAgICAgICAgICAgICAgICdwcml2YXRlS2V5JyA9PiBzZWxmOjpnZXRfcHJpdmF0ZV92YXBpZF9rZXkoKSwKICAgICAgICAgICAgICAgIF0gXTsKICAgICAgICAvL2lmKCAhJG91dFsnVkFQSUQnXVsnc3ViamVjdCddICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ291bGQgbm90IGRldGVybWluZSBhdXRoIHN1YmplY3QuJyk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfc2VydmljZXdvcmtlcl9jb2RlKCkKICAgIHsKICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ0dXZWJQdXNoJyk7IC8vIGRvIG5vdCB1c2UgZGVmaW5lIGhlcmUuCiAgICAgICAgJHRwbCA9ICRtb2QtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdzZXJ2aWNlV29ya2VyLnRwbCcpOwoKICAgICAgICAkdGl0bGUgPSB0cmltKCRtb2QtPkdldFByZWZlcmVuY2UoJ3RpdGxlJykpOwogICAgICAgIGlmKCAhJHRpdGxlICkgJHRpdGxlID0gdHJpbShcY21zX3NpdGVwcmVmczo6Z2V0KCdzaXRlbmFtZScsJ0NNU01TIFNpdGUnKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdtc2dfdGl0bGUnLCR0aXRsZSk7CgogICAgICAgICRpY29uID0gdHJpbSgkbW9kLT5HZXRQcmVmZXJlbmNlKCdpY29uJykpOwogICAgICAgIGlmKCAkaWNvbiApIHsKICAgICAgICAgICAgJGljb24gPSAidXBsb2Fkcy8kaWNvbiI7CiAgICAgICAgfQogICAgICAgICR0cGwtPmFzc2lnbignaWNvbicsJGljb24pOwoKICAgICAgICAkdHh0ID0gJHRwbC0+ZmV0Y2goKTsKICAgICAgICByZXR1cm4gJHR4dDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9zYWx0KCkKICAgIHsKICAgICAgICByZXR1cm4gc2hhMShfX0ZJTEVfXy5cY2dlX3V0aWxzOjpnZXRfcmVhbF9pcCgpLiRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfaGVhZF9qYXZhc2NyaXB0KCAkcmV0dXJuaWQgKQogICAgewogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9DR1dFQlBVU0gpOwogICAgICAgIGlmKCAhJG1vZCApIHJldHVybjsKICAgICAgICAkdHBsID0gJG1vZC0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2pzLnRwbCcpOwogICAgICAgICR0cGwtPmFzc2lnbignaGFzaCcsc2VsZjo6Z2V0X3NhbHQoKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdwdWJsaWNfa2V5Jywgc2VsZjo6Z2V0X3B1YmxpY192YXBpZF9rZXkoKSApOwogICAgICAgICR0cGwtPmFzc2lnbignbW9kdWxlX3VybF9wYXRoJywkbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCkpOwogICAgICAgICR1cmwgPSAkbW9kLT5jcmVhdGVfdXJsKCAnY250bnQwMScsICdhamF4X3N1YnNjcmliZScsICRyZXR1cm5pZCApOwogICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywkdXJsKS4nJnNob3d0ZW1wbGF0ZT1mYWxzZSc7CiAgICAgICAgJHRwbC0+YXNzaWduKCdhamF4X3VybCcsJHVybCk7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.WebPushCommand.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKCiRkaXIgPSBkaXJuYW1lKF9fRElSX18pOwpyZXF1aXJlX29uY2UoICIkZGlyL3ZlbmRvci9hdXRvbG9hZC5waHAiICk7CnVzZSBcQ01TTVNcQ0xJXEFwcDsKdXNlIFxDTVNNU1xDTElcR2V0T3B0RXh0XENvbW1hbmQ7CnVzZSBcQ01TTVNcQ0xJXEdldE9wdEV4dFxPcHRpb247CnVzZSBcQ01TTVNcQ0xJXEdldE9wdEV4dFxHZXRPcHQ7CnVzZSBcR2V0T3B0XE9wZXJhbmQ7CnVzZSBNaW5pc2hsaW5rXFdlYlB1c2hcV2ViUHVzaDsKCmNsYXNzIFdlYlB1c2hDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CiAgICBwcml2YXRlICRzdG9yYWdlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggQXBwICRhcHAsIFN1YnNjcmlwdGlvblN0b3JhZ2UgJHN0b3JhZ2UgKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoICRhcHAsICd3ZWJwdXNoLWZldS1ncm91cCcgKTsKICAgICAgICAkdGhpcy0+c2V0RGVzY3JpcHRpb24oJ1NlbmQgYSBtZXNzYWdlIHZpYSB3ZWJwdXNoJyk7CiAgICAgICAgJHRoaXMtPmFkZE9wdGlvbiggT3B0aW9uOjpDcmVhdGUobnVsbCwndHRsJywgR2V0T3B0OjpSRVFVSVJFRF9BUkdVTUVOVCApLT5zZXREZXNjcmlwdGlvbignU2V0IHRpbWUtdG8tbGl2ZSBpbiBob3VycycpICk7CiAgICAgICAgJHRoaXMtPmFkZE9wdGlvbiggT3B0aW9uOjpDcmVhdGUobnVsbCwndG9waWMnLCBHZXRPcHQ6OlJFUVVJUkVEX0FSR1VNRU5UICktPnNldERlc2NyaXB0aW9uKCdTZXQgdG9waWMnKSApOwogICAgICAgICR0aGlzLT5hZGRPcHRpb24oIE9wdGlvbjo6Q3JlYXRlKG51bGwsJ3VybCcsIEdldE9wdDo6UkVRVUlSRURfQVJHVU1FTlQgKS0+c2V0RGVzY3JpcHRpb24oJ1VSTCB0byBuYXZpZ2F0ZSB0byB3aGVuIG5vdGlmaWNhdGlvbiBpcyBjbGlja2VkJykgKTsKICAgICAgICAkdGhpcy0+YWRkT3BlcmFuZCggbmV3IE9wZXJhbmQoICdmZXVncm91cCcsIE9wZXJhbmQ6OlJFUVVJUkVEICkgKTsKICAgICAgICAkdGhpcy0+YWRkT3BlcmFuZCggbmV3IE9wZXJhbmQoICdtZXNzYWdlJywgT3BlcmFuZDo6UkVRVUlSRUQgKSApOwoKICAgICAgICAkdGhpcy0+c3RvcmFnZSA9ICRzdG9yYWdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGUoKQogICAgewogICAgICAgICRmZXVncm91cCA9ICR0aGlzLT5nZXRPcGVyYW5kKCAnZmV1Z3JvdXAnICktPnZhbHVlKCk7CiAgICAgICAgJG1lc3NhZ2UgPSAkdGhpcy0+Z2V0T3BlcmFuZCggJ21lc3NhZ2UnICktPnZhbHVlKCk7CgogICAgICAgICRmZXUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgICAgaWYoICEkZmV1ICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGlzIGNvbW1hbmQgY2Fubm90IGJlIGV4ZWN1dGVkIGJlY2F1c2UgdGhlIEZFVSBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZScpOwogICAgICAgICRmZXVfZ2lkID0gJGZldS0+R2V0R3JvdXBJZCggJGZldWdyb3VwICk7CiAgICAgICAgaWYoICRmZXVfZ2lkIDwgMSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiR3JvdXAgJGZldWdyb3VwIG5vdCBmb3VuZCIpOwogICAgICAgICRsaXN0ID0gJHRoaXMtPnN0b3JhZ2UtPmxvYWRfZm9yX2dyb3VwKCAkZmV1X2dpZCApOwogICAgICAgIGlmKCAhJGxpc3QgKSByZXR1cm47CgogICAgICAgICRtc2cgPSBuZXcgUHVzaE1lc3NhZ2UoIFsgJ2JvZHknPT4kbWVzc2FnZSBdICk7CiAgICAgICAgJHVybCA9ICR0aGlzLT5nZXRPcHRpb24oJ3VybCcpLT52YWx1ZSgpOwogICAgICAgIGlmKCAkdXJsICkgJG1zZyA9ICRtc2ctPmFkanVzdFdpdGgoICd1cmwnLCAkdXJsICk7CiAgICAgICAgaWYoICgkdG9waWMgPSAkdGhpcy0+Z2V0T3B0aW9uKCd0b3BpYycpLT52YWx1ZSgpKSApIHsKICAgICAgICAgICAgJHRvcGljID0gdHJpbSgkdG9waWMpOwogICAgICAgICAgICAkbXNnID0gJG1zZy0+YWRqdXN0V2l0aCggJ3RvcGljJywgJHRvcGljICk7CiAgICAgICAgfQoKICAgICAgICAkZGlzcGF0Y2hlciA9IG5ldyBXZWJQdXNoRGlzcGF0Y2hlciggJGxpc3QsICRtc2cgKTsKICAgICAgICAkZGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3Mu]]></data>
	</file>
	<file>
	  <filename>/lib/class.WebPushDispatcher.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENHV2ViUHVzaDsKdXNlIFxDR1dlYlB1c2hcdXRpbHM7CnVzZSBDR1dlYlB1c2hcU3Vic2NyaXB0aW9uIGFzIE15U3Vic2NyaXB0aW9uOwp1c2UgTWluaXNobGlua1xXZWJQdXNoXFdlYlB1c2g7CnVzZSBNaW5pc2hsaW5rXFdlYlB1c2hcU3Vic2NyaXB0aW9uOzsKCiRkaXIgPSBkaXJuYW1lKF9fRElSX18pOwpyZXF1aXJlX29uY2UoICIkZGlyL3ZlbmRvci9hdXRvbG9hZC5waHAiICk7CgoKY2xhc3MgV2ViUHVzaERpc3BhdGNoZXIKewogICAgcHJpdmF0ZSAkX2xpc3Q7CiAgICBwcml2YXRlICRfbXNnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggYXJyYXkgJGxpc3QsIFB1c2hNZXNzYWdlICRtc2cgKQogICAgewogICAgICAgIGlmKCAhY291bnQoJGxpc3QpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignSW52YWxpZCBhcnJheSBwYXNzZWQgdG8gJy5fX01FVEhPRF9fKTsKICAgICAgICBpZiggIWlzc2V0KCRsaXN0WzBdKSB8fCAhICRsaXN0WzBdIGluc3RhbmNlb2YgTXlTdWJzY3JpcHRpb24gKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGFycmF5IHBhc3NlZCB0byAnLl9fTUVUSE9EX18pOwogICAgICAgICR0aGlzLT5fbGlzdCA9ICRsaXN0OwogICAgICAgICR0aGlzLT5fbXNnID0gJG1zZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGF0Y2goKQogICAgewogICAgICAgICRvcHRpb25zID0gJHRoaXMtPl9tc2ctPmdldF9vcHRpb25zKCk7CiAgICAgICAgJG91dCA9ICR0aGlzLT5fbXNnLT5nZXRfcGF5bG9hZCgpOwogICAgICAgICRhdXRoID0gdXRpbHM6OmdldEF1dGgoKTsKICAgICAgICAkb3B0aW9ucyA9IGFycmF5X21lcmdlKCBbJ1RUTCc9PjMwMF0sICRvcHRpb25zKTsKICAgICAgICAkd2ViUHVzaCA9IG5ldyBXZWJQdXNoKCAkYXV0aCwgJG9wdGlvbnMgKTsKICAgICAgICAkbl9zZW50ID0gMDsKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2xpc3QgYXMgJG9iaiApIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRkYXRhID0gJG9iai0+c3Vic2NyaXB0aW9uOwogICAgICAgICAgICAgICAgaWYoICEkZGF0YSApIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICRzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCAkZGF0YS0+ZW5kcG9pbnQsICRkYXRhLT5rZXksICRkYXRhLT50b2tlbiApOwogICAgICAgICAgICAgICAgJHdlYlB1c2gtPnNlbmROb3RpZmljYXRpb24oICRzdWJzY3JpcHRpb24sICRvdXQpOwogICAgICAgICAgICAgICAgJG5fc2VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgICAgICAgICAgYXVkaXQoJycsJ0NHV2ViUHVzaCcsJ1Byb2JsZW0gc2VuZGluZyBwdXNoIG5vdGlmaWNhdGlvbiB0byAnLiRyb3dbJ3VzZXJuYW1lJ10pOwogICAgICAgICAgICAgICAgXGNnZV91dGlsczo6bG9nX2V4Y2VwdGlvbiggJGUgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmVzID0gJHdlYlB1c2gtPmZsdXNoKCk7CiAgICAgICAgZm9yZWFjaCAoJHJlcyBhcyAkcmVwb3J0KSB7CiAgICAgICAgICAgICRlbmRwb2ludCA9ICRyZXBvcnQtPmdldFJlcXVlc3QoKS0+Z2V0VXJpKCktPl9fdG9TdHJpbmcoKTsKCiAgICAgICAgICAgIGlmICghJHJlcG9ydC0+aXNTdWNjZXNzKCkpIHsKICAgICAgICAgICAgICAgICRuX3NlbnQtLTsKICAgICAgICAgICAgICAgIGF1ZGl0KCcnLCdDR1dlYlB1c2gnLCJGYWlsZWQ6IHskcmVwb3J0LT5nZXRSZWFzb24oKX0iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5fc2VudDsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFmdW5jdGlvbl9leGlzdHMoJ2dtcF9hYnMnKSApIHJldHVybiAnR01QIEFkZG9ucyBhcmUgbm90IGVuYWJsZWQgb24gdGhpcyBzZXJ2ZXInOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbiggQ0dXZWJQdXNoOjpTRU5EX1BFUk0sIENHV2ViUHVzaDo6U0VORF9QRVJNICk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCBDR1dlYlB1c2g6OlVTRV9QRVJNLCBDR1dlYlB1c2g6OlVTRV9QRVJNICk7CgokZGIgPSAkdGhpcy0+R2V0RGIoKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwokZmxkcyA9ICIKICAgIGlkIEMoMjU1KSBLRVkgTk9UTlVMTCwKICAgIHN1YnNjcmlwdGlvbiBYIE5PVE5VTEwsCiAgICBmZXVfdWlkIEksCiAgICBhZG1pbl91aWQgSSc7CiI7CiR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9SW5ub0RCJyk7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChcQ0dXZWJQdXNoXFN1YnNjcmlwdGlvblN0b3JhZ2U6OnRhYmxlX25hbWUoKSwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCnJlcXVpcmVfb25jZSggJ3ZlbmRvci9hdXRvbG9hZC5waHAnICk7CiRrZXlzID0gXE1pbmlzaGxpbmtcV2ViUHVzaFxWQVBJRDo6Y3JlYXRlVmFwaWRLZXlzKCkgOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndmFwaWRfcHVibGljJywgJGtleXNbJ3B1YmxpY0tleSddICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd2YXBpZF9wcml2YXRlJywgJGtleXNbJ3ByaXZhdGVLZXknXSApOwokdGhpcy0+UmVkaXJlY3RUb1RhYigpOwo=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oIENHV2ViUHVzaDo6U0VORF9QRVJNICk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCBDR1dlYlB1c2g6OlVTRV9QRVJNICk7CgokZGIgPSBcY2dlX3V0aWxzOjpnZXRfZGIoKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoXENHV2ViUHVzaFxTdWJzY3JpcHRpb25TdG9yYWdlOjp0YWJsZV9uYW1lKCkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSxGQUxTRSk7Cgokb3V0ZmlsZSA9IENNU19ST09UX1BBVEguJy9jZ19wdXNoU2VydmljZVdvcmtlci5qcyc7CmlmKCBpc19maWxlKCAkb3V0ZmlsZSApICYmIGlzX3dyaXRhYmxlKCAkb3V0ZmlsZSApICkgdW5saW5rKCAkb3V0ZmlsZSApOw==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKaWYoIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwnMS4xJykgPCAwICkgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAkZmxkcyA9ICIKICAgICAgICBpZCBDKDI1NSkgS0VZIE5PVE5VTEwsCiAgICAgICAgc3Vic2NyaXB0aW9uIFggTk9UTlVMTCwKICAgICAgICBmZXVfdWlkIEknOwogICAgIjsgLy8gaWNvbiBpcyBubyBsb25nZXIgdXNlZC4KICAgICR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9SW5ub0RCJyk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoXENHV2ViUHVzaFxTdWJzY3JpcHRpb25TdG9yYWdlOjp0YWJsZV9uYW1lKCksICRmbGRzLCAkdGFib3B0YXJyYXkpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKICAgICRmZXUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggJGZldSApIHsKICAgICAgICAkcXVlcnkgPSBuZXcgXGZldV91c2VyX3F1ZXJ5OwogICAgICAgICRxdWVyeS0+YWRkX2FuZF9vcHQoIFxmZXVfdXNlcl9xdWVyeV9vcHQ6Ok1BVENIX05PVEVYUElSRUQgKTsKICAgICAgICAkcXVlcnktPmFkZF9hbmRfb3B0KCBcZmV1X3VzZXJfcXVlcnlfb3B0OjpNQVRDSF9OT1RESVNBQkxFRCApOwogICAgICAgICRxdWVyeS0+YWRkX2FuZF9vcHQoIFxmZXVfdXNlcl9xdWVyeV9vcHQ6Ok1BVENIX1BST1BFUlRZLCAnX19jZ3B1c2h0ZXN0X18nICk7CiAgICAgICAgJHJzID0gJHF1ZXJ5LT5leGVjdXRlKCk7CiAgICAgICAgd2hpbGUoICEkcnMtPkVPRigpICkgewogICAgICAgICAgICAkcm93ID0gJHJzLT5maWVsZHM7CiAgICAgICAgICAgICR1aWQgPSAkcm93WydpZCddOwogICAgICAgICAgICAkZGF0YSA9ICRmZXUtPkdldFVzZXJQcm9wZXJ0eUZ1bGwoICdfX2NncHVzaHRlc3RfXycsICR1aWQgKTsKICAgICAgICAgICAgaWYoICEkZGF0YSApIGNvbnRpbnVlOwogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCAkZGF0YSApOwogICAgICAgICAgICBmb3JlYWNoKCAkZGF0YSBhcyAkc3Vic2NyICkgewogICAgICAgICAgICAgICAgaWYoICEkc3Vic2NyICkgY29udGludWU7CgogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBcQ0dXZWJQdXNoXFN1YnNjcmlwdGlvbjsKICAgICAgICAgICAgICAgICRvYmotPnN1YnNjcmlwdGlvbiA9ICRzdWJzY3I7CiAgICAgICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gJHVpZDsKICAgICAgICAgICAgICAgICR0aGlzLT5zdG9yYWdlLT5zYXZlKCAkb2JqICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJzLT5Nb3ZlTmV4dCgpOwogICAgICAgIH0KCiAgICAgICAgJGZldS0+RGVsZXRlUHJvcGVydHlEZWZuKCAnX19jZ3B1c2h0ZXN0X18nICk7CiAgICB9Cn0KCmlmKCB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sJzEuMS4xJykgPCAwICkgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCiAgICAkc3FsYXJyID0gJGRpY3QtPkFkZENvbHVtblNRTCggXENHV2ViUHVzaFxTdWJzY3JpcHRpb25TdG9yYWdlOjp0YWJsZV9uYW1lKCksICdhZG1pbl91aWQgSScgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnIgKTsKCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbiggQ0dXZWJQdXNoOjpVU0VfUEVSTSwgQ0dXZWJQdXNoOjpVU0VfUEVSTSApOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJDR1dlYlB1c2giCnZlcnNpb24gPSAiMS40LjMiCmF1dGhvciA9ICJjYWxndXkxMDAwIgphdXRob3JlbWFpbCA9ICJjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIgptaW5jbXN2ZXJzaW9uID0gIjIuMi4xMCIKbGF6eWxvYWRhZG1pbiA9IDAKbGF6eWxvYWRmcm9udGVuZCA9IDAKW2RlcGVuZHNdCkNHRXh0ZW5zaW9ucyA9IDEuNjEKQ0dTaW1wbGVQV0EgPSAxLjIK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_prefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdD4KJChmdW5jdGlvbigpewogIHtpZiAkaGF2ZV9rZXlzfQogICQoZG9jdW1lbnQpLm9uKCdjbGljaycsJyNuZXdrZXlzJyxmdW5jdGlvbihldil7CiAgICAgIHJldHVybiBjb25maXJtKCd7JG1vZC0+TGFuZygnY29uZmlybV9uZXdrZXlzJyl9Jyk7CiAgfSkKICB7L2lmfQp9KQo8L3NjcmlwdD4KCntpZiAhJGhhdmVfa2V5c30KICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj57JG1vZC0+TGFuZygnd2Fybl9ub2tleXMnKX08L2Rpdj4Key9pZn0KCntmb3JtX3N0YXJ0IGFjdGlvbj1hZG1pbl9wcmVmc30KPGRpdiBjbGFzcz0iY19mdWxsIGNmIj4KICAgPGxhYmVsIGNsYXNzPSJncmlkXzIiPnskbW9kLT5MYW5nKCd0aXRsZScpfTo8L2xhYmVsPgogICA8ZGl2IGNsYXNzPSJncmlkXzkiPgogICAgIDxpbnB1dCB0eXBlPSJ0ZXhUIiBjbGFzcz0iZ3JpZF8xMiIgbmFtZT0ieyRhY3Rpb25pZH10aXRsZSIgdmFsdWU9InskdGl0bGV9Ii8+CiAgICAgPGRpdiBjbGFzcz0iZ3JpZF8xMiI+eyRtb2QtPkxhbmcoJ2luZm9fdGl0bGUnKX08L2Rpdj4KICAgPC9kaXY+CjwvZGl2Pgo8aHIvPgo8ZGl2IGNsYXNzPSJjX2Z1bGwgY2YiPgogICA8bGFiZWwgY2xhc3M9ImdyaWRfMiI+eyRtb2QtPkxhbmcoJ2ljb24nKX06PC9sYWJlbD4KICAgPGRpdiBjbGFzcz0iZ3JpZF85Ij4KICAgICB7Y21zX2ZpbGVwaWNrZXIgcHJlZml4PSRhY3Rpb25pZCBuYW1lPWljb24gdmFsdWU9JGljb24gdHlwZT0naW1hZ2UnfQogICAgIDxkaXYgY2xhc3M9ImdyaWRfMTIiPnskbW9kLT5MYW5nKCdpbmZvX2ljb24nKX08L2Rpdj4KICAgPC9kaXY+CjwvZGl2Pgo8aHIvPgo8ZGl2IGNsYXNzPSJjX2Z1bGwgY2YiPgogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJuZXdrZXlzIiBuYW1lPSJ7JGFjdGlvbmlkfW5ld2tleXMiIHZhbHVlPSJ7JG1vZC0+TGFuZygnZ2VuZXJhdGVfa2V5cycpfSIvPgo8L2Rpdj4Ke2Zvcm1fZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_push.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Zvcm1fc3RhcnQgYWN0aW9uPWFkbWluX3B1c2h9CjxkaXYgY2xhc3M9ImNfZnVsbCBjZiI+CiAgIDxsYWJlbCBjbGFzcz0iZ3JpZF8yIj4qeyRtb2QtPkxhbmcoJ2JvZHknKX06PC9sYWJlbD4KICAgPHRleHRhcmVhIGNsYXNzPSJncmlkXzkiIG5hbWU9InskYWN0aW9uaWR9Ym9keSIgbWF4bGVuZ3RoPSIxMDI0IiByb3dzPSIzIiByZXF1aXJlZD48L3RleHRhcmVhPgo8L2Rpdj4KPGRpdiBjbGFzcz0iY19mdWxsIGNmIj4KICAgPGxhYmVsIGNsYXNzPSJncmlkXzIiPnskbW9kLT5MYW5nKCd0aXRsZScpfTo8L2xhYmVsPgogICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH10aXRsZSIgdmFsdWU9IiIgY2xhc3M9ImdyaWRfOSIvPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImNfZnVsbCBjZiI+CiAgIDxsYWJlbCBjbGFzcz0iZ3JpZF8yIj57JG1vZC0+TGFuZygnc2VuZHRvJyl9OjwvbGFiZWw+CiAgIDxzZWxlY3QgY2xhc3M9ImdyaWRfOSIgbmFtZT0ieyRhY3Rpb25pZH1zZW5kdG8iPgogICAgICA8b3B0aW9uIHZhbHVlPSIiPjwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSJhZG1pbl9ncm91cCI+eyRtb2QtPkxhbmcoJ2FkbWluX2dyb3VwJyl9PC9vcHRpb24+CiAgICAgIDxvcHRpb24gdmFsdWU9ImZldV9ncm91cCI+eyRtb2QtPkxhbmcoJ2ZldV9ncm91cCcpfTwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSJhbGxfZmV1X3VzZXJzIj57JG1vZC0+TGFuZygnYWxsX2ZldV91c2VycycpfTwvb3B0aW9uPgogICAgICA8b3B0aW9uIHZhbHVlPSJhbGxfYWRtaW5fdXNlcnMiPnskbW9kLT5MYW5nKCdhbGxfYWRtaW5fdXNlcnMnKX08L29wdGlvbj4KICAgPC9zZWxlY3Q+CjwvZGl2PgoKPGRpdiBjbGFzcz0iY19mdWxsIGNmIj4KICAgPGxhYmVsIGNsYXNzPSJncmlkXzIiPnskbW9kLT5MYW5nKCdncm91cCcpfTo8L2xhYmVsPgogICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1ncm91cCIgdmFsdWU9IiIgY2xhc3M9ImdyaWRfOSIvPgo8L2Rpdj4KPGRpdiBjbGFzcz0iY19mdWxsIGNmIj4KICAgPGxhYmVsIGNsYXNzPSJncmlkXzIiPnskbW9kLT5MYW5nKCd1cmwnKX06PC9sYWJlbD4KICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dXJsIiB2YWx1ZT0iIiBjbGFzcz0iZ3JpZF85Ii8+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjX2Z1bGwgY2YiPgogICA8bGFiZWwgY2xhc3M9ImdyaWRfMiI+eyRtb2QtPkxhbmcoJ3RvcGljJyl9OjwvbGFiZWw+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRvcGljIiB2YWx1ZT0iIiBjbGFzcz0iZ3JpZF85Ii8+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjX2Z1bGwgY2YiPgogICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzZW5kJyl9Ii8+CjwvZGl2Pgp7Zm9ybV9lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/admin_use_push.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ic3Vic2NyaWJlLXpvbmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgPGEgaWQ9InN1YnNjcmliZS1idG4iPjwvYT4KPC9kaXY+Cgo8c2NyaXB0PgokKGZ1bmN0aW9uKCl7CiAgIGlmKCB0eXBlb2YgY2dXZWJQdXNoICE9ICd1bmRlZmluZWQnICkgewogICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGpxdWVyeSBwbHVnaW4uCiAgICAgICAgJCgnI3N1YnNjcmliZS1idG4nKS5jZ1dlYlB1c2goewoJICAgY2hhbmdlQnV0dG9uU3RhdGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKCSAgICAgIHN3aXRjaCggc3RhdGUgKSB7CgkgICAgICAgICAgY2FzZSAnZW5hYmxlZCc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X3Vuc3Vic2NyaWJlJyl9JyApOwoJCSAgICAgYnJlYWs7CgkJICBjYXNlICdkaXNhYmxlZCc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X3N1YnNjcmliZScpfScgKTsKCQkgICAgIGJyZWFrOwoJCSAgY2FzZSAnaW5jb21wYXRpYmxlJzoKCQkgICAgICQodGhpcykudGV4dCggJ3skbW9kLT5MYW5nKCdwcm9tcHRfaW5jb21wYXRpYmxlJyl9JyApOwoJCSAgICAgYnJlYWs7CgkJICBjYXNlICdjb21wdXRpbmcnOgoJCSAgY2FzZSAnbG9hZGluZyc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X2xvYWRpbmcnKX0nICk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICB9KTsKICAgfQp9KQo8L3NjcmlwdD4K]]></data>
	</file>
	<file>
	  <filename>/templates/js.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChmdW5jdGlvbigpewogICBpZiggdHlwZW9mIGNnV2ViUHVzaCAhPSAndW5kZWZpbmVkJyApIHsKCWNnV2ViUHVzaC5zZXRfYWpheF91cmwoICd7JGFqYXhfdXJsfScgKTsKICAgICAgICBjZ1dlYlB1c2guc2V0X3ZhcGlkX2tleSggJ3skcHVibGljX2tleX0nICk7CgljZ1dlYlB1c2guc2V0X3NhbHQoICd7JGhhc2h9JyApOwoJLy9jZ1dlYlB1c2guc3Vic2NyaWJlKCk7IC8vIHRoaXMgd2lsbCBhdXRvIHN1YnNjcmliZSB0aGUgdXNlciwgaGUgc2hvdWxkIGJlIHByb21wdGVkIGJ5IHRoZSBicm93c2VyIHRvIGFsbG93IHB1c2ggbm90aWZpY2F0aW9ucy4KICAgfQp9KQo=]]></data>
	</file>
	<file>
	  <filename>/templates/serviceWorker.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c2VsZi5hZGRFdmVudExpc3RlbmVyKCdwdXNoJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBpZiAoIShzZWxmLk5vdGlmaWNhdGlvbiAmJiBzZWxmLk5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uID09PSAnZ3JhbnRlZCcpKSB7CiAgICAgICAgY29uc29sZS5sb2coJ25vIG5vdGlmaWNhdGlvbiBhYmlsaXR5IGJ1dCByZWNlaXZlZCBhIHB1c2ggbWVzc2FnZScpCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChldmVudC5kYXRhKSB7CiAgICAgICAgbGV0IG9wdGlvbnMgPSB7fQogICAgICAgIG9wdGlvbnMudGl0bGUgPSAieyRtc2dfdGl0bGV9IgogICAgICAgIG9wdGlvbnMuaWNvbiA9ICJ7JGljb259IgogICAgICAgIG9wdGlvbnMuYm9keSA9IGV2ZW50LmRhdGEudGV4dCgpCiAgICAgICAgb3B0aW9ucy5kYXRhID0geyB1cmw6IG51bGwsIHJlZGlyZWN0OiBmYWxzZSB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gSUYgd2UgcmVjZWl2ZWQgYSBKU09OIHBheWxvYWQsIHdlIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyB3aXRoIGl0LgogICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZSggZXZlbnQuZGF0YS50ZXh0KCkgKTsKICAgICAgICAgICAgaWYoIG9iai5oYXNPd25Qcm9wZXJ0eSgnc2VuZGVyJykgJiYgb2JqLnNlbmRlciA9PSAnY2d3ZWJwdXNoJyApIHsKICAgICAgICAgICAgICAgIGlmKCBvYmoubXNnICkgb3B0aW9ucy5ib2R5ID0gb2JqLm1zZwogICAgICAgICAgICAgICAgaWYoIG9iai50aXRsZSApIG9wdGlvbnMudGl0bGUgPSBvYmoudGl0bGUKICAgICAgICAgICAgICAgIGlmKCBvYmouaWNvbiApIG9wdGlvbnMuaWNvbiA9IG9iai5pY29uCiAgICAgICAgICAgICAgICBpZiggb2JqLmltYWdlICkgb3B0aW9ucy5pbWFnZSA9IG9iai5pbWFnZQogICAgICAgICAgICAgICAgaWYoIG9iai51cmwgKSBvcHRpb25zLmRhdGEudXJsID0gb2JqLnVybAogICAgICAgICAgICAgICAgaWYoIG9iai5yZWRpcmVjdCApIG9wdGlvbnMuZGF0YS5yZWRpcmVjdCA9IG9iai5yZWRpcmVjdAogICAgICAgICAgICAgICAgaWYoIG9iai50b3BpYyApIG9wdGlvbnMudGFnID0gb2JqLnRvcGljCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKCBzZWxmLnJlZ2lzdHJhdGlvbi5zaG93Tm90aWZpY2F0aW9uKG9wdGlvbnMudGl0bGUsIG9wdGlvbnMpICk7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIC8vIGl0J3MgcGxhaW4gdGV4dC4KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KfSk7CgpzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ25vdGlmaWNhdGlvbmNsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIgZGF0YSA9IG51bGwKICAgIGlmKCAnZGF0YScgaW4gZXZlbnQubm90aWZpY2F0aW9uICkgZGF0YSA9IGV2ZW50Lm5vdGlmaWNhdGlvbi5kYXRhCiAgICBpZiggIWRhdGEgfHwgIWRhdGEudXJsICkgcmV0dXJuCiAgICBjb25zb2xlLmxvZygnb3BlbiAnK2RhdGEudXJsKQoKICAgIGV2ZW50LndhaXRVbnRpbChjbGllbnRzLm9wZW5XaW5kb3coIGRhdGEudXJsICkpLnRoZW4oKCkgPT4gewogICAgICAgIHJldHVybiBldmVudC5ub3RpZmljYXRpb24uY2xvc2UoKQogICAgfSk7CiAgICAvLyByZXR1cm47CiAgICAvKgogICAgZXZlbnQud2FpdFVudGlsKHNlbGYuY2xpZW50cy5jbGFpbSgpLnRoZW4oKCkgPT4gewogICAgICAgIGNsaWVudHMubWF0Y2hBbGwoeyB0eXBlOiAnd2luZG93JyB9KS50aGVuKCB3aW5kb3dDbGllbnRzID0+IHsKICAgICAgICAgICAgLy8gYXR0ZW1wdCB0byBvcGVuIHRoZSBwcm9wZXIgd2luZG93CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmb3IoIHZhciBpID0gMDsgaSA8IHdpbmRvd0NsaWVudHMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudCA9IHdpbmRvd0NsaWVudHNbaV0KICAgICAgICAgICAgICAgICAgICBpZiggY2xpZW50LnVybCA9PSBkYXRhLnVybCAmJiAnZm9jdXMnIGluIGNsaWVudCApIGNsaWVudC5mb2N1cygpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBubyBvcGVuIHdpbmRvdyBmb3VuZCBtYXRjaG5nIHRoZSBVUkwsIHNvIG9wZW4gYSBuZXcgb25lIGF0IHRoYXQgdXJsCiAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBoYXBwZW4gaGFwcGVuIElGIHRoZXJlIGFyZSBubyB3aW5kb3dzIG9wZW4uCiAgICAgICAgICAgICAgICBpZiggJ29wZW5XaW5kb3cnIGluIGNsaWVudHMgKSBjbGllbnRzLm9wZW5XaW5kb3coIGRhdGEudXJsICkKICAgICAgICAgICAgICAgIGV2ZW50Lm5vdGlmaWNhdGlvbi5jbG9zZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKCBlcnIgKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpCiAgICAgICAgICAgIH0KICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpCiAgICAgICAgfSkKICAgIH0pKQogICAgKi8KfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/subscribe.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ic3Vic2NyaWJlLXpvbmUiPgogICA8YSBpZD0ic3Vic2NyaWJlLWJ0biI+PC9hPgo8L2Rpdj4Ke2NnanNfYWRkfQokKGZ1bmN0aW9uKCl7CiAgIGlmKCB0eXBlb2YgY2dXZWJQdXNoICE9ICd1bmRlZmluZWQnICkgewogICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGpxdWVyeSBwbHVnaW4uCiAgICAgICAgJCgnI3N1YnNjcmliZS1idG4nKS5jZ1dlYlB1c2goewoJICAgY2hhbmdlQnV0dG9uU3RhdGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKCSAgICAgIHN3aXRjaCggc3RhdGUgKSB7CgkgICAgICAgICAgY2FzZSAnZW5hYmxlZCc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X3Vuc3Vic2NyaWJlJyl9JyApOwoJCSAgICAgYnJlYWs7CgkJICBjYXNlICdkaXNhYmxlZCc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X3N1YnNjcmliZScpfScgKTsKCQkgICAgIGJyZWFrOwoJCSAgY2FzZSAnaW5jb21wYXRpYmxlJzoKCQkgICAgICQodGhpcykudGV4dCggJ3skbW9kLT5MYW5nKCdwcm9tcHRfaW5jb21wYXRpYmxlJyl9JyApOwoJCSAgICAgYnJlYWs7CgkJICBjYXNlICdjb21wdXRpbmcnOgoJCSAgY2FzZSAnbG9hZGluZyc6CgkJICAgICAkKHRoaXMpLnRleHQoICd7JG1vZC0+TGFuZygncHJvbXB0X2xvYWRpbmcnKX0nICk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICB9KTsKCS8vIHZhciBlbCA9ICQoJyNzdWJzY3JpYmUtYnRuJylbMF07CiAgICAgICAgLy8gY2dXZWJQdXNoLnNldF9lbGVtZW50KCBlbCApOwogICB9Cn0pCnsvY2dqc19hZGR9Cg==]]></data>
	</file>
	<file>
	  <filename>/vapid.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIE1pbmlzaGxpbmtcV2ViUHVzaDsKcmVxdWlyZV9vbmNlKCAndmVuZG9yL2F1dG9sb2FkLnBocCcgKTsKCiRrZXlzID0gVkFQSUQ6OmNyZWF0ZVZhcGlkS2V5cygpIDsKZmlsZV9wdXRfY29udGVudHMoICdfa2V5cy9wdWJsaWNfa2V5LnR4dCcsIHN1YnN0ciggJGtleXNbJ3B1YmxpY0tleSddLCAwLCAtMSApKTsKZmlsZV9wdXRfY29udGVudHMoICdfa2V5cy9wcml2YXRlX2tleS50eHQnLCBzdWJzdHIoICRrZXlzWydwcml2YXRlS2V5J10sIDAsIC0xICkpOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXIvYXV0b2xvYWRfcmVhbC5waHAnOwoKcmV0dXJuIENvbXBvc2VyQXV0b2xvYWRlckluaXRkZjEwMWE3YTRhYmRkZWQzZTFkMDIzYmQ3YjE5NWUzYzo6Z2V0TG9hZGVyKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_classmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_files.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2ZpbGVzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKICAgICc3YjExYzRkYzQyYjNiMzAyMzA3M2NiMTRlNTE5NjgzYycgPT4gJHZlbmRvckRpciAuICcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvc3JjL2dldGFsbGhlYWRlcnMucGhwJywKICAgICczMTA5Y2IxYTIzMWRjZDA0YmVlMWY5ZjYyMGQ0Njk3NScgPT4gJHZlbmRvckRpciAuICcvcGFyYWdvbmllL3NvZGl1bV9jb21wYXQvYXV0b2xvYWQucGhwJywKICAgICdjOTY0ZWUwZWRlZGYyOGM5NmViZDlkYjUwOTllZjkxMCcgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wcm9taXNlcy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICdhMGVkYzgzMDljYzVlMWQ2MGUzMDQ3YjVkZjZiNzA1MicgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wc3I3L3NyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAnLAogICAgJzM3YTNkYzUxMTFmZThmNzA3YWI0YzEzMmVmMWRiYzYyJyA9PiAkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL2d1enpsZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_namespaces.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX25hbWVzcGFjZXMucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_psr4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYycpLAogICAgJ01pbmlzaGxpbmtcXFdlYlB1c2hcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvbWluaXNobGluay93ZWItcHVzaC9zcmMnKSwKICAgICdKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1yc2EnLCAkdmVuZG9yRGlyIC4gJy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tbm9uZScsICR2ZW5kb3JEaXIgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjJywgJHZlbmRvckRpciAuICcvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhJywgJHZlbmRvckRpciAuICcvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhJyksCiAgICAnSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUnKSwKICAgICdKb3NlXFxDb21wb25lbnRcXEtleU1hbmFnZW1lbnRcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvd2ViLXRva2VuL2p3dC1rZXktbWdtdCcpLAogICAgJ0pvc2VcXENvbXBvbmVudFxcQ29yZVxcVXRpbFxcRWNjXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3dlYi10b2tlbi9qd3QtdXRpbC1lY2MnKSwKICAgICdKb3NlXFxDb21wb25lbnRcXENvcmVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvd2ViLXRva2VuL2p3dC1jb3JlJyksCiAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Bzcjcvc3JjJyksCiAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ndXp6bGVodHRwL3Byb21pc2VzL3NyYycpLAogICAgJ0d1enpsZUh0dHBcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjJyksCiAgICAnRkdcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZmdyb3NzZS9waHBhc24xL2xpYicpLAogICAgJ0Jhc2U2NFVybFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zcG9ta3ktbGFicy9iYXNlNjR1cmwvc3JjJyksCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_real.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3JlYWwucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCmNsYXNzIENvbXBvc2VyQXV0b2xvYWRlckluaXRkZjEwMWE3YTRhYmRkZWQzZTFkMDIzYmQ3YjE5NWUzYwp7CiAgICBwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZENsYXNzTG9hZGVyKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyJyA9PT0gJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2FkZXIoKQogICAgewogICAgICAgIGlmIChudWxsICE9PSBzZWxmOjokbG9hZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokbG9hZGVyOwogICAgICAgIH0KCiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZGYxMDFhN2E0YWJkZGVkM2UxZDAyM2JkN2IxOTVlM2MnLCAnbG9hZENsYXNzTG9hZGVyJyksIHRydWUsIHRydWUpOwogICAgICAgIHNlbGY6OiRsb2FkZXIgPSAkbG9hZGVyID0gbmV3IFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcigpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZGYxMDFhN2E0YWJkZGVkM2UxZDAyM2JkN2IxOTVlM2MnLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICAkdXNlU3RhdGljTG9hZGVyID0gUEhQX1ZFUlNJT05fSUQgPj0gNTA2MDAgJiYgIWRlZmluZWQoJ0hIVk1fVkVSU0lPTicpICYmICghZnVuY3Rpb25fZXhpc3RzKCd6ZW5kX2xvYWRlcl9maWxlX2VuY29kZWQnKSB8fCAhemVuZF9sb2FkZXJfZmlsZV9lbmNvZGVkKCkpOwogICAgICAgIGlmICgkdXNlU3RhdGljTG9hZGVyKSB7CiAgICAgICAgICAgIHJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9hdXRvbG9hZF9zdGF0aWMucGhwJzsKCiAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXRkZjEwMWE3YTRhYmRkZWQzZTFkMDIzYmQ3YjE5NWUzYzo6Z2V0SW5pdGlhbGl6ZXIoJGxvYWRlcikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtYXAgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX25hbWVzcGFjZXMucGhwJzsKICAgICAgICAgICAgZm9yZWFjaCAoJG1hcCBhcyAkbmFtZXNwYWNlID0+ICRwYXRoKSB7CiAgICAgICAgICAgICAgICAkbG9hZGVyLT5zZXQoJG5hbWVzcGFjZSwgJHBhdGgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWFwID0gcmVxdWlyZSBfX0RJUl9fIC4gJy9hdXRvbG9hZF9wc3I0LnBocCc7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtYXAgYXMgJG5hbWVzcGFjZSA9PiAkcGF0aCkgewogICAgICAgICAgICAgICAgJGxvYWRlci0+c2V0UHNyNCgkbmFtZXNwYWNlLCAkcGF0aCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjbGFzc01hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfY2xhc3NtYXAucGhwJzsKICAgICAgICAgICAgaWYgKCRjbGFzc01hcCkgewogICAgICAgICAgICAgICAgJGxvYWRlci0+YWRkQ2xhc3NNYXAoJGNsYXNzTWFwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGxvYWRlci0+cmVnaXN0ZXIodHJ1ZSk7CgogICAgICAgIGlmICgkdXNlU3RhdGljTG9hZGVyKSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZXMgPSBDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXRkZjEwMWE3YTRhYmRkZWQzZTFkMDIzYmQ3YjE5NWUzYzo6JGZpbGVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZXMgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX2ZpbGVzLnBocCc7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRpbmNsdWRlRmlsZXMgYXMgJGZpbGVJZGVudGlmaWVyID0+ICRmaWxlKSB7CiAgICAgICAgICAgIGNvbXBvc2VyUmVxdWlyZWRmMTAxYTdhNGFiZGRlZDNlMWQwMjNiZDdiMTk1ZTNjKCRmaWxlSWRlbnRpZmllciwgJGZpbGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsb2FkZXI7CiAgICB9Cn0KCmZ1bmN0aW9uIGNvbXBvc2VyUmVxdWlyZWRmMTAxYTdhNGFiZGRlZDNlMWQwMjNiZDdiMTk1ZTNjKCRmaWxlSWRlbnRpZmllciwgJGZpbGUpCnsKICAgIGlmIChlbXB0eSgkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0pKSB7CiAgICAgICAgcmVxdWlyZSAkZmlsZTsKCiAgICAgICAgJEdMT0JBTFNbJ19fY29tcG9zZXJfYXV0b2xvYWRfZmlsZXMnXVskZmlsZUlkZW50aWZpZXJdID0gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_static.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3N0YXRpYy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKY2xhc3MgQ29tcG9zZXJTdGF0aWNJbml0ZGYxMDFhN2E0YWJkZGVkM2UxZDAyM2JkN2IxOTVlM2MKewogICAgcHVibGljIHN0YXRpYyAkZmlsZXMgPSBhcnJheSAoCiAgICAgICAgJzdiMTFjNGRjNDJiM2IzMDIzMDczY2IxNGU1MTk2ODNjJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3NyYy9nZXRhbGxoZWFkZXJzLnBocCcsCiAgICAgICAgJzMxMDljYjFhMjMxZGNkMDRiZWUxZjlmNjIwZDQ2OTc1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BhcmFnb25pZS9zb2RpdW1fY29tcGF0L2F1dG9sb2FkLnBocCcsCiAgICAgICAgJ2M5NjRlZTBlZGVkZjI4Yzk2ZWJkOWRiNTA5OWVmOTEwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHJvbWlzZXMvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCcsCiAgICAgICAgJ2EwZWRjODMwOWNjNWUxZDYwZTMwNDdiNWRmNmI3MDUyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHNyNy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnMzdhM2RjNTExMWZlOGY3MDdhYjRjMTMyZWYxZGJjNjInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZ3V6emxlaHR0cC9ndXp6bGUvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCcsCiAgICApOwoKICAgIHB1YmxpYyBzdGF0aWMgJHByZWZpeExlbmd0aHNQc3I0ID0gYXJyYXkgKAogICAgICAgICdQJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdQc3JcXEh0dHBcXE1lc3NhZ2VcXCcgPT4gMTcsCiAgICAgICAgKSwKICAgICAgICAnTScgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnTWluaXNobGlua1xcV2ViUHVzaFxcJyA9PiAxOSwKICAgICAgICApLAogICAgICAgICdKJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwnID0+IDM1LAogICAgICAgICAgICAnSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXCcgPT4gMjUsCiAgICAgICAgICAgICdKb3NlXFxDb21wb25lbnRcXEtleU1hbmFnZW1lbnRcXCcgPT4gMjksCiAgICAgICAgICAgICdKb3NlXFxDb21wb25lbnRcXENvcmVcXFV0aWxcXEVjY1xcJyA9PiAyOSwKICAgICAgICAgICAgJ0pvc2VcXENvbXBvbmVudFxcQ29yZVxcJyA9PiAyMCwKICAgICAgICApLAogICAgICAgICdHJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdHdXp6bGVIdHRwXFxQc3I3XFwnID0+IDE2LAogICAgICAgICAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiAxOSwKICAgICAgICAgICAgJ0d1enpsZUh0dHBcXCcgPT4gMTEsCiAgICAgICAgKSwKICAgICAgICAnRicgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnRkdcXCcgPT4gMywKICAgICAgICApLAogICAgICAgICdCJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdCYXNlNjRVcmxcXCcgPT4gMTAsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnTWluaXNobGlua1xcV2ViUHVzaFxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9taW5pc2hsaW5rL3dlYi1wdXNoL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXEFsZ29yaXRobVxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhJywKICAgICAgICAgICAgMSA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lJywKICAgICAgICAgICAgMiA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjJywKICAgICAgICAgICAgMyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lZGRzYScsCiAgICAgICAgICAgIDQgPT4gX19ESVJfXyAuICcvLi4nIC4gJy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EnLAogICAgICAgICksCiAgICAgICAgJ0pvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlJywKICAgICAgICApLAogICAgICAgICdKb3NlXFxDb21wb25lbnRcXEtleU1hbmFnZW1lbnRcXCcgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvd2ViLXRva2VuL2p3dC1rZXktbWdtdCcsCiAgICAgICAgKSwKICAgICAgICAnSm9zZVxcQ29tcG9uZW50XFxDb3JlXFxVdGlsXFxFY2NcXCcgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvd2ViLXRva2VuL2p3dC11dGlsLWVjYycsCiAgICAgICAgKSwKICAgICAgICAnSm9zZVxcQ29tcG9uZW50XFxDb3JlXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3dlYi10b2tlbi9qd3QtY29yZScsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL3Bzcjcvc3JjJywKICAgICAgICApLAogICAgICAgICdHdXp6bGVIdHRwXFxQcm9taXNlXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHJvbWlzZXMvc3JjJywKICAgICAgICApLAogICAgICAgICdHdXp6bGVIdHRwXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnRkdcXCcgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmdyb3NzZS9waHBhc24xL2xpYicsCiAgICAgICAgKSwKICAgICAgICAnQmFzZTY0VXJsXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Nwb21reS1sYWJzL2Jhc2U2NHVybC9zcmMnLAogICAgICAgICksCiAgICApOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5pdGlhbGl6ZXIoQ2xhc3NMb2FkZXIgJGxvYWRlcikKICAgIHsKICAgICAgICByZXR1cm4gXENsb3N1cmU6OmJpbmQoZnVuY3Rpb24gKCkgdXNlICgkbG9hZGVyKSB7CiAgICAgICAgICAgICRsb2FkZXItPnByZWZpeExlbmd0aHNQc3I0ID0gQ29tcG9zZXJTdGF0aWNJbml0ZGYxMDFhN2E0YWJkZGVkM2UxZDAyM2JkN2IxOTVlM2M6OiRwcmVmaXhMZW5ndGhzUHNyNDsKICAgICAgICAgICAgJGxvYWRlci0+cHJlZml4RGlyc1BzcjQgPSBDb21wb3NlclN0YXRpY0luaXRkZjEwMWE3YTRhYmRkZWQzZTFkMDIzYmQ3YjE5NWUzYzo6JHByZWZpeERpcnNQc3I0OwoKICAgICAgICB9LCBudWxsLCBDbGFzc0xvYWRlcjo6Y2xhc3MpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/ClassLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgovKioKICogQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBhIFBTUi0wLCBQU1ItNCBhbmQgY2xhc3NtYXAgY2xhc3MgbG9hZGVyLgogKgogKiAgICAgJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKICoKICogICAgIC8vIHJlZ2lzdGVyIGNsYXNzZXMgd2l0aCBuYW1lc3BhY2VzCiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnlcQ29tcG9uZW50JywgX19ESVJfXy4nL2NvbXBvbmVudCcpOwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255JywgICAgICAgICAgIF9fRElSX18uJy9mcmFtZXdvcmsnKTsKICoKICogICAgIC8vIGFjdGl2YXRlIHRoZSBhdXRvbG9hZGVyCiAqICAgICAkbG9hZGVyLT5yZWdpc3RlcigpOwogKgogKiAgICAgLy8gdG8gZW5hYmxlIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIChlZy4gZm9yIFBFQVIgcGFja2FnZXMpCiAqICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKICoKICogSW4gdGhpcyBleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIHVzZSBhIGNsYXNzIGluIHRoZSBTeW1mb255XENvbXBvbmVudAogKiBuYW1lc3BhY2Ugb3Igb25lIG9mIGl0cyBjaGlsZHJlbiAoU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZSBmb3IgaW5zdGFuY2UpLAogKiB0aGUgYXV0b2xvYWRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIHRoZSBjbGFzcyB1bmRlciB0aGUgY29tcG9uZW50LwogKiBkaXJlY3RvcnksIGFuZCBpdCB3aWxsIHRoZW4gZmFsbGJhY2sgdG8gdGhlIGZyYW1ld29yay8gZGlyZWN0b3J5IGlmIG5vdAogKiBmb3VuZCBiZWZvcmUgZ2l2aW5nIHVwLgogKgogKiBUaGlzIGNsYXNzIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIFN5bWZvbnkgVW5pdmVyc2FsQ2xhc3NMb2FkZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqIEBzZWUgICAgaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTAvCiAqIEBzZWUgICAgaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTQvCiAqLwpjbGFzcyBDbGFzc0xvYWRlcgp7CiAgICAvLyBQU1ItNAogICAgcHJpdmF0ZSAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5KCk7CgogICAgLy8gUFNSLTAKICAgIHByaXZhdGUgJHByZWZpeGVzUHNyMCA9IGFycmF5KCk7CiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3IwID0gYXJyYXkoKTsKCiAgICBwcml2YXRlICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkY2xhc3NNYXBBdXRob3JpdGF0aXZlID0gZmFsc2U7CiAgICBwcml2YXRlICRtaXNzaW5nQ2xhc3NlcyA9IGFycmF5KCk7CiAgICBwcml2YXRlICRhcGN1UHJlZml4OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlcygpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+cHJlZml4ZXNQc3IwKSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHRoaXMtPnByZWZpeGVzUHNyMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZml4ZXNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByZWZpeERpcnNQc3I0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmFsbGJhY2tEaXJzUHNyNCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzc01hcCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkY2xhc3NNYXAgQ2xhc3MgdG8gZmlsZW5hbWUgbWFwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDbGFzc01hcChhcnJheSAkY2xhc3NNYXApCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jbGFzc01hcCkgewogICAgICAgICAgICAkdGhpcy0+Y2xhc3NNYXAgPSBhcnJheV9tZXJnZSgkdGhpcy0+Y2xhc3NNYXAsICRjbGFzc01hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmNsYXNzTWFwID0gJGNsYXNzTWFwOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItMCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBwcmVmaXgsIGVpdGhlcgogICAgICogYXBwZW5kaW5nIG9yIHByZXBlbmRpbmcgdG8gdGhlIG9uZXMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgcHJlZml4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeAogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTAgcm9vdCBkaXJlY3RvcmllcwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGRpcmVjdG9yaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwLAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZmlyc3QgPSAkcHJlZml4WzBdOwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdKSkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSwKICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4L25hbWVzcGFjZSwgd2l0aCB0cmFpbGluZyAnXFwnCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwYXRocyAgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBzcjQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAvLyBSZWdpc3RlciBkaXJlY3RvcmllcyBmb3IgdGhlIHJvb3QgbmFtZXNwYWNlLgogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0LAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0pKSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGRpcmVjdG9yaWVzIGZvciBhIG5ldyBuYW1lc3BhY2UuCiAgICAgICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHByZWZpeCk7CiAgICAgICAgICAgIGlmICgnXFwnICE9PSAkcHJlZml4WyRsZW5ndGggLSAxXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkEgbm9uLWVtcHR5IFBTUi00IHByZWZpeCBtdXN0IGVuZCB3aXRoIGEgbmFtZXNwYWNlIHNlcGFyYXRvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJHByZWZpeFswXV1bJHByZWZpeF0gPSAkbGVuZ3RoOwogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2VpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgLy8gUHJlcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocywKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFwcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0sCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItMCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBwcmVmaXgsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4IFRoZSBwcmVmaXgKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJHBhdGhzICBUaGUgUFNSLTAgYmFzZSBkaXJlY3RvcmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwKICAgICAqIHJlcGxhY2luZyBhbnkgb3RoZXJzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIG5hbWVzcGFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRwcmVmaXggVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQc3I0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVHVybnMgb24gc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggZm9yIGNsYXNzIGZpbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlSW5jbHVkZVBhdGgoJHVzZUluY2x1ZGVQYXRoKQogICAgewogICAgICAgICR0aGlzLT51c2VJbmNsdWRlUGF0aCA9ICR1c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhdXRvbG9hZGVyIHVzZXMgdGhlIGluY2x1ZGUgcGF0aCB0byBjaGVjawogICAgICogZm9yIGNsYXNzZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm5zIG9mZiBzZWFyY2hpbmcgdGhlIHByZWZpeCBhbmQgZmFsbGJhY2sgZGlyZWN0b3JpZXMgZm9yIGNsYXNzZXMKICAgICAqIHRoYXQgaGF2ZSBub3QgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIG1hcC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY2xhc3NNYXBBdXRob3JpdGF0aXZlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDbGFzc01hcEF1dGhvcml0YXRpdmUoJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlID0gJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBjbGFzcyBsb29rdXAgZmFpbCBpZiBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgY2xhc3MgbWFwPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGFzc01hcEF1dGhvcml0YXRpdmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlOwogICAgfQoKICAgIC8qKgogICAgICogQVBDdSBwcmVmaXggdG8gdXNlIHRvIGNhY2hlIGZvdW5kL25vdC1mb3VuZCBjbGFzc2VzLCBpZiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhcGN1UHJlZml4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcGN1UHJlZml4KCRhcGN1UHJlZml4KQogICAgewogICAgICAgICR0aGlzLT5hcGN1UHJlZml4ID0gZnVuY3Rpb25fZXhpc3RzKCdhcGN1X2ZldGNoJykgJiYgaW5pX2dldCgnYXBjLmVuYWJsZWQnKSA/ICRhcGN1UHJlZml4IDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBBUEN1IHByZWZpeCBpbiB1c2UsIG9yIG51bGwgaWYgQVBDdSBjYWNoaW5nIGlzIG5vdCBlbmFibGVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFwY3VQcmVmaXgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXBjdVByZWZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGlzIGluc3RhbmNlIGFzIGFuIGF1dG9sb2FkZXIuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBhdXRvbG9hZGVyIG9yIG5vdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSwgdHJ1ZSwgJHByZXBlbmQpOwogICAgfQoKICAgIC8qKgogICAgICogVW5yZWdpc3RlcnMgdGhpcyBpbnN0YW5jZSBhcyBhbiBhdXRvbG9hZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3RlcigpCiAgICB7CiAgICAgICAgc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgZ2l2ZW4gY2xhc3Mgb3IgaW50ZXJmYWNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFRydWUgaWYgbG9hZGVkLCBudWxsIG90aGVyd2lzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENsYXNzKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGUoJGNsYXNzKSkgewogICAgICAgICAgICBpbmNsdWRlRmlsZSgkZmlsZSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGUgY2xhc3MgaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgcGF0aCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmlsZSgkY2xhc3MpCiAgICB7CiAgICAgICAgLy8gY2xhc3MgbWFwIGxvb2t1cAogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZSB8fCBpc3NldCgkdGhpcy0+bWlzc2luZ0NsYXNzZXNbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgJGZpbGUgPSBhcGN1X2ZldGNoKCR0aGlzLT5hcGN1UHJlZml4LiRjbGFzcywgJGhpdCk7CiAgICAgICAgICAgIGlmICgkaGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRmaWxlID0gJHRoaXMtPmZpbmRGaWxlV2l0aEV4dGVuc2lvbigkY2xhc3MsICcucGhwJyk7CgogICAgICAgIC8vIFNlYXJjaCBmb3IgSGFjayBmaWxlcyBpZiB3ZSBhcmUgcnVubmluZyBvbiBISFZNCiAgICAgICAgaWYgKGZhbHNlID09PSAkZmlsZSAmJiBkZWZpbmVkKCdISFZNX1ZFUlNJT04nKSkgewogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLmhoJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgYXBjdV9hZGQoJHRoaXMtPmFwY3VQcmVmaXguJGNsYXNzLCAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICRmaWxlKSB7CiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgJHRoaXMtPm1pc3NpbmdDbGFzc2VzWyRjbGFzc10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmaWxlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJGV4dCkKICAgIHsKICAgICAgICAvLyBQU1ItNCBsb29rdXAKICAgICAgICAkbG9naWNhbFBhdGhQc3I0ID0gc3RydHIoJGNsYXNzLCAnXFwnLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CgogICAgICAgICRmaXJzdCA9ICRjbGFzc1swXTsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRmaXJzdF0pKSB7CiAgICAgICAgICAgICRzdWJQYXRoID0gJGNsYXNzOwogICAgICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICRsYXN0UG9zID0gc3RycnBvcygkc3ViUGF0aCwgJ1xcJykpIHsKICAgICAgICAgICAgICAgICRzdWJQYXRoID0gc3Vic3RyKCRzdWJQYXRoLCAwLCAkbGFzdFBvcyk7CiAgICAgICAgICAgICAgICAkc2VhcmNoID0gJHN1YlBhdGguJ1xcJzsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHNlYXJjaF0pKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnByZWZpeERpcnNQc3I0WyRzZWFyY2hdIGFzICRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxlbmd0aCA9ICR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskZmlyc3RdWyRzZWFyY2hdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkbGVuZ3RoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTQgZmFsbGJhY2sgZGlycwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mYWxsYmFja0RpcnNQc3I0IGFzICRkaXIpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3I0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBsb29rdXAKICAgICAgICBpZiAoZmFsc2UgIT09ICRwb3MgPSBzdHJycG9zKCRjbGFzcywgJ1xcJykpIHsKICAgICAgICAgICAgLy8gbmFtZXNwYWNlZCBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgMCwgJHBvcyArIDEpCiAgICAgICAgICAgICAgICAuIHN0cnRyKHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkcG9zICsgMSksICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUEVBUi1saWtlIGNsYXNzIG5hbWUKICAgICAgICAgICAgJGxvZ2ljYWxQYXRoUHNyMCA9IHN0cnRyKCRjbGFzcywgJ18nLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0gYXMgJHByZWZpeCA9PiAkZGlycykgewogICAgICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkY2xhc3MsICRwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRpcnMgYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgaW5jbHVkZSBwYXRocy4KICAgICAgICBpZiAoJHRoaXMtPnVzZUluY2x1ZGVQYXRoICYmICRmaWxlID0gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKCRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKLyoqCiAqIFNjb3BlIGlzb2xhdGVkIGluY2x1ZGUuCiAqCiAqIFByZXZlbnRzIGFjY2VzcyB0byAkdGhpcy9zZWxmIGZyb20gaW5jbHVkZWQgZmlsZXMuCiAqLwpmdW5jdGlvbiBpbmNsdWRlRmlsZSgkZmlsZSkKewogICAgaW5jbHVkZSAkZmlsZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WwogICAgewogICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3QtdXRpbC1lY2MiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXV0aWwtZWNjLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTVkNTM2ZmZhZDA5ZjhkNjEyMDU3ZmI0ODNjN2I3NTI2NGZhMjgwMCIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC11dGlsLWVjYy96aXBiYWxsLzE1ZDUzNmZmYWQwOWY4ZDYxMjA1N2ZiNDgzYzdiNzUyNjRmYTI4MDAiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjE1ZDUzNmZmYWQwOWY4ZDYxMjA1N2ZiNDgzYzdiNzUyNjRmYTI4MDAiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAiZXh0LWdtcCI6ICIqIiwKICAgICAgICAgICAgImV4dC1tYnN0cmluZyI6ICIqIiwKICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDEtMTBUMTE6NDk6MTErMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxDb3JlXFxVdGlsXFxFY2NcXCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkVDQyBUb29scyBmb3IgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICJKV0UiLAogICAgICAgICAgICAiSldLIiwKICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICJKV1MiLAogICAgICAgICAgICAiSm90IiwKICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAiUkZDNzUxNiIsCiAgICAgICAgICAgICJSRkM3NTE3IiwKICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAiUkZDNzUxOSIsCiAgICAgICAgICAgICJSRkM3NTIwIiwKICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICJqd2EiLAogICAgICAgICAgICAiand0IiwKICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiLAogICAgICAgICJ2ZXJzaW9uIjogInYyLjAuMSIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIyLjAuMS4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9iYXNlNjR1cmwuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzZWI0NmExZGU4MDNmMDA3ODk2MmQ5MTBlM2EyNzU5MjI0YTY4YzYxIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9TcG9ta3ktTGFicy9iYXNlNjR1cmwvemlwYmFsbC8zZWI0NmExZGU4MDNmMDA3ODk2MmQ5MTBlM2EyNzU5MjI0YTY4YzYxIiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzZWI0NmExZGU4MDNmMDA3ODk2MmQ5MTBlM2EyNzU5MjI0YTY4YzYxIiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwLWNvdmVyYWxscy9waHAtY292ZXJhbGxzIjogIl4yLjAiLAogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTA4LTE2VDE1OjQ0OjIwKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkJhc2U2NFVybFxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkJhc2UgNjQgVVJMIFNhZmUgRW5jb2RpbmcvRGVjb2RpbmcgUEhQIExpYnJhcnkiLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJiYXNlNjQiLAogICAgICAgICAgICAicmZjNDY0OCIsCiAgICAgICAgICAgICJzYWZlIiwKICAgICAgICAgICAgInVybCIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImZncm9zc2UvcGhwYXNuMSIsCiAgICAgICAgInZlcnNpb24iOiAidjIuMS4xIiwKICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjIuMS4xLjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjdlYmYyYTA5MDg0YTdiYmRiN2I4NzljNjZmZGY3YWQ4MDQ2MWJiZTgiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2Zncm9zc2UvUEhQQVNOMS96aXBiYWxsLzdlYmYyYTA5MDg0YTdiYmRiN2I4NzljNjZmZGY3YWQ4MDQ2MWJiZTgiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjdlYmYyYTA5MDg0YTdiYmRiN2I4NzljNjZmZGY3YWQ4MDQ2MWJiZTgiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIj49Ny4wLjAiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjYuMyIsCiAgICAgICAgICAgICJzYXRvb3NoaS9waHAtY292ZXJhbGxzIjogIn4yLjAiCiAgICAgICAgfSwKICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgImV4dC1nbXAiOiAiR01QIGlzIHRoZSBwcmVmZXJyZWQgZXh0ZW5zaW9uIGZvciBiaWcgaW50ZWdlciBjYWxjdWxhdGlvbnMiLAogICAgICAgICAgICAicGhwLWN1cmwiOiAiRm9yIGxvYWRpbmcgT0lEIGluZm9ybWF0aW9uIGZyb20gdGhlIHdlYiBpZiB0aGV5IGhhdmUgbm90IGJlZSBkZWZpbmVkIHN0YXRpY2FsbHkiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTEyLTAyVDAxOjM0OjM0KzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkZHXFwiOiAibGliLyIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkZyaWVkcmljaCBHcm/Dn2UiLAogICAgICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vRkdyb3NzZSIsCiAgICAgICAgICAgICAgICAicm9sZSI6ICJBdXRob3IiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBQSFAgRnJhbWV3b3JrIHRoYXQgYWxsb3dzIHlvdSB0byBlbmNvZGUgYW5kIGRlY29kZSBhcmJpdHJhcnkgQVNOLjEgc3RydWN0dXJlcyB1c2luZyB0aGUgSVRVLVQgWC42OTAgRW5jb2RpbmcgUnVsZXMuIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiREVSIiwKICAgICAgICAgICAgImFzbi4xIiwKICAgICAgICAgICAgImFzbjEiLAogICAgICAgICAgICAiYmVyIiwKICAgICAgICAgICAgImJpbmFyeSIsCiAgICAgICAgICAgICJkZWNvZGluZyIsCiAgICAgICAgICAgICJlbmNvZGluZyIsCiAgICAgICAgICAgICJ4LjUwOSIsCiAgICAgICAgICAgICJ4LjY5MCIsCiAgICAgICAgICAgICJ4NTA5IiwKICAgICAgICAgICAgIng2OTAiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LWNvcmUiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhMTZhNjhmNDg4YTQ3MzJlZDdiYWY0YjhhYjZjMDU2MWYyZGM2ODIyIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LWNvcmUvemlwYmFsbC9hMTZhNjhmNDg4YTQ3MzJlZDdiYWY0YjhhYjZjMDU2MWYyZGM2ODIyIiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhMTZhNjhmNDg4YTQ3MzJlZDdiYWY0YjhhYjZjMDU2MWYyZGM2ODIyIiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgImV4dC1nbXAiOiAiKiIsCiAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICJmZ3Jvc3NlL3BocGFzbjEiOiAiXjIuMCIsCiAgICAgICAgICAgICJwaHAiOiAiXjcuMSIsCiAgICAgICAgICAgICJzcG9ta3ktbGFicy9iYXNlNjR1cmwiOiAiXjEuMHxeMi4wIgogICAgICAgIH0sCiAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAic3BvbWt5LWxhYnMvam9zZSI6ICIqIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDEtMjFUMTE6Mzc6MzcrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxDb3JlXFwiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb3JlIGNvbXBvbmVudCBvZiB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogInBhcmFnb25pZS9yYW5kb21fY29tcGF0IiwKICAgICAgICAidmVyc2lvbiI6ICJ2OS45OS45OSIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI5Ljk5Ljk5LjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BhcmFnb25pZS9yYW5kb21fY29tcGF0LmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiODRiNGRmYjEyMGM2ZjliNGZmN2IzNjg1ZjliOGYxYWEzNjVhMGM5NSIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGFyYWdvbmllL3JhbmRvbV9jb21wYXQvemlwYmFsbC84NGI0ZGZiMTIwYzZmOWI0ZmY3YjM2ODVmOWI4ZjFhYTM2NWEwYzk1IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4NGI0ZGZiMTIwYzZmOWI0ZmY3YjM2ODVmOWI4ZjFhYTM2NWEwYzk1IiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInBocCI6ICJeNyIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICI0Lip8NS4qIiwKICAgICAgICAgICAgInZpbWVvL3BzYWxtIjogIl4xIgogICAgICAgIH0sCiAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICJleHQtbGlic29kaXVtIjogIlByb3ZpZGVzIGEgbW9kZXJuIGNyeXB0byBBUEkgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSByYW5kb20gYnl0ZXMuIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxOC0wNy0wMlQxNTo1NTo1NiswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlBhcmFnb24gSW5pdGlhdGl2ZSBFbnRlcnByaXNlcyIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAic2VjdXJpdHlAcGFyYWdvbmllLmNvbSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9wYXJhZ29uaWUuY29tIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiUEhQIDUueCBwb2x5ZmlsbCBmb3IgcmFuZG9tX2J5dGVzKCkgYW5kIHJhbmRvbV9pbnQoKSBmcm9tIFBIUCA3IiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJjc3BybmciLAogICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAicHNldWRvcmFuZG9tIiwKICAgICAgICAgICAgInJhbmRvbSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS45LjEiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS45LjEuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGFyYWdvbmllL3NvZGl1bV9jb21wYXQuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4NzEyNWQ1YjI2NWY5OGM0ZDFiOGQ4M2ExZjA3MjY2MDdjMjI5NDIxIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC96aXBiYWxsLzg3MTI1ZDViMjY1Zjk4YzRkMWI4ZDgzYTFmMDcyNjYwN2MyMjk0MjEiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjg3MTI1ZDViMjY1Zjk4YzRkMWI4ZDgzYTFmMDcyNjYwN2MyMjk0MjEiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGFyYWdvbmllL3JhbmRvbV9jb21wYXQiOiAiPj0xIiwKICAgICAgICAgICAgInBocCI6ICJeNS4yLjR8XjUuM3xeNS40fF41LjV8XjUuNnxeN3xeOCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeM3xeNHxeNSIKICAgICAgICB9LAogICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAiZXh0LWxpYnNvZGl1bSI6ICJQSFAgPCA3LjA6IEJldHRlciBwZXJmb3JtYW5jZSwgcGFzc3dvcmQgaGFzaGluZyAoQXJnb24yaSksIHNlY3VyZSBtZW1vcnkgbWFuYWdlbWVudCAobWVtemVybyksIGFuZCBiZXR0ZXIgc2VjdXJpdHkuIiwKICAgICAgICAgICAgImV4dC1zb2RpdW0iOiAiUEhQID49IDcuMDogQmV0dGVyIHBlcmZvcm1hbmNlLCBwYXNzd29yZCBoYXNoaW5nIChBcmdvbjJpKSwgc2VjdXJlIG1lbW9yeSBtYW5hZ2VtZW50IChtZW16ZXJvKSwgYW5kIGJldHRlciBzZWN1cml0eS4iCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE5LTAzLTIwVDE3OjE5OjA1KzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJhdXRvbG9hZC5waHAiCiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIklTQyIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJQYXJhZ29uIEluaXRpYXRpdmUgRW50ZXJwcmlzZXMiLAogICAgICAgICAgICAgICAgImVtYWlsIjogInNlY3VyaXR5QHBhcmFnb25pZS5jb20iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkZyYW5rIERlbmlzIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJqZWRpc2N0MUBwdXJlZnRwZC5vcmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJQdXJlIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBsaWJzb2RpdW07IHVzZXMgdGhlIFBIUCBleHRlbnNpb24gaWYgaXQgZXhpc3RzIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiIsCiAgICAgICAgICAgICJCTEFLRTJiIiwKICAgICAgICAgICAgIkNoYUNoYTIwIiwKICAgICAgICAgICAgIkNoYUNoYTIwLVBvbHkxMzA1IiwKICAgICAgICAgICAgIkNoYXBvbHkiLAogICAgICAgICAgICAiQ3VydmUyNTUxOSIsCiAgICAgICAgICAgICJFZDI1NTE5IiwKICAgICAgICAgICAgIkVkRFNBIiwKICAgICAgICAgICAgIkVkd2FyZHMtY3VydmUgRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIiwKICAgICAgICAgICAgIkVsbGlwdGljIEN1cnZlIERpZmZpZS1IZWxsbWFuIiwKICAgICAgICAgICAgIlBvbHkxMzA1IiwKICAgICAgICAgICAgIlB1cmUtUEhQIGNyeXB0b2dyYXBoeSIsCiAgICAgICAgICAgICJSRkMgNzc0OCIsCiAgICAgICAgICAgICJSRkMgODAzMiIsCiAgICAgICAgICAgICJTYWxwb2x5IiwKICAgICAgICAgICAgIlNhbHNhMjAiLAogICAgICAgICAgICAiWDI1NTE5IiwKICAgICAgICAgICAgIlhDaGFDaGEyMC1Qb2x5MTMwNSIsCiAgICAgICAgICAgICJYU2Fsc2EyMC1Qb2x5MTMwNSIsCiAgICAgICAgICAgICJYY2hhY2hhMjAiLAogICAgICAgICAgICAiWHNhbHNhMjAiLAogICAgICAgICAgICAiYWVhZCIsCiAgICAgICAgICAgICJjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAiZWNkaCIsCiAgICAgICAgICAgICJlbGxpcHRpYyBjdXJ2ZSIsCiAgICAgICAgICAgICJlbGxpcHRpYyBjdXJ2ZSBjcnlwdG9ncmFwaHkiLAogICAgICAgICAgICAiZW5jcnlwdGlvbiIsCiAgICAgICAgICAgICJsaWJzb2RpdW0iLAogICAgICAgICAgICAicGhwIiwKICAgICAgICAgICAgInB1YmxpYy1rZXkgY3J5cHRvZ3JhcGh5IiwKICAgICAgICAgICAgInNlY3JldC1rZXkgY3J5cHRvZ3JhcGh5IiwKICAgICAgICAgICAgInNpZGUtY2hhbm5lbCByZXNpc3RhbnQiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LWtleS1tZ210IiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjIuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1rZXktbWdtdC5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImJhMzNhMjA3MmRiYjk2NmUxYzEwYzQxYTcxZThhNjRjZWFhYTk1ZjkiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi10b2tlbi9qd3Qta2V5LW1nbXQvemlwYmFsbC9iYTMzYTIwNzJkYmI5NjZlMWMxMGM0MWE3MWU4YTY0Y2VhYWE5NWY5IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiYTMzYTIwNzJkYmI5NjZlMWMxMGM0MWE3MWU4YTY0Y2VhYWE5NWY5IiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgImxpYi1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAicGFyYWdvbmllL3NvZGl1bV9jb21wYXQiOiAiXjEuMiIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LWNvcmUiOiAiXjEuMyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXV0aWwtZWNjIjogIl4xLjMiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICJwaHAtaHR0cC9odHRwbHVnIjogIl4xLjEiLAogICAgICAgICAgICAicGhwLWh0dHAvbWVzc2FnZS1mYWN0b3J5IjogIl4xLjAiLAogICAgICAgICAgICAicGhwLWh0dHAvbW9jay1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMHxeNy4wIgogICAgICAgIH0sCiAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICJwaHAtaHR0cC9odHRwbHVnIjogIlRvIGVuYWJsZSBKS1UvWDVVIHN1cHBvcnQuIiwKICAgICAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJUbyBlbmFibGUgSktVL1g1VSBzdXBwb3J0LiIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDMtMTFUMTI6NTk6MTQrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxLZXlNYW5hZ2VtZW50XFwiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3Qta2V5LW1nbXQvY29udHJpYnV0b3JzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IE1hbmFnZW1lbnQgY29tcG9uZW50IG9mIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgIkpPU0UiLAogICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgIkpXSyIsCiAgICAgICAgICAgICJKV0tTZXQiLAogICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgIkpvdCIsCiAgICAgICAgICAgICJSRkM3NTE1IiwKICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAiUkZDNzUxNyIsCiAgICAgICAgICAgICJSRkM3NTE4IiwKICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAiUkZDNzUyMCIsCiAgICAgICAgICAgICJidW5kbGUiLAogICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICJzeW1mb255IgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjJkODJmYmY2YzdiMTRhM2FlNzA2NmNjMDNlZmFhZDhmYmRjODJjZWUiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi10b2tlbi9qd3Qtc2lnbmF0dXJlL3ppcGJhbGwvMmQ4MmZiZjZjN2IxNGEzYWU3MDY2Y2MwM2VmYWFkOGZiZGM4MmNlZSIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMmQ4MmZiZjZjN2IxNGEzYWU3MDY2Y2MwM2VmYWFkOGZiZGM4MmNlZSIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LWNvcmUiOiAiXjEuMyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWNkc2EiOiAiXjEuMyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EiOiAiXjEuMyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0taG1hYyI6ICJeMS4zIiwKICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lIjogIl4xLjMiLAogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYSI6ICJeMS4zIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICB9LAogICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIjogIkVDRFNBIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIiwKICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lZGRzYSI6ICJFZERTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZXhwZXJpbWVudGFsIjogIkV4cGVyaW1lbnRhbCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0taG1hYyI6ICJITUFDIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIiwKICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lIjogIk5vbmUgU2lnbmF0dXJlIEFsZ29yaXRobSIsCiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIlJTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDEtMjFUMTE6Mzc6MzcrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2lnbmF0dXJlIGNvbXBvbmVudCBvZiB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1yc2EiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjEyZDUwZDI1OGI5NGZhZGI5NzFiMjM5YzVlMmQyYzRhMTE1ZDUyYyIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYS96aXBiYWxsLzIxMmQ1MGQyNThiOTRmYWRiOTcxYjIzOWM1ZTJkMmM0YTExNWQ1MmMiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjIxMmQ1MGQyNThiOTRmYWRiOTcxYjIzOWM1ZTJkMmM0YTExNWQ1MmMiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE5LTAxLTEwVDExOjQ5OjExKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIlJTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1ub25lIiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjIuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLW5vbmUuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjMWNhMzRhNDI1YzhjN2JmYmNiMjMzMmE3YzFkYzhmN2Y2YTRjM2IwIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tbm9uZS96aXBiYWxsL2MxY2EzNGE0MjVjOGM3YmZiY2IyMzMyYTdjMWRjOGY3ZjZhNGMzYjAiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImMxY2EzNGE0MjVjOGM3YmZiY2IyMzMyYTdjMWRjOGY3ZjZhNGMzYjAiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE5LTAxLTEwVDExOjQ5OjExKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIk5vbmUgU2lnbmF0dXJlIEFsZ29yaXRobSB0aGUgSldUIEZyYW1ld29yay4iLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJKT1NFIiwKICAgICAgICAgICAgIkpXRSIsCiAgICAgICAgICAgICJKV0siLAogICAgICAgICAgICAiSldLU2V0IiwKICAgICAgICAgICAgIkpXUyIsCiAgICAgICAgICAgICJKb3QiLAogICAgICAgICAgICAiUkZDNzUxNSIsCiAgICAgICAgICAgICJSRkM3NTE2IiwKICAgICAgICAgICAgIlJGQzc1MTciLAogICAgICAgICAgICAiUkZDNzUxOCIsCiAgICAgICAgICAgICJSRkM3NTE5IiwKICAgICAgICAgICAgIlJGQzc1MjAiLAogICAgICAgICAgICAiYnVuZGxlIiwKICAgICAgICAgICAgImp3YSIsCiAgICAgICAgICAgICJqd3QiLAogICAgICAgICAgICAic3ltZm9ueSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjIiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjIuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWhtYWMuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1MmUyYzI5OTQ0ZThmNDUxYWUwZTZiZjJkMTFlM2VkMTExOWQ3N2E0IgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0taG1hYy96aXBiYWxsLzUyZTJjMjk5NDRlOGY0NTFhZTBlNmJmMmQxMWUzZWQxMTE5ZDc3YTQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjUyZTJjMjk5NDRlOGY0NTFhZTBlNmJmMmQxMWUzZWQxMTE5ZDc3YTQiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE5LTAxLTEwVDExOjQ5OjExKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICIiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkhNQUMgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICJKV0UiLAogICAgICAgICAgICAiSldLIiwKICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICJKV1MiLAogICAgICAgICAgICAiSm90IiwKICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAiUkZDNzUxNiIsCiAgICAgICAgICAgICJSRkM3NTE3IiwKICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAiUkZDNzUxOSIsCiAgICAgICAgICAgICJSRkM3NTIwIiwKICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICJqd2EiLAogICAgICAgICAgICAiand0IiwKICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxMDE0YTMyZjZlM2M5MjY0OTZmNDNiMjQ4MGFmMWNiYjVjOGJkNzdkIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy93ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tZWRkc2EvemlwYmFsbC8xMDE0YTMyZjZlM2M5MjY0OTZmNDNiMjQ4MGFmMWNiYjVjOGJkNzdkIiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxMDE0YTMyZjZlM2M5MjY0OTZmNDNiMjQ4MGFmMWNiYjVjOGJkNzdkIiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlIjogIl4xLjMiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMHxeNy4wIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxOS0wMy0xMVQxMjo1OToxNCswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAiIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJFZERTQSBTaWduYXR1cmUgQWxnb3JpdGhtIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgIkpPU0UiLAogICAgICAgICAgICAiSldFIiwKICAgICAgICAgICAgIkpXSyIsCiAgICAgICAgICAgICJKV0tTZXQiLAogICAgICAgICAgICAiSldTIiwKICAgICAgICAgICAgIkpvdCIsCiAgICAgICAgICAgICJSRkM3NTE1IiwKICAgICAgICAgICAgIlJGQzc1MTYiLAogICAgICAgICAgICAiUkZDNzUxNyIsCiAgICAgICAgICAgICJSRkM3NTE4IiwKICAgICAgICAgICAgIlJGQzc1MTkiLAogICAgICAgICAgICAiUkZDNzUyMCIsCiAgICAgICAgICAgICJidW5kbGUiLAogICAgICAgICAgICAiandhIiwKICAgICAgICAgICAgImp3dCIsCiAgICAgICAgICAgICJzeW1mb255IgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjIiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjIuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDc5MDAyMjhlOTBmMjc5MzZlYjY5NTFhYzI5YmFhMGFlN2FmMzgwNCIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvd2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhL3ppcGJhbGwvZDc5MDAyMjhlOTBmMjc5MzZlYjY5NTFhYzI5YmFhMGFlN2FmMzgwNCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZDc5MDAyMjhlOTBmMjc5MzZlYjY5NTFhYzI5YmFhMGFlN2FmMzgwNCIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZSI6ICJeMS4zIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDEtMTBUMTE6NDk6MTErMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXEFsZ29yaXRobVxcIjogIiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUvY29udHJpYnV0b3JzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiRUNEU0EgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiSk9TRSIsCiAgICAgICAgICAgICJKV0UiLAogICAgICAgICAgICAiSldLIiwKICAgICAgICAgICAgIkpXS1NldCIsCiAgICAgICAgICAgICJKV1MiLAogICAgICAgICAgICAiSm90IiwKICAgICAgICAgICAgIlJGQzc1MTUiLAogICAgICAgICAgICAiUkZDNzUxNiIsCiAgICAgICAgICAgICJSRkM3NTE3IiwKICAgICAgICAgICAgIlJGQzc1MTgiLAogICAgICAgICAgICAiUkZDNzUxOSIsCiAgICAgICAgICAgICJSRkM3NTIwIiwKICAgICAgICAgICAgImJ1bmRsZSIsCiAgICAgICAgICAgICJqd2EiLAogICAgICAgICAgICAiand0IiwKICAgICAgICAgICAgInN5bWZvbnkiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjEiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4zLjEuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3Byb21pc2VzLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTU5ZGE2Y2Y2MWQ4MDA2MDY0N2ZmNGQzZWIyYzAzYTJiYzY5NDY0NiIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL3Byb21pc2VzL3ppcGJhbGwvYTU5ZGE2Y2Y2MWQ4MDA2MDY0N2ZmNGQzZWIyYzAzYTJiYzY5NDY0NiIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTU5ZGE2Y2Y2MWQ4MDA2MDY0N2ZmNGQzZWIyYzAzYTJiYzY5NDY0NiIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjUuMCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC4wIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxNi0xMi0yMFQxMDowNzoxMSswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS40LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgInByb21pc2UiCiAgICAgICAgXQogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJyYWxvdXBoaWUvZ2V0YWxsaGVhZGVycyIsCiAgICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMi4wLjUuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcmFsb3VwaGllL2dldGFsbGhlYWRlcnMuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI1NjAxYzhhODNmYmJhN2VmNjc0YTczNjk0NTZkMTJmMWUwZDBlYWZhIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy96aXBiYWxsLzU2MDFjOGE4M2ZiYmE3ZWY2NzRhNzM2OTQ1NmQxMmYxZTBkMGVhZmEiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjU2MDFjOGE4M2ZiYmE3ZWY2NzRhNzM2OTQ1NmQxMmYxZTBkMGVhZmEiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIj49NS4zIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIn4zLjcuMCIsCiAgICAgICAgICAgICJzYXRvb3NoaS9waHAtY292ZXJhbGxzIjogIj49MS4wIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxNi0wMi0xMVQwNzowNToyNyswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAic3JjL2dldGFsbGhlYWRlcnMucGhwIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiUmFscGggS2hhdHRhciIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHBvbHlmaWxsIGZvciBnZXRhbGxoZWFkZXJzLiIKICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4wLjEuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNjU2MWJmMjhkNTIwMTU0ZTRiMGVjNzJiZTk1NDE4YWJlNmQ5MzYzIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtbWVzc2FnZS96aXBiYWxsL2Y2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImY2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIj49NS4zLjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE2LTA4LTA2VDE0OjM5OjUxKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgbWVzc2FnZXMiLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UiLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAiaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAidmVyc2lvbiI6ICIxLjUuMiIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjUuMi4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjlmODNkZGVkOTE3ODFhMDFjNjM1NzRlMzg3ZWFhNzY5YmU3NjkxMTUiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9wc3I3L3ppcGJhbGwvOWY4M2RkZWQ5MTc4MWEwMWM2MzU3NGUzODdlYWE3NjliZTc2OTExNSIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiOWY4M2RkZWQ5MTc4MWEwMWM2MzU3NGUzODdlYWE3NjliZTc2OTExNSIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjQuMCIsCiAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIn4xLjAiLAogICAgICAgICAgICAicmFsb3VwaGllL2dldGFsbGhlYWRlcnMiOiAiXjIuMC41IgogICAgICAgIH0sCiAgICAgICAgInByb3ZpZGUiOiB7CiAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC44LjM2IHx8IF41LjcuMjcgfHwgXjYuNS44IgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxOC0xMi0wNFQyMDo0Njo0NSswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS41LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAicHNyLTciLAogICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgICAgICJzdHJlYW0iLAogICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgInVybCIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAidmVyc2lvbiI6ICI2LjMuMyIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI2LjMuMy4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDA3YjBjYjg4MGFjZTg1YzliNjNjNWY5NTUxZGI0OThjYjJkNTBiYSIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL2d1enpsZS96aXBiYWxsLzQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAiZ3V6emxlaHR0cC9wcm9taXNlcyI6ICJeMS4wIiwKICAgICAgICAgICAgImd1enpsZWh0dHAvcHNyNyI6ICJeMS40IiwKICAgICAgICAgICAgInBocCI6ICI+PTUuNSIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjguMzUgfHwgXjUuNyB8fCBeNi40IHx8IF43LjAiLAogICAgICAgICAgICAicHNyL2xvZyI6ICJeMS4wIgogICAgICAgIH0sCiAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTA0LTIyVDE1OjQ2OjU2KzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LjMtZGV2IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgaXMgYSBQSFAgSFRUUCBjbGllbnQgbGlicmFyeSIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9ndXp6bGVwaHAub3JnLyIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiY2xpZW50IiwKICAgICAgICAgICAgImN1cmwiLAogICAgICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAiaHR0cCBjbGllbnQiLAogICAgICAgICAgICAicmVzdCIsCiAgICAgICAgICAgICJ3ZWIgc2VydmljZSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogIm1pbmlzaGxpbmsvd2ViLXB1c2giLAogICAgICAgICJ2ZXJzaW9uIjogInY1LjIuMyIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI1LjIuMy4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcHVzaC1saWJzL3dlYi1wdXNoLXBocC5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImRiM2JjYTkyZjE1MGUxOGJlNGU3N2VmYmRjOWQxMWQ0MGZlNDhkYjkiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYi1wdXNoLWxpYnMvd2ViLXB1c2gtcGhwL3ppcGJhbGwvZGIzYmNhOTJmMTUwZTE4YmU0ZTc3ZWZiZGM5ZDExZDQwZmU0OGRiOSIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZGIzYmNhOTJmMTUwZTE4YmU0ZTc3ZWZiZGM5ZDExZDQwZmU0OGRiOSIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJleHQtZ21wIjogIioiLAogICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi4yIiwKICAgICAgICAgICAgImxpYi1vcGVuc3NsIjogIioiLAogICAgICAgICAgICAicGhwIjogIl43LjEiLAogICAgICAgICAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJeMS4wIiwKICAgICAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlIjogIl4xLjAiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICJmcmllbmRzb2ZwaHAvcGhwLWNzLWZpeGVyIjogIl4yLjE0IiwKICAgICAgICAgICAgInBocHN0YW4vcGhwc3RhbiI6ICJeMC4xMSIsCiAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTktMDItMjVUMTg6NDM6NDcrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIk1pbmlzaGxpbmtcXFdlYlB1c2hcXCI6ICJzcmMiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJMb3VpcyBMYWdyYW5nZSIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAibGFncmFuZ2UubG91aXNAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vTWluaXNobGluayIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIldlYiBQdXNoIGxpYnJhcnkgZm9yIFBIUCIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcHVzaC1saWJzL3dlYi1wdXNoLXBocCIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiUHVzaCBBUEkiLAogICAgICAgICAgICAiV2ViUHVzaCIsCiAgICAgICAgICAgICJub3RpZmljYXRpb25zIiwKICAgICAgICAgICAgInB1c2giLAogICAgICAgICAgICAid2ViIgogICAgICAgIF0KICAgIH0KXQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CkNvcHlyaWdodCAoYykgTmlscyBBZGVybWFubiwgSm9yZGkgQm9nZ2lhbm8KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyMjIyB2LjIuMS4wICgyMDE4LTAzKQoqIGFkZCBzdXBwb3J0IGZvciBgYmNtYXRoYCBleHRlbnNpb24gKG1ha2luZyBgZ21wYCBvcHRpb25hbCk8YnI+CiAgaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzY4CgojIyMjIHYuMi4wLjEgJiB2LjEuNS4zICgyMDE3LTEyKQoqIGFkZCAuZ2l0YXR0cmlidXRlcyBmaWxlIHRvIHByZXZlbnQgZXhhbXBsZXMgYW5kIHRlc3RzIHRvIGJlIGluc3RhbGxlZCB2aWEgY29tcG9zZXIgd2hlbiAtLXByZWZlci1kaXN0IHdhcyBzZXQKCiMjIyMgdi4yLjAuMCAoMjAxNy0wOCkKKiByZW5hbWUgYEZHXEFTTjFcT2JqZWN0YCB0byBgRkdcQVNOMVxBU05PYmplY3RgIGJlY2F1c2UgYE9iamVjdGAgaXMgYSBzcGVjaWFsIGNsYXNzIG5hbWUgaW4gdGhlIG5leHQgbWFqb3IgUEhQIHJlbGVhc2UKICAtIHdoZW4geW91IHVwZ3JhZGUgeW91IGhhdmUgdG8gYWRhcHQgYWxsIGNvcnJlc3BvbmRpbmcgYHVzZWAgYW5kIGBleHRlbmRzYCBzdGF0ZW1lbnRzIGFzIHdlbGwgYXMgdHlwZSBoaW50cyBhbmQgYWxsCiAgICB1c2FnZXMgb2YgYE9iamVjdDo6ZnJvbUJpbmFyeSjigKYpYC4KKiAgZ2VuZXJhbGx5IGRyb3AgUEhQIDUuNiBzdXBwb3J0CgojIyMjIHYuMS41LjIgKDIwMTYtMTAtMjkpCiogYWxsb3cgZW1wdHkgb2N0ZXQgc3RyaW5ncwoKIyMjIyB2LjEuNS4xICgyMDE1LTEwLTAyKQoqIGFkZCBrZXl3b3JkcyB0byBjb21wb3Nlci5qc29uICh0aGlzIGlzIGEgdmVyc2lvbiBvbiBpdHMgb3duIHNvIHRoZSBrZXl3b3JkcyBhcmUgZm91bmQgb24gYSBzdGFibGUgdmVyc2lvbiBhdCBwYWNrYWdpc3Qub3JnKQoKIyMjIyB2LjEuNS4wICgyMDE1LTEwLTMwKQoqIGZpeCBhIGJ1ZyB0aGF0IHdvdWxkIHByZXZlbnQgeW91IGZyb20gZGVjb2RpbmcgY29udGV4dCBzcGVjaWZpYyB0YWdzIG9uIG11bHRpcGxlIG9iamVjdHMgWyM1N10oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9pc3N1ZXMvNTcpCiAgLSBgRXhwbGljaXRseVRhZ2dlZE9iamVjdDo6X19jb25zdHJ1Y3RgIGRvZXMgbm93IGFjY2VwdCBtdWx0aXBsZSBvYmplY3RzIHRvIGJlIHRhZ2dlZCB3aXRoIGEgc2luZ2xlIHRhZwogIC0gYEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6OmdldENvbnRlbnRgIHdpbGwgbm93IGFsd2F5cyByZXR1cm4gYW4gYXJyYXkgKGV2ZW4gaWYgb25seSBvbmUgb2JqZWN0IGlzIHRhZ2dlZCkKCiMjIyMgdi4xLjQuMiAoMjAxNS0wOS0yOSkKKiBmaXggYSBidWcgdGhhdCB3b3VsZCBwcmV2ZW50IHlvdSBmcm9tIGRlY29kaW5nIGVtcHR5IHRhZ2dlZCBvYmplY3RzIFsjNTddKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvaXNzdWVzLzU3KQoKIyMjIyB2LjEuNC4xCiogaW1wcm92ZSBleGNlcHRpb24gbWVzc2FnZXMgYW5kIGdlbmVyYWwgZXJyb3IgaGFuZGxpbmcgWyM1NV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9wdWxsLzU1KQoKIyMjIyB2LjEuNC4wCiogKipyZXF1aXJlIFBIUCA1LjYqKgoqIHN1cHBvcnQgYmlnIGludGVnZXJzIChjbG9zZXMgIzEgYW5kICMzNykKKiBlbmZvcmNlIG9uZSBjb2RlIHN0eWxlIHZpYSBbc3R5bGVjaS5pb11bOV0KKiB0cmFjayBjb2RlIGNvdmVyYWdlIHZpYSBbY292ZXJhbGxzLmlvXVsxMF0KKiByZXBsYWNlIG9ic29sZXRlIGBGR1xBU04xXEV4Y2VwdGlvblxHZW5lcmFsRXhjZXB0aW9uYCB3aXRoIGBcRXhjZXB0aW9uYAoqIGBDb25zdHJ1Y3RgIChgU2VxdWVuY2VgLCBgU2V0YCkgZG9lcyBub3cgaW1wbGVtZW50IGBBcnJheUFjY2Vzc2AsIGBDb3VudGFibGVgIGFuZCBgSXRlcmF0b3JgIHNvIGl0cyBlYXNpZXIgdG8gdXNlCiogYWRkIFtgVGVtcGxhdGVQYXJzZXJgXVsxMV0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZmdyb3NzZS9waHBhc24xIiwKICAgICJkZXNjcmlwdGlvbiI6ICJBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBBU04uMSBzdHJ1Y3R1cmVzIHVzaW5nIHRoZSBJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlcy4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL0ZHcm9zc2UvUEhQQVNOMSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGcmllZHJpY2ggR3Jvw59lIiwKICAgICAgICAgICAgImVtYWlsIjogImZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlIiwKICAgICAgICAgICAgInJvbGUiOiAiQXV0aG9yIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9GR3Jvc3NlL1BIUEFTTjEvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAia2V5d29yZHMiOiBbICJ4NjkwIiwgInguNjkwIiwgInguNTA5IiwgIng1MDkiLCAiYXNuMSIsICJhc24uMSIsICJiZXIiLCAiZGVyIiwgImJpbmFyeSIsICJlbmNvZGluZyIsICJkZWNvZGluZyIgXSwKCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49Ny4wLjAiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjYuMyIsCiAgICAgICAgInNhdG9vc2hpL3BocC1jb3ZlcmFsbHMiOiAifjIuMCIKICAgIH0sCiAgICAic3VnZ2VzdCI6IHsKICAgICAgICAiZXh0LWdtcCI6ICJHTVAgaXMgdGhlIHByZWZlcnJlZCBleHRlbnNpb24gZm9yIGJpZyBpbnRlZ2VyIGNhbGN1bGF0aW9ucyIsCiAgICAgICAgInBocC1jdXJsIjogIkZvciBsb2FkaW5nIE9JRCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3ZWIgaWYgdGhleSBoYXZlIG5vdCBiZWUgZGVmaW5lZCBzdGF0aWNhbGx5IgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJGR1xcIjogImxpYi8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiRkdcXFRlc3RcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0cmluZyBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKICAgIHByaXZhdGUgJGNoZWNrU3RyaW5nRm9ySWxsZWdhbENoYXJzID0gdHJ1ZTsKICAgIHByaXZhdGUgJGFsbG93ZWRDaGFyYWN0ZXJzID0gW107CgogICAgLyoqCiAgICAgKiBUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgQVNOLjEgY2xhc3NlcyB3aGljaCByZXByZXNlbnQgc29tZSBzdHJpbmcgb2YgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd0NoYXJhY3RlcigkY2hhcmFjdGVyKQogICAgewogICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXJhY3RlcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDaGFyYWN0ZXJzKC4uLiRjaGFyYWN0ZXJzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRjaGFyYWN0ZXJzIGFzICRjaGFyYWN0ZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAkY2hhcmFjdGVyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dOdW1iZXJzKCkKICAgIHsKICAgICAgICBmb3JlYWNoIChyYW5nZSgnMCcsICc5JykgYXMgJGNoYXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAoc3RyaW5nKSAkY2hhcjsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsTGV0dGVycygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93U21hbGxMZXR0ZXJzKCk7CiAgICAgICAgJHRoaXMtPmFsbG93Q2FwaXRhbExldHRlcnMoKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dTbWFsbExldHRlcnMoKQogICAgewogICAgICAgIGZvcmVhY2ggKHJhbmdlKCdhJywgJ3onKSBhcyAkY2hhcikgewogICAgICAgICAgICAkdGhpcy0+YWxsb3dlZENoYXJhY3RlcnNbXSA9ICRjaGFyOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWxsb3dDYXBpdGFsTGV0dGVycygpCiAgICB7CiAgICAgICAgZm9yZWFjaCAocmFuZ2UoJ0EnLCAnWicpIGFzICRjaGFyKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd2VkQ2hhcmFjdGVyc1tdID0gJGNoYXI7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvd1NwYWNlcygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzW10gPSAnICc7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93QWxsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMgPSBmYWxzZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+dmFsdWUpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2hlY2tTdHJpbmdGb3JJbGxlZ2FsQ2hhcnMpIHsKICAgICAgICAgICAgJHRoaXMtPmNoZWNrU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja1N0cmluZygpCiAgICB7CiAgICAgICAgJHN0cmluZ0xlbmd0aCA9ICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHN0cmluZ0xlbmd0aDsgJGkrKykgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHRoaXMtPnZhbHVlWyRpXSwgJHRoaXMtPmFsbG93ZWRDaGFyYWN0ZXJzKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHR5cGVOYW1lID0gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvdWxkIG5vdCBjcmVhdGUgYSB7JHR5cGVOYW1lfSBmcm9tIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgJ3skdGhpcy0+dmFsdWV9Jy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygnJyk7CgogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCAkcGFyc2VkT2JqZWN0LT5nZXRUeXBlKCksICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkc3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWQoJHN0cmluZykKICAgIHsKICAgICAgICAkdGVzdE9iamVjdCA9IG5ldyBzdGF0aWMoJHN0cmluZyk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRlc3RPYmplY3QtPmNoZWNrU3RyaW5nKCk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/AbstractTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBEYXRlSW50ZXJ2YWw7CnVzZSBEYXRlVGltZTsKdXNlIERhdGVUaW1lWm9uZTsKdXNlIEV4Y2VwdGlvbjsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGltZSBleHRlbmRzIEFTTk9iamVjdAp7CiAgICAvKiogQHZhciBEYXRlVGltZSAqLwogICAgcHJvdGVjdGVkICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIGlmICgkZGF0ZVRpbWUgPT0gbnVsbCB8fCBpc19zdHJpbmcoJGRhdGVUaW1lKSkgewogICAgICAgICAgICAkdGltZVpvbmUgPSBuZXcgRGF0ZVRpbWVab25lKCRkYXRlVGltZVpvbmUpOwogICAgICAgICAgICAkZGF0ZVRpbWVPYmplY3QgPSBuZXcgRGF0ZVRpbWUoJGRhdGVUaW1lLCAkdGltZVpvbmUpOwogICAgICAgICAgICBpZiAoJGRhdGVUaW1lT2JqZWN0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkZXJyb3JNZXNzYWdlID0gJHRoaXMtPmdldExhc3REYXRlVGltZUVycm9ycygpOwogICAgICAgICAgICAgICAgJGNsYXNzTmFtZSA9IElkZW50aWZpZXI6OmdldE5hbWUoJHRoaXMtPmdldFR5cGUoKSk7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoIkNvdWxkIG5vdCBjcmVhdGUgJXMgZnJvbSBkYXRlIHRpbWUgc3RyaW5nICclcyc6ICVzIiwgJGNsYXNzTmFtZSwgJGRhdGVUaW1lLCAkZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRhdGVUaW1lID0gJGRhdGVUaW1lT2JqZWN0OwogICAgICAgIH0gZWxzZWlmICghJGRhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZVRpbWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBmaXJzdCBhcmd1bWVudCBmb3Igc29tZSBpbnN0YW5jZSBvZiBBYnN0cmFjdFRpbWUgY29uc3RydWN0b3InKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICRkYXRlVGltZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGFzdERhdGVUaW1lRXJyb3JzKCkKICAgIHsKICAgICAgICAkbWVzc2FnZXMgPSAnJzsKICAgICAgICAkbGFzdEVycm9ycyA9IERhdGVUaW1lOjpnZXRMYXN0RXJyb3JzKCk7CiAgICAgICAgZm9yZWFjaCAoJGxhc3RFcnJvcnNbJ2Vycm9ycyddIGFzICRlcnJvck1lc3NhZ2UpIHsKICAgICAgICAgICAgJG1lc3NhZ2VzIC49ICJ7JGVycm9yTWVzc2FnZX0sICI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Vic3RyKCRtZXNzYWdlcywgMCwgLTIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlLT5mb3JtYXQoIlktbS1kXHRIOmk6cyIpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXh0cmFjdFRpbWVab25lRGF0YSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXgsIERhdGVUaW1lICRkYXRlVGltZSkKICAgIHsKICAgICAgICAkc2lnbiA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKICAgICAgICAkdGltZU9mZnNldEhvdXJzICAgPSBpbnR2YWwoc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDIpKTsKICAgICAgICAkdGltZU9mZnNldE1pbnV0ZXMgPSBpbnR2YWwoc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXggKyAyLCAyKSk7CiAgICAgICAgJG9mZnNldEluZGV4ICs9IDQ7CgogICAgICAgICRpbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoIlBUeyR0aW1lT2Zmc2V0SG91cnN9SHskdGltZU9mZnNldE1pbnV0ZXN9TSIpOwogICAgICAgIGlmICgkc2lnbiA9PSAnKycpIHsKICAgICAgICAgICAgJGRhdGVUaW1lLT5zdWIoJGludGVydmFsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGF0ZVRpbWUtPmFkZCgkaW50ZXJ2YWwpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRlVGltZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ASNObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCaXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCb29sZWFuOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcRW51bWVyYXRlZDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdlbmVyYWxpemVkVGltZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEludGVnZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVVENUaW1lOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVtZXJpY1N0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFVURjhTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxVbml2ZXJzYWxTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxDaGFyYWN0ZXJTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxHZW5lcmFsU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVmlzaWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEdyYXBoaWNTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxCTVBTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxUNjFTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3REZXNjcmlwdG9yOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgTG9naWNFeGNlcHRpb247CgovKioKICogQ2xhc3MgQVNOT2JqZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY29uY3JldGUgQVNOLjEgb2JqZWN0cy4KICovCmFic3RyYWN0IGNsYXNzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbnRlbnRMZW5ndGg7CiAgICBwcml2YXRlICRuck9mTGVuZ3RoT2N0ZXRzOwoKICAgIC8qKgogICAgICogTXVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBvY3RldHMgb2YgdGhlIGNvbnRlbnQgcGFydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpOwoKICAgIC8qKgogICAgICogRW5jb2RlIHRoZSBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjY5MCNERVJfZW5jb2RpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdHMgdmFsdWUKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBjb250ZW50IG9mIHRoaXMgb2JqZWN0IGluIGEgbm9uIGVuY29kZWQgZm9ybS4KICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbnQgdGhlIHZhbHVlIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBvYmplY3QgdHlwZSBvY3RldC4KICAgICAqIFRoaXMgc2hvdWxkIHVzZSB0aGUgY2xhc3MgY29uc3RhbnRzIG9mIElkZW50aWZpZXIuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGlkZW50aWZpZXIgb2N0ZXRzLiBJZiBhbiBpbmhlcml0aW5nIGNsYXNzIG1vZGVscyBhIHRhZyB3aXRoCiAgICAgKiB0aGUgbG9uZyBmb3JtIGlkZW50aWZpZXIgZm9ybWF0LCBpdCBNVVNUIHJlaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvCiAgICAgKiByZXR1cm4gYWxsIG9jdGV0cyBvZiB0aGUgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBAdGhyb3dzIExvZ2ljRXhjZXB0aW9uIElmIHRoZSBpZGVudGlmaWVyIGZvcm1hdCBpcyBsb25nIGZvcm0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBJZGVudGlmaWVyIGFzIGEgc2V0IG9mIG9jdGV0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSAkdGhpcy0+Z2V0VHlwZSgpOwoKICAgICAgICBpZiAoSWRlbnRpZmllcjo6aXNMb25nRm9ybSgkZmlyc3RPY3RldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0lkZW50aWZpZXIgb2YgJXMgdXNlcyB0aGUgbG9uZyBmb3JtIGFuZCBtdXN0IHRoZXJlZm9yIG92ZXJyaWRlICJBU05PYmplY3Q6OmdldElkZW50aWZpZXIoKSIuJywgZ2V0X2NsYXNzKCR0aGlzKSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNvZGUgdGhpcyBvYmplY3QgdXNpbmcgREVSIGVuY29kaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBmdWxsIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxldGUgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaW5hcnkoKQogICAgewogICAgICAgICRyZXN1bHQgID0gJHRoaXMtPmdldElkZW50aWZpZXIoKTsKICAgICAgICAkcmVzdWx0IC49ICR0aGlzLT5jcmVhdGVMZW5ndGhQYXJ0KCk7CiAgICAgICAgJHJlc3VsdCAuPSAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlTGVuZ3RoUGFydCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkdGhpcy0+Z2V0Q29udGVudExlbmd0aCgpOwogICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJHRoaXMtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgaWYgKCRuck9mTGVuZ3RoT2N0ZXRzID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGNocigkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGxlbmd0aCBvY3RldCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgc3Vic2VxdWVudCBsZW5ndGggb2N0ZXRzCiAgICAgICAgICAgICRsZW5ndGhPY3RldHMgPSBjaHIoMHg4MCB8ICgkbnJPZkxlbmd0aE9jdGV0cyAtIDEpKTsKICAgICAgICAgICAgZm9yICgkc2hpZnRMZW5ndGggPSA4ICogKCRuck9mTGVuZ3RoT2N0ZXRzIC0gMik7ICRzaGlmdExlbmd0aCA+PSAwOyAkc2hpZnRMZW5ndGggLT0gOCkgewogICAgICAgICAgICAgICAgJGxlbmd0aE9jdGV0cyAuPSBjaHIoJGNvbnRlbnRMZW5ndGggPj4gJHNoaWZ0TGVuZ3RoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRsZW5ndGhPY3RldHM7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+bnJPZkxlbmd0aE9jdGV0cykpIHsKICAgICAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMgPSAxOwogICAgICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPiAxMjcpIHsKICAgICAgICAgICAgICAgIGRvIHsgLy8gbG9uZyBmb3JtCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHMrKzsKICAgICAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoID4+IDg7CiAgICAgICAgICAgICAgICB9IHdoaWxlICgkY29udGVudExlbmd0aCA+IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZMZW5ndGhPY3RldHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmNvbnRlbnRMZW5ndGgpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250ZW50TGVuZ3RoID0gJHRoaXMtPmNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0Q29udGVudExlbmd0aCgkbmV3Q29udGVudExlbmd0aCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9ICRuZXdDb250ZW50TGVuZ3RoOwogICAgICAgICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkbmV3Q29udGVudExlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHdob2xlIG9iamVjdCAoaW5jbHVkaW5nIHRoZSBpZGVudGlmaWVyIGFuZCBsZW5ndGggb2N0ZXRzKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9iamVjdExlbmd0aCgpCiAgICB7CiAgICAgICAgJG5yT2ZJZGVudGlmaWVyT2N0ZXRzID0gc3RybGVuKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gJHRoaXMtPmdldENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAkbnJPZkxlbmd0aE9jdGV0cyA9ICR0aGlzLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkbnJPZklkZW50aWZpZXJPY3RldHMgKyAkbnJPZkxlbmd0aE9jdGV0cyArICRjb250ZW50TGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbnRlbnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEFTTi4xIFR5cGUgb2YgdGhpcyBvYmplY3QuCiAgICAgKgogICAgICogQHNlZSBJZGVudGlmaWVyOjpnZXROYW1lKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGVOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Z2V0TmFtZSgkdGhpcy0+Z2V0VHlwZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRiaW5hcnlEYXRhKSA8PSAkb2Zmc2V0SW5kZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ2FuIG5vdCBwYXJzZSBiaW5hcnkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnRleHRTcGVjaWZpY0NsYXNzKCRpZGVudGlmaWVyT2N0ZXQpICYmIElkZW50aWZpZXI6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgcmV0dXJuIEV4cGxpY2l0bHlUYWdnZWRPYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRpZGVudGlmaWVyT2N0ZXQpIHsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCSVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gQml0U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbjo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuIEVudW1lcmF0ZWQ6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6SU5URUdFUjoKICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTEw6CiAgICAgICAgICAgICAgICByZXR1cm4gTnVsbE9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RJZGVudGlmaWVyOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDoKICAgICAgICAgICAgICAgIHJldHVybiBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gT2N0ZXRTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVuY2U6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6U0VUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNldDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiBVVENUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhbGl6ZWRUaW1lOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OklBNV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gSUE1U3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gUHJpbnRhYmxlU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gVVRGOFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFVuaXZlcnNhbFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3RlclN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmFsU3RyaW5nOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBjYXNlIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVTdHJpbmc6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIGNhc2UgSWRlbnRpZmllcjo6R1JBUEhJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY1N0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIEJNUFN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuIFQ2MVN0cmluZzo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgY2FzZSBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3REZXNjcmlwdG9yOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaWRlbnRpZmllciBtYXkgYmUgPjEgYnl0ZS4KICAgICAgICAgICAgICAgIGlmIChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmtub3duQ29uc3RydWN0ZWRPYmplY3QoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6cGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICRsZW5ndGhPZlVua25vd25PYmplY3QgPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgJG9mZnNldEluZGV4ICs9ICRsZW5ndGhPZlVua25vd25PYmplY3Q7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5rbm93bk9iamVjdCgkaWRlbnRpZmllciwgJGxlbmd0aE9mVW5rbm93bk9iamVjdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VJZGVudGlmaWVyKCRpZGVudGlmaWVyT2N0ZXQsICRleHBlY3RlZElkZW50aWZpZXIsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZykKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRpZGVudGlmaWVyT2N0ZXQpIHx8IGlzX251bWVyaWMoJGlkZW50aWZpZXJPY3RldCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IG9yZCgkaWRlbnRpZmllck9jdGV0KTsKICAgICAgICB9CgogICAgICAgIGlmICgkaWRlbnRpZmllck9jdGV0ICE9ICRleHBlY3RlZElkZW50aWZpZXIpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSAnQ2FuIG5vdCBjcmVhdGUgYW4gJy5JZGVudGlmaWVyOjpnZXROYW1lKCRleHBlY3RlZElkZW50aWZpZXIpLicgZnJvbSBhbiAnLklkZW50aWZpZXI6OmdldE5hbWUoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJG1lc3NhZ2UsICRvZmZzZXRGb3JFeGNlcHRpb25IYW5kbGluZyk7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VCaW5hcnlJZGVudGlmaWVyKCRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4KQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaWRlbnRpZmllciA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKCiAgICAgICAgaWYgKElkZW50aWZpZXI6OmlzTG9uZ0Zvcm0ob3JkKCRpZGVudGlmaWVyKSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHN0cmxlbigkYmluYXJ5RGF0YSkgPD0gJG9mZnNldEluZGV4KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGlkZW50aWZpZXIgKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5leHRPY3RldCA9ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXTsKICAgICAgICAgICAgJGlkZW50aWZpZXIgLj0gJG5leHRPY3RldDsKCiAgICAgICAgICAgIGlmICgob3JkKCRuZXh0T2N0ZXQpICYgMHg4MCkgPT09IDApIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyAwIHRvIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VDb250ZW50TGVuZ3RoKCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCwgJG1pbmltdW1MZW5ndGggPSAwKQogICAgewogICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogT2Zmc2V0IGluZGV4IGxhcmdlciB0aGFuIGlucHV0IHNpemUnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICBpZiAoKCRjb250ZW50TGVuZ3RoICYgMHg4MCkgIT0gMCkgewogICAgICAgICAgICAvLyBiaXQgOCBpcyBzZXQgLT4gdGhpcyBpcyB0aGUgbG9uZyBmb3JtCiAgICAgICAgICAgICRuck9mTGVuZ3RoT2N0ZXRzID0gJGNvbnRlbnRMZW5ndGggJiAweDdGOwogICAgICAgICAgICAkY29udGVudExlbmd0aCA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgweDAwKTsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZMZW5ndGhPY3RldHM7ICRpKyspIHsKICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oJGJpbmFyeURhdGEpIDw9ICRvZmZzZXRJbmRleCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgY29udGVudCBsZW5ndGggKGxvbmcgZm9ybSkgZnJvbSBkYXRhOiBPZmZzZXQgaW5kZXggbGFyZ2VyIHRoYW4gaW5wdXQgc2l6ZScsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY29udGVudExlbmd0aCA9ICRjb250ZW50TGVuZ3RoLT5zaGlmdExlZnQoOCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY29udGVudExlbmd0aC0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCJDYW4gbm90IHBhcnNlIGNvbnRlbnQgbGVuZ3RoIGZyb20gZGF0YTogbGVuZ3RoID4gbWF4aW11bSBpbnRlZ2VyIiwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGNvbnRlbnRMZW5ndGggPSAkY29udGVudExlbmd0aC0+dG9JbnRlZ2VyKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAkbWluaW11bUxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdBICcuZ2V0X2NhbGxlZF9jbGFzcygpLiIgc2hvdWxkIGhhdmUgYSBjb250ZW50IGxlbmd0aCBvZiBhdCBsZWFzdCB7JG1pbmltdW1MZW5ndGh9LiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRsZW5EYXRhUmVtYWluaW5nID0gc3RybGVuKCRiaW5hcnlEYXRhKSAtICRvZmZzZXRJbmRleDsKCiAgICAgICAgaWYgKCRsZW5EYXRhUmVtYWluaW5nIDwgJGNvbnRlbnRMZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGVudCBsZW5ndGggeyRjb250ZW50TGVuZ3RofSBleGNlZWRzIHJlbWFpbmluZyBkYXRhIGxlbmd0aCB7JGxlbkRhdGFSZW1haW5pbmd9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudExlbmd0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Base128.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBGR1xBU04xOwoKdXNlIEZHXFV0aWxpdHlcQmlnSW50ZWdlcjsKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKCi8qKgogKiBBIGJhc2UtMTI4IGRlY29kZXIuCiAqLwpjbGFzcyBCYXNlMTI4CnsKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgkdmFsdWUpCiAgICB7CiAgICAgICAgJHZhbHVlID0gQmlnSW50ZWdlcjo6Y3JlYXRlKCR2YWx1ZSk7CiAgICAgICAgJG9jdGV0cyA9IGNocigkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKCiAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIHdoaWxlICgkdmFsdWUtPmNvbXBhcmUoMCkgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgLj0gY2hyKDB4ODAgfCAkdmFsdWUtPm1vZHVsdXMoMHg4MCktPnRvSW50ZWdlcigpKTsKICAgICAgICAgICAgJHZhbHVlID0gJHZhbHVlLT5zaGlmdFJpZ2h0KDcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0cnJldigkb2N0ZXRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9jdGV0cwogICAgICoKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBnaXZlbiBvY3RldHMgcmVwcmVzZW50IGEgbWFsZm9ybWVkIGJhc2UtMTI4IHZhbHVlIG9yIHRoZSBkZWNvZGVkIHZhbHVlIHdvdWxkIGV4Y2VlZCB0aGUgdGhlIG1heGltdW0gaW50ZWdlciBsZW5ndGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZSgkb2N0ZXRzKQogICAgewogICAgICAgICRiaXRzUGVyT2N0ZXQgPSA3OwogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgwKTsKICAgICAgICAkaSA9IDA7CgogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9jdGV0c1skaV0pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ01hbGZvcm1lZCBiYXNlLTEyOCBlbmNvZGVkIHZhbHVlICgweCVzKS4nLCBzdHJ0b3VwcGVyKGJpbjJoZXgoJG9jdGV0cykpID86ICcwJykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb2N0ZXQgPSBvcmQoJG9jdGV0c1skaSsrXSk7CgogICAgICAgICAgICAkbDEgPSAkdmFsdWUtPnNoaWZ0TGVmdCgkYml0c1Blck9jdGV0KTsKICAgICAgICAgICAgJHIxID0gJG9jdGV0ICYgMHg3ZjsKICAgICAgICAgICAgJHZhbHVlID0gJGwxLT5hZGQoJHIxKTsKCiAgICAgICAgICAgIGlmICgwID09PSAoJG9jdGV0ICYgMHg4MCkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKHN0cmluZykkdmFsdWU7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/AttributeTypeAndValue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBPYmplY3RJZGVudGlmaWVyfHN0cmluZyAkb2JqSWRlbnRpZmllcgogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmpJZGVudGlmaWVyLCBBU05PYmplY3QgJHZhbHVlKQogICAgewogICAgICAgIGlmICgkb2JqSWRlbnRpZmllciBpbnN0YW5jZW9mIE9iamVjdElkZW50aWZpZXIgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJG9iaklkZW50aWZpZXIgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigkb2JqSWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXIsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5bMF0uJzogJy4kdGhpcy0+Y2hpbGRyZW5bMV07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RDNString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcUHJpbnRhYmxlU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcVVRGOFN0cmluZzsKCmNsYXNzIFJETlN0cmluZyBleHRlbmRzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmplY3RJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXEFTTk9iamVjdCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3RJZGVudGlmaWVyU3RyaW5nLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKFByaW50YWJsZVN0cmluZzo6aXNWYWxpZCgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBQcmludGFibGVTdHJpbmcoJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoSUE1U3RyaW5nOjppc1ZhbGlkKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBJQTVTdHJpbmcoJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IG5ldyBVVEY4U3RyaW5nKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Composite/RelativeDistinguishedName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxDb21wb3NpdGU7Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cTm90SW1wbGVtZW50ZWRFeGNlcHRpb247CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNldDsKCmNsYXNzIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgZXh0ZW5kcyBTZXQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfFxGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyICRvYmpJZGVudGlmaWVyU3RyaW5nCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iaklkZW50aWZpZXJTdHJpbmcsIEFTTk9iamVjdCAkdmFsdWUpCiAgICB7CiAgICAgICAgLy8gVE9ETzogVGhpcyBkb2VzIG9ubHkgc3VwcG9ydCBvbmUgZWxlbWVudCBpbiB0aGUgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSBTZXQgYnV0IGl0IGl0IGlzIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgICAvLyBSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIDo6PSBTRVQgU0laRSAoMS4uTUFYKSBPRiBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KG5ldyBBdHRyaWJ1dGVUeXBlQW5kVmFsdWUoJG9iaklkZW50aWZpZXJTdHJpbmcsICR2YWx1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJGZpcnN0T2JqZWN0ICovCiAgICAgICAgJGZpcnN0T2JqZWN0ID0gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgICAgIHJldHVybiAkZmlyc3RPYmplY3QtPl9fdG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEF0IHRoZSBjdXJyZW50IHZlcnNpb24gdGhpcyBjb2RlIGNhbiBub3Qgd29yayBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ29uc3RydWN0IHJlcXVpcmVzCiAgICAgKiB0aGUgY2xhc3MgdG8gc3VwcG9ydCBhIGNvbnN0cnVjdG9yIHdpdGhvdXQgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCEgRmVlbCBmcmVlIHRvIHN1Ym1pdCBhIHB1bGwgcmVxdWVzdCBvbiBnaXRodWIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKiBAdGhyb3dzIE5vdEltcGxlbWVudGVkRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Construct.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBBcnJheUFjY2VzczsKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBDb3VudGFibGU7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBJdGVyYXRvcjsKCmFic3RyYWN0IGNsYXNzIENvbnN0cnVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIENvdW50YWJsZSwgQXJyYXlBY2Nlc3MsIEl0ZXJhdG9yLCBQYXJzYWJsZQp7CiAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3RbXSAqLwogICAgcHJvdGVjdGVkICRjaGlsZHJlbjsKICAgIHByaXZhdGUgJGl0ZXJhdG9yUG9zaXRpb247CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0W10gJGNoaWxkcmVuIHRoZSB2YXJpYWRpYyB0eXBlIGhpbnQgaXMgY29tbWVudGVkIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaGh2bS9pc3N1ZXMvNDg1OAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRjaGlsZHJlbikKICAgIHsKICAgICAgICAkdGhpcy0+Y2hpbGRyZW4gPSAkY2hpbGRyZW47CiAgICAgICAgJHRoaXMtPml0ZXJhdG9yUG9zaXRpb24gPSAwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uID0gMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jaGlsZHJlblskdGhpcy0+aXRlcmF0b3JQb3NpdGlvbl07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pdGVyYXRvclBvc2l0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkKICAgIHsKICAgICAgICAkdGhpcy0+aXRlcmF0b3JQb3NpdGlvbisrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5jaGlsZHJlblskdGhpcy0+aXRlcmF0b3JQb3NpdGlvbl0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygkb2Zmc2V0LCAkdGhpcy0+Y2hpbGRyZW4pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuWyRvZmZzZXRdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKQogICAgewogICAgICAgIGlmICgkb2Zmc2V0ID09PSBudWxsKSB7CiAgICAgICAgICAgICRvZmZzZXQgPSBjb3VudCgkdGhpcy0+Y2hpbGRyZW4pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmNoaWxkcmVuWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jaGlsZHJlblskb2Zmc2V0XSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jaGlsZHJlbiBhcyAkY29tcG9uZW50KSB7CiAgICAgICAgICAgICRsZW5ndGggKz0gJGNvbXBvbmVudC0+Z2V0T2JqZWN0TGVuZ3RoKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNoaWxkcmVuIGFzICRjb21wb25lbnQpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAkY29tcG9uZW50LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZChBU05PYmplY3QgJGNoaWxkKQogICAgewogICAgICAgICR0aGlzLT5jaGlsZHJlbltdID0gJGNoaWxkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDaGlsZHJlbihhcnJheSAkY2hpbGRyZW4pCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGNoaWxkcmVuIGFzICRjaGlsZCkgewogICAgICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGNoaWxkKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRuck9mQ2hpbGRyZW4gPSAkdGhpcy0+Z2V0TnVtYmVyT2ZDaGlsZHJlbigpOwogICAgICAgICRjaGlsZFN0cmluZyA9ICRuck9mQ2hpbGRyZW4gPT0gMSA/ICdjaGlsZCcgOiAnY2hpbGRyZW4nOwoKICAgICAgICByZXR1cm4gIlt7JG5yT2ZDaGlsZHJlbn0geyRjaGlsZFN0cmluZ31dIjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5jaGlsZHJlbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxGR1xBU04xXEFTTk9iamVjdFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jaGlsZHJlbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdENoaWxkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuWzBdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXgKICAgICAqCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbnN0cnVjdHxzdGF0aWMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzdGF0aWMoKTsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgJHBhcnNlZE9iamVjdC0+Z2V0VHlwZSgpLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgJHN0YXJ0SW5kZXggPSAkb2Zmc2V0SW5kZXg7CgogICAgICAgICRjaGlsZHJlbiA9IFtdOwogICAgICAgICRvY3RldHNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKICAgICAgICB3aGlsZSAoJG9jdGV0c1RvUmVhZCA+IDApIHsKICAgICAgICAgICAgJG5ld0NoaWxkID0gQVNOT2JqZWN0Ojpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICAkb2N0ZXRzVG9SZWFkIC09ICRuZXdDaGlsZC0+Z2V0T2JqZWN0TGVuZ3RoKCk7CiAgICAgICAgICAgICRjaGlsZHJlbltdID0gJG5ld0NoaWxkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvY3RldHNUb1JlYWQgIT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiU2VxdWVuY2UgbGVuZ3RoIGluY29ycmVjdCIsICRzdGFydEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRPYmplY3QtPmFkZENoaWxkcmVuKCRjaGlsZHJlbik7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgkbW9kZSA9IENPVU5UX05PUk1BTCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmNoaWxkcmVuLCAkbW9kZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEFycmF5SXRlcmF0b3IoJHRoaXMtPmNoaWxkcmVuKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/NotImplementedException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24Kewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Exception/ParserException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxFeGNlcHRpb247CgpjbGFzcyBQYXJzZXJFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uCnsKICAgIHByaXZhdGUgJGVycm9yTWVzc2FnZTsKICAgIHByaXZhdGUgJG9mZnNldDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGVycm9yTWVzc2FnZSwgJG9mZnNldCkKICAgIHsKICAgICAgICAkdGhpcy0+ZXJyb3JNZXNzYWdlID0gJGVycm9yTWVzc2FnZTsKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCJBU04uMSBQYXJzZXIgRXhjZXB0aW9uIGF0IG9mZnNldCB7JHRoaXMtPm9mZnNldH06IHskdGhpcy0+ZXJyb3JNZXNzYWdlfSIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b2Zmc2V0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/ExplicitlyTaggedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogQ2xhc3MgRXhwbGljaXRseVRhZ2dlZE9iamVjdCBkZWNvcmF0ZSBhbiBpbm5lciBvYmplY3Qgd2l0aCBhbiBhZGRpdGlvbmFsIHRhZyB0aGF0IGdpdmVzIGluZm9ybWF0aW9uIGFib3V0CiAqIGl0cyBjb250ZXh0IHNwZWNpZmljIG1lYW5pbmcuCiAqCiAqIEV4cGxhbmF0aW9uIHRha2VuIGZyb20gQSBMYXltYW4ncyBHdWlkZSB0byBhIFN1YnNldCBvZiBBU04uMSwgQkVSLCBhbmQgREVSOgogKiA+Pj4gQW4gUlNBIExhYm9yYXRvcmllcyBUZWNobmljYWwgTm90ZQogKiA+Pj4gQnVydG9uIFMuIEthbGlza2kgSnIuCiAqID4+PiBSZXZpc2VkIE5vdmVtYmVyIDEsIDE5OTMKICoKICogWy4uLl0KICogRXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbSBvdGhlciB0eXBlcyBieSBhZGRpbmcgYW4gb3V0ZXIgdGFnIHRvIHRoZSB1bmRlcmx5aW5nIHR5cGUuCiAqIEluIGVmZmVjdCwgZXhwbGljaXRseSB0YWdnZWQgdHlwZXMgYXJlIHN0cnVjdHVyZWQgdHlwZXMgY29uc2lzdGluZyBvZiBvbmUgY29tcG9uZW50LCB0aGUgdW5kZXJseWluZyB0eXBlLgogKiBFeHBsaWNpdCB0YWdnaW5nIGlzIGRlbm90ZWQgYnkgdGhlIEFTTi4xIGtleXdvcmRzIFtjbGFzcyBudW1iZXJdIEVYUExJQ0lUIChzZWUgU2VjdGlvbiA1LjIpLgogKiBbLi4uXQogKgogKiBAc2VlIGh0dHA6Ly9sdWNhLm50b3Aub3JnL1RlYWNoaW5nL0FwcHVudGkvYXNuMS5odG1sCiAqLwpjbGFzcyBFeHBsaWNpdGx5VGFnZ2VkT2JqZWN0IGV4dGVuZHMgQVNOT2JqZWN0CnsKICAgIC8qKiBAdmFyIFxGR1xBU04xXEFTTk9iamVjdFtdICovCiAgICBwcml2YXRlICRkZWNvcmF0ZWRPYmplY3RzOwogICAgcHJpdmF0ZSAkdGFnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGFnCiAgICAgKiBAcGFyYW0gXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3RzLC4uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhZywgLyogSEhfRklYTUVbNDg1OF06IHZhcmlhZGljICsgc3RyaWN0ICovIC4uLiRvYmplY3RzKQogICAgewogICAgICAgICR0aGlzLT50YWcgPSAkdGFnOwogICAgICAgICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzID0gJG9iamVjdHM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgICRsZW5ndGggPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJGxlbmd0aCArPSAkb2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRlY29yYXRlZE9iamVjdHMgYXMgJG9iamVjdCkgewogICAgICAgICAgICAkZW5jb2RlZCAuPSAkb2JqZWN0LT5nZXRCaW5hcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZW5jb2RlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWNvcmF0ZWRPYmplY3RzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRsZW5ndGggPSBjb3VudCgkdGhpcy0+ZGVjb3JhdGVkT2JqZWN0cykpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyBlbXB0eSBvYmplY3Qgd2l0aCB0YWcgW3skdGhpcy0+dGFnfV0iOwogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgJGRlY29yYXRlZFR5cGUgPSBJZGVudGlmaWVyOjpnZXRTaG9ydE5hbWUoJHRoaXMtPmRlY29yYXRlZE9iamVjdHNbMF0tPmdldFR5cGUoKSk7CiAgICAgICAgICAgIHJldHVybiAiQ29udGV4dCBzcGVjaWZpYyAkZGVjb3JhdGVkVHlwZSB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICIkbGVuZ3RoIGNvbnRleHQgc3BlY2lmaWMgb2JqZWN0cyB3aXRoIHRhZyBbeyR0aGlzLT50YWd9XSI7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gb3JkKCR0aGlzLT5nZXRJZGVudGlmaWVyKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmNyZWF0ZShJZGVudGlmaWVyOjpDTEFTU19DT05URVhUX1NQRUNJRklDLCB0cnVlLCAkdGhpcy0+dGFnKTsKCiAgICAgICAgcmV0dXJuIGlzX2ludCgkaWRlbnRpZmllcikgPyBjaHIoJGlkZW50aWZpZXIpIDogJGlkZW50aWZpZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50YWc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjpwYXJzZUJpbmFyeUlkZW50aWZpZXIoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgJGZpcnN0SWRlbnRpZmllck9jdGV0ID0gb3JkKCRpZGVudGlmaWVyKTsKICAgICAgICBhc3NlcnQoSWRlbnRpZmllcjo6aXNDb250ZXh0U3BlY2lmaWNDbGFzcygkZmlyc3RJZGVudGlmaWVyT2N0ZXQpLCAnaWRlbnRpZmllciBvY3RldCBzaG91bGQgaW5kaWNhdGUgY29udGV4dCBzcGVjaWZpYyBjbGFzcycpOwogICAgICAgIGFzc2VydChJZGVudGlmaWVyOjppc0NvbnN0cnVjdGVkKCRmaXJzdElkZW50aWZpZXJPY3RldCksICdpZGVudGlmaWVyIG9jdGV0IHNob3VsZCBpbmRpY2F0ZSBjb25zdHJ1Y3RlZCBvYmplY3QnKTsKICAgICAgICAkdGFnID0gSWRlbnRpZmllcjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKCiAgICAgICAgJHRvdGFsQ29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkcmVtYWluaW5nQ29udGVudExlbmd0aCA9ICR0b3RhbENvbnRlbnRMZW5ndGg7CgogICAgICAgICRvZmZzZXRJbmRleE9mRGVjb3JhdGVkT2JqZWN0ID0gJG9mZnNldEluZGV4OwogICAgICAgICRkZWNvcmF0ZWRPYmplY3RzID0gW107CgogICAgICAgIHdoaWxlICgkcmVtYWluaW5nQ29udGVudExlbmd0aCA+IDApIHsKICAgICAgICAgICAgJG5leHRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIC09ICRuZXh0T2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGRlY29yYXRlZE9iamVjdHNbXSA9ICRuZXh0T2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZW1haW5pbmdDb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQ29udGV4dC1TcGVjaWZpYyBleHBsaWNpdGx5IHRhZ2dlZCBvYmplY3QgWyR0YWddIHN0YXJ0aW5nIGF0IG9mZnNldCAkb2Zmc2V0SW5kZXhPZkRlY29yYXRlZE9iamVjdCBzcGVjaWZpZXMgYSBsZW5ndGggb2YgJHRvdGFsQ29udGVudExlbmd0aCBvY3RldHMgYnV0ICRyZW1haW5pbmdDb250ZW50TGVuZ3RoIHJlbWFpbiBhZnRlciBwYXJzaW5nIHRoZSBjb250ZW50IiwgJG9mZnNldEluZGV4T2ZEZWNvcmF0ZWRPYmplY3QpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCR0YWcsIC4uLiRkZWNvcmF0ZWRPYmplY3RzKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCR0b3RhbENvbnRlbnRMZW5ndGgpOwogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Identifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CgovKioKICogVGhlIElkZW50aWZpZXIgZW5jb2RlcyB0aGUgQVNOLjEgdGFnIChjbGFzcyBhbmQgbnVtYmVyKSBvZiB0aGUgdHlwZSBvZiBhIGRhdGEgdmFsdWUuCiAqCiAqIEV2ZXJ5IGlkZW50aWZpZXIgd2hvc2UgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAwIHRvIDMwIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICoKICogQml0czogICAgOCAgNyAgICA2ICAgIDUgIDQgIDMgIDIgIDEKICogICAgICAgfCBDbGFzcyB8IFAvQyB8ICAgVGFnIG51bWJlciAgfAogKiAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAqCiAqIEJpdHMgOCBhbmQgNyBkZWZpbmUgdGhlIGNsYXNzIG9mIHRoaXMgdHlwZSAoIFVuaXZlcnNhbCwgQXBwbGljYXRpb24sIENvbnRleHQtc3BlY2lmaWMgb3IgUHJpdmF0ZSkuCiAqIEJpdCA2IGVuY29kZWQgd2hldGhlciB0aGlzIHR5cGUgaXMgcHJpbWl0aXZlIG9yIGNvbnN0cnVjdGVkCiAqIFRoZSByZW1haW5pbmcgYml0cyA1IC0gMSBlbmNvZGUgdGhlIHRhZyBudW1iZXIKICovCmNsYXNzIElkZW50aWZpZXIKewogICAgY29uc3QgQ0xBU1NfVU5JVkVSU0FMICAgICAgICA9IDB4MDA7CiAgICBjb25zdCBDTEFTU19BUFBMSUNBVElPTiAgICAgID0gMHgwMTsKICAgIGNvbnN0IENMQVNTX0NPTlRFWFRfU1BFQ0lGSUMgPSAweDAyOwogICAgY29uc3QgQ0xBU1NfUFJJVkFURSAgICAgICAgICA9IDB4MDM7CgogICAgY29uc3QgRU9DICAgICAgICAgICAgICAgPSAweDAwOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBCT09MRUFOICAgICAgICAgICA9IDB4MDE7CiAgICBjb25zdCBJTlRFR0VSICAgICAgICAgICA9IDB4MDI7CiAgICBjb25zdCBCSVRTVFJJTkcgICAgICAgICA9IDB4MDM7CiAgICBjb25zdCBPQ1RFVFNUUklORyAgICAgICA9IDB4MDQ7CiAgICBjb25zdCBOVUxMICAgICAgICAgICAgICA9IDB4MDU7CiAgICBjb25zdCBPQkpFQ1RfSURFTlRJRklFUiA9IDB4MDY7CiAgICBjb25zdCBPQkpFQ1RfREVTQ1JJUFRPUiA9IDB4MDc7CiAgICBjb25zdCBFWFRFUk5BTCAgICAgICAgICA9IDB4MDg7IC8vIHVuc3VwcG9ydGVkIGZvciBub3cKICAgIGNvbnN0IFJFQUwgICAgICAgICAgICAgID0gMHgwOTsgLy8gdW5zdXBwb3J0ZWQgZm9yIG5vdwogICAgY29uc3QgRU5VTUVSQVRFRCAgICAgICAgPSAweDBBOwogICAgY29uc3QgRU1CRURERURfUERWICAgICAgPSAweDBCOyAvLyB1bnN1cHBvcnRlZCBmb3Igbm93CiAgICBjb25zdCBVVEY4X1NUUklORyAgICAgICA9IDB4MEM7CiAgICBjb25zdCBSRUxBVElWRV9PSUQgICAgICA9IDB4MEQ7CiAgICAvLyB2YWx1ZSAweDBFIGFuZCAweDBGIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgIGNvbnN0IFNFUVVFTkNFICAgICAgICAgID0gMHgzMDsKICAgIGNvbnN0IFNFVCAgICAgICAgICAgICAgID0gMHgzMTsKICAgIGNvbnN0IE5VTUVSSUNfU1RSSU5HICAgID0gMHgxMjsKICAgIGNvbnN0IFBSSU5UQUJMRV9TVFJJTkcgID0gMHgxMzsKICAgIGNvbnN0IFQ2MV9TVFJJTkcgICAgICAgID0gMHgxNDsgLy8gc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFRlbGV0ZXh0U3RyaW5nCiAgICBjb25zdCBWSURFT1RFWFRfU1RSSU5HICA9IDB4MTU7CiAgICBjb25zdCBJQTVfU1RSSU5HICAgICAgICA9IDB4MTY7CiAgICBjb25zdCBVVENfVElNRSAgICAgICAgICA9IDB4MTc7CiAgICBjb25zdCBHRU5FUkFMSVpFRF9USU1FICA9IDB4MTg7CiAgICBjb25zdCBHUkFQSElDX1NUUklORyAgICA9IDB4MTk7CiAgICBjb25zdCBWSVNJQkxFX1NUUklORyAgICA9IDB4MUE7CiAgICBjb25zdCBHRU5FUkFMX1NUUklORyAgICA9IDB4MUI7CiAgICBjb25zdCBVTklWRVJTQUxfU1RSSU5HICA9IDB4MUM7CiAgICBjb25zdCBDSEFSQUNURVJfU1RSSU5HICA9IDB4MUQ7IC8vIFVucmVzdHJpY3RlZCBjaGFyYWN0ZXIgdHlwZQogICAgY29uc3QgQk1QX1NUUklORyAgICAgICAgPSAweDFFOwoKICAgIGNvbnN0IExPTkdfRk9STSAgICAgICAgID0gMHgxRjsKICAgIGNvbnN0IElTX0NPTlNUUlVDVEVEICAgID0gMHgyMDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpZmllci4gU2hvcnQgZm9ybSBpZGVudGlmaWVycyBhcmUgcmV0dXJuZWQgYXMgaW50ZWdlcnMKICAgICAqIGZvciBCQywgbG9uZyBmb3JtIGlkZW50aWZpZXJzIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzdHJpbmcgb2Ygb2N0ZXRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNsYXNzCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNDb25zdHJ1Y3RlZAogICAgICogQHBhcmFtIGludCAkdGFnTnVtYmVyCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgaW52YWxpZAogICAgICoKICAgICAqIEByZXR1cm4gaW50fHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSgkY2xhc3MsICRpc0NvbnN0cnVjdGVkLCAkdGFnTnVtYmVyKQogICAgewogICAgICAgIGlmICghaXNfbnVtZXJpYygkY2xhc3MpIHx8ICRjbGFzcyA8IHNlbGY6OkNMQVNTX1VOSVZFUlNBTCB8fCAkY2xhc3MgPiBzZWxmOjpDTEFTU19QUklWQVRFKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBjbGFzcyAlZCBnaXZlbicsICRjbGFzcykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc19ib29sKCRpc0NvbnN0cnVjdGVkKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJcJGlzQ29uc3RydWN0ZWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUgKCRpc0NvbnN0cnVjdGVkIGdpdmVuKSIpOwogICAgICAgIH0KCiAgICAgICAgJHRhZ051bWJlciA9IHNlbGY6Om1ha2VOdW1lcmljKCR0YWdOdW1iZXIpOwogICAgICAgIGlmICgkdGFnTnVtYmVyIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgJHRhZ051bWJlciAlZCBnaXZlbi4gWW91IGNhbiBvbmx5IHVzZSBwb3NpdGl2ZSBpbnRlZ2Vycy4nLCAkdGFnTnVtYmVyKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gKCRjbGFzcyA8PCA2KSB8ICgkaXNDb25zdHJ1Y3RlZCA8PCA1KSB8ICR0YWdOdW1iZXI7CiAgICAgICAgfQoKICAgICAgICAkZmlyc3RPY3RldCA9ICgkY2xhc3MgPDwgNikgfCAoJGlzQ29uc3RydWN0ZWQgPDwgNSkgfCBzZWxmOjpMT05HX0ZPUk07CgogICAgICAgIC8vIFRhZyBudW1iZXJzIGZvcm1hdHRlZCBpbiBsb25nIGZvcm0gYXJlIGJhc2UtMTI4IGVuY29kZWQuIFNlZSBYLjYwOSM4LjEuMi40CiAgICAgICAgcmV0dXJuIGNocigkZmlyc3RPY3RldCkuQmFzZTEyODo6ZW5jb2RlKCR0YWdOdW1iZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb25zdHJ1Y3RlZCgkaWRlbnRpZmllck9jdGV0KQogICAgewogICAgICAgIHJldHVybiAoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OklTX0NPTlNUUlVDVEVEKSA9PT0gc2VsZjo6SVNfQ09OU1RSVUNURUQ7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0xvbmdGb3JtKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgcmV0dXJuICgkaWRlbnRpZmllck9jdGV0ICYgc2VsZjo6TE9OR19GT1JNKSA9PT0gc2VsZjo6TE9OR19GT1JNOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBtYXBwZWQgQVNOLjEgdHlwZSB3aXRoIGEgcHJlY2VkaW5nICJBU04uMSAiLgogICAgICoKICAgICAqIEV4YW1wbGU6IEFTTi4xIE9jdGV0IFN0cmluZwogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0U2hvcnROYW1lKCkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaWRlbnRpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TmFtZSgkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllck9jdGV0ID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICAkdHlwZU5hbWUgPSBzdGF0aWM6OmdldFNob3J0TmFtZSgkaWRlbnRpZmllcik7CgogICAgICAgIGlmICgoJGlkZW50aWZpZXJPY3RldCAmIHNlbGY6OkxPTkdfRk9STSkgPCBzZWxmOjpMT05HX0ZPUk0pIHsKICAgICAgICAgICAgJHR5cGVOYW1lID0gIkFTTi4xIHskdHlwZU5hbWV9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdHlwZU5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNob3J0IHZlcnNpb24gb2YgdGhlIHR5cGUgbmFtZS4KICAgICAqCiAgICAgKiBJZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciBvY3RldCBjYW4gYmUgbWFwcGVkIHRvIGEga25vd24gdW5pdmVyc2FsIHR5cGUgdGhpcyB3aWxsCiAgICAgKiByZXR1cm4gaXRzIG5hbWUuIEVsc2UgSWRlbnRpZmllcjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigpIGlzIHVzZWQgdG8gcmV0cmlldmUKICAgICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpZGVudGlmaWVyLgogICAgICoKICAgICAqIEBzZWUgSWRlbnRpZmllcjo6Z2V0TmFtZSgpCiAgICAgKiBAc2VlIElkZW50aWZpZXI6OmdldENsYXNzRGVzY3JpcHRpb24oKQogICAgICoKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTaG9ydE5hbWUoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgc3dpdGNoICgkaWRlbnRpZmllck9jdGV0KSB7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6RU9DOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbmQtb2YtY29udGVudHMgb2N0ZXQnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJPT0xFQU46CiAgICAgICAgICAgICAgICByZXR1cm4gJ0Jvb2xlYW4nOwogICAgICAgICAgICBjYXNlIHNlbGY6OklOVEVHRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0ludGVnZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJJVFNUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnQml0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0NURVRTVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09jdGV0IFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVMTDoKICAgICAgICAgICAgICAgIHJldHVybiAnTlVMTCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ09iamVjdCBJZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPQkpFQ1RfREVTQ1JJUFRPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnT2JqZWN0IERlc2NyaXB0b3InOwogICAgICAgICAgICBjYXNlIHNlbGY6OkVYVEVSTkFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdFeHRlcm5hbCBUeXBlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUFMOgogICAgICAgICAgICAgICAgcmV0dXJuICdSZWFsJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTlVNRVJBVEVEOgogICAgICAgICAgICAgICAgcmV0dXJuICdFbnVtZXJhdGVkJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpFTUJFRERFRF9QRFY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0VtYmVkZGVkIFBEVic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VVRGOF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VURjggU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpSRUxBVElWRV9PSUQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlbGF0aXZlIE9JRCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6U0VRVUVOQ0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlcXVlbmNlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTRVQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NldCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6TlVNRVJJQ19TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ051bWVyaWMgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQUklOVEFCTEVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdQcmludGFibGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpUNjFfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdUNjEgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpWSURFT1RFWFRfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdWaWRlb3RleHQgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpJQTVfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdJQTUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpVVENfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiAnVVRDIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdFTkVSQUxJWkVEX1RJTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0dlbmVyYWxpemVkIFRpbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkdSQVBISUNfU1RSSU5HOgogICAgICAgICAgICAgICAgcmV0dXJuICdHcmFwaGljIFN0cmluZyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VklTSUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Zpc2libGUgU3RyaW5nJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpHRU5FUkFMX1NUUklORzoKICAgICAgICAgICAgICAgIHJldHVybiAnR2VuZXJhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlVOSVZFUlNBTF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1VuaXZlcnNhbCBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNIQVJBQ1RFUl9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NoYXJhY3RlciBTdHJpbmcnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkJNUF9TVFJJTkc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0JNUCBTdHJpbmcnOwoKICAgICAgICAgICAgY2FzZSAweDBFOgogICAgICAgICAgICAgICAgcmV0dXJuICdSRVNFUlZFRCAoMHgwRSknOwogICAgICAgICAgICBjYXNlIDB4MEY6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JFU0VSVkVEICgweDBGKSc7CgogICAgICAgICAgICBjYXNlIHNlbGY6OkxPTkdfRk9STToKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gc2VsZjo6Z2V0Q2xhc3NEZXNjcmlwdGlvbigkaWRlbnRpZmllcik7CgogICAgICAgICAgICAgICAgaWYgKGlzX2ludCgkaWRlbnRpZmllcikpIHsKICAgICAgICAgICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuICIkY2xhc3NEZXNjcmlwdGlvbiAoMHgiLnN0cnRvdXBwZXIoYmluMmhleCgkaWRlbnRpZmllcikpLicpJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIGdpdmVuIGlkZW50aWZpZXIgb2N0ZXQuCiAgICAgKgogICAgICogVGhlIGZpcnN0IHRocmVlIChtb3N0IHNpZ25pZmljYW50KSBieXRlcyBhcmUgZXZhbHVhdGVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEKICAgICAqIGNvbnN0cnVjdGVkIG9yIHByaW1pdGl2ZSB0eXBlIGFuZCBpZiBpdCBpcyBlaXRoZXIgdW5pdmVyc2FsLCBhcHBsaWNhdGlvbiwgY29udGV4dC1zcGVjaWZpYyBvcgogICAgICogcHJpdmF0ZS4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICogICAgIENvbnN0cnVjdGVkIGNvbnRleHQtc3BlY2lmaWMKICAgICAqICAgICBQcmltaXRpdmUgdW5pdmVyc2FsCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGlkZW50aWZpZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENsYXNzRGVzY3JpcHRpb24oJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXJPY3RldCA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgaWYgKHNlbGY6OmlzQ29uc3RydWN0ZWQoJGlkZW50aWZpZXJPY3RldCkpIHsKICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gPSAnQ29uc3RydWN0ZWQgJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiA9ICdQcmltaXRpdmUgJzsKICAgICAgICB9CiAgICAgICAgJGNsYXNzQml0cyA9ICRpZGVudGlmaWVyT2N0ZXQgPj4gNjsKICAgICAgICBzd2l0Y2ggKCRjbGFzc0JpdHMpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDTEFTU19VTklWRVJTQUw6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAndW5pdmVyc2FsJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOgogICAgICAgICAgICAgICAgJGNsYXNzRGVzY3JpcHRpb24gLj0gJ2FwcGxpY2F0aW9uJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX0NPTlRFWFRfU1BFQ0lGSUM6CiAgICAgICAgICAgICAgICAkdGFnTnVtYmVyID0gc2VsZjo6Z2V0VGFnTnVtYmVyKCRpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICRjbGFzc0Rlc2NyaXB0aW9uID0gIlskdGFnTnVtYmVyXSBDb250ZXh0LXNwZWNpZmljIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNMQVNTX1BSSVZBVEU6CiAgICAgICAgICAgICAgICAkY2xhc3NEZXNjcmlwdGlvbiAuPSAncHJpdmF0ZSc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gIklOVkFMSUQgSURFTlRJRklFUiBPQ1RFVDogeyRpZGVudGlmaWVyT2N0ZXR9IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY2xhc3NEZXNjcmlwdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpZGVudGlmaWVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWdOdW1iZXIoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGZpcnN0T2N0ZXQgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CiAgICAgICAgJHRhZ051bWJlciA9ICRmaXJzdE9jdGV0ICYgc2VsZjo6TE9OR19GT1JNOwoKICAgICAgICBpZiAoJHRhZ051bWJlciA8IHNlbGY6OkxPTkdfRk9STSkgewogICAgICAgICAgICByZXR1cm4gJHRhZ051bWJlcjsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udW1lcmljKCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBCYXNlMTI4OjpkZWNvZGUoc3Vic3RyKCRpZGVudGlmaWVyLCAxKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1VuaXZlcnNhbENsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19VTklWRVJTQUw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0FwcGxpY2F0aW9uQ2xhc3MoJGlkZW50aWZpZXIpCiAgICB7CiAgICAgICAgJGlkZW50aWZpZXIgPSBzZWxmOjptYWtlTnVtZXJpYygkaWRlbnRpZmllcik7CgogICAgICAgIHJldHVybiAkaWRlbnRpZmllciA+PiA2ID09IHNlbGY6OkNMQVNTX0FQUExJQ0FUSU9OOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb250ZXh0U3BlY2lmaWNDbGFzcygkaWRlbnRpZmllcikKICAgIHsKICAgICAgICAkaWRlbnRpZmllciA9IHNlbGY6Om1ha2VOdW1lcmljKCRpZGVudGlmaWVyKTsKCiAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyID4+IDYgPT0gc2VsZjo6Q0xBU1NfQ09OVEVYVF9TUEVDSUZJQzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUHJpdmF0ZUNsYXNzKCRpZGVudGlmaWVyKQogICAgewogICAgICAgICRpZGVudGlmaWVyID0gc2VsZjo6bWFrZU51bWVyaWMoJGlkZW50aWZpZXIpOwoKICAgICAgICByZXR1cm4gJGlkZW50aWZpZXIgPj4gNiA9PSBzZWxmOjpDTEFTU19QUklWQVRFOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG1ha2VOdW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpCiAgICB7CiAgICAgICAgaWYgKCFpc19udW1lcmljKCRpZGVudGlmaWVyT2N0ZXQpKSB7CiAgICAgICAgICAgIHJldHVybiBvcmQoJGlkZW50aWZpZXJPY3RldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRpZGVudGlmaWVyT2N0ZXQ7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/OID.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIE9JRAp7CiAgICBjb25zdCBSU0FfRU5DUllQVElPTiAgICAgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS4xLjEnOwogICAgY29uc3QgTUQ1X1dJVEhfUlNBX0VOQ1JZUFRJT04gICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuMS40JzsKICAgIGNvbnN0IFNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjEuNSc7CiAgICBjb25zdCBQS0NTOV9FTUFJTCAgICAgICAgICAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjEnOwogICAgY29uc3QgUEtDUzlfVU5TVFJVQ1RVUkVEX05BTUUgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS4yJzsKICAgIGNvbnN0IFBLQ1M5X0NPTlRFTlRfVFlQRSAgICAgICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuMyc7CiAgICBjb25zdCBQS0NTOV9NRVNTQUdFX0RJR0VTVCAgICAgICAgICAgICAgPSAnMS4yLjg0MC4xMTM1NDkuMS45LjQnOwogICAgY29uc3QgUEtDUzlfU0lHTklOR19USU1FICAgICAgICAgICAgICAgID0gJzEuMi44NDAuMTEzNTQ5LjEuOS41JzsKICAgIGNvbnN0IFBLQ1M5X0VYVEVOU0lPTl9SRVFVRVNUICAgICAgICAgICA9ICcxLjIuODQwLjExMzU0OS4xLjkuMTQnOwoKICAgIC8vIGNlcnRpZmljYXRlIGV4dGVuc2lvbiBpZGVudGlmaWVyCiAgICBjb25zdCBDRVJUX0VYVF9TVUJKRUNUX0RJUkVDVE9SWV9BVFRSICAgPSAnMi41LjI5LjknOwogICAgY29uc3QgQ0VSVF9FWFRfU1VCSkVDVF9LRVlfSURFTlRJRklFUiAgID0gJzIuNS4yOS4xNCc7CiAgICBjb25zdCBDRVJUX0VYVF9LRVlfVVNBR0UgICAgICAgICAgICAgICAgPSAnMi41LjI5LjE1JzsKICAgIGNvbnN0IENFUlRfRVhUX1BSSVZBVEVfS0VZX1VTQUdFX1BFUklPRCA9ICcyLjUuMjkuMTYnOwogICAgY29uc3QgQ0VSVF9FWFRfU1VCSkVDVF9BTFRfTkFNRSAgICAgICAgID0gJzIuNS4yOS4xNyc7CiAgICBjb25zdCBDRVJUX0VYVF9JU1NVRVJfQUxUX05BTUUgICAgICAgICAgPSAnMi41LjI5LjE4JzsKICAgIGNvbnN0IENFUlRfRVhUX0JBU0lDX0NPTlNUUkFJTlRTICAgICAgICA9ICcyLjUuMjkuMTknOwogICAgY29uc3QgQ0VSVF9FWFRfQ1JMX05VTUJFUiAgICAgICAgICAgICAgID0gJzIuNS4yOS4yMCc7CiAgICBjb25zdCBDRVJUX0VYVF9SRUFTT05fQ09ERSAgICAgICAgICAgICAgPSAnMi41LjI5LjIxJzsKICAgIGNvbnN0IENFUlRfRVhUX0lOVkFMSURJVFlfREFURSAgICAgICAgICA9ICcyLjUuMjkuMjQnOwogICAgY29uc3QgQ0VSVF9FWFRfREVMVEFfQ1JMX0lORElDQVRPUiAgICAgID0gJzIuNS4yOS4yNyc7CiAgICBjb25zdCBDRVJUX0VYVF9JU1NVSU5HX0RJU1RfUE9JTlQgICAgICAgPSAnMi41LjI5LjI4JzsKICAgIGNvbnN0IENFUlRfRVhUX0NFUlRfSVNTVUVSICAgICAgICAgICAgICA9ICcyLjUuMjkuMjknOwogICAgY29uc3QgQ0VSVF9FWFRfTkFNRV9DT05TVFJBSU5UUyAgICAgICAgID0gJzIuNS4yOS4zMCc7CiAgICBjb25zdCBDRVJUX0VYVF9DUkxfRElTVFJJQlVUSU9OX1BPSU5UUyAgPSAnMi41LjI5LjMxJzsKICAgIGNvbnN0IENFUlRfRVhUX0NFUlRfUE9MSUNJRVMgICAgICAgICAgICA9ICcyLjUuMjkuMzInOwogICAgY29uc3QgQ0VSVF9FWFRfQVVUSE9SSVRZX0tFWV9JREVOVElGSUVSID0gJzIuNS4yOS4zNSc7CiAgICBjb25zdCBDRVJUX0VYVF9FWFRFTkRFRF9LRVlfVVNBR0UgICAgICAgPSAnMi41LjI5LjM3JzsKCiAgICAvLyBzdGFuZGFyZCBjZXJ0aWZpY2F0ZSBmaWxlcwogICAgY29uc3QgQ09NTU9OX05BTUUgICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjMnOwogICAgY29uc3QgU1VSTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjQnOwogICAgY29uc3QgU0VSSUFMX05VTUJFUiAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjUnOwogICAgY29uc3QgQ09VTlRSWV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjYnOwogICAgY29uc3QgTE9DQUxJVFlfTkFNRSAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjcnOwogICAgY29uc3QgU1RBVEVfT1JfUFJPVklOQ0VfTkFNRSAgICAgICAgICAgID0gJzIuNS40LjgnOwogICAgY29uc3QgU1RSRUVUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjknOwogICAgY29uc3QgT1JHQU5JWkFUSU9OX05BTUUgICAgICAgICAgICAgICAgID0gJzIuNS40LjEwJzsKICAgIGNvbnN0IE9VX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xMSc7CiAgICBjb25zdCBUSVRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTInOwogICAgY29uc3QgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICAgICAgID0gJzIuNS40LjEzJzsKICAgIGNvbnN0IFBPU1RBTF9BRERSRVNTICAgICAgICAgICAgICAgICAgICA9ICcyLjUuNC4xNic7CiAgICBjb25zdCBQT1NUQUxfQ09ERSAgICAgICAgICAgICAgICAgICAgICAgPSAnMi41LjQuMTcnOwogICAgY29uc3QgQVVUSE9SSVRZX1JFVk9DQVRJT05fTElTVCAgICAgICAgID0gJzIuNS40LjM4JzsKCiAgICBjb25zdCBBVVRIT1JJVFlfSU5GT1JNQVRJT05fQUNDRVNTICAgICAgPSAnMS4zLjYuMS41LjUuNy4xLjEnOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IGlkZW50aWZpZXIuCiAgICAgKgogICAgICogU29tZSBPSURzIGFyZSBzYXZlZCBhcyBjbGFzcyBjb25zdGFudHMgaW4gdGhpcyBjbGFzcy4KICAgICAqIElmIHRoZSB3YW50ZWQgb2lkU3RyaW5nIGlzIG5vdCBhbW9uZyB0aGVtLCB0aGlzIG1ldGhvZCB3aWxsCiAgICAgKiBxdWVyeSBodHRwOi8vb2lkLWluZm8uY29tIGZvciB0aGUgcmlnaHQgbmFtZS4KICAgICAqIFRoaXMgYmVoYXZpb3IgY2FuIGJlIHN1cHByZXNzZWQgYnkgc2V0dGluZyB0aGUgc2Vjb25kIG1ldGhvZCBwYXJhbWV0ZXIgdG8gZmFsc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkb2lkU3RyaW5nCiAgICAgKiBAcGFyYW0gYm9vbCAkbG9hZEZyb21XZWIKICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OmxvYWRGcm9tV2ViKCRvaWRTdHJpbmcpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXROYW1lKCRvaWRTdHJpbmcsICRsb2FkRnJvbVdlYiA9IHRydWUpCiAgICB7CiAgICAgICAgc3dpdGNoICgkb2lkU3RyaW5nKSB7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UlNBX0VOQ1JZUFRJT046CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JTQSBFbmNyeXB0aW9uJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpNRDVfV0lUSF9SU0FfRU5DUllQVElPTjoKICAgICAgICAgICAgICAgIHJldHVybiAnTUQ1IHdpdGggUlNBIEVuY3J5cHRpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNIQTFfV0lUSF9SU0FfU0lHTkFUVVJFOgogICAgICAgICAgICAgICAgcmV0dXJuICdTSEEtMSB3aXRoIFJTQSBTaWduYXR1cmUnOwoKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9FTUFJTDoKICAgICAgICAgICAgICAgIHJldHVybiAnUEtDUyAjOSBFbWFpbCBBZGRyZXNzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpQS0NTOV9VTlNUUlVDVFVSRURfTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnUEtDUyAjOSBVbnN0cnVjdHVyZWQgTmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UEtDUzlfQ09OVEVOVF9UWVBFOgogICAgICAgICAgICAgICAgcmV0dXJuICdQS0NTICM5IENvbnRlbnQgVHlwZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UEtDUzlfTUVTU0FHRV9ESUdFU1Q6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1BLQ1MgIzkgTWVzc2FnZSBEaWdlc3QnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlBLQ1M5X1NJR05JTkdfVElNRToKICAgICAgICAgICAgICAgIHJldHVybiAnUEtDUyAjOSBTaWduaW5nIFRpbWUnOwoKICAgICAgICAgICAgY2FzZSBzZWxmOjpDT01NT05fTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnQ29tbW9uIE5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNVUk5BTUU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1N1cm5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OlNFUklBTF9OVU1CRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlcmlhbCBOdW1iZXInOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNPVU5UUllfTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnQ291bnRyeSBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpMT0NBTElUWV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdMb2NhbGl0eSBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTVEFURV9PUl9QUk9WSU5DRV9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdGF0ZSBvciBQcm92aW5jZSBOYW1lJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTVFJFRVRfQUREUkVTUzoKICAgICAgICAgICAgICAgIHJldHVybiAnU3RyZWV0IEFkZHJlc3MnOwogICAgICAgICAgICBjYXNlIHNlbGY6Ok9SR0FOSVpBVElPTl9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdPcmdhbml6YXRpb24gTmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T1VfTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnT3JnYW5pemF0aW9uIFVuaXQgTmFtZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6VElUTEU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1RpdGxlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpERVNDUklQVElPTjoKICAgICAgICAgICAgICAgIHJldHVybiAnRGVzY3JpcHRpb24nOwogICAgICAgICAgICBjYXNlIHNlbGY6OlBPU1RBTF9BRERSRVNTOgogICAgICAgICAgICAgICAgcmV0dXJuICdQb3N0YWwgQWRkcmVzcyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6UE9TVEFMX0NPREU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1Bvc3RhbCBDb2RlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBVVRIT1JJVFlfUkVWT0NBVElPTl9MSVNUOgogICAgICAgICAgICAgICAgcmV0dXJuICdBdXRob3JpdHkgUmV2b2NhdGlvbiBMaXN0JzsKCiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfU1VCSkVDVF9ESVJFQ1RPUllfQVRUUjoKICAgICAgICAgICAgICAgIHJldHVybiAnU3ViamVjdCBkaXJlY3RvcnkgYXR0cmlidXRlcyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfU1VCSkVDVF9LRVlfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnU3ViamVjdCBrZXkgaWRlbnRpZmllcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfS0VZX1VTQUdFOgogICAgICAgICAgICAgICAgcmV0dXJuICdLZXkgdXNhZ2UgY2VydGlmaWNhdGUgZXh0ZW5zaW9uJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9QUklWQVRFX0tFWV9VU0FHRV9QRVJJT0Q6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1ByaXZhdGUga2V5IHVzYWdlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FOgogICAgICAgICAgICAgICAgcmV0dXJuICdTdWJqZWN0IGFsdGVybmF0aXZlIG5hbWUgKFNBTiknOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0lTU1VFUl9BTFRfTkFNRToKICAgICAgICAgICAgICAgIHJldHVybiAnSXNzdWVyIGFsdGVybmF0aXZlIG5hbWUnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0JBU0lDX0NPTlNUUkFJTlRTOgogICAgICAgICAgICAgICAgcmV0dXJuICdCYXNpYyBjb25zdHJhaW50cyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQ1JMX05VTUJFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnQ1JMIG51bWJlcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfUkVBU09OX0NPREU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ1JlYXNvbiBjb2RlJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9JTlZBTElESVRZX0RBVEU6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0ludmFsaWRpdHkgY29kZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfREVMVEFfQ1JMX0lORElDQVRPUjoKICAgICAgICAgICAgICAgIHJldHVybiAnRGVsdGEgQ1JMIGluZGljYXRvcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfSVNTVUlOR19ESVNUX1BPSU5UOgogICAgICAgICAgICAgICAgcmV0dXJuICdJc3N1aW5nIGRpc3RyaWJ1dGlvbiBwb2ludCc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQ0VSVF9JU1NVRVI6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NlcnRpZmljYXRlIGlzc3Vlcic7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfTkFNRV9DT05TVFJBSU5UUzoKICAgICAgICAgICAgICAgIHJldHVybiAnTmFtZSBjb25zdHJhaW50cyc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0VSVF9FWFRfQ1JMX0RJU1RSSUJVVElPTl9QT0lOVFM6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0NSTCBkaXN0cmlidXRpb24gcG9pbnRzJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9DRVJUX1BPTElDSUVTOgogICAgICAgICAgICAgICAgcmV0dXJuICdDZXJ0aWZpY2F0ZSBwb2xpY2llcyAnOwogICAgICAgICAgICBjYXNlIHNlbGY6OkNFUlRfRVhUX0FVVEhPUklUWV9LRVlfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgIHJldHVybiAnQXV0aG9yaXR5IGtleSBpZGVudGlmaWVyJzsKICAgICAgICAgICAgY2FzZSBzZWxmOjpDRVJUX0VYVF9FWFRFTkRFRF9LRVlfVVNBR0U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0V4dGVuZGVkIGtleSB1c2FnZSc7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6QVVUSE9SSVRZX0lORk9STUFUSU9OX0FDQ0VTUzoKICAgICAgICAgICAgICAgIHJldHVybiAnQ2VydGlmaWNhdGUgQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2VzcyAoQUlBKSc7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCRsb2FkRnJvbVdlYikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjpsb2FkRnJvbVdlYigkb2lkU3RyaW5nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvaWRTdHJpbmc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZEZyb21XZWIoJG9pZFN0cmluZykKICAgIHsKICAgICAgICAkY2ggPSBjdXJsX2luaXQoImh0dHA6Ly9vaWQtaW5mby5jb20vZ2V0L3skb2lkU3RyaW5nfSIpOwoKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIDApOwoKICAgICAgICAkY29udGVudHMgPSBjdXJsX2V4ZWMoJGNoKTsKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CgogICAgICAgIC8vIFRoaXMgcGF0dGVybiBuZWVkcyB0byBiZSB1cGRhdGVkIGFzIHNvb24gYXMgdGhlIHdlYnNpdGUgbGF5b3V0IG9mIG9pZC1pbmZvLmNvbSBjaGFuZ2VzCiAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyM8dHQ+KC4rKVwoXGQrXCk8L3R0PiNzaScsICRjb250ZW50cywgJG9pZE5hbWUpOwoKICAgICAgICBpZiAoZW1wdHkoJG9pZE5hbWVbMV0pKSB7CiAgICAgICAgICAgIHJldHVybiAieyRvaWRTdHJpbmd9ICh1bmtub3duKSI7CiAgICAgICAgfQoKICAgICAgICAkb2lkTmFtZSA9IHVjZmlyc3Qoc3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJy8oW0EtWl1bYS16XSkvJywgJyAkMScsICRvaWROYW1lWzFdWzBdKSkpOwogICAgICAgICRvaWROYW1lID0gc3RyX3JlcGxhY2UoJy0nLCAnICcsICRvaWROYW1lKTsKCiAgICAgICAgcmV0dXJuICJ7JG9pZE5hbWV9ICh7JG9pZFN0cmluZ30pIjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Parsable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgovKioKICogVGhlIFBhcnNhYmxlIGludGVyZmFjZSBkZXNjcmliZXMgY2xhc3NlcyB0aGF0IGNhbiBiZSBwYXJzZWQgZnJvbSB0aGVpciBiaW5hcnkgREVSIHJlcHJlc2VudGF0aW9uLgogKi8KaW50ZXJmYWNlIFBhcnNhYmxlCnsKICAgIC8qKgogICAgICogUGFyc2UgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBmcm9tIGl0cyBiaW5hcnkgREVSIGVuY29kZWQgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtIGludCAkb2Zmc2V0SW5kZXggdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIG9mIHRoZSAkYmluYXJ5RGF0YSBpcyBzdGFydGVkLiBUaGlzIHBhcmFtZXRlciBpbGwgYmUgbW9kaWZpZWQKICAgICAqICAgICAgICAgICAgdG8gY29udGFpbiB0aGUgb2Zmc2V0IGluZGV4IG9mIHRoZSBuZXh0IG9iamVjdCBhZnRlciB0aGlzIG9iamVjdCBoYXMgYmVlbiBwYXJzZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGUgZ2l2ZW4gYmluYXJ5IGRhdGEgaXMgZWl0aGVyIGludmFsaWQgb3Igbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/TemplateParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCnVzZSBFeGNlcHRpb247CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCmNsYXNzIFRlbXBsYXRlUGFyc2VyCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGFycmF5ICR0ZW1wbGF0ZQogICAgICogQHJldHVybiBcRkdcQVNOMVxBU05PYmplY3R8U2VxdWVuY2UKICAgICAqIEB0aHJvd3MgUGFyc2VyRXhjZXB0aW9uIGlmIHRoZXJlIHdhcyBhbiBpc3N1ZSBwYXJzaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZUJhc2U2NCgkZGF0YSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgIC8vIFRPRE8gdGVzdCB3aXRoIGludmFsaWQgZGF0YQogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VCaW5hcnkoYmFzZTY0X2RlY29kZSgkZGF0YSksICR0ZW1wbGF0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW5hcnkKICAgICAqIEBwYXJhbSBhcnJheSAkdGVtcGxhdGUKICAgICAqIEByZXR1cm4gXEZHXEFTTjFcQVNOT2JqZWN0fFNlcXVlbmNlCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbiBpZiB0aGVyZSB3YXMgYW4gaXNzdWUgcGFyc2luZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VCaW5hcnkoJGJpbmFyeSwgYXJyYXkgJHRlbXBsYXRlKQogICAgewogICAgICAgICRwYXJzZWRPYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeSk7CgogICAgICAgIGZvcmVhY2ggKCR0ZW1wbGF0ZSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGUoJHBhcnNlZE9iamVjdCwgJGtleSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGUoQVNOT2JqZWN0ICRvYmplY3QsICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCRrZXksICRvYmplY3QpOwoKICAgICAgICAgICAgLyogQHZhciBDb25zdHJ1Y3QgJG9iamVjdCAqLwogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJGtleSA9PiAkY2hpbGQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT52YWxpZGF0ZSgkb2JqZWN0LT5jdXJyZW50KCksICRrZXksICRjaGlsZCk7CiAgICAgICAgICAgICAgICAkb2JqZWN0LT5uZXh0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0VHlwZUlkKCR2YWx1ZSwgJG9iamVjdCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXNzZXJ0VHlwZUlkKCRleHBlY3RlZFR5cGVJZCwgQVNOT2JqZWN0ICRvYmplY3QpCiAgICB7CiAgICAgICAgJGFjdHVhbFR5cGUgPSAkb2JqZWN0LT5nZXRUeXBlKCk7CiAgICAgICAgaWYgKCRleHBlY3RlZFR5cGVJZCAhPSAkYWN0dWFsVHlwZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJFeHBlY3RlZCB0eXBlICgkZXhwZWN0ZWRUeXBlSWQpIGRvZXMgbm90IG1hdGNoIGFjdHVhbCB0eXBlICgkYWN0dWFsVHlwZSIpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BitString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJpdFN0cmluZyBleHRlbmRzIE9jdGV0U3RyaW5nIGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJpdmF0ZSAkbnJPZlVudXNlZEJpdHM7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IEFTTi4xIEJpdFN0cmluZyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHZhbHVlIEVpdGhlciB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgYXMgYSBzdHJpbmcgKHNwYWNlcyBhcmUgYWxsb3dlZCAtIGxlYWRpbmcgMHggaXMgb3B0aW9uYWwpIG9yIGEgbnVtZXJpYyB2YWx1ZQogICAgICogQHBhcmFtIGludCAkbnJPZlVudXNlZEJpdHMgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBvY3RldCBbb3B0aW9uYWxdLgogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG5vIHBvc2l0aXZlIG51bWVyaWMgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgJG5yT2ZVbnVzZWRCaXRzID0gMCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2YWx1ZSk7CgogICAgICAgIGlmICghaXNfbnVtZXJpYygkbnJPZlVudXNlZEJpdHMpIHx8ICRuck9mVW51c2VkQml0cyA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQml0U3RyaW5nOiBzZWNvbmQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGEgcG9zaXRpdmUgbnVtYmVyIChvciB6ZXJvKSEnKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5uck9mVW51c2VkQml0cyA9ICRuck9mVW51c2VkQml0czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkJJVFNUUklORzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgLy8gYWRkIG9uZSB0byB0aGUgbGVuZ3RoIGZvciB0aGUgZmlyc3Qgb2N0ZXQgd2hpY2ggZW5jb2RlcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IG9jdGV0CiAgICAgICAgcmV0dXJuIHBhcmVudDo6Y2FsY3VsYXRlQ29udGVudExlbmd0aCgpICsgMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICAvLyB0aGUgZmlyc3Qgb2N0ZXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzT2N0ZXQgPSBjaHIoJHRoaXMtPm5yT2ZVbnVzZWRCaXRzKTsKICAgICAgICAkYWN0dWFsQ29udGVudCA9IHBhcmVudDo6Z2V0RW5jb2RlZFZhbHVlKCk7CgogICAgICAgIHJldHVybiAkbnJPZlVudXNlZEJpdHNPY3RldC4kYWN0dWFsQ29udGVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZVbnVzZWRCaXRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm5yT2ZVbnVzZWRCaXRzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpCSVRTVFJJTkcsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAyKTsKCiAgICAgICAgJG5yT2ZVbnVzZWRCaXRzID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pOwogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4ICsgMSwgJGNvbnRlbnRMZW5ndGggLSAxKTsKCiAgICAgICAgaWYgKCRuck9mVW51c2VkQml0cyA+IDcgfHwgLy8gbm8gbGVzcyB0aGFuIDEgdXNlZCwgb3RoZXJ3aXNlIG5vbi1taW5pbWFsCiAgICAgICAgICAgICgkY29udGVudExlbmd0aCAtIDEpID09IDEgJiYgJG5yT2ZVbnVzZWRCaXRzID4gMCB8fCAvLyBjb250ZW50IGxlbmd0aCBvbmx5IDEsIG5vCiAgICAgICAgICAgIChvcmQoJHZhbHVlW3N0cmxlbigkdmFsdWUpLTFdKSYoKDE8PCRuck9mVW51c2VkQml0cyktMSkpICE9IDAgLy8gdW51c2VkIGJpdHMgc2V0CiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIkNhbiBub3QgcGFyc2UgYml0IHN0cmluZyB3aXRoIGludmFsaWQgcGFkZGluZyIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGNvbnRlbnRMZW5ndGg7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZihiaW4yaGV4KCR2YWx1ZSksICRuck9mVW51c2VkQml0cyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/BMPString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEJNUFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBCTVAgU3RyaW5nLgogICAgICoKICAgICAqIEJNUFN0cmluZyBpcyBhIHN1YnR5cGUgb2YgVW5pdmVyc2FsU3RyaW5nIHRoYXQgaGFzIGl0cyBvd24KICAgICAqIHVuaXF1ZSB0YWcgYW5kIGNvbnRhaW5zIG9ubHkgdGhlIGNoYXJhY3RlcnMgaW4gdGhlCiAgICAgKiBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKHRob3NlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0CiAgICAgKiA2NEstMiBjZWxscywgbGVzcyBjZWxscyB3aG9zZSBlbmNvZGluZyBpcyB1c2VkIHRvIGFkZHJlc3MKICAgICAqIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lKSBvZiBJU08vSUVDIDEwNjQ2LTEuCiAgICAgKgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpCTVBfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Boolean.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgQm9vbGVhbiBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6Qk9PTEVBTjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSA9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gY2hyKDB4MDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBjaHIoMHhGRik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnZhbHVlID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuICdUUlVFJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJ0ZBTFNFJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6OkJPT0xFQU4sICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgQm9vbGVhbiBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiBvbmUuIEV4dHJhY3RlZCBsZW5ndGggd2FzIHskY29udGVudExlbmd0aH0iLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CiAgICAgICAgJGJvb2xlYW5WYWx1ZSA9ICR2YWx1ZSA9PSAweEZGID8gdHJ1ZSA6IGZhbHNlOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGJvb2xlYW5WYWx1ZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/CharacterString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIENoYXJhY3RlclN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpDSEFSQUNURVJfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Enumerated.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgRW51bWVyYXRlZCBleHRlbmRzIEludGVnZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpFTlVNRVJBVEVEOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralizedTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gSVNPIDg2MDEuCiAqCiAqIFRoZSB0eXBlIGNvbnNpc3RzIG9mIHZhbHVlcyByZXByZXNlbnRpbmc6CiAqIGEpIGEgY2FsZW5kYXIgZGF0ZSwgYXMgZGVmaW5lZCBpbiBJU08gODYwMTsgYW5kCiAqIGIpIGEgdGltZSBvZiBkYXksIHRvIGFueSBvZiB0aGUgcHJlY2lzaW9ucyBkZWZpbmVkIGluIElTTyA4NjAxLCBleGNlcHQgZm9yIHRoZSBob3VycyB2YWx1ZSAyNCB3aGljaCBzaGFsbCBub3QgYmUgdXNlZDsgYW5kCiAqIGMpIHRoZSBsb2NhbCB0aW1lIGRpZmZlcmVudGlhbCBmYWN0b3IgYXMgZGVmaW5lZCBpbiBJU08gODYwMS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIEdlbmVyYWxpemVkVGltZSBleHRlbmRzIEFic3RyYWN0VGltZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJG1pY3Jvc2Vjb25kczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGVUaW1lID0gbnVsbCwgJGRhdGVUaW1lWm9uZSA9ICdVVEMnKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGRhdGVUaW1lLCAkZGF0ZVRpbWVab25lKTsKICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ3UnKTsKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgLy8gREVSIHJlcXVpcmVzIHVzIHRvIHJlbW92ZSB0cmFpbGluZyB6ZXJvcwogICAgICAgICAgICAkdGhpcy0+bWljcm9zZWNvbmRzID0gcHJlZ19yZXBsYWNlKCcvKFsxLTldKykwKyQvJywgJyQxJywgJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGNvbnRlbnRTaXplID0gMTU7IC8vIFlZWVlNTURESEhtbVNTWgoKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5zRnJhY3Rpb25hbFNlY29uZHNFbGVtZW50KCkpIHsKICAgICAgICAgICAgJGNvbnRlbnRTaXplICs9IDEgKyBzdHJsZW4oJHRoaXMtPm1pY3Jvc2Vjb25kcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbnRlbnRTaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc0ZyYWN0aW9uYWxTZWNvbmRzRWxlbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGludHZhbCgkdGhpcy0+bWljcm9zZWNvbmRzKSA+IDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGVuY29kZWRDb250ZW50ID0gJHRoaXMtPnZhbHVlLT5mb3JtYXQoJ1ltZEhpcycpOwogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICAkZW5jb2RlZENvbnRlbnQgLj0gIi57JHRoaXMtPm1pY3Jvc2Vjb25kc30iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkQ29udGVudC4nWic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29udGFpbnNGcmFjdGlvbmFsU2Vjb25kc0VsZW1lbnQoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlLT5mb3JtYXQoIlktbS1kXHRIOmk6cy51UCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgiWS1tLWRcdEg6aTpzUCIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6R0VORVJBTElaRURfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nID0gMTQ7IC8vIFlZWVlNTURESEhtbVNTCiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmcpOwogICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJGZvcm1hdCA9ICdZbWRHaXMnOwogICAgICAgICRjb250ZW50ID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRjb250ZW50TGVuZ3RoKTsKICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgPSBzdWJzdHIoJGNvbnRlbnQsIDAsICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gJGxlbmd0aE9mTWluaW11bVRpbWVTdHJpbmc7CiAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZCAtPSAkbGVuZ3RoT2ZNaW5pbXVtVGltZVN0cmluZzsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoID09ICRsZW5ndGhPZk1pbmltdW1UaW1lU3RyaW5nKSB7CiAgICAgICAgICAgICRsb2NhbFRpbWVab25lID0gbmV3IFxEYXRlVGltZVpvbmUoZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpKTsKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgJGxvY2FsVGltZVpvbmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcuJykgewogICAgICAgICAgICAgICAgJG1heGltdW1CeXRlc1RvUmVhZC0tOyAvLyBhY2NvdW50IGZvciB0aGUgJy4nCiAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cyA9IDE7IC8vIGFjY291bnQgZm9yIHRoZSAnLicKCiAgICAgICAgICAgICAgICB3aGlsZSAoJG1heGltdW1CeXRlc1RvUmVhZCA+IDAKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnKycKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnLScKICAgICAgICAgICAgICAgICAgICAgICYmICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCArICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50cysrOwogICAgICAgICAgICAgICAgICAgICRtYXhpbXVtQnl0ZXNUb1JlYWQtLTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsICRuck9mRnJhY3Rpb25hbFNlY29uZEVsZW1lbnRzKTsKICAgICAgICAgICAgICAgICRvZmZzZXRJbmRleCArPSAkbnJPZkZyYWN0aW9uYWxTZWNvbmRFbGVtZW50czsKICAgICAgICAgICAgICAgICRmb3JtYXQgLj0gJy51JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRhdGVUaW1lID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCRmb3JtYXQsICRkYXRlVGltZVN0cmluZywgbmV3IFxEYXRlVGltZVpvbmUoJ1VUQycpKTsKCiAgICAgICAgICAgIGlmICgkbWF4aW11bUJ5dGVzVG9SZWFkID4gMCkgewogICAgICAgICAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJysnCiAgICAgICAgICAgICAgICB8fCAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICctJykgewogICAgICAgICAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSAhPSAnWicpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdJbnZhbGlkIElTTyA4NjAxIFRpbWUgU3RyaW5nJywgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCRkYXRlVGltZSk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GeneralString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdlbmVyYWxTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR2VuZXJhbFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6R0VORVJBTF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/GraphicString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIEdyYXBoaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgR3JhcGhpYyBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OkdSQVBISUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/IA5String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCi8qKgogKiBUaGUgSW50ZXJuYXRpb25hbCBBbHBoYWJldCBOby41IChJQTUpIHJlZmVyZW5jZXMgdGhlIGVuY29kaW5nIG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXJzLgogKgogKiBFYWNoIGNoYXJhY3RlciBpbiB0aGUgZGF0YSBpcyBlbmNvZGVkIGFzIDEgYnl0ZS4KICovCmNsYXNzIElBNVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHN0cmluZyk7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTI4OyAkaSsrKSB7CiAgICAgICAgICAgICR0aGlzLT5hbGxvd0NoYXJhY3RlcihjaHIoJGkpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpJQTVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Integer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcVXRpbGl0eVxCaWdJbnRlZ2VyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgSW50ZWdlciBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZQogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIGlmIHRoZSB2YWx1ZSBpcyBub3QgbnVtZXJpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZSkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCBWQUxVRSBbeyR2YWx1ZX1dIGZvciBBU04xX0lOVEVHRVIiKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6SU5URUdFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0cmxlbigkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCkpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZSgkdGhpcy0+dmFsdWUsIDEwKTsKICAgICAgICAkbmVnYXRpdmUgPSAkdmFsdWUtPmNvbXBhcmUoMCkgPCAwOwogICAgICAgIGlmICgkbmVnYXRpdmUpIHsKICAgICAgICAgICAgICR2YWx1ZSA9ICR2YWx1ZS0+YWJzb2x1dGVWYWx1ZSgpOwogICAgICAgICAgICAgJGxpbWl0ID0gMHg4MDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJGxpbWl0ID0gMHg3ZjsKICAgICAgICB9CgogICAgICAgICRtb2QgPSAweGZmKzE7CiAgICAgICAgJHZhbHVlcyA9IFtdOwogICAgICAgIHdoaWxlKCR2YWx1ZS0+Y29tcGFyZSgkbGltaXQpID4gMCkgewogICAgICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICAgICAkdmFsdWUgPSAkdmFsdWUtPnNoaWZ0UmlnaHQoOCk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWUtPm1vZHVsdXMoJG1vZCktPnRvSW50ZWdlcigpOwogICAgICAgICRudW1WYWx1ZXMgPSBjb3VudCgkdmFsdWVzKTsKCiAgICAgICAgaWYgKCRuZWdhdGl2ZSkgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDB4ZmYgLSAkdmFsdWVzWyRpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbnVtVmFsdWVzOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSArPSAxOwogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJGldIDw9IDB4ZmYpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFzc2VydCgkaSAhPSAkbnVtVmFsdWVzIC0gMSk7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRpXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR2YWx1ZXNbJG51bVZhbHVlcyAtIDFdID09IDB4N2YpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9IDB4ZmY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHZhbHVlcyA9IGFycmF5X3JldmVyc2UoJHZhbHVlcyk7CiAgICAgICAgJHIgPSBwYWNrKCJDKiIsIC4uLiR2YWx1ZXMpOwogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbnN1cmVNaW5pbWFsRW5jb2RpbmcoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAvLyBBbGwgdGhlIGZpcnN0IG5pbmUgYml0cyBjYW5ub3QgZXF1YWwgMCBvciAxLCB3aGljaCB3b3VsZAogICAgICAgIC8vIGJlIG5vbi1taW5pbWFsIGVuY29kaW5nIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW50ZWdlcnMgcmVzcGVjdGl2ZWx5CiAgICAgICAgaWYgKChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgPT0gMHgwMCAmJiAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsxXSkgJiAweDgwKSA9PSAwKSB8fAogICAgICAgICAgICAob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0pID09IDB4ZmYgJiYgKG9yZCgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrMV0pICYgMHg4MCkgPT0gMHg4MCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiSW50ZWdlciBub3QgbWluaW1hbGx5IGVuY29kZWQiLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygwKTsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgJHBhcnNlZE9iamVjdC0+Z2V0VHlwZSgpLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIGlmICgkY29udGVudExlbmd0aCA+IDEpIHsKICAgICAgICAgICAgc2VsZjo6ZW5zdXJlTWluaW1hbEVuY29kaW5nKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KICAgICAgICAkaXNOZWdhdGl2ZSA9IChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSkgJiAweDgwKSAhPSAweDAwOwogICAgICAgICRudW1iZXIgPSBCaWdJbnRlZ2VyOjpjcmVhdGUob3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkgJiAweDdGKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvbnRlbnRMZW5ndGggLSAxOyAkaSsrKSB7CiAgICAgICAgICAgICRudW1iZXIgPSAkbnVtYmVyLT5tdWx0aXBseSgweDEwMCktPmFkZChvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGlzTmVnYXRpdmUpIHsKICAgICAgICAgICAgJG51bWJlciA9ICRudW1iZXItPnN1YnRyYWN0KEJpZ0ludGVnZXI6OmNyZWF0ZSgyKS0+dG9Qb3dlcig4ICogJGNvbnRlbnRMZW5ndGggLSAxKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHN0YXRpYygoc3RyaW5nKSRudW1iZXIpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoJGNvbnRlbnRMZW5ndGgpOwoKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NullObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgTnVsbE9iamVjdCBleHRlbmRzIEFTTk9iamVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6TlVMTDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAnTlVMTCc7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok5VTEwsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQW4gQVNOLjEgTnVsbCBzaG91bGQgbm90IGhhdmUgYSBsZW5ndGggb3RoZXIgdGhhbiB6ZXJvLiBFeHRyYWN0ZWQgbGVuZ3RoIHdhcyB7JGNvbnRlbnRMZW5ndGh9IiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigpOwogICAgICAgICRwYXJzZWRPYmplY3QtPnNldENvbnRlbnRMZW5ndGgoMCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/NumericString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIE51bWVyaWNTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgTnVtZXJpY1N0cmluZy4KICAgICAqCiAgICAgKiBUaGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZDoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd051bWJlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok5VTUVSSUNfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectDescriptor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2JqZWN0RGVzY3JpcHRvciBleHRlbmRzIEdyYXBoaWNTdHJpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRvYmplY3REZXNjcmlwdGlvbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfREVTQ1JJUFRPUjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/ObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxCYXNlMTI4Owp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CgpjbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgcHJvdGVjdGVkICRzdWJJZGVudGlmaWVyczsKICAgIHByb3RlY3RlZCAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHZhbHVlKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skdmFsdWV9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTWVyZ2UgdGhlIGZpcnN0IHRvIGFyY3Mgb2YgdGhlIE9JRCByZWdpc3RyYXRpb24gdHJlZSAocGVyIEFTTiBkZWZpbml0aW9uISkKICAgICAgICBpZiAoJG5yT2ZTdWJJZGVudGlmaWVycyA+PSAyKSB7CiAgICAgICAgICAgICR0aGlzLT5zdWJJZGVudGlmaWVyc1sxXSA9ICgkdGhpcy0+c3ViSWRlbnRpZmllcnNbMF0gKiA0MCkgKyAkdGhpcy0+c3ViSWRlbnRpZmllcnNbMV07CiAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5zdWJJZGVudGlmaWVyc1swXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpPQkpFQ1RfSURFTlRJRklFUjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgJGxlbmd0aCA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN1YklkZW50aWZpZXJzIGFzICRzdWJJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRzdWJJZGVudGlmaWVyID0gJHN1YklkZW50aWZpZXIgPj4gNzsKICAgICAgICAgICAgICAgICRsZW5ndGgrKzsKICAgICAgICAgICAgfSB3aGlsZSAoJHN1YklkZW50aWZpZXIgPiAwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbGVuZ3RoOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICRlbmNvZGVkVmFsdWUgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3ViSWRlbnRpZmllcnMgYXMgJHN1YklkZW50aWZpZXIpIHsKICAgICAgICAgICAgJGVuY29kZWRWYWx1ZSAuPSBCYXNlMTI4OjplbmNvZGUoJHN1YklkZW50aWZpZXIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbmNvZGVkVmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBPSUQ6OmdldE5hbWUoJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAxKTsKCiAgICAgICAgJGZpcnN0T2N0ZXQgPSBvcmQoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdKTsKICAgICAgICAkb2lkU3RyaW5nID0gZmxvb3IoJGZpcnN0T2N0ZXQgLyA0MCkuJy4nLigkZmlyc3RPY3RldCAlIDQwKTsKICAgICAgICAkb2lkU3RyaW5nIC49ICcuJy5zZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCAtIDEpOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2VzIGFuIG9iamVjdCBpZGVudGlmaWVyIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IG9jdGV0LCB3aGljaCBpcyBwYXJzZWQKICAgICAqIGRpZmZlcmVudGx5LiBUaGlzIHdheSByZWxhdGl2ZSBvYmplY3QgaWRlbnRpZmllcnMgY2FuIGFsc28gYmUgcGFyc2VkCiAgICAgKiB1c2luZyB0aGlzLgogICAgICoKICAgICAqIEBwYXJhbSAkYmluYXJ5RGF0YQogICAgICogQHBhcmFtICRvZmZzZXRJbmRleAogICAgICogQHBhcmFtICRvY3RldHNUb1JlYWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFBhcnNlckV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcGFyc2VPaWQoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4LCAkb2N0ZXRzVG9SZWFkKQogICAgewogICAgICAgICRvaWQgPSAnJzsKCiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRvY3RldHMgPSAnJzsKCiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSAkb2N0ZXRzVG9SZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignTWFsZm9ybWVkIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyJywgJG9mZnNldEluZGV4IC0gMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG9jdGV0c1RvUmVhZC0tOwogICAgICAgICAgICAgICAgJG9jdGV0ID0gJGJpbmFyeURhdGFbJG9mZnNldEluZGV4KytdOwogICAgICAgICAgICAgICAgJG9jdGV0cyAuPSAkb2N0ZXQ7CiAgICAgICAgICAgIH0gd2hpbGUgKG9yZCgkb2N0ZXQpICYgMHg4MCk7CgogICAgICAgICAgICAkb2lkIC49IHNwcmludGYoJyVkLicsIEJhc2UxMjg6OmRlY29kZSgkb2N0ZXRzKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgJy4nCiAgICAgICAgcmV0dXJuIHN1YnN0cigkb2lkLCAwLCAtMSkgPzogJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/OctetString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcm90ZWN0ZWQgJHZhbHVlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBnYXBzIGJldHdlZW4gaGV4IGRpZ2l0cwogICAgICAgICAgICAkdmFsdWUgPSBwcmVnX3JlcGxhY2UoJy9cc3wweC8nLCAnJywgJHZhbHVlKTsKICAgICAgICB9IGVsc2VpZiAoaXNfbnVtZXJpYygkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IGRlY2hleCgkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ09jdGV0U3RyaW5nOiB1bnJlY29nbml6ZWQgaW5wdXQgdHlwZSEnKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJHZhbHVlKSAlIDIgIT0gMCkgewogICAgICAgICAgICAvLyB0cmFuc2Zvcm0gdmFsdWVzIGxpa2UgMUYyIHRvIDAxRjIKICAgICAgICAgICAgJHZhbHVlID0gJzAnLiR2YWx1ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT52YWx1ZSkgLyAyOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIC8vQWN0dWFsIGNvbnRlbnQKICAgICAgICB3aGlsZSAoc3RybGVuKCR2YWx1ZSkgPj0gMikgewogICAgICAgICAgICAvLyBnZXQgdGhlIGhleCB2YWx1ZSBieXRlIGJ5IGJ5dGUgZnJvbSB0aGUgc3RyaW5nIGFuZCBhbmQgYWRkIGl0IHRvIGJpbmFyeSByZXN1bHQKICAgICAgICAgICAgJHJlc3VsdCAuPSBjaHIoaGV4ZGVjKHN1YnN0cigkdmFsdWUsIDAsIDIpKSk7CiAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiBzdHJ0b3VwcGVyKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEJpbmFyeUNvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0RW5jb2RlZFZhbHVlKCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQmluYXJ5KCYkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCA9IDApCiAgICB7CiAgICAgICAgc2VsZjo6cGFyc2VJZGVudGlmaWVyKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0sIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR2YWx1ZSA9IHN1YnN0cigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgJG9mZnNldEluZGV4ICs9ICRjb250ZW50TGVuZ3RoOwoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoYmluMmhleCgkdmFsdWUpKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/PrintableString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFByaW50YWJsZVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBQcmludGFibGVTdHJpbmcuCiAgICAgKgogICAgICogVGhlIElUVS1UIFguNjgwIFRhYmxlIDggcGVybWl0cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CiAgICAgKiBMYXRpbiBjYXBpdGFsIGxldHRlcnMgQSxCLCAuLi4gWgogICAgICogTGF0aW4gc21hbGwgbGV0dGVycyAgIGEsYiwgLi4uIHoKICAgICAqIERpZ2l0cyAgICAgICAgICAgICAgICAwLDEsIC4uLiA5CiAgICAgKiBTUEFDRSAgICAgICAgICAgICAgICAgKHNwYWNlKQogICAgICogQVBPU1RST1BIRSAgICAgICAgICAgICcKICAgICAqIExFRlQgUEFSRU5USEVTSVMgICAgICAoCiAgICAgKiBSSUdIVCBQQVJFTlRIRVNJUyAgICAgKQogICAgICogUExVUyBTSUdOICAgICAgICAgICAgICsKICAgICAqIENPTU1BICAgICAgICAgICAgICAgICAsCiAgICAgKiBIWVBIRU4tTUlOVVMgICAgICAgICAgLQogICAgICogRlVMTCBTVE9QICAgICAgICAgICAgIC4KICAgICAqIFNPTElEVVMgICAgICAgICAgICAgICAvCiAgICAgKiBDT0xPTiAgICAgICAgICAgICAgICAgOgogICAgICogRVFVQUxTIFNJR04gICAgICAgICAgID0KICAgICAqIFFVRVNUSU9OIE1BUksgICAgICAgICA/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93TnVtYmVycygpOwogICAgICAgICR0aGlzLT5hbGxvd0FsbExldHRlcnMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dTcGFjZXMoKTsKICAgICAgICAkdGhpcy0+YWxsb3dDaGFyYWN0ZXJzKCInIiwgJygnLCAnKScsICcrJywgJy0nLCAnLicsICcsJywgJy8nLCAnOicsICc9JywgJz8nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlBSSU5UQUJMRV9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/RelativeObjectIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcRXhjZXB0aW9uXFBhcnNlckV4Y2VwdGlvbjsKCmNsYXNzIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIE9iamVjdElkZW50aWZpZXIgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN1YklkZW50aWZpZXJzKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdWJJZGVudGlmaWVyczsKICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnMgPSBleHBsb2RlKCcuJywgJHN1YklkZW50aWZpZXJzKTsKICAgICAgICAkbnJPZlN1YklkZW50aWZpZXJzID0gY291bnQoJHRoaXMtPnN1YklkZW50aWZpZXJzKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJG5yT2ZTdWJJZGVudGlmaWVyczsgJGkrKykgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldKSkgewogICAgICAgICAgICAgICAgLy8gZW5mb3JjZSB0aGUgaW50ZWdlciB0eXBlCiAgICAgICAgICAgICAgICAkdGhpcy0+c3ViSWRlbnRpZmllcnNbJGldID0gaW50dmFsKCR0aGlzLT5zdWJJZGVudGlmaWVyc1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiW3skc3ViSWRlbnRpZmllcnN9XSBpcyBubyB2YWxpZCBvYmplY3QgaWRlbnRpZmllciAoc3ViIGlkZW50aWZpZXIgIi4oJGkgKyAxKS4nIGlzIG5vdCBudW1lcmljKSEnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlJFTEFUSVZFX09JRDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6UkVMQVRJVkVfT0lELCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCwgMSk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSBzZWxmOjpwYXJzZU9pZCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkY29udGVudExlbmd0aCk7CiAgICAgICAgfSBjYXRjaCAoUGFyc2VyRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ01hbGZvcm1lZCBBU04uMSBSZWxhdGl2ZSBPYmplY3QgSWRlbnRpZmllcicsICRlLT5nZXRPZmZzZXQoKSk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJG9pZFN0cmluZyk7CiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Sequence.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxDb25zdHJ1Y3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlNFUVVFTkNFOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/Set.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwoKY2xhc3MgU2V0IGV4dGVuZHMgU2VxdWVuY2UKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpTRVQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/T61String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFQ2MVN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBUNjEgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lUVV9ULjYxCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpUNjFfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UniversalString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIEFic3RyYWN0U3RyaW5nCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBBU04uMSBVbml2ZXJzYWwgU3RyaW5nLgogICAgICogVE9ETyBUaGUgZW5jb2RhYmxlIGNoYXJhY3RlcnMgb2YgdGhpcyB0eXBlIGFyZSBub3QgeWV0IGNoZWNrZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaXZlcnNhbF9DaGFyYWN0ZXJfU2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRzdHJpbmc7CiAgICAgICAgJHRoaXMtPmFsbG93QWxsKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpVTklWRVJTQUxfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTCTime.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFRpbWU7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKLyoqCiAqIFRoaXMgQVNOLjEgdW5pdmVyc2FsIHR5cGUgY29udGFpbnMgdGhlIGNhbGVuZGFyIGRhdGUgYW5kIHRpbWUuCiAqCiAqIFRoZSBwcmVjaXNpb24gaXMgb25lIG1pbnV0ZSBvciBvbmUgc2Vjb25kIGFuZCBvcHRpb25hbGx5IGEKICogbG9jYWwgdGltZSBkaWZmZXJlbnRpYWwgZnJvbSBjb29yZGluYXRlZCB1bml2ZXJzYWwgdGltZS4KICoKICogRGVjb2Rpbmcgb2YgdGhpcyB0eXBlIHdpbGwgYWNjZXB0IHRoZSBCYXNpYyBFbmNvZGluZyBSdWxlcyAoQkVSKQogKiBUaGUgZW5jb2Rpbmcgd2lsbCBjb21wbHkgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKS4KICovCmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBBYnN0cmFjdFRpbWUgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlVUQ19USU1FOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjdWxhdGVDb250ZW50TGVuZ3RoKCkKICAgIHsKICAgICAgICByZXR1cm4gMTM7IC8vIENvbnRlbnQgaXMgYSBzdHJpbmcgbyB0aGUgZm9sbG93aW5nIGZvcm1hdDogWVlNTUREaGhtbXNzWiAoMTMgb2N0ZXRzKQogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRFbmNvZGVkVmFsdWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUtPmZvcm1hdCgneW1kSGlzJykuJ1onOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpVVENfVElNRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDExKTsKCiAgICAgICAgJGZvcm1hdCA9ICd5bWRHaSc7CiAgICAgICAgJGRhdGVUaW1lU3RyaW5nID0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDEwKTsKICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMTA7CgogICAgICAgIC8vIGV4dHJhY3Qgb3B0aW9uYWwgc2Vjb25kcyBwYXJ0CiAgICAgICAgaWYgKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gIT0gJ1onCiAgICAgICAgJiYgJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSAhPSAnKycKICAgICAgICAmJiAkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdICE9ICctJykgewogICAgICAgICAgICAkZGF0ZVRpbWVTdHJpbmcgLj0gc3Vic3RyKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgsIDIpOwogICAgICAgICAgICAkb2Zmc2V0SW5kZXggKz0gMjsKICAgICAgICAgICAgJGZvcm1hdCAuPSAncyc7CiAgICAgICAgfQoKICAgICAgICAkZGF0ZVRpbWUgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJGRhdGVUaW1lU3RyaW5nLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwoKICAgICAgICAvLyBleHRyYWN0IHRpbWUgem9uZSBzZXR0aW5ncwogICAgICAgIGlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdID09ICcrJwogICAgICAgIHx8ICRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleF0gPT0gJy0nKSB7CiAgICAgICAgICAgICRkYXRlVGltZSA9IHN0YXRpYzo6ZXh0cmFjdFRpbWVab25lRGF0YSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4LCAkZGF0ZVRpbWUpOwogICAgICAgIH0gZWxzZWlmICgkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXgrK10gIT0gJ1onKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0ludmFsaWQgVVRDIFN0cmluZycsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0ID0gbmV3IHNlbGYoJGRhdGVUaW1lKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/UTF8String.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFVURjhTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVW5pdmVyc2FsIFN0cmluZy4KICAgICAqIFRPRE8gVGhlIGVuY29kYWJsZSBjaGFyYWN0ZXJzIG9mIHRoaXMgdHlwZSBhcmUgbm90IHlldCBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkc3RyaW5nOwogICAgICAgICR0aGlzLT5hbGxvd0FsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6VVRGOF9TVFJJTkc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/Universal/VisibleString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMVxVbml2ZXJzYWw7Cgp1c2UgRkdcQVNOMVxBYnN0cmFjdFN0cmluZzsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKCmNsYXNzIFZpc2libGVTdHJpbmcgZXh0ZW5kcyBBYnN0cmFjdFN0cmluZwp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQVNOLjEgVmlzaWJsZSBTdHJpbmcuCiAgICAgKiBUT0RPIFRoZSBlbmNvZGFibGUgY2hhcmFjdGVycyBvZiB0aGlzIHR5cGUgYXJlIG5vdCB5ZXQgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHN0cmluZzsKICAgICAgICAkdGhpcy0+YWxsb3dBbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OlZJU0lCTEVfU1RSSU5HOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownConstructedObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25Db25zdHJ1Y3RlZE9iamVjdCBleHRlbmRzIENvbnN0cnVjdAp7CiAgICBwcml2YXRlICRpZGVudGlmaWVyOwogICAgcHJpdmF0ZSAkY29udGVudExlbmd0aDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeURhdGEKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldEluZGV4CiAgICAgKgogICAgICogQHRocm93cyBcRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYmluYXJ5RGF0YSwgJiRvZmZzZXRJbmRleCkKICAgIHsKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9IHNlbGY6OnBhcnNlQmluYXJ5SWRlbnRpZmllcigkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdGhpcy0+Y29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJGNoaWxkcmVuID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICR0aGlzLT5jb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkbmV3Q2hpbGQgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJG5ld0NoaWxkLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgJGNoaWxkcmVuW10gPSAkbmV3Q2hpbGQ7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KC4uLiRjaGlsZHJlbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiBvcmQoJHRoaXMtPmlkZW50aWZpZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkZW50aWZpZXI7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudExlbmd0aDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RW5jb2RlZFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/ASN1/UnknownObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcQVNOMTsKCmNsYXNzIFVua25vd25PYmplY3QgZXh0ZW5kcyBBU05PYmplY3QKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlICRpZGVudGlmaWVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGlkZW50aWZpZXIgRWl0aGVyIHRoZSBmaXJzdCBpZGVudGlmaWVyIG9jdGV0IGFzIGludCBvciBhbGwgaWRlbnRpZmllciBieXRlcyBhcyBhIHN0cmluZwogICAgICogQHBhcmFtIGludCAgICAgICAgJGNvbnRlbnRMZW5ndGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpZGVudGlmaWVyLCAkY29udGVudExlbmd0aCkKICAgIHsKICAgICAgICBpZiAoaXNfaW50KCRpZGVudGlmaWVyKSkgewogICAgICAgICAgICAkaWRlbnRpZmllciA9IGNocigkaWRlbnRpZmllcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aWRlbnRpZmllciA9ICRpZGVudGlmaWVyOwogICAgICAgICR0aGlzLT52YWx1ZSA9ICJVbnBhcnNhYmxlIE9iamVjdCAoeyRjb250ZW50TGVuZ3RofSBieXRlcykiOwogICAgICAgICR0aGlzLT5zZXRDb250ZW50TGVuZ3RoKCRjb250ZW50TGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG9yZCgkdGhpcy0+aWRlbnRpZmllclswXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWRlbnRpZmllcjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50TGVuZ3RoKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlcgogKiBVdGlsaXR5IGNsYXNzIHRvIHJlbW92ZSBkZXBlbmRlbmNlIG9uIGEgc2luZ2xlIGxhcmdlIG51bWJlciBsaWJyYXJ5LiBOb3QgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgdGhpcyBjbGFzcyBvbmx5CiAqIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIHRocm91Z2hvdXQgdGhpcyBwcm9qZWN0LgogKgogKiBJbnN0YW5jZXMgYXJlIGltbXV0YWJsZSwgYWxsIG9wZXJhdGlvbnMgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHJlc3VsdC4KICoKICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmFic3RyYWN0IGNsYXNzIEJpZ0ludGVnZXIKewogICAgLyoqCiAgICAgKiBGb3JjZSBhIHByZWZlcmVuY2Ugb24gdGhlIHVuZGVybHlpbmcgYmlnIG51bWJlciBpbXBsZW1lbnRhdGlvbiwgdXNlZnVsIGZvciB0ZXN0aW5nLgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3ByZWZlcjsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFByZWZlcigkcHJlZmVyID0gbnVsbCkKICAgIHsKICAgICAgICBzZWxmOjokX3ByZWZlciA9ICRwcmVmZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBCaWdJbnRlZ2VyIGluc3RhbmNlIGJhc2VkIG9mZiB0aGUgYmFzZSAxMCBzdHJpbmcgb3IgYW4gaW50ZWdlci4KICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICR2YWwKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCR2YWwpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRfcHJlZmVyKSB7CiAgICAgICAgICAgIHN3aXRjaCAoc2VsZjo6JF9wcmVmZXIpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2dtcCc6CiAgICAgICAgICAgICAgICAgICAgJHJldCA9IG5ldyBCaWdJbnRlZ2VyR21wKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdiY21hdGgnOgogICAgICAgICAgICAgICAgICAgICRyZXQgPSBuZXcgQmlnSW50ZWdlckJjbWF0aCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignVW5rbm93biBudW1iZXIgaW1wbGVtZW50YXRpb246ICcgLiBzZWxmOjokX3ByZWZlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIGF1dG9kZXRlY3QKICAgICAgICAgICAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ2dtcCcpKSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gbmV3IEJpZ0ludGVnZXJHbXAoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ2JjbWF0aCcpKSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gbmV3IEJpZ0ludGVnZXJCY21hdGgoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFRPRE86IHBvdGVudGlhbGx5IG9mZmVyIHB1cmUgcGhwIGltcGxlbWVudGF0aW9uPwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdSZXF1aXJlcyBHTVAgb3IgYmNtYXRoIGV4dGVuc2lvbi4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2ludCgkdmFsKSkgewogICAgICAgICAgICAkcmV0LT5fZnJvbUludGVnZXIoJHZhbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAvLyBjb252ZXJ0IHRvIHN0cmluZywgaWYgbm90IGFscmVhZHkgb25lCiAgICAgICAgICAgICR2YWwgPSAoc3RyaW5nKSR2YWw7CgogICAgICAgICAgICAvLyB2YWxpZGF0ZSBzdHJpbmcKICAgICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvXi0/WzAtOV0rJC8nLCAkdmFsKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmV0LT5fZnJvbVN0cmluZygkdmFsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIC8qKgogICAgICogQmlnSW50ZWdlciBjb25zdHJ1Y3Rvci4KICAgICAqIFByZXZlbnQgZGlyZWN0bHkgaW5zdGFudGlhdGluZyBvYmplY3QsIHVzZSBCaWdJbnRlZ2VyOjpjcmVhdGUgaW5zdGVhZC4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKCiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJjbGFzc2VzIG11c3QgcHJvdmlkZSBjbG9uZSBmdW5jdGlvbmFsaXR5LgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCk7CgogICAgLyoqCiAgICAgKiBBc3NpZ24gdGhlIGluc3RhbmNlIHZhbHVlIGZyb20gYmFzZSAxMCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIF9mcm9tU3RyaW5nKCRzdHIpOwoKICAgIC8qKgogICAgICogQXNzaWduIHRoZSBpbnN0YW5jZSB2YWx1ZSBmcm9tIGFuIGludGVnZXIgdHlwZS4KICAgICAqIEBwYXJhbSBpbnQgJGludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIF9mcm9tSW50ZWdlcigkaW50ZWdlcik7CgogICAgLyoqCiAgICAgKiBNdXN0IHByb3ZpZGUgc3RyaW5nIGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyBiYXNlIDEwIG51bWJlci4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7CgogICAgLyogSU5GT1JNQVRJT05BTCBGVU5DVElPTlMgKi8KCiAgICAvKioKICAgICAqIFJldHVybiBpbnRlZ2VyLCBpZiBwb3NzaWJsZS4gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbnVtYmVyIGNhbiBub3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBuYXRpdmUgaW50ZWdlci4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIFxPdmVyZmxvd0V4Y2VwdGlvbgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdG9JbnRlZ2VyKCk7CgogICAgLyoqCiAgICAgKiBJcyByZXByZXNlbnRlZCBpbnRlZ2VyIG5lZ2F0aXZlPwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCk7CgogICAgLyoqCiAgICAgKiBDb21wYXJlIHRoZSBpbnRlZ2VyIHdpdGggJG51bWJlciwgcmV0dXJucyBhIG5lZ2F0aXZlIGludGVnZXIgaWYgJHRoaXMgaXMgbGVzcyB0aGFuIG51bWJlciwgcmV0dXJucyAwIGlmICR0aGlzIGlzCiAgICAgKiBlcXVhbCB0byBudW1iZXIgYW5kIHJldHVybnMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmICR0aGlzIGlzIGdyZWF0ZXIgdGhhbiBudW1iZXIuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRudW1iZXIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKCRudW1iZXIpOwoKICAgIC8qIE1PRElGWSAqLwoKICAgIC8qKgogICAgICogQWRkIGFub3RoZXIgaW50ZWdlciAkYiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIEJpZ0ludGVnZXJ8c3RyaW5nfGludCAkYgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBhZGQoJGIpOwoKICAgIC8qKgogICAgICogU3VidHJhY3QgJGIgZnJvbSAkdGhpcyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIEJpZ0ludGVnZXJ8c3RyaW5nfGludCAkYgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzdWJ0cmFjdCgkYik7CgogICAgLyoqCiAgICAgKiBNdWx0aXBseSB2YWx1ZS4KICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyfHN0cmluZ3xpbnQgJGIKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoJGIpOwoKICAgIC8qKgogICAgICogVGhlIHZhbHVlICR0aGlzIG1vZHVsdXMgJGIuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIG1vZHVsdXMoJGIpOwoKICAgIC8qKgogICAgICogUmFpc2UgJHRoaXMgdG8gdGhlIHBvd2VyIG9mICRiIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlcnxzdHJpbmd8aW50ICRiCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHRvUG93ZXIoJGIpOwoKICAgIC8qKgogICAgICogU2hpZnQgdGhlIHZhbHVlIHRvIHRoZSByaWdodCBieSBhIHNldCBudW1iZXIgb2YgYml0cyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIGludCAkYml0cwogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzaGlmdFJpZ2h0KCRiaXRzID0gOCk7CgogICAgLyoqCiAgICAgKiBTaGlmdCB0aGUgdmFsdWUgdG8gdGhlIGxlZnQgYnkgYSBzZXQgbnVtYmVyIG9mIGJpdHMgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4KICAgICAqIEBwYXJhbSBpbnQgJGJpdHMKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRiaXRzID0gOCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZS4KICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gYWJzb2x1dGVWYWx1ZSgpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerBcmath.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckJjbWF0aAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBiY21hdGggbGlicmFyeSB0byBwZXJmb3JtIGxhcmdlIG9wZXJhdGlvbnMuCiAqIEBwYWNrYWdlIEZHXFV0aWxpdHkKICogQGludGVybmFsCiAqLwpjbGFzcyBCaWdJbnRlZ2VyQmNtYXRoIGV4dGVuZHMgQmlnSW50ZWdlcgp7CiAgICBwcm90ZWN0ZWQgJF9zdHI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKQogICAgewogICAgICAgIC8vIG5vdGhpbmcgbmVlZGVkIHRvIGNvcHkKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3N0ciA9IChzdHJpbmcpJHN0cjsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21JbnRlZ2VyKCRpbnRlZ2VyKQogICAgewogICAgICAgICR0aGlzLT5fc3RyID0gKHN0cmluZykkaW50ZWdlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludGVnZXIoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01BWCkgPiAwIHx8ICR0aGlzLT5jb21wYXJlKFBIUF9JTlRfTUlOKSA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxPdmVyZmxvd0V4Y2VwdGlvbihzcHJpbnRmKCdDYW4gbm90IHJlcHJlc2VudCAlcyBhcyBpbnRlZ2VyLicsICR0aGlzLT5fc3RyKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaW50KSR0aGlzLT5fc3RyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc05lZ2F0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAnMCcsIDApIDwgMDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3N0cjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRudW1iZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmUoJG51bWJlcikKICAgIHsKICAgICAgICByZXR1cm4gYmNjb21wKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkbnVtYmVyKSwgMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNhZGQoJHRoaXMtPl9zdHIsICR0aGlzLT5fdW53cmFwKCRiKSwgMCk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY3N1YigkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpLCAwKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbHkoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjbXVsKCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtb2R1bHVzKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgIGlmICgkdGhpcy0+aXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgICAgIC8vIGJjbW9kIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyBkaWZmZXJlbnRseQogICAgICAgICAgICAkYiA9ICR0aGlzLT5fdW53cmFwKCRiKTsKICAgICAgICAgICAgJHJldC0+X3N0ciA9IGJjc3ViKCRiLCBiY21vZChiY3N1YignMCcsICR0aGlzLT5fc3RyLCAwKSwgJGIpLCAwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRyZXQtPl9zdHIgPSBiY21vZCgkdGhpcy0+X3N0ciwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvUG93ZXIoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3N0ciA9IGJjcG93KCR0aGlzLT5fc3RyLCAkdGhpcy0+X3Vud3JhcCgkYiksIDApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdFJpZ2h0KCRiaXRzID0gOCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fc3RyID0gYmNkaXYoJHRoaXMtPl9zdHIsIGJjcG93KCcyJywgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRiaXRzID0gOCkgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9zdHIgPSBiY211bCgkdGhpcy0+X3N0ciwgYmNwb3coJzInLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhYnNvbHV0ZVZhbHVlKCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICBpZiAoLTEgPT09IGJjY29tcCgkdGhpcy0+X3N0ciwgJzAnLCAwKSkgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gYmNzdWIoJzAnLCAkdGhpcy0+X3N0ciwgMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkcmV0LT5fc3RyID0gJHRoaXMtPl9zdHI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/Utility/BigIntegerGmp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIEZHXFV0aWxpdHk7CgovKioKICogQ2xhc3MgQmlnSW50ZWdlckdtcAogKiBJbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGJpZyBudW1iZXJzIHVzaW5nIHRoZSBHTVAgZXh0ZW5zaW9uIHRvIHBlcmZvcm0gb3BlcmF0aW9ucy4KICogQHBhY2thZ2UgRkdcVXRpbGl0eQogKiBAaW50ZXJuYWwKICovCmNsYXNzIEJpZ0ludGVnZXJHbXAgZXh0ZW5kcyBCaWdJbnRlZ2VyCnsKICAgIC8qKgogICAgICogUmVzb3VyY2UgaGFuZGxlLgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCkKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2FkZCgkdGhpcy0+X3JoLCAwKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2Zyb21TdHJpbmcoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3JoID0gZ21wX2luaXQoJHN0ciwgMTApOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfZnJvbUludGVnZXIoJGludGVnZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9yaCA9IGdtcF9pbml0KCRpbnRlZ2VyLCAxMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBnbXBfc3RydmFsKCR0aGlzLT5fcmgsIDEwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnRlZ2VyKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCB8fCAkdGhpcy0+Y29tcGFyZShQSFBfSU5UX01JTikgPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcT3ZlcmZsb3dFeGNlcHRpb24oc3ByaW50ZignQ2FuIG5vdCByZXByZXNlbnQgJXMgYXMgaW50ZWdlci4nLCAkdGhpcykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ21wX2ludHZhbCgkdGhpcy0+X3JoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNOZWdhdGl2ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtcF9zaWduKCR0aGlzLT5fcmgpID09PSAtMTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Vud3JhcCgkbnVtYmVyKQogICAgewogICAgICAgIGlmICgkbnVtYmVyIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICByZXR1cm4gJG51bWJlci0+X3JoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG51bWJlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSgkbnVtYmVyKQogICAgewogICAgICAgIHJldHVybiBnbXBfY21wKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRudW1iZXIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRiKQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9hZGQoJHRoaXMtPl9yaCwgJHRoaXMtPl91bndyYXAoJGIpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VidHJhY3QoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX3N1YigkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aXBseSgkYikKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsICR0aGlzLT5fdW53cmFwKCRiKSk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1vZHVsdXMoJGIpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX21vZCgkdGhpcy0+X3JoLCAkdGhpcy0+X3Vud3JhcCgkYikpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b1Bvd2VyKCRiKQogICAgewogICAgICAgIGlmICgkYiBpbnN0YW5jZW9mIHNlbGYpIHsKICAgICAgICAgICAgLy8gZ21wX3BvdyBhY2NlcHRzIGp1c3QgYW4gaW50ZWdlcgogICAgICAgICAgICBpZiAoJGItPmNvbXBhcmUoUEhQX0lOVF9NQVgpID4gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1VuYWJsZSB0byByYWlzZSB0byBwb3dlciBncmVhdGVyIHRoYW4gUEhQX0lOVF9NQVguJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGIgPSBnbXBfaW50dmFsKCRiLT5fcmgpOwogICAgICAgIH0KICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfcG93KCR0aGlzLT5fcmgsICRiKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRSaWdodCgkYml0cz04KQogICAgewogICAgICAgICRyZXQgPSBuZXcgc2VsZigpOwogICAgICAgICRyZXQtPl9yaCA9IGdtcF9kaXYoJHRoaXMtPl9yaCwgZ21wX3BvdygyLCAkYml0cykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaGlmdExlZnQoJGJpdHM9OCkKICAgIHsKICAgICAgICAkcmV0ID0gbmV3IHNlbGYoKTsKICAgICAgICAkcmV0LT5fcmggPSBnbXBfbXVsKCR0aGlzLT5fcmgsIGdtcF9wb3coMiwgJGJpdHMpKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWJzb2x1dGVWYWx1ZSgpCiAgICB7CiAgICAgICAgJHJldCA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHJldC0+X3JoID0gZ21wX2FicygkdGhpcy0+X3JoKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/AlgorithmIdentifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXFVuaXZlcnNhbFxOdWxsT2JqZWN0Owp1c2UgRkdcQVNOMVxDb21wb3NpdGVcQXR0cmlidXRlVHlwZUFuZFZhbHVlOwoKY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciBleHRlbmRzIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9iamVjdElkZW50aWZpZXJTdHJpbmcpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkb2JqZWN0SWRlbnRpZmllclN0cmluZywgbmV3IE51bGxPYmplY3QoKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateExtensions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXEV4Y2VwdGlvblxQYXJzZXJFeGNlcHRpb247CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcQVNOT2JqZWN0Owp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcSWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9jdGV0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcWDUwOVxTQU5cU3ViamVjdEFsdGVybmF0aXZlTmFtZXM7CgpjbGFzcyBDZXJ0aWZpY2F0ZUV4dGVuc2lvbnMgZXh0ZW5kcyBTZXQgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRpbm5lclNlcXVlbmNlOwogICAgcHJpdmF0ZSAkZXh0ZW5zaW9ucyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmlubmVyU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR0aGlzLT5pbm5lclNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3ViamVjdEFsdGVybmF0aXZlTmFtZXMoU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgJHNhbnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmFkZEV4dGVuc2lvbihPSUQ6OkNFUlRfRVhUX1NVQkpFQ1RfQUxUX05BTUUsICRzYW5zKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZEV4dGVuc2lvbigkb2lkU3RyaW5nLCBBU05PYmplY3QgJGV4dGVuc2lvbikKICAgIHsKICAgICAgICAkc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKG5ldyBPYmplY3RJZGVudGlmaWVyKCRvaWRTdHJpbmcpKTsKICAgICAgICAkc2VxdWVuY2UtPmFkZENoaWxkKCRleHRlbnNpb24pOwoKICAgICAgICAkdGhpcy0+aW5uZXJTZXF1ZW5jZS0+YWRkQ2hpbGQoJHNlcXVlbmNlKTsKICAgICAgICAkdGhpcy0+ZXh0ZW5zaW9uc1tdID0gJGV4dGVuc2lvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRlbnNpb25zOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVQsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICR0bXBPZmZzZXQgPSAkb2Zmc2V0SW5kZXg7CiAgICAgICAgJGV4dGVuc2lvbnMgPSBTZXF1ZW5jZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9ucy0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKTsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgZm9yZWFjaCAoJGV4dGVuc2lvbnMgYXMgJGV4dGVuc2lvbikgewogICAgICAgICAgICBpZiAoJGV4dGVuc2lvbi0+Z2V0VHlwZSgpICE9IElkZW50aWZpZXI6OlNFUVVFTkNFKSB7CiAgICAgICAgICAgICAgICAvL0ZJWE1FIHdyb25nIG9mZnNldCBpbmRleAogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbignQ291bGQgbm90IHBhcnNlIENlcnRpZmljYXRlIEV4dGVuc2lvbnM6IEV4cGVjdGVkIEFTTi4xIFNlcXVlbmNlIGJ1dCBnb3QgJy4kZXh0ZW5zaW9uLT5nZXRUeXBlTmFtZSgpLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdG1wT2Zmc2V0ICs9IDEgKyAkZXh0ZW5zaW9uLT5nZXROdW1iZXJPZkxlbmd0aE9jdGV0cygpOwogICAgICAgICAgICAkY2hpbGRyZW4gPSAkZXh0ZW5zaW9uLT5nZXRDaGlsZHJlbigpOwogICAgICAgICAgICBpZiAoY291bnQoJGNoaWxkcmVuKSA8IDIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBOZWVkcyBhdCBsZWFzdCB0d28gY2hpbGQgZWxlbWVudHMgcGVyIGV4dGVuc2lvbiBzZXF1ZW5jZSAob2JqZWN0IGlkZW50aWZpZXIgYW5kIG9jdGV0IHN0cmluZyknLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiogQHZhciBcRkdcQVNOMVxBU05PYmplY3QgJG9iamVjdElkZW50aWZpZXIgKi8KICAgICAgICAgICAgJG9iamVjdElkZW50aWZpZXIgPSAkY2hpbGRyZW5bMF07CgogICAgICAgICAgICAvKiogQHZhciBPY3RldFN0cmluZyAkb2N0ZXRTdHJpbmcgKi8KICAgICAgICAgICAgJG9jdGV0U3RyaW5nID0gJGNoaWxkcmVuWzFdOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRUeXBlKCkgIT0gSWRlbnRpZmllcjo6T0JKRUNUX0lERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NvdWxkIG5vdCBwYXJzZSBDZXJ0aWZpY2F0ZSBFeHRlbnNpb25zOiBFeHBlY3RlZCBBU04uMSBPYmplY3QgSWRlbnRpZmllciBidXQgZ290ICcuJGV4dGVuc2lvbi0+Z2V0VHlwZU5hbWUoKSwgJHRtcE9mZnNldCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9iamVjdElkZW50aWZpZXItPmdldE9iamVjdExlbmd0aCgpOwoKICAgICAgICAgICAgaWYgKCRvYmplY3RJZGVudGlmaWVyLT5nZXRDb250ZW50KCkgPT0gT0lEOjpDRVJUX0VYVF9TVUJKRUNUX0FMVF9OQU1FKSB7CiAgICAgICAgICAgICAgICAkc2FucyA9IFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkdG1wT2Zmc2V0KTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzKCRzYW5zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGNhbiBub3cgb25seSBwYXJzZSBTQU5zLiBUaGVyZSBtaWdodCBiZSBtb3JlIGluIHRoZSBmdXR1cmUKICAgICAgICAgICAgICAgICR0bXBPZmZzZXQgKz0gJG9jdGV0U3RyaW5nLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+Z2V0QmluYXJ5KCk7IC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbnRlbnQgb2N0ZXRzIGFuZCBvYmplY3Qgc2l6ZXMgb25jZSAoanVzdCB0byBsZXQgdGhlIGVxdWFsaXR5IHVuaXQgdGVzdHMgcGFzcyA6LyApCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CertificateSubject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXENvbXBvc2l0ZVxSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxDb21wb3NpdGVcUkROU3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CgpjbGFzcyBDZXJ0aWZpY2F0ZVN1YmplY3QgZXh0ZW5kcyBTZXF1ZW5jZSBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHByaXZhdGUgJGNvbW1vbk5hbWU7CiAgICBwcml2YXRlICRlbWFpbDsKICAgIHByaXZhdGUgJG9yZ2FuaXphdGlvbjsKICAgIHByaXZhdGUgJGxvY2FsaXR5OwogICAgcHJpdmF0ZSAkc3RhdGU7CiAgICBwcml2YXRlICRjb3VudHJ5OwogICAgcHJpdmF0ZSAkb3JnYW5pemF0aW9uYWxVbml0OwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY29tbW9uTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZW1haWwKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxpdHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudHJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcmdhbml6YXRpb25hbFVuaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb21tb25OYW1lLCAkZW1haWwsICRvcmdhbml6YXRpb24sICRsb2NhbGl0eSwgJHN0YXRlLCAkY291bnRyeSwgJG9yZ2FuaXphdGlvbmFsVW5pdCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09VTlRSWV9OQU1FLCAkY291bnRyeSksCiAgICAgICAgICAgIG5ldyBSRE5TdHJpbmcoT0lEOjpTVEFURV9PUl9QUk9WSU5DRV9OQU1FLCAkc3RhdGUpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6TE9DQUxJVFlfTkFNRSwgJGxvY2FsaXR5KSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9SR0FOSVpBVElPTl9OQU1FLCAkb3JnYW5pemF0aW9uKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6Ok9VX05BTUUsICRvcmdhbml6YXRpb25hbFVuaXQpLAogICAgICAgICAgICBuZXcgUkROU3RyaW5nKE9JRDo6Q09NTU9OX05BTUUsICRjb21tb25OYW1lKSwKICAgICAgICAgICAgbmV3IFJETlN0cmluZyhPSUQ6OlBLQ1M5X0VNQUlMLCAkZW1haWwpCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmNvbW1vbk5hbWUgPSAkY29tbW9uTmFtZTsKICAgICAgICAkdGhpcy0+ZW1haWwgPSAkZW1haWw7CiAgICAgICAgJHRoaXMtPm9yZ2FuaXphdGlvbiA9ICRvcmdhbml6YXRpb247CiAgICAgICAgJHRoaXMtPmxvY2FsaXR5ID0gJGxvY2FsaXR5OwogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdGF0ZTsKICAgICAgICAkdGhpcy0+Y291bnRyeSA9ICRjb3VudHJ5OwogICAgICAgICR0aGlzLT5vcmdhbml6YXRpb25hbFVuaXQgPSAkb3JnYW5pemF0aW9uYWxVbml0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21tb25OYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbW1vbk5hbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVtYWlsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVtYWlsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3JnYW5pemF0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGl0eSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sb2NhbGl0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvdW50cnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y291bnRyeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JnYW5pemF0aW9uYWxVbml0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm9yZ2FuaXphdGlvbmFsVW5pdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgSWRlbnRpZmllcjo6U0VRVUVOQ0UsICRvZmZzZXRJbmRleCsrKTsKICAgICAgICAkY29udGVudExlbmd0aCA9IHNlbGY6OnBhcnNlQ29udGVudExlbmd0aCgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKCiAgICAgICAgJG5hbWVzID0gW107CiAgICAgICAgJG9jdGV0c1RvUmVhZCA9ICRjb250ZW50TGVuZ3RoOwogICAgICAgIHdoaWxlICgkb2N0ZXRzVG9SZWFkID4gMCkgewogICAgICAgICAgICAkcmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA9IFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWU6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvY3RldHNUb1JlYWQgLT0gJHJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUtPmdldE9iamVjdExlbmd0aCgpOwogICAgICAgICAgICAkbmFtZXNbXSA9ICRyZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/Attributes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlRXh0ZW5zaW9uczsKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxQYXJzYWJsZTsKdXNlIEZHXEFTTjFcQ29uc3RydWN0Owp1c2UgRkdcQVNOMVxJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwoKY2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIFBhcnNhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gMHhBMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCBTZXQgJGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRvYmplY3RJZGVudGlmaWVyKSkgewogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCRvYmplY3RJZGVudGlmaWVyKTsKICAgICAgICB9CiAgICAgICAgJGF0dHJpYnV0ZVNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAkYXR0cmlidXRlU2VxdWVuY2UtPmdldE51bWJlck9mTGVuZ3RoT2N0ZXRzKCk7ICAvLyBsZW5ndGggYW5kIG51bWJlciBvZiBsZW5ndGggb2N0ZXRzIGlzIGNhbGN1bGF0ZWQKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJGF0dHJpYnV0ZVNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CaW5hcnkoJiRiaW5hcnlEYXRhLCAmJG9mZnNldEluZGV4ID0gMCkKICAgIHsKICAgICAgICBzZWxmOjpwYXJzZUlkZW50aWZpZXIoJGJpbmFyeURhdGFbJG9mZnNldEluZGV4XSwgMHhBMCwgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvY3RldHNUb1JlYWQgPSAkY29udGVudExlbmd0aDsKCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgd2hpbGUgKCRvY3RldHNUb1JlYWQgPiAwKSB7CiAgICAgICAgICAgICRpbml0aWFsT2Zmc2V0ID0gJG9mZnNldEluZGV4OyAvLyB1c2VkIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCBiaXRzIGhhdmUgYmVlbiByZWFkCiAgICAgICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpTRVFVRU5DRSwgJG9mZnNldEluZGV4KyspOwogICAgICAgICAgICBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CgogICAgICAgICAgICAkb2JqZWN0SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgICAgICRvaWRTdHJpbmcgPSAkb2JqZWN0SWRlbnRpZmllci0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICBpZiAoJG9pZFN0cmluZyA9PSBPSUQ6OlBLQ1M5X0VYVEVOU0lPTl9SRVFVRVNUKSB7CiAgICAgICAgICAgICAgICAkYXR0cmlidXRlID0gQ2VydGlmaWNhdGVFeHRlbnNpb25zOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGF0dHJpYnV0ZSA9IEFTTk9iamVjdDo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldEluZGV4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkQXR0cmlidXRlKCRvYmplY3RJZGVudGlmaWVyLCAkYXR0cmlidXRlKTsKICAgICAgICAgICAgJG9jdGV0c1RvUmVhZCAtPSAoJG9mZnNldEluZGV4IC0gJGluaXRpYWxPZmZzZXQpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdC0+c2V0Q29udGVudExlbmd0aCgkY29udGVudExlbmd0aCk7CgogICAgICAgIHJldHVybiAkcGFyc2VkT2JqZWN0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/CSR/CSR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxDU1I7Cgp1c2UgRkdcQVNOMVxPSUQ7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxJbnRlZ2VyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2VxdWVuY2U7CnVzZSBGR1xYNTA5XENlcnRpZmljYXRlU3ViamVjdDsKdXNlIEZHXFg1MDlcQWxnb3JpdGhtSWRlbnRpZmllcjsKdXNlIEZHXFg1MDlcUHVibGljS2V5OwoKY2xhc3MgQ1NSIGV4dGVuZHMgU2VxdWVuY2UKewogICAgY29uc3QgQ1NSX1ZFUlNJT05fTlIgPSAwOwoKICAgIHByb3RlY3RlZCAkc3ViamVjdDsKICAgIHByb3RlY3RlZCAkcHVibGljS2V5OwogICAgcHJvdGVjdGVkICRzaWduYXR1cmU7CiAgICBwcm90ZWN0ZWQgJHNpZ25hdHVyZUFsZ29yaXRobTsKCiAgICBwcm90ZWN0ZWQgJHN0YXJ0U2VxdWVuY2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tb25OYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbWFpbAogICAgICogQHBhcmFtIHN0cmluZyAkb3JnYW5pemF0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGl0eQogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvdW50cnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZ2FuaXphdGlvbmFsVW5pdAogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZUFsZ29yaXRobQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbW1vbk5hbWUsICRlbWFpbCwgJG9yZ2FuaXphdGlvbiwgJGxvY2FsaXR5LCAkc3RhdGUsICRjb3VudHJ5LCAkb3JnYW5pemF0aW9uYWxVbml0LCAkcHVibGljS2V5LCAkc2lnbmF0dXJlLCAkc2lnbmF0dXJlQWxnb3JpdGhtID0gT0lEOjpTSEExX1dJVEhfUlNBX1NJR05BVFVSRSkKICAgIHsKICAgICAgICAkdGhpcy0+c3ViamVjdCA9IG5ldyBDZXJ0aWZpY2F0ZVN1YmplY3QoCiAgICAgICAgICAgICRjb21tb25OYW1lLAogICAgICAgICAgICAkZW1haWwsCiAgICAgICAgICAgICRvcmdhbml6YXRpb24sCiAgICAgICAgICAgICRsb2NhbGl0eSwKICAgICAgICAgICAgJHN0YXRlLAogICAgICAgICAgICAkY291bnRyeSwKICAgICAgICAgICAgJG9yZ2FuaXphdGlvbmFsVW5pdAogICAgICAgICk7CiAgICAgICAgJHRoaXMtPnB1YmxpY0tleSA9ICRwdWJsaWNLZXk7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZSA9ICRzaWduYXR1cmU7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobSA9ICRzaWduYXR1cmVBbGdvcml0aG07CgogICAgICAgICR0aGlzLT5jcmVhdGVDU1JTZXF1ZW5jZSgpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVDU1JTZXF1ZW5jZSgpCiAgICB7CiAgICAgICAgJHZlcnNpb25OciAgICAgICAgICAgID0gbmV3IEludGVnZXIoc2VsZjo6Q1NSX1ZFUlNJT05fTlIpOwogICAgICAgICRwdWJsaWNLZXkgICAgICAgICAgICA9IG5ldyBQdWJsaWNLZXkoJHRoaXMtPnB1YmxpY0tleSk7CiAgICAgICAgJHNpZ25hdHVyZSAgICAgICAgICAgID0gbmV3IEJpdFN0cmluZygkdGhpcy0+c2lnbmF0dXJlKTsKICAgICAgICAkc2lnbmF0dXJlQWxnb3JpdGhtICAgID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobSk7CgogICAgICAgICRjZXJ0UmVxdWVzdEluZm8gID0gbmV3IFNlcXVlbmNlKCR2ZXJzaW9uTnIsICR0aGlzLT5zdWJqZWN0LCAkcHVibGljS2V5KTsKCiAgICAgICAgJHRoaXMtPmFkZENoaWxkKCRjZXJ0UmVxdWVzdEluZm8pOwogICAgICAgICR0aGlzLT5hZGRDaGlsZCgkc2lnbmF0dXJlQWxnb3JpdGhtKTsKICAgICAgICAkdGhpcy0+YWRkQ2hpbGQoJHNpZ25hdHVyZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICR0bXAgPSBiYXNlNjRfZW5jb2RlKCR0aGlzLT5nZXRCaW5hcnkoKSk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkdG1wKTsgJGkrKykgewogICAgICAgICAgICBpZiAoKCRpICsgMikgJSA2NSA9PSAwKSB7CiAgICAgICAgICAgICAgICAkdG1wID0gc3Vic3RyKCR0bXAsIDAsICRpICsgMSkuIlxuIi5zdWJzdHIoJHRtcCwgJGkgKyAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICctLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLScuUEhQX0VPTDsKICAgICAgICAkcmVzdWx0IC49ICR0bXAuUEhQX0VPTDsKICAgICAgICAkcmVzdWx0IC49ICctLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0nOwoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OkNTUl9WRVJTSU9OX05SOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmdhbml6YXRpb25OYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QtPmdldE9yZ2FuaXphdGlvbigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbE5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3ViamVjdC0+Z2V0TG9jYWxpdHkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3ViamVjdC0+Z2V0U3RhdGUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q291bnRyeSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRDb3VudHJ5KCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE9yZ2FuaXphdGlvbmFsVW5pdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0LT5nZXRPcmdhbml6YXRpb25hbFVuaXQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnB1YmxpY0tleTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpZ25hdHVyZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlQWxnb3JpdGhtKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PrivateKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQcml2YXRlS2V5IGV4dGVuZHMgU2VxdWVuY2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZXhLZXkKICAgICAqIEBwYXJhbSBcRkdcQVNOMVxBU05PYmplY3R8c3RyaW5nICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaGV4S2V5LCAkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyA9IE9JRDo6UlNBX0VOQ1JZUFRJT04pCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgKICAgICAgICAgICAgbmV3IFNlcXVlbmNlKAogICAgICAgICAgICAgICAgbmV3IE9iamVjdElkZW50aWZpZXIoJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcpLAogICAgICAgICAgICAgICAgbmV3IE51bGxPYmplY3QoKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgQml0U3RyaW5nKCRoZXhLZXkpCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/PublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOTsKCnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE9iamVjdElkZW50aWZpZXI7CgpjbGFzcyBQdWJsaWNLZXkgZXh0ZW5kcyBTZXF1ZW5jZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhleEtleQogICAgICogQHBhcmFtIFxGR1xBU04xXEFTTk9iamVjdHxzdHJpbmcgJGFsZ29yaXRobUlkZW50aWZpZXJTdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRoZXhLZXksICRhbGdvcml0aG1JZGVudGlmaWVyU3RyaW5nID0gT0lEOjpSU0FfRU5DUllQVElPTikKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KAogICAgICAgICAgICBuZXcgU2VxdWVuY2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0SWRlbnRpZmllcigkYWxnb3JpdGhtSWRlbnRpZmllclN0cmluZyksCiAgICAgICAgICAgICAgICBuZXcgTnVsbE9iamVjdCgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBCaXRTdHJpbmcoJGhleEtleSkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/DNSName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcR2VuZXJhbFN0cmluZzsKCmNsYXNzIEROU05hbWUgZXh0ZW5kcyBHZW5lcmFsU3RyaW5nCnsKICAgIGNvbnN0IElERU5USUZJRVIgPSAweDgyOyAvLyBub3Qgc3VyZSB5ZXQgd2h5IHRoaXMgaXMgdGhlIGlkZW50aWZpZXIgdXNlZCBpbiBTQU4gZXh0ZW5zaW9ucwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZG5zTmFtZVN0cmluZykKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRkbnNOYW1lU3RyaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OklERU5USUZJRVI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/IPAddress.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXFBhcnNhYmxlOwp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwoKY2xhc3MgSVBBZGRyZXNzIGV4dGVuZHMgQVNOT2JqZWN0IGltcGxlbWVudHMgUGFyc2FibGUKewogICAgY29uc3QgSURFTlRJRklFUiA9IDB4ODc7IC8vIG5vdCBzdXJlIHlldCB3aHkgdGhpcyBpcyB0aGUgaWRlbnRpZmllciB1c2VkIGluIFNBTiBleHRlbnNpb25zCgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlwQWRkcmVzc1N0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkaXBBZGRyZXNzU3RyaW5nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6SURFTlRJRklFUjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsY3VsYXRlQ29udGVudExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgJGlwUGFydHMgPSBleHBsb2RlKCcuJywgJHRoaXMtPnZhbHVlKTsKICAgICAgICAkYmluYXJ5ICA9IGNocigkaXBQYXJ0c1swXSk7CiAgICAgICAgJGJpbmFyeSAuPSBjaHIoJGlwUGFydHNbMV0pOwogICAgICAgICRiaW5hcnkgLj0gY2hyKCRpcFBhcnRzWzJdKTsKICAgICAgICAkYmluYXJ5IC49IGNocigkaXBQYXJ0c1szXSk7CgogICAgICAgIHJldHVybiAkYmluYXJ5OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBzZWxmOjpJREVOVElGSUVSLCAkb2Zmc2V0SW5kZXgrKyk7CiAgICAgICAgJGNvbnRlbnRMZW5ndGggPSBzZWxmOjpwYXJzZUNvbnRlbnRMZW5ndGgoJGJpbmFyeURhdGEsICRvZmZzZXRJbmRleCk7CiAgICAgICAgaWYgKCRjb250ZW50TGVuZ3RoICE9IDQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckV4Y2VwdGlvbigiQSBGR1xcWDUwOVxTQU5cSVBBZGRyZXNzIHNob3VsZCBoYXZlIGEgY29udGVudCBsZW5ndGggb2YgNC4gRXh0cmFjdGVkIGxlbmd0aCB3YXMgeyRjb250ZW50TGVuZ3RofSIsICRvZmZzZXRJbmRleCk7CiAgICAgICAgfQoKICAgICAgICAkaXBBZGRyZXNzU3RyaW5nID0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSkuJy4nOwogICAgICAgICRpcEFkZHJlc3NTdHJpbmcgLj0gb3JkKCRiaW5hcnlEYXRhWyRvZmZzZXRJbmRleCsrXSk7CgogICAgICAgICRwYXJzZWRPYmplY3QgPSBuZXcgc2VsZigkaXBBZGRyZXNzU3RyaW5nKTsKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRPYmplY3RMZW5ndGgoKTsKCiAgICAgICAgcmV0dXJuICRwYXJzZWRPYmplY3Q7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/lib/X509/SAN/SubjectAlternativeNames.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFBIUEFTTjEgbGlicmFyeS4KICoKICogQ29weXJpZ2h0IMKpIEZyaWVkcmljaCBHcm/Dn2UgPGZyaWVkcmljaC5ncm9zc2VAZ21haWwuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgRkdcWDUwOVxTQU47Cgp1c2UgRkdcQVNOMVxFeGNlcHRpb25cUGFyc2VyRXhjZXB0aW9uOwp1c2UgRkdcQVNOMVxBU05PYmplY3Q7CnVzZSBGR1xBU04xXE9JRDsKdXNlIEZHXEFTTjFcUGFyc2FibGU7CnVzZSBGR1xBU04xXElkZW50aWZpZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCi8qKgogKiBTZWUgc2VjdGlvbiA4LjMuMi4xIG9mIElUVS1UIFguNTA5LgogKi8KY2xhc3MgU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgZXh0ZW5kcyBBU05PYmplY3QgaW1wbGVtZW50cyBQYXJzYWJsZQp7CiAgICBwcml2YXRlICRhbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2U7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRlbnRMZW5ndGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRPYmplY3RMZW5ndGgoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6Ok9DVEVUU1RSSU5HOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGREb21haW5OYW1lKEROU05hbWUgJGRvbWFpbk5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPmFsdGVybmF0aXZlTmFtZXNTZXF1ZW5jZS0+YWRkQ2hpbGQoJGRvbWFpbk5hbWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJUChJUEFkZHJlc3MgJGlwKQogICAgewogICAgICAgICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmFkZENoaWxkKCRpcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWx0ZXJuYXRpdmVOYW1lc1NlcXVlbmNlLT5nZXRDb250ZW50KCk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVuY29kZWRWYWx1ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hbHRlcm5hdGl2ZU5hbWVzU2VxdWVuY2UtPmdldEJpbmFyeSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUJpbmFyeSgmJGJpbmFyeURhdGEsICYkb2Zmc2V0SW5kZXggPSAwKQogICAgewogICAgICAgIHNlbGY6OnBhcnNlSWRlbnRpZmllcigkYmluYXJ5RGF0YVskb2Zmc2V0SW5kZXhdLCBJZGVudGlmaWVyOjpPQ1RFVFNUUklORywgJG9mZnNldEluZGV4KyspOwogICAgICAgICRjb250ZW50TGVuZ3RoID0gc2VsZjo6cGFyc2VDb250ZW50TGVuZ3RoKCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwoKICAgICAgICBpZiAoJGNvbnRlbnRMZW5ndGggPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIHdpdGhpbiB0aGUgb2N0ZXQgc3RyaW5nIGFmdGVyIHRoZSBPYmplY3QgaWRlbnRpZmllciAnLk9JRDo6Q0VSVF9FWFRfU1VCSkVDVF9BTFRfTkFNRS4iIGlzIHRvbyBzaG9ydCAoeyRjb250ZW50TGVuZ3RofSBvY3RldHMpIiwgJG9mZnNldEluZGV4KTsKICAgICAgICB9CgogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlID0gJG9mZnNldEluZGV4OwogICAgICAgICRzZXF1ZW5jZSA9IFNlcXVlbmNlOjpmcm9tQmluYXJ5KCRiaW5hcnlEYXRhLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICRvZmZzZXRPZlNlcXVlbmNlICs9ICRzZXF1ZW5jZS0+Z2V0TnVtYmVyT2ZMZW5ndGhPY3RldHMoKSArIDE7CgogICAgICAgIGlmICgkc2VxdWVuY2UtPmdldE9iamVjdExlbmd0aCgpICE9ICRjb250ZW50TGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oJ0NhbiBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lczogVGhlIFNlcXVlbmNlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBzdXJyb3VuZGluZyBvY3RldCBzdHJpbmcnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgJHBhcnNlZE9iamVjdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgLyoqIEB2YXIgXEZHXEFTTjFcQVNOT2JqZWN0ICRvYmplY3QgKi8KICAgICAgICBmb3JlYWNoICgkc2VxdWVuY2UgYXMgJG9iamVjdCkgewogICAgICAgICAgICBpZiAoJG9iamVjdC0+Z2V0VHlwZSgpID09IEROU05hbWU6OklERU5USUZJRVIpIHsKICAgICAgICAgICAgICAgICRkb21haW5OYW1lID0gRE5TTmFtZTo6ZnJvbUJpbmFyeSgkYmluYXJ5RGF0YSwgJG9mZnNldE9mU2VxdWVuY2UpOwogICAgICAgICAgICAgICAgJHBhcnNlZE9iamVjdC0+YWRkRG9tYWluTmFtZSgkZG9tYWluTmFtZSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkb2JqZWN0LT5nZXRUeXBlKCkgPT0gSVBBZGRyZXNzOjpJREVOVElGSUVSKSB7CiAgICAgICAgICAgICAgICAkaXAgPSBJUEFkZHJlc3M6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEsICRvZmZzZXRPZlNlcXVlbmNlKTsKICAgICAgICAgICAgICAgICRwYXJzZWRPYmplY3QtPmFkZElQKCRpcCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXhjZXB0aW9uKCdDb3VsZCBub3QgcGFyc2UgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiBPbmx5IEROU05hbWUgYW5kIElQIFNBTnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQnLCAkb2Zmc2V0SW5kZXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcGFyc2VkT2JqZWN0LT5nZXRCaW5hcnkoKTsgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY29udGVudCBvY3RldHMgYW5kIG9iamVjdCBzaXplcyBvbmNlIChqdXN0IHRvIGxldCB0aGUgZXF1YWxpdHkgdW5pdCB0ZXN0cyBwYXNzIDovICkKICAgICAgICByZXR1cm4gJHBhcnNlZE9iamVjdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEyLTIwMTUgRnJpZWRyaWNoIEdyb8OfZSA8ZnJpZWRyaWNoLmdyb3NzZUBnbWFpbC5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/fgrosse/phpasn1/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQQVNOMQo9PT09PT09CgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vc2VjdXJlLnRyYXZpcy1jaS5vcmcvZmdyb3NzZS9QSFBBU04xLnBuZz9icmFuY2g9bWFzdGVyKV0oaHR0cDovL3RyYXZpcy1jaS5vcmcvZmdyb3NzZS9QSFBBU04xKQpbIVtQSFAgNyByZWFkeV0oaHR0cDovL3BocDdyZWFkeS50aW1lc3BsaW50ZXIuY2gvZmdyb3NzZS9QSFBBU04xL2JhZGdlLnN2ZyldKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9mZ3Jvc3NlL1BIUEFTTjEpClshW0NvdmVyYWdlIFN0YXR1c10oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vcmVwb3MvZmdyb3NzZS9QSFBBU04xL2JhZGdlLnN2Zz9icmFuY2g9bWFzdGVyJnNlcnZpY2U9Z2l0aHViKV0oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vZ2l0aHViL2Zncm9zc2UvUEhQQVNOMT9icmFuY2g9bWFzdGVyKQoKWyFbTGF0ZXN0IFN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2Zncm9zc2UvcGhwYXNuMS92L3N0YWJsZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xKQpbIVtUb3RhbCBEb3dubG9hZHNdKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvZmdyb3NzZS9waHBhc24xL2Rvd25sb2Fkcy5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xKQpbIVtMYXRlc3QgVW5zdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9mZ3Jvc3NlL3BocGFzbjEvdi91bnN0YWJsZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL2Zncm9zc2UvcGhwYXNuMS9saWNlbnNlLnBuZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9mZ3Jvc3NlL3BocGFzbjEpCgpBIFBIUCBGcmFtZXdvcmsgdGhhdCBhbGxvd3MgeW91IHRvIGVuY29kZSBhbmQgZGVjb2RlIGFyYml0cmFyeSBbQVNOLjFdWzNdIHN0cnVjdHVyZXMKdXNpbmcgdGhlIFtJVFUtVCBYLjY5MCBFbmNvZGluZyBSdWxlc11bNF0uClRoaXMgZW5jb2RpbmcgaXMgdmVyeSBmcmVxdWVudGx5IHVzZWQgaW4gW1guNTA5IFBLSSBlbnZpcm9ubWVudHNdWzVdIG9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gaGV0ZXJvZ2VuZW91cyBjb21wdXRlciBzeXN0ZW1zLgoKVGhlIEFQSSBhbGxvd3MgeW91IHRvIGVuY29kZSBBU04uMSBzdHJ1Y3R1cmVzIHRvIGNyZWF0ZSBiaW5hcnkgZGF0YSBzdWNoIGFzIGNlcnRpZmljYXRlCnNpZ25pbmcgcmVxdWVzdHMgKENTUiksIFguNTA5IGNlcnRpZmljYXRlcyBvciBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChDUkwpLgpQSFBBU04xIGNhbiBhbHNvIHJlYWQgW0JFUiBlbmNvZGVkXVs2XSBiaW5hcnkgZGF0YSBpbnRvIHNlcGFyYXRlIFBIUCBvYmplY3RzIHRoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSB1c2VyIGFuZCByZWVuY29kZWQgYWZ0ZXJ3YXJkcy4KClRoZSAqKmNoYW5nZWxvZyoqIGNhbiBub3cgYmUgZm91bmQgYXQgW0NIQU5HRUxPRy5tZF0oQ0hBTkdFTE9HLm1kKS4KCiMjIERlcGVuZGVuY2llcwoKUEhQQVNOMSByZXF1aXJlcyBhdCBsZWFzdCBgUEhQIDcuMGAgYW5kIGVpdGhlciB0aGUgYGdtcGAgb3IgYGJjbWF0aGAgZXh0ZW5zaW9uLgpTdXBwb3J0IGZvciBvbGRlciBQSFAgdmVyc2lvbnMgKGkuZS4gUEhQIDUuNikgd2FzIGRyb3BwZWQgc3RhcnRpbmcgd2l0aCBgdjIuMGAuCklmIHlvdSBtdXN0IHVzZSBhbiBvdXRkYXRlZCBQSFAgdmVyc2lvbiBjb25zaWRlciB1c2luZyBbUEhQQVNOIHYxLjVdWzEzXS4KCkZvciB0aGUgbG9hZGluZyBvZiBvYmplY3QgaWRlbnRpZmllciBuYW1lcyBkaXJlY3RseSBmcm9tIHRoZSB3ZWIgW2N1cmxdWzddIGlzIHVzZWQuCgojIyBJbnN0YWxsYXRpb24KClRoZSBwcmVmZXJyZWQgd2F5IHRvIGluc3RhbGwgdGhpcyBsaWJyYXJ5IGlzIHRvIHJlbHkgb24gW0NvbXBvc2VyXVsyXToKCmBgYGJhc2gKJCBjb21wb3NlciByZXF1aXJlIGZncm9zc2UvcGhwYXNuMQpgYGAKCiMjIFVzYWdlCgojIyMgRW5jb2RpbmcgQVNOLjEgU3RydWN0dXJlcwoKUEhQQVNOMSBvZmZlcnMgeW91IGEgY2xhc3MgZm9yIGVhY2ggb2YgdGhlIGltcGxlbWVudGVkIEFTTi4xIHVuaXZlcnNhbCB0eXBlcy4KVGhlIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgcHJldHR5IHNlbGYgZXhwbGFuYXRvcnkgc28geW91IHNob3VsZCBoYXZlIG5vIGJpZyB0cm91YmxlIGdldHRpbmcgc3RhcnRlZC4KQWxsIGRhdGEgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIFtERVIgZW5jb2RpbmddWzhdCgpgYGBwaHAKdXNlIEZHXEFTTjFcT0lEOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJvb2xlYW47CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxFbnVtZXJhdGVkOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSUE1U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2JqZWN0SWRlbnRpZmllcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFByaW50YWJsZVN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXFNlcXVlbmNlOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcU2V0Owp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcTnVsbE9iamVjdDsKCiRpbnRlZ2VyID0gbmV3IEludGVnZXIoMTIzNDU2KTsgICAgICAgIAokYm9vbGVhbiA9IG5ldyBCb29sZWFuKHRydWUpOwokZW51bSA9IG5ldyBFbnVtZXJhdGVkKDEpOwokaWE1U3RyaW5nID0gbmV3IElBNVN0cmluZygnSGVsbG8gd29ybGQnKTsKCiRhc25OdWxsID0gbmV3IE51bGxPYmplY3QoKTsKJG9iamVjdElkZW50aWZpZXIxID0gbmV3IE9iamVjdElkZW50aWZpZXIoJzEuMi4yNTAuMS4xNi45Jyk7CiRvYmplY3RJZGVudGlmaWVyMiA9IG5ldyBPYmplY3RJZGVudGlmaWVyKE9JRDo6UlNBX0VOQ1JZUFRJT04pOwokcHJpbnRhYmxlU3RyaW5nID0gbmV3IFByaW50YWJsZVN0cmluZygnRm9vIGJhcicpOwoKJHNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCRpbnRlZ2VyLCAkYm9vbGVhbiwgJGVudW0sICRpYTVTdHJpbmcpOwokc2V0ID0gbmV3IFNldCgkc2VxdWVuY2UsICRhc25OdWxsLCAkb2JqZWN0SWRlbnRpZmllcjEsICRvYmplY3RJZGVudGlmaWVyMiwgJHByaW50YWJsZVN0cmluZyk7CgokbXlCaW5hcnkgID0gJHNlcXVlbmNlLT5nZXRCaW5hcnkoKTsKJG15QmluYXJ5IC49ICRzZXQtPmdldEJpbmFyeSgpOwoKZWNobyBiYXNlNjRfZW5jb2RlKCRteUJpbmFyeSk7CmBgYAoKCiMjIyBEZWNvZGluZyBiaW5hcnkgZGF0YQoKRGVjb2RpbmcgQkVSIGVuY29kZWQgYmluYXJ5IGRhdGEgaXMganVzdCBhcyBlYXN5IGFzIGVuY29kaW5nIGl0OgoKYGBgcGhwCnVzZSBGR1xBU04xXEFTTk9iamVjdDsKCiRiYXNlNjRTdHJpbmcgPSAuLi4KJGJpbmFyeURhdGEgPSBiYXNlNjRfZGVjb2RlKCRiYXNlNjRTdHJpbmcpOyAgICAgICAgCiRhc25PYmplY3QgPSBBU05PYmplY3Q6OmZyb21CaW5hcnkoJGJpbmFyeURhdGEpOwoKCi8vIGRvIHN0dWZmCmBgYAoKSWYgeW91IGFscmVhZHkga25vdyBleGFjdGx5IGhvdyB5b3VyIGV4cGVjdGVkIGRhdGEgc2hvdWxkIGxvb2sgbGlrZSB5b3UgY2FuIHVzZSB0aGUgYEZHXEFTTjFcVGVtcGxhdGVQYXJzZXJgOgoKYGBgcGhwCnVzZSBGR1xBU04xXFRlbXBsYXRlUGFyc2VyOwoKLy8gZmlyc3QgZGVmaW5lIHlvdXIgdGVtcGxhdGUKJHRlbXBsYXRlID0gWwogICAgSWRlbnRpZmllcjo6U0VRVUVOQ0UgPT4gWwogICAgICAgIElkZW50aWZpZXI6OlNFVCA9PiBbCiAgICAgICAgICAgIElkZW50aWZpZXI6Ok9CSkVDVF9JREVOVElGSUVSLAogICAgICAgICAgICBJZGVudGlmaWVyOjpTRVFVRU5DRSA9PiBbCiAgICAgICAgICAgICAgICBJZGVudGlmaWVyOjpJTlRFR0VSLAogICAgICAgICAgICAgICAgSWRlbnRpZmllcjo6QklUU1RSSU5HLAogICAgICAgICAgICBdCiAgICAgICAgXQogICAgXQpdOwoKLy8gaWYgeW91ciBiaW5hcnkgZGF0YSBpcyBub3QgbWF0Y2hpbmcgdGhlIHRlbXBsYXRlIHlvdSBwcm92aWRlZCB0aGlzIHdpbGwgdGhyb3cgYW4gYFxFeGNlcHRpb25gOgokcGFyc2VyID0gbmV3IFRlbXBsYXRlUGFyc2VyKCk7CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJpbmFyeSgkZGF0YSwgJHRlbXBsYXRlKTsKCi8vIHRoZXJlIGlzIGFsc28gYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBpZiB5b3UgcGFyc2UgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQ6CiRvYmplY3QgPSAkcGFyc2VyLT5wYXJzZUJhc2U2NCgkZGF0YSwgJHRlbXBsYXRlKTsKYGBgCgpZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB5b3VyIGRhdGEgaGFzIGV4YWN0bHkgdGhlIGZvcm1hdCB5b3UgYXJlIGV4cGVjdGluZy4KCiMjIyBOYXZpZ2F0aW5nIGRlY29kZWQgZGF0YQoKQWxsIGNvbnN0cnVjdGVkIGNsYXNzZXMgKGkuZS4gYFNlcXVlbmNlYCBhbmQgYFNldGApIGNhbiBiZSBuYXZpZ2F0ZWQgYnkgYXJyYXkgYWNjZXNzIG9yIHVzaW5nIGFuIGl0ZXJhdG9yLgpZb3UgY2FuIGZpbmQgZXhhbXBsZXMKW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYmxvYi9mNjQ0MmNhZGRhOWQzNmYzNTE4YzczN2UzMmYyODMwMGE1ODhiNzc3L3Rlc3RzL0FTTjEvVW5pdmVyc2FsL1NlcXVlbmNlVGVzdC5waHAjTDE0OC0xNDgpLApbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2Zncm9zc2UvUEhQQVNOMS9ibG9iL2Y2NDQyY2FkZGE5ZDM2ZjM1MThjNzM3ZTMyZjI4MzAwYTU4OGI3NzcvdGVzdHMvQVNOMS9Vbml2ZXJzYWwvU2VxdWVuY2VUZXN0LnBocCNMMTIxKSBhbmQgCltoZXJlXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL2Jsb2IvZjY0NDJjYWRkYTlkMzZmMzUxOGM3MzdlMzJmMjgzMDBhNTg4Yjc3Ny90ZXN0cy9BU04xL1RlbXBsYXRlUGFyc2VyVGVzdC5waHAjTDQ1KS4KCgojIyMgR2l2ZSBtZSBtb3JlIGV4YW1wbGVzIQoKVG8gc2VlIHNvbWUgZXhhbXBsZSB1c2FnZSBvZiB0aGUgQVBJIGNsYXNzZXMgb3Igc29tZSBnZW5lcmF0ZWQgb3V0cHV0IGNoZWNrIG91dCB0aGUgW2V4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vZmdyb3NzZS9QSFBBU04xL3RyZWUvbWFzdGVyL2V4YW1wbGVzKS4KCgojIyMgSG93IGRvIEkgY29udHJpYnV0ZT8KCklmIHlvdSBmb3VuZCBhbiBpc3N1ZSBvciBoYXZlIGEgcXVlc3Rpb24gc3VibWl0IGEgZ2l0aHViIGlzc3VlIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24uCgpJbiBjYXNlIHlvdSBhbHJlYWR5IGtub3cgd2hhdCBjYXVzZWQgdGhlIGlzc3VlIGFuZCBmZWVsIGluIHRoZSBtb29kIHRvIGZpeCBpdCwgeW91ciBjb2RlIGNvbnRyaWJ1dGlvbnMgYXJlIGFsd2F5cyB3ZWxjb21lLiBKdXN0IGZvcmsgdGhlIHJlcG9zaXRvcnksIGltcGxlbWVudCB5b3VyIGNoYW5nZXMgYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBjb3ZlcmVkIGV2ZXJ5dGhpbmcgd2l0aCB0ZXN0cy4KQWZ0ZXJ3YXJkcyBzdWJtaXQgYSBwdWxsIHJlcXVlc3QgdmlhIGdpdGh1YiBhbmQgYmUgYSBsaXR0bGUgcGF0aWVudCA6KSBJIHVzdWFsbHkgdHJ5IHRvIGNvbW1lbnQgYW5kL29yIG1lcmdlIGFzIHNvb24gYXMgcG9zc2libGUuCgojIyMjIE1haWxpbmcgbGlzdAoKTmV3IGZlYXR1cmVzIG9yIHF1ZXN0aW9ucyBjYW4gYmUgZGlzY3Vzc2VkIGluIFt0aGlzIGdvb2dsZSBncm91cC9tYWlsaW5nIGxpc3RdWzEyXS4KCiMjIyBUaGFua3MKClRvIFthbGwgY29udHJpYnV0b3JzXVsxXSBzbyBmYXIhCgojIyBMaWNlbnNlCgpUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFtNSVQgTGljZW5zZV0oTElDRU5TRSkuCgpbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvZ3JhcGhzL2NvbnRyaWJ1dG9ycwpbMl06IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnLwpbM106IGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9hc24xLwpbNF06IGh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9yZWNvbW1lbmRhdGlvbnMvcmVjLmFzcHg/cmVjPXguNjkwCls1XTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjUwOQpbNl06IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWC42OTAjQkVSX2VuY29kaW5nCls3XTogaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Jvb2suY3VybC5waHAKWzhdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1guNjkwI0RFUl9lbmNvZGluZwpbOV06IGh0dHBzOi8vc3R5bGVjaS5pbwpbMTBdOiBodHRwczovL2NvdmVyYWxscy5pby9naXRodWIvZmdyb3NzZS9QSFBBU04xClsxMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9mZ3Jvc3NlL1BIUEFTTjEvYmxvYi9tYXN0ZXIvdGVzdHMvQVNOMS9UZW1wbGF0ZVBhcnNlclRlc3QucGhwI0wxNgpbMTJdOiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2QvZm9ydW0vcGhwYXNuMQpbMTNdOiBodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZmdyb3NzZS9waHBhc24xIzEuNS4yCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgojIyA2LjMuMyAtIDIwMTgtMDQtMjIKCiogRml4OiBEZWZhdWx0IGhlYWRlcnMgd2hlbiBkZWNvZGVfY29udGVudCBpcyBzcGVjaWZpZWQKCgojIyA2LjMuMiAtIDIwMTgtMDMtMjYKCiogRml4OiBSZWxlYXNlIHByb2Nlc3MKCgojIyA2LjMuMSAtIDIwMTgtMDMtMjYKCiogQnVnIGZpeDogUGFyc2luZyAwIGVwb2NoIGV4cGlyeSB0aW1lcyBpbiBjb29raWVzIFsjMjAxNF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMDE0KQoqIEltcHJvdmVtZW50OiBCZXR0ZXIgQ29ubmVjdEV4Y2VwdGlvbiBkZXRlY3Rpb24gWyMyMDEyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIwMTIpCiogQnVnIGZpeDogTWFsZm9ybWVkIGRvbWFpbiB0aGF0IGNvbnRhaW5zIGEgIi8iIFsjMTk5OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTk5KQoqIEJ1ZyBmaXg6IFVuZGVmaW5lZCBvZmZzZXQgd2hlbiBhIGNvb2tpZSBoYXMgbm8gZmlyc3Qga2V5LXZhbHVlIHBhaXIgWyMxOTk4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5OTgpCiogSW1wcm92ZW1lbnQ6IFN1cHBvcnQgUEhQVW5pdCA2IFsjMTk1M10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTUzKQoqIEJ1ZyBmaXg6IFN1cHBvcnQgZW1wdHkgaGVhZGVycyBbIzE5MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTkxNSkKKiBCdWcgZml4OiBJZ25vcmUgY2FzZSBkdXJpbmcgaGVhZGVyIG1vZGlmaWNhdGlvbnMgWyMxOTE2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5MTYpCgorIE1pbm9yIGNvZGUgY2xlYW51cHMsIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgoKCiMjIDYuMy4wIC0gMjAxNy0wNi0yMgoKKiBGZWF0dXJlOiBmb3JjZSBJUCByZXNvbHV0aW9uIChpcHY0IG9yIGlwdjYpIFsjMTYwOF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjA4KSwgWyMxNjU5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2NTkpCiogSW1wcm92ZW1lbnQ6IERvbid0IGluY2x1ZGUgc3VtbWFyeSBpbiBleGNlcHRpb24gbWVzc2FnZSB3aGVuIGJvZHkgaXMgZW1wdHkgWyMxNjIxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2MjEpCiogSW1wcm92ZW1lbnQ6IEhhbmRsZSBgb25faGVhZGVyc2Agb3B0aW9uIGluIE1vY2tIYW5kbGVyIFsjMTU4MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNTgwKQoqIEltcHJvdmVtZW50OiBBZGRlZCBTVVNFIExpbnV4IENBIHBhdGggWyMxNjA5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTYwOSkKKiBJbXByb3ZlbWVudDogVXNlIGNsYXNzIHJlZmVyZW5jZSBmb3IgZ2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgaW5zdGVhZCBvZiB1c2luZyBoYXJkY29kZWQgc3RyaW5ncyBbIzE2NDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY0MSkKKiBGZWF0dXJlOiBBZGRlZCBgcmVhZF90aW1lb3V0YCBvcHRpb24gWyMxNjExXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2MTEpCiogQnVnIGZpeDogUEhQIDcueCBmaXhlcyBbIzE2ODVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY4NSksIFsjMTY4Nl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjg2KSwgWyMxODExXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE4MTEpCiogRGVwcmVjYXRpb246IEJhZFJlc3BvbnNlRXhjZXB0aW9uIGluc3RhbnRpYXRpb24gd2l0aG91dCBhIHJlc3BvbnNlIFsjMTY0Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjQyKQoqIEZlYXR1cmU6IEFkZGVkIE5UTE0gYXV0aCBbIzE1NjldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTU2OSkKKiBGZWF0dXJlOiBUcmFjayByZWRpcmVjdCBIVFRQIHN0YXR1cyBjb2RlcyBbIzE3MTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTcxMSkKKiBJbXByb3ZlbWVudDogQ2hlY2sgaGFuZGxlciB0eXBlIGR1cmluZyBjb25zdHJ1Y3Rpb24gWyMxNzQ1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE3NDUpCiogSW1wcm92ZW1lbnQ6IEFsd2F5cyBpbmNsdWRlIHRoZSBDb250ZW50LUxlbmd0aCBpZiB0aGVyZSdzIGEgYm9keSBbIzE3MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTcyMSkKKiBGZWF0dXJlOiBBZGRlZCBjb252ZW5pZW5jZSBtZXRob2QgdG8gYWNjZXNzIGEgY29va2llIGJ5IG5hbWUgWyMxMzE4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzMTgpCiogQnVnIGZpeDogRmlsbCBgQ1VSTE9QVF9DQVBBVEhgIGFuZCBgQ1VSTE9QVF9DQUlORk9gIHByb3Blcmx5IFsjMTY4NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjg0KQoqIEltcHJvdmVtZW50OiAgCVVzZSBgXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIG9iamVjdCBpbml0IFsjMTgyN10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xODI3KQoKCisgTWlub3IgY29kZSBjbGVhbnVwcywgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCgojIyA2LjIuMyAtIDIwMTctMDItMjgKCiogRml4IGRlcHJlY2F0aW9ucyB3aXRoIGd1enpsZS9wc3I3IHZlcnNpb24gMS40CgojIyA2LjIuMiAtIDIwMTYtMTAtMDgKCiogQWxsb3cgdG8gcGFzcyBudWxsYWJsZSBSZXNwb25zZSB0byBkZWxheSBjYWxsYWJsZQoqIE9ubHkgYWRkIHNjaGVtZSB3aGVuIGhvc3QgaXMgcHJlc2VudAoqIEZpeCBkcmFpbiBjYXNlIHdoZXJlIGNvbnRlbnQtbGVuZ3RoIGlzIHRoZSBsaXRlcmFsIHN0cmluZyB6ZXJvCiogT2JmdXNjYXRlIGluLVVSTCBjcmVkZW50aWFscyBpbiBleGNlcHRpb25zCgojIyA2LjIuMSAtIDIwMTYtMDctMTgKCiogQWRkcmVzcyBIVFRQX1BST1hZIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIENWRS0yMDE2LTUzODU6CiAgaHR0cHM6Ly9odHRwb3h5Lm9yZy8KKiBGaXhpbmcgdGltZW91dCBidWcgd2l0aCBTdHJlYW1IYW5kbGVyOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQ4OAoqIE9ubHkgcmVhZCB1cCB0byBgQ29udGVudC1MZW5ndGhgIGluIFBIUCBTdHJlYW1IYW5kbGVyIHRvIGF2b2lkIHRpbWVvdXRzIHdoZW4KICBhIHNlcnZlciBkb2VzIG5vdCBob25vciBgQ29ubmVjdGlvbjogY2xvc2VgLgoqIElnbm9yZSBVUkkgZnJhZ21lbnQgd2hlbiBzZW5kaW5nIHJlcXVlc3RzLgoKIyMgNi4yLjAgLSAyMDE2LTAzLTIxCgoqIEZlYXR1cmU6IGFkZGVkIGBHdXp6bGVIdHRwXGpzb25fZW5jb2RlYCBhbmQgYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM4OQoqIEJ1ZyBmaXg6IEZpeCBzbGVlcCBjYWxjdWxhdGlvbiB3aGVuIHdhaXRpbmcgZm9yIGRlbGF5ZWQgcmVxdWVzdHMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzI0CiogRmVhdHVyZTogTW9yZSBmbGV4aWJsZSBoaXN0b3J5IGNvbnRhaW5lcnMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzczCiogQnVnIGZpeDogZGVmZXIgc2luayBzdHJlYW0gb3BlbmluZyBpbiBTdHJlYW1IYW5kbGVyLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM3NwoqIEJ1ZyBmaXg6IGRvIG5vdCBhdHRlbXB0IHRvIGVzY2FwZSBjb29raWUgdmFsdWVzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQwNgoqIEZlYXR1cmU6IHJlcG9ydCBvcmlnaW5hbCBjb250ZW50IGVuY29kaW5nIGFuZCBsZW5ndGggb24gZGVjb2RlZCByZXNwb25zZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNDA5CiogQnVnIGZpeDogcmV3aW5kIHNlZWthYmxlIHJlcXVlc3QgYm9kaWVzIGJlZm9yZSBkaXNwYXRjaGluZyB0byBjVVJMLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQyMgoqIEJ1ZyBmaXg6IHByb3ZpZGUgYW4gZW1wdHkgc3RyaW5nIHRvIGBodHRwX2J1aWxkX3F1ZXJ5YCBmb3IgSEhWTSB3b3JrYXJvdW5kLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM2NwoKIyMgNi4xLjEgLSAyMDE1LTExLTIyCgoqIEJ1ZyBmaXg6IFByb3h5Ojp3cmFwU3luYygpIG5vdyBjb3JyZWN0bHkgcHJveGllcyB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2NvbW1pdC85MTFiY2JjOGI0MzRhZGNlNjRlMjIzYTZkMWQxNGU5YThmNjNlNGU0CiogRmVhdHVyZTogSGFuZGxlclN0YWNrIGlzIG5vdyBtb3JlIGdlbmVyaWMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvY29tbWl0L2YyMTAyOTQxMzMxY2RhNTQ0NzQ1ZWVkZDk3ZmM4ZmQ0NmUxZWUzM2UKKiBCdWcgZml4OiBzZXR0aW5nIHZlcmlmeSB0byBmYWxzZSBpbiB0aGUgU3RyZWFtSGFuZGxlciBub3cgZGlzYWJsZXMgcGVlcgogIHZlcmlmaWNhdGlvbi4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzEyNTYKKiBGZWF0dXJlOiBNaWRkbGV3YXJlIG5vdyB1c2VzIGFuIGV4Y2VwdGlvbiBmYWN0b3J5LCBpbmNsdWRpbmcgbW9yZSBlcnJvcgogIGNvbnRleHQuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTI4MgoqIEZlYXR1cmU6IGJldHRlciBzdXBwb3J0IGZvciBkaXNhYmxlZCBmdW5jdGlvbnMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjg3CiogQnVnIGZpeDogZml4ZWQgcmVncmVzc2lvbiB3aGVyZSBNb2NrSGFuZGxlciB3YXMgbm90IHVzaW5nIGBzaW5rYC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyOTIKCiMjIDYuMS4wIC0gMjAxNS0wOS0wOAoKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYG9uX3N0YXRzYCByZXF1ZXN0IG9wdGlvbiB0byBwcm92aWRlIGFjY2VzcyB0byB0cmFuc2ZlcgogIHN0YXRpc3RpY3MgZm9yIHJlcXVlc3RzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDIKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYWJpbGl0eSB0byBwZXJzaXN0IHNlc3Npb24gY29va2llcyBpbiBDb29raWVKYXJzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE5NQoqIEZlYXR1cmU6IFNvbWUgY29tcGF0aWJpbGl0eSB1cGRhdGVzIGZvciBHb29nbGUgQVBQIEVuZ2luZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIxNgoqIEZlYXR1cmU6IEFkZGVkIHN1cHBvcnQgZm9yIE5PX1BST1hZIHRvIHByZXZlbnQgdGhlIHVzZSBvZiBhIHByb3h5IGJhc2VkIG9uCiAgYSBzaW1wbGUgc2V0IG9mIHJ1bGVzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExOTcKKiBGZWF0dXJlOiBDb29raWVzIGNhbiBub3cgY29udGFpbiBzcXVhcmUgYnJhY2tldHMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjM3CiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBwYXJzaW5nIGA9YCBpbnNpZGUgb2YgcXVvdGVzIGluIENvb2tpZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjMyCiogQnVnIGZpeDogQ3Vzb3RtIGNVUkwgb3B0aW9ucyBub3cgY29ycmVjdGx5IG92ZXJyaWRlIGN1cmwgb3B0aW9ucyBvZiB0aGUKICBzYW1lIG5hbWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIyMQoqIEJ1ZyBmaXg6IENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgbm93IGFkZGVkIHdoZW4gdXNpbmcgYW4gZXhwbGljaXRseSBwcm92aWRlZAogIG11bHRpcGFydCBib2R5LiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMTgKKiBCdWcgZml4OiBOb3cgaWdub3JpbmcgU2V0LUNvb2tpZSBoZWFkZXJzIHRoYXQgaGF2ZSBubyBuYW1lLgoqIEJ1ZyBmaXg6IFJlYXNvbiBwaHJhc2UgaXMgbm8gbG9uZ2VyIGNhc3QgdG8gYW4gaW50IGluIHNvbWUgY2FzZXMgaW4gdGhlCiAgY1VSTCBoYW5kbGVyLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExODcKKiBCdWcgZml4OiBSZW1vdmUgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdoZW4gcmVkaXJlY3RpbmcgaWYgdGhlIEhvc3QKICBoZWFkZXIgY2hhbmdlcy4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjA3CiogQnVnIGZpeDogQ29va2llIHBhdGggbWF0Y2hpbmcgZml4ZXMKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTEyOQoqIEJ1ZyBmaXg6IEZpeGluZyB0aGUgY1VSTCBgYm9keV9hc19zdHJpbmdgIHNldHRpbmcKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDEKKiBCdWcgZml4OiBxdW90ZXMgYXJlIG5vIGxvbmdlciBzdHJpcHBlZCB3aGVuIHBhcnNpbmcgY29va2llcy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTE3MgoqIEJ1ZyBmaXg6IGBmb3JtX3BhcmFtc2AgYW5kIGBxdWVyeWAgbm93IGFsd2F5cyB1c2VzIHRoZSBgJmAgc2VwYXJhdG9yLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE2MwoqIEJ1ZyBmaXg6IEFkZGluZyBhIENvbnRlbnQtTGVuZ3RoIHRvIFBIUCBzdHJlYW0gd3JhcHBlciByZXF1ZXN0cyBpZiBub3Qgc2V0LgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE4OQoKIyMgNi4wLjIgLSAyMDE1LTA3LTA0CgoqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGN1cmwgaGFuZGxlcnMgaW4gd2hpY2ggcmVmZXJlbmNlcyB0byBjYWxsYmFja3MKICB3ZXJlIG5vdCBiZWluZyByZW1vdmVkIGJ5IGBjdXJsX3Jlc2V0YC4KKiBDb29raWVzIGFyZSBub3cgZXh0cmFjdGVkIHByb3Blcmx5IGJlZm9yZSByZWRpcmVjdHMuCiogQ29va2llcyBub3cgYWxsb3cgbW9yZSBjaGFyYWN0ZXIgcmFuZ2VzLgoqIERlY29kZWQgQ29udGVudC1FbmNvZGluZyByZXNwb25zZXMgYXJlIG5vdyBtb2RpZmllZCB0byBjb3JyZWN0bHkgcmVmbGVjdAogIHRoZWlyIHN0YXRlIGlmIHRoZSBlbmNvZGluZyB3YXMgYXV0b21hdGljYWxseSByZW1vdmVkIGJ5IGEgaGFuZGxlci4gVGhpcwogIG1lYW5zIHRoYXQgdGhlIGBDb250ZW50LUVuY29kaW5nYCBoZWFkZXIgbWF5IGJlIHJlbW92ZWQgYW4gdGhlCiAgYENvbnRlbnQtTGVuZ3RoYCBtb2RpZmllZCB0byByZWZsZWN0IHRoZSBtZXNzYWdlIHNpemUgYWZ0ZXIgcmVtb3ZpbmcgdGhlCiAgZW5jb2RpbmcuCiogQWRkZWQgYSBtb3JlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gdXNlIGBmb3JtX3BhcmFtc2AgYW5kCiAgYG11bHRpcGFydGAgaW4gdGhlIHNhbWUgcmVxdWVzdC4KKiBTZXZlcmFsIGZpeGVzIGZvciBISFZNIHN1cHBvcnQuCiogRnVuY3Rpb25zIGFyZSBub3cgY29uZGl0aW9uYWxseSByZXF1aXJlZCB1c2luZyBhbiBhZGRpdGlvbmFsIGxldmVsIG9mCiAgaW5kaXJlY3Rpb24gdG8gaGVscCB3aXRoIGdsb2JhbCBDb21wb3NlciBpbnN0YWxsYXRpb25zLgoKIyMgNi4wLjEgLSAyMDE1LTA1LTI3CgoqIEZpeGVkIGEgYnVnIHdpdGggc2VyaWFsaXppbmcgdGhlIGBxdWVyeWAgcmVxdWVzdCBvcHRpb24gd2hlcmUgdGhlIGAmYAogIHNlcGFyYXRvciB3YXMgbWlzc2luZy4KKiBBZGRlZCBhIGJldHRlciBlcnJvciBtZXNzYWdlIGZvciB3aGVuIGBib2R5YCBpcyBwcm92aWRlZCBhcyBhbiBhcnJheS4gUGxlYXNlCiAgdXNlIGBmb3JtX3BhcmFtc2Agb3IgYG11bHRpcGFydGAgaW5zdGVhZC4KKiBWYXJpb3VzIGRvYyBmaXhlcy4KCiMjIDYuMC4wIC0gMjAxNS0wNS0yNgoKKiBTZWUgdGhlIFVQR1JBRElORy5tZCBkb2N1bWVudCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgbXVsdGlwYXJ0YCBhbmQgYGZvcm1fcGFyYW1zYCByZXF1ZXN0IG9wdGlvbnMuCiogQWRkZWQgYHN5bmNocm9ub3VzYCByZXF1ZXN0IG9wdGlvbi4KKiBBZGRlZCB0aGUgYG9uX2hlYWRlcnNgIHJlcXVlc3Qgb3B0aW9uLgoqIEZpeGVkIGBleHBlY3RgIGhhbmRsaW5nLgoqIE5vIGxvbmdlciBhZGRpbmcgZGVmYXVsdCBtaWRkbGV3YXJlcyBpbiB0aGUgY2xpZW50IGN0b3IuIFRoZXNlIG5lZWQgdG8gYmUKICBwcmVzZW50IG9uIHRoZSBwcm92aWRlZCBoYW5kbGVyIGluIG9yZGVyIHRvIHdvcmsuCiogUmVxdWVzdHMgYXJlIG5vIGxvbmdlciBpbml0aWF0ZWQgd2hlbiBzZW5kaW5nIGFzeW5jIHJlcXVlc3RzIHdpdGggdGhlCiAgQ3VybE11bHRpSGFuZGxlci4gVGhpcyBwcmV2ZW50cyB1bmV4cGVjdGVkIHJlY3Vyc2lvbiBmcm9tIHJlcXVlc3RzIGNvbXBsZXRpbmcKICB3aGlsZSB0aWNraW5nIHRoZSBjVVJMIGxvb3AuCiogUmVtb3ZlZCB0aGUgc2VtYW50aWNzIG9mIHNldHRpbmcgYGRlZmF1bHRgIHRvIGB0cnVlYC4gVGhpcyBpcyBubyBsb25nZXIKICByZXF1aXJlZCBub3cgdGhhdCB0aGUgY1VSTCBsb29wIGlzIG5vdCB0aWNrZWQgZm9yIGFzeW5jIHJlcXVlc3RzLgoqIEFkZGVkIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGxvZ2dpbmcgbWlkZGxld2FyZS4KKiBObyBsb25nZXIgYWxsb3dpbmcgc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIHdoZW4gdXNpbmcgdGhlIFN0cmVhbUhhbmRsZXIuCiogRW5zdXJpbmcgdGhhdCBgc2lua2AgaXMgdmFsaWQgaWYgc2F2aW5nIHRvIGEgZmlsZS4KKiBSZXF1ZXN0IGV4Y2VwdGlvbnMgbm93IGluY2x1ZGUgYSAiaGFuZGxlciBjb250ZXh0IiB3aGljaCBwcm92aWRlcyBoYW5kbGVyCiAgc3BlY2lmaWMgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9uc2AgdG8gYWxsb3cgcmVxdWVzdCBvcHRpb25zIHRvIGJlIGFwcGxpZWQKICB1c2luZyBjb25zdGFudHMuCiogYCRtYXhIYW5kbGVzYCBoYXMgYmVlbiByZW1vdmVkIGZyb20gQ3VybE11bHRpSGFuZGxlci4KKiBgTXVsdGlwYXJ0UG9zdEJvZHlgIGlzIG5vdyBwYXJ0IG9mIHRoZSBgZ3V6emxlaHR0cC9wc3I3YCBwYWNrYWdlLgoKIyMgNS4zLjAgLSAyMDE1LTA1LTE5CgoqIE1vY2sgbm93IHN1cHBvcnRzIGBzYXZlX3RvYAoqIE1hcmtlZCBgQWJzdHJhY3RSZXF1ZXN0RXZlbnQ6OmdldFRyYW5zYWN0aW9uKClgIGFzIHB1YmxpYy4KKiBGaXhlZCBhIGJ1ZyBpbiB3aGljaCBtdWx0aXBsZSBoZWFkZXJzIHVzaW5nIGRpZmZlcmVudCBjYXNpbmcgd291bGQgb3ZlcndyaXRlCiAgcHJldmlvdXMgaGVhZGVycyBpbiB0aGUgYXNzb2NpYXRpdmUgYXJyYXkuCiogQWRkZWQgYFV0aWxzOjpnZXREZWZhdWx0SGFuZGxlcigpYAoqIE1hcmtlZCBgR3V6emxlSHR0cFxDbGllbnQ6OmdldERlZmF1bHRVc2VyQWdlbnRgIGFzIGRlcHJlY2F0ZWQuCiogVVJMIHNjaGVtZSBpcyBub3cgYWx3YXlzIGxvd2VyY2FzZWQuCgojIyA2LjAuMC1iZXRhLjEKCiogUmVxdWlyZXMgUEhQID49IDUuNQoqIFVwZGF0ZWQgdG8gdXNlIFBTUi03CiAgKiBSZXF1aXJlcyBpbW11dGFibGUgbWVzc2FnZXMsIHdoaWNoIGJhc2ljYWxseSBtZWFucyBhbiBldmVudCBiYXNlZCBzeXN0ZW0KICAgIG93bmVkIGJ5IGEgcmVxdWVzdCBpbnN0YW5jZSBpcyBubyBsb25nZXIgcG9zc2libGUuCiAgKiBVdGlsaXppbmcgdGhlIFtHdXp6bGUgUFNSLTcgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3KS4KICAqIFJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgb24gYGd1enpsZWh0dHAvc3RyZWFtc2AuIFRoZXNlIHN0cmVhbSBhYnN0cmFjdGlvbnMKICAgIGFyZSBhdmFpbGFibGUgaW4gdGhlIGBndXp6bGVodHRwL3BzcjdgIHBhY2thZ2UgdW5kZXIgdGhlIGBHdXp6bGVIdHRwXFBzcjdgCiAgICBuYW1lc3BhY2UuCiogQWRkZWQgbWlkZGxld2FyZSBhbmQgaGFuZGxlciBzeXN0ZW0KICAqIFJlcGxhY2VkIHRoZSBHdXp6bGUgZXZlbnQgYW5kIHN1YnNjcmliZXIgc3lzdGVtIHdpdGggYSBtaWRkbGV3YXJlIHN5c3RlbS4KICAqIE5vIGxvbmdlciBkZXBlbmRzIG9uIFJpbmdQSFAsIGJ1dCByYXRoZXIgcGxhY2VzIHRoZSBIVFRQIGhhbmRsZXJzIGRpcmVjdGx5CiAgICBpbiBHdXp6bGUsIG9wZXJhdGluZyBvbiBQU1ItNyBtZXNzYWdlcy4KICAqIFJldHJ5IGxvZ2ljIGlzIG5vdyBlbmNhcHN1bGF0ZWQgaW4gYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6cmV0cnlgLCB3aGljaAogICAgbWVhbnMgdGhlIGBndXp6bGVodHRwL3JldHJ5LXN1YnNjcmliZXJgIGlzIG5vdyBvYnNvbGV0ZS4KICAqIE1vY2tpbmcgcmVzcG9uc2VzIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGBHdXp6bGVIdHRwXEhhbmRsZXJcTW9ja0hhbmRsZXJgLgoqIEFzeW5jaHJvbm91cyByZXNwb25zZXMKICAqIE5vIGxvbmdlciBzdXBwb3J0cyB0aGUgYGZ1dHVyZWAgcmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhbiBhc3luYyByZXF1ZXN0LgogICAgSW5zdGVhZCwgdXNlIG9uZSBvZiB0aGUgYCpBc3luY2AgbWV0aG9kcyBvZiBhIGNsaWVudCAoZS5nLiwgYHJlcXVlc3RBc3luY2AsCiAgICBgZ2V0QXN5bmNgLCBldGMuKS4KICAqIFV0aWxpemluZyBgR3V6emxlSHR0cFxQcm9taXNlYCBpbnN0ZWFkIG9mIFJlYWN0J3MgcHJvbWlzZSBsaWJyYXJ5IHRvIGF2b2lkCiAgICByZWN1cnNpb24gcmVxdWlyZWQgYnkgY2hhaW5pbmcgYW5kIGZvcndhcmRpbmcgcmVhY3QgcHJvbWlzZXMuIFNlZQogICAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcwogICogQWRkZWQgYHJlcXVlc3RBc3luY2AgYW5kIGBzZW5kQXN5bmNgIHRvIHNlbmQgcmVxdWVzdCBhc3luY2hyb25vdXNseS4KICAqIEFkZGVkIG1hZ2ljIG1ldGhvZHMgZm9yIGBnZXRBc3luYygpYCwgYHBvc3RBc3luYygpYCwgZXRjLiB0byBzZW5kIHJlcXVlc3RzCiAgICBhc3luY2hyb25vdXNseS4KKiBSZXF1ZXN0IG9wdGlvbnMKICAqIFBPU1QgYW5kIGZvcm0gdXBkYXRlcwogICAgKiBBZGRlZCB0aGUgYGZvcm1fZmllbGRzYCBhbmQgYGZvcm1fZmlsZXNgIHJlcXVlc3Qgb3B0aW9ucy4KICAgICogUmVtb3ZlZCB0aGUgYEd1enpsZUh0dHBcUG9zdGAgbmFtZXNwYWNlLgogICAgKiBUaGUgYGJvZHlgIHJlcXVlc3Qgb3B0aW9uIG5vIGxvbmdlciBhY2NlcHRzIGFuIGFycmF5IGZvciBQT1NUIHJlcXVlc3RzLgogICogVGhlIGBleGNlcHRpb25zYCByZXF1ZXN0IG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZQogICAgYGh0dHBfZXJyb3JzYCByZXF1ZXN0IG9wdGlvbnMuCiAgKiBUaGUgYHNhdmVfdG9gIHJlcXVlc3Qgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHNpbmtgIHJlcXVlc3QKICAgIG9wdGlvbi4KKiBDbGllbnRzIG5vIGxvbmdlciBhY2NlcHQgYW4gYXJyYXkgb2YgVVJJIHRlbXBsYXRlIHN0cmluZyBhbmQgdmFyaWFibGVzIGZvcgogIFVSSSB2YXJpYWJsZXMuIFlvdSB3aWxsIG5lZWQgdG8gZXhwYW5kIFVSSSB0ZW1wbGF0ZXMgYmVmb3JlIHBhc3NpbmcgdGhlbQogIGludG8gYSBjbGllbnQgY29uc3RydWN0b3Igb3IgcmVxdWVzdCBtZXRob2QuCiogQ2xpZW50IG1ldGhvZHMgYGdldCgpYCwgYHBvc3QoKWAsIGBwdXQoKWAsIGBwYXRjaCgpYCwgYG9wdGlvbnMoKWAsIGV0Yy4gYXJlCiAgbm93IG1hZ2ljIG1ldGhvZHMgdGhhdCB3aWxsIHNlbmQgc3luY2hyb25vdXMgcmVxdWVzdHMuCiogUmVwbGFjZWQgYFV0aWxzLnBocGAgd2l0aCBwbGFpbiBmdW5jdGlvbnMgaW4gYGZ1bmN0aW9ucy5waHBgLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxCYXRjaFJlc3VsdHNgLiBCYXRjaGVkIHBvb2wgcmVzdWx0cyBhcmUgbm93IHJldHVybmVkIGFzCiAgYW4gYXJyYXkuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxRdWVyeWAuIFF1ZXJ5IHN0cmluZyBoYW5kbGluZyBpcyBub3cgaGFuZGxlZCB1c2luZyBhbgogIGFzc29jaWF0aXZlIGFycmF5IHBhc3NlZCBpbnRvIHRoZSBgcXVlcnlgIHJlcXVlc3Qgb3B0aW9uLiBUaGUgcXVlcnkgc3RyaW5nCiAgaXMgc2VyaWFsaXplZCB1c2luZyBQSFAncyBgaHR0cF9idWlsZF9xdWVyeWAuIElmIHlvdSBuZWVkIG1vcmUgY29udHJvbCwgeW91CiAgY2FuIHBhc3MgdGhlIHF1ZXJ5IHN0cmluZyBpbiBhcyBhIHN0cmluZy4KKiBgR3V6emxlSHR0cFxRdWVyeVBhcnNlcmAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUKICBgR3V6emxlSHR0cFxQc3I3XHBhcnNlX3F1ZXJ5YC4KCiMjIDUuMi4wIC0gMjAxNS0wMS0yNwoKKiBBZGRlZCBgQXBwbGllc0hlYWRlcnNJbnRlcmZhY2VgIHRvIG1ha2UgYXBwbHlpbmcgaGVhZGVycyB0byBhIHJlcXVlc3QgYmFzZWQKICBvbiB0aGUgYm9keSBtb3JlIGdlbmVyaWMgYW5kIG5vdCBzcGVjaWZpYyB0byBgUG9zdEJvZHlJbnRlcmZhY2VgLgoqIFJlZHVjZWQgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgbmVlZGVkIHRvIHNlbmQgcmVxdWVzdHMuCiogTmVzdGVkIGZ1dHVyZXMgYXJlIG5vdyByZXNvbHZlZCBpbiB0aGUgY2xpZW50IHJhdGhlciB0aGFuIHRoZSBSZXF1ZXN0RnNtCiogRmluaXNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBSZXF1ZXN0RnNtIHJhdGhlciB0aGFuIHRoZQogIFJpbmdCcmlkZ2UuCiogQWRkZWQgYSBndWFyZCBpbiB0aGUgUG9vbCBjbGFzcyB0byBub3QgdXNlIHJlY3Vyc2lvbiBmb3IgcmVxdWVzdCByZXRyaWVzLgoKIyMgNS4xLjAgLSAyMDE0LTEyLTE5CgoqIFBvb2wgY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgcmVjdXJzaW9uIHdoZW4gYSByZXF1ZXN0IGlzIGludGVyY2VwdGVkLgoqIFRoZSBzaXplIG9mIGEgUG9vbCBjYW4gbm93IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIHVzaW5nIGEgY2FsbGJhY2suCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTQzLgoqIFNldHRpbmcgYSByZXF1ZXN0IG9wdGlvbiB0byBgbnVsbGAgd2hlbiBjcmVhdGluZyBhIHJlcXVlc3Qgd2l0aCBhIGNsaWVudCB3aWxsCiAgZW5zdXJlIHRoYXQgdGhlIG9wdGlvbiBpcyBub3Qgc2V0LiBUaGlzIGFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGRlZmF1bHQKICByZXF1ZXN0IG9wdGlvbnMgb24gYSBwZXItcmVxdWVzdCBiYXNpcy4KICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC85MzcuCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gbGltaXQgd2hpY2ggcHJvdG9jb2xzIGFyZSBhbGxvd2VkIGZvciByZWRpcmVjdHMgYnkKICBzcGVjaWZ5aW5nIGEgYHByb3RvY29sc2AgYXJyYXkgaW4gdGhlIGBhbGxvd19yZWRpcmVjdHNgIHJlcXVlc3Qgb3B0aW9uLgoqIE5lc3RlZCBmdXR1cmVzIGR1ZSB0byByZXRyaWVzIGFyZSBub3cgcmVzb2x2ZWQgd2hlbiB3YWl0aW5nIGZvciBzeW5jaHJvbm91cwogIHJlc3BvbnNlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTQ3LgoqIGAiMCJgIGlzIG5vdyBhbiBhbGxvd2VkIFVSSSBwYXRoLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzkzNS4KKiBgUXVlcnlgIG5vIGxvbmdlciB0eXBlaGludHMgb24gdGhlIGAkcXVlcnlgIGFyZ3VtZW50IGluIHRoZSBjb25zdHJ1Y3RvciwKICBhbGxvd2luZyBmb3Igc3RyaW5ncyBhbmQgYXJyYXlzLgoqIEV4Y2VwdGlvbnMgdGhyb3duIGluIHRoZSBgZW5kYCBldmVudCBhcmUgbm93IGNvcnJlY3RseSB3cmFwcGVkIHdpdGggR3V6emxlCiAgc3BlY2lmaWMgZXhjZXB0aW9ucyBpZiBuZWNlc3NhcnkuCgojIyA1LjAuMyAtIDIwMTQtMTEtMDMKClRoaXMgY2hhbmdlIHVwZGF0ZXMgcXVlcnkgc3RyaW5ncyBzbyB0aGF0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgdW4tZW5jb2RlZCB2YWx1ZXMKYnkgZGVmYXVsdCB3aGVyZSB0aGUgdmFsdWUgcmVwcmVzZW50cyBhbiB1bi1lbmNvZGVkIHZhbHVlIHRvIHNlbmQgb3ZlciB0aGUKd2lyZS4gQSBRdWVyeSBvYmplY3QgdGhlbiBlbmNvZGVzIHRoZSB2YWx1ZSBiZWZvcmUgc2VuZGluZyBvdmVyIHRoZSB3aXJlLiBUaGlzCm1lYW5zIHRoYXQgZXZlbiB2YWx1ZSBxdWVyeSBzdHJpbmcgdmFsdWVzIChlLmcuLCAiOiIpIGFyZSB1cmwgZW5jb2RlZC4gVGhpcwptYWtlcyB0aGUgUXVlcnkgY2xhc3MgbWF0Y2ggUEhQJ3MgaHR0cF9idWlsZF9xdWVyeSBmdW5jdGlvbi4gSG93ZXZlciwgaWYgeW91CndhbnQgdG8gc2VuZCByZXF1ZXN0cyBvdmVyIHRoZSB3aXJlIHVzaW5nIHZhbGlkIHF1ZXJ5IHN0cmluZyBjaGFyYWN0ZXJzIHRoYXQgZG8Kbm90IG5lZWQgdG8gYmUgZW5jb2RlZCwgdGhlbiB5b3UgY2FuIHByb3ZpZGUgYSBzdHJpbmcgdG8gVXJsOjpzZXRRdWVyeSgpIGFuZApwYXNzIHRydWUgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoYXQgdGhlIHF1ZXJ5IHN0cmluZyBpcyBhIHJhdwpzdHJpbmcgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBvciBlbmNvZGVkICh1bmxlc3MgYSBjYWxsIHRvIGdldFF1ZXJ5KCkgaXMKc3Vic2VxdWVudGx5IG1hZGUsIGZvcmNpbmcgdGhlIHF1ZXJ5LXN0cmluZyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIFF1ZXJ5Cm9iamVjdCkuCgojIyA1LjAuMiAtIDIwMTQtMTAtMzAKCiogQWRkZWQgYSB0cmFpbGluZyBgXHJcbmAgdG8gbXVsdGlwYXJ0L2Zvcm0tZGF0YSBwYXlsb2Fkcy4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC84NzEKKiBBZGRlZCBhIGBHdXp6bGVIdHRwXFBvb2w6OnNlbmQoKWAgY29udmVuaWVuY2UgbWV0aG9kIHRvIG1hdGNoIHRoZSBkb2NzLgoqIFN0YXR1cyBjb2RlcyBhcmUgbm93IHJldHVybmVkIGFzIGludGVnZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODgxCiogTm8gbG9uZ2VyIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGhlYWRlcgogIHdoZW4gc2VuZGluZyBQT1NUIHJlcXVlc3RzLCBhbGxvd2luZyBmb3IgY3VzdG9taXplZCBoZWFkZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODc3CiogSW1wcm92ZWQgcGF0aCBVUkwgc2VyaWFsaXphdGlvbi4KCiAgKiBObyBsb25nZXIgZG91YmxlIHBlcmNlbnQtZW5jb2RpbmcgY2hhcmFjdGVycyBpbiB0aGUgcGF0aCBvciBxdWVyeSBzdHJpbmcgaWYKICAgIHRoZXkgYXJlIGFscmVhZHkgZW5jb2RlZC4KICAqIE5vdyBwcm9wZXJseSBlbmNvZGluZyB0aGUgc3VwcGxpZWQgcGF0aCB0byBhIFVSTCBvYmplY3QsIGluc3RlYWQgb2Ygb25seQogICAgZW5jb2RpbmcgJyAnIGFuZCAnPycuCiAgKiBOb3RlOiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgaW4gNS4wLjMgdG8gbm93IGVuY29kZSBxdWVyeSBzdHJpbmcgdmFsdWVzIGJ5CiAgICBkZWZhdWx0IHVubGVzcyB0aGUgYHJhd1N0cmluZ2AgYXJndW1lbnQgaXMgcHJvdmlkZWQgd2hlbiBzZXR0aW5nIHRoZSBxdWVyeQogICAgc3RyaW5nIG9uIGEgVVJMOiBOb3cgYWxsb3dpbmcgbWFueSBtb3JlIGNoYXJhY3RlcnMgdG8gYmUgcHJlc2VudCBpbiB0aGUKICAgIHF1ZXJ5IHN0cmluZyB3aXRob3V0IGJlaW5nIHBlcmNlbnQgZW5jb2RlZC4gU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQQoKIyMgNS4wLjEgLSAyMDE0LTEwLTE2CgpCdWdmaXggcmVsZWFzZS4KCiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgY29ubmVjdGlvbiBlcnJvcnMgc3RpbGwgcmV0dXJuZWQgcmVzcG9uc2Ugb2JqZWN0IGluCiAgZXJyb3IgYW5kIGVuZCBldmVudHMgZXZlbnQgdGhvdWdoIHRoZSByZXNwb25zZSBpcyB1bnVzYWJsZS4gVGhpcyBoYXMgYmVlbgogIGNvcnJlY3RlZCBzbyB0aGF0IGEgcmVzcG9uc2UgaXMgbm90IHJldHVybmVkIGluIHRoZSBgZ2V0UmVzcG9uc2VgIG1ldGhvZCBvZgogIHRoZXNlIGV2ZW50cyBpZiB0aGUgcmVzcG9uc2UgZGlkIG5vdCBjb21wbGV0ZS4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzg2NwoqIEZpeGVkIGFuIGlzc3VlIHdoZXJlIHRyYW5zZmVyIHN0YXRpc3RpY3Mgd2VyZSBub3QgYmVpbmcgcG9wdWxhdGVkIGluIHRoZQogIFJpbmdCcmlkZ2UuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy84NjYKCiMjIDUuMC4wIC0gMjAxNC0xMC0xMgoKQWRkaW5nIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYW5kIHNvbWUgbWlub3IgQVBJIGNsZWFudXAuCgojIyMgTmV3IEZlYXR1cmVzCgoqIEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYmFzZWQgb24gYGd1enpsZWh0dHAvZ3V6emxlLXJpbmdgLgoqIEFkZGVkIGEgcHVibGljIEFQSSBmb3IgY3JlYXRpbmcgYSBkZWZhdWx0IEhUVFAgYWRhcHRlci4KKiBVcGRhdGVkIHRoZSByZWRpcmVjdCBwbHVnaW4gdG8gYmUgbm9uLWJsb2NraW5nIHNvIHRoYXQgcmVkaXJlY3RzIGFyZSBzZW50CiAgY29uY3VycmVudGx5LiBPdGhlciBwbHVnaW5zIGxpa2UgdGhpcyBjYW4gbm93IGJlIHVwZGF0ZWQgdG8gYmUgbm9uLWJsb2NraW5nLgoqIEFkZGVkIGEgInByb2dyZXNzIiBldmVudCBzbyB0aGF0IHlvdSBjYW4gZ2V0IHVwbG9hZCBhbmQgZG93bmxvYWQgcHJvZ3Jlc3MKICBldmVudHMuCiogQWRkZWQgYEd1enpsZUh0dHBcUG9vbGAgd2hpY2ggaW1wbGVtZW50cyBGdXR1cmVJbnRlcmZhY2UgYW5kIHRyYW5zZmVycwogIHJlcXVlc3RzIGNvbmN1cnJlbnRseSB1c2luZyBhIGNhcHBlZCBwb29sIHNpemUgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCiogQWRkZWQgYGhhc0xpc3RlbmVycygpYCB0byBFbWl0dGVySW50ZXJmYWNlLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZW5kQWxsYCBhbmQgbWFya2VkCiAgYEd1enpsZUh0dHBcQ2xpZW50OjpzZW5kQWxsYCBhcyBkZXByZWNhdGVkIChpdCdzIHN0aWxsIHRoZXJlLCBqdXN0IG5vdCB0aGUKICByZWNvbW1lbmRlZCB3YXkpLgoKIyMjIEJyZWFraW5nIGNoYW5nZXMKClRoZSBicmVha2luZyBjaGFuZ2VzIGluIHRoaXMgcmVsZWFzZSBhcmUgcmVsYXRpdmVseSBtaW5vci4gVGhlIGJpZ2dlc3QgdGhpbmcgdG8KbG9vayBvdXQgZm9yIGlzIHRoYXQgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cyBubyBsb25nZXIgaW1wbGVtZW50IGZsdWVudAppbnRlcmZhY2VzLgoKKiBSZW1vdmVkIHRoZSBmbHVlbnQgaW50ZXJmYWNlcyAoaS5lLiwgYHJldHVybiAkdGhpc2ApIGZyb20gcmVxdWVzdHMsCiAgcmVzcG9uc2VzLCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYCwgYEd1enpsZUh0dHBcVXJsYCwKICBgR3V6emxlSHR0cFxRdWVyeWAsIGBHdXp6bGVIdHRwXFBvc3RcUG9zdEJvZHlgLCBhbmQKICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llYC4gVGhpcyBibG9nIHBvc3QgcHJvdmlkZXMgYSBnb29kIG91dGxpbmUgb2YKICB3aHkgSSBkaWQgdGhpczogaHR0cDovL29jcmFtaXVzLmdpdGh1Yi5pby9ibG9nL2ZsdWVudC1pbnRlcmZhY2VzLWFyZS1ldmlsLy4KICBUaGlzIGFsc28gbWFrZXMgdGhlIEd1enpsZSBtZXNzYWdlIGludGVyZmFjZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50CiAgUFNSLTcgbWVzc2FnZSBwcm9wb3NhbC4KKiBSZW1vdmVkICJmdW5jdGlvbnMucGhwIiwgc28gdGhhdCBHdXp6bGUgaXMgdHJ1bHkgUFNSLTQgY29tcGxpYW50LiBFeGNlcHQKICBmb3IgdGhlIEhUVFAgcmVxdWVzdCBmdW5jdGlvbnMgZnJvbSBmdW5jdGlvbi5waHAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm93CiAgaW1wbGVtZW50ZWQgaW4gYEd1enpsZUh0dHBcVXRpbHNgIHVzaW5nIGNhbWVsQ2FzZS4gYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgCiAgbW92ZWQgdG8gYEd1enpsZUh0dHBcVXRpbHM6Ompzb25EZWNvZGVgLiBgR3V6emxlSHR0cFxnZXRfcGF0aGAgbW92ZWQgdG8KICBgR3V6emxlSHR0cFxVdGlsczo6Z2V0UGF0aGAuIGBHdXp6bGVIdHRwXHNldF9wYXRoYCBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXFV0aWxzOjpzZXRQYXRoYC4gYEd1enpsZUh0dHBcYmF0Y2hgIHNob3VsZCBub3cgYmUKICBgR3V6emxlSHR0cFxQb29sOjpiYXRjaGAsIHdoaWNoIHJldHVybnMgYW4gYG9iamVjdFN0b3JhZ2VgLiBVc2luZyBmdW5jdGlvbnMucGhwCiAgY2F1c2VkIHByb2JsZW1zIGZvciBtYW55IHVzZXJzOiB0aGV5IGFyZW4ndCBQU1ItNCBjb21wbGlhbnQsIHJlcXVpcmUgYW4KICBleHBsaWNpdCBpbmNsdWRlLCBhbmQgbmVlZGVkIGFuIGlmLWd1YXJkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIG5vdAogIGRlY2xhcmVkIG11bHRpcGxlIHRpbWVzLgoqIFJld3JvdGUgYWRhcHRlciBsYXllci4KICAgICogUmVtb3ZpbmcgYWxsIGNsYXNzZXMgZnJvbSBgR3V6emxlSHR0cFxBZGFwdGVyYCwgdGhlc2UgYXJlIG5vdwogICAgICBpbXBsZW1lbnRlZCBhcyBjYWxsYWJsZXMgdGhhdCBhcmUgc3RvcmVkIGluIGBHdXp6bGVIdHRwXFJpbmdcQ2xpZW50YC4KICAgICogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAicGFyYWxsZWwgYWRhcHRlcnMiLiBTZW5kaW5nIHJlcXVlc3RzIHNlcmlhbGx5IG9yCiAgICAgIGNvbmN1cnJlbnRseSBpcyBub3cgaGFuZGxlZCB1c2luZyBhIHNpbmdsZSBhZGFwdGVyLgogICAgKiBNb3ZlZCBgR3V6emxlSHR0cFxBZGFwdGVyXFRyYW5zYWN0aW9uYCB0byBgR3V6emxlSHR0cFxUcmFuc2FjdGlvbmAuIFRoZQogICAgICBUcmFuc2FjdGlvbiBvYmplY3Qgbm93IGV4cG9zZXMgdGhlIHJlcXVlc3QsIHJlc3BvbnNlLCBhbmQgY2xpZW50IGFzIHB1YmxpYwogICAgICBwcm9wZXJ0aWVzLiBUaGUgZ2V0dGVycyBhbmQgc2V0dGVycyBoYXZlIGJlZW4gcmVtb3ZlZC4KKiBSZW1vdmVkIHRoZSAiaGVhZGVycyIgZXZlbnQuIFRoaXMgZXZlbnQgd2FzIG9ubHkgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUKICBib2R5IGEgcmVzcG9uc2Ugb25jZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2Ugd2VyZSBrbm93bi4gWW91IGNhbiBpbXBsZW1lbnQKICBhIHNpbWlsYXIgYmVoYXZpb3IgaW4gYSBudW1iZXIgb2Ygd2F5cy4gT25lIGV4YW1wbGUgbWlnaHQgYmUgdG8gdXNlIGEKICBGblN0cmVhbSB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIGJlaW5nIHNlbnQuIEZvciBleGFtcGxlLCB3aGVuIHRoZQogIGZpcnN0IGJ5dGUgaXMgd3JpdHRlbiwgeW91IGNvdWxkIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoZWFkZXJzIG1hdGNoIHlvdXIKICBleHBlY3RhdGlvbnMsIGFuZCBpZiBzbywgY2hhbmdlIHRoZSBhY3R1YWwgc3RyZWFtIGJvZHkgdGhhdCBpcyBiZWluZwogIHdyaXR0ZW4gdG8uCiogUmVtb3ZlZCB0aGUgYGFzQXJyYXlgIHBhcmFtZXRlciBmcm9tCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJgLiBJZiB5b3Ugd2FudCB0byBnZXQgYSBoZWFkZXIKICB2YWx1ZSBhcyBhbiBhcnJheSwgdGhlbiB1c2UgdGhlIG5ld2x5IGFkZGVkIGBnZXRIZWFkZXJBc0FycmF5KClgIG1ldGhvZCBvZgogIGBNZXNzYWdlSW50ZXJmYWNlYC4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIEd1enpsZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aAogIHRoZSBQU1ItNyBpbnRlcmZhY2VzLgoqIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlgIG5vIGxvbmdlciBhbGxvd3Mgc3ViY2xhc3NlcyB0byBhZGQKICBjdXN0b20gcmVxdWVzdCBvcHRpb25zIHVzaW5nIGRvdWJsZS1kaXNwYXRjaCAodGhpcyB3YXMgYW4gaW1wbGVtZW50YXRpb24KICBkZXRhaWwpLiBJbnN0ZWFkLCB5b3Ugc2hvdWxkIG5vdyBwcm92aWRlIGFuIGFzc29jaWF0aXZlIGFycmF5IHRvIHRoZQogIGNvbnN0cnVjdG9yIHdoaWNoIGlzIGEgbWFwcGluZyBvZiB0aGUgcmVxdWVzdCBvcHRpb24gbmFtZSBtYXBwaW5nIHRvIGEKICBmdW5jdGlvbiB0aGF0IGFwcGxpZXMgdGhlIG9wdGlvbiB2YWx1ZSB0byBhIHJlcXVlc3QuCiogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAidGhyb3dJbW1lZGlhdGVseSIgZnJvbSBleGNlcHRpb25zIGFuZCBlcnJvciBldmVudHMuCiAgVGhpcyBjb250cm9sIG1lY2hhbmlzbSB3YXMgdXNlZCB0byBzdG9wIGEgdHJhbnNmZXIgb2YgY29uY3VycmVudCByZXF1ZXN0cwogIGZyb20gY29tcGxldGluZy4gVGhpcyBjYW4gbm93IGJlIGhhbmRsZWQgYnkgdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbiBvciBieQogIGNhbmNlbGxpbmcgYSBwb29sIG9mIHJlcXVlc3RzIG9yIGVhY2ggb3V0c3RhbmRpbmcgZnV0dXJlIHJlcXVlc3QgaW5kaXZpZHVhbGx5LgoqIFVwZGF0ZWQgdG8gIkd1enpsZUh0dHBcU3RyZWFtcyIgMy4wLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpnZXRDb250ZW50cygpYCBubyBsb25nZXIgYWNjZXB0cyBhCiAgICAgIGBtYXhMZW5gIHBhcmFtZXRlci4gVGhpcyB1cGRhdGUgbWFrZXMgdGhlIEd1enpsZSBzdHJlYW1zIHByb2plY3QKICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBTUi03IHByb3Bvc2FsLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpfX2NvbnN0cnVjdGAsCiAgICAgIGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW06OmZhY3RvcnlgLCBhbmQKICAgICAgYEd1enpsZUh0dHBcU3RyZWFtXFV0aWxzOjpjcmVhdGVgIG5vIGxvbmdlciBhY2NlcHQgYSBzaXplIGluIHRoZSBzZWNvbmQKICAgICAgYXJndW1lbnQuIFRoZXkgbm93IGFjY2VwdCBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlCiAgICAgICJzaXplIiBrZXkgYW5kICJtZXRhZGF0YSIga2V5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tIG1ldGFkYXRhLgoKIyMgNC4yLjIgLSAyMDE0LTA5LTA4CgoqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEN1cmxBZGFwdGVyIHdoZW4gcmV1c2luZyBjVVJMIGhhbmRsZXMuCiogTm8gbG9uZ2VyIHVzaW5nIGByZXF1ZXN0X2Z1bGx1cmlgIGluIHN0cmVhbSBhZGFwdGVyIHByb3hpZXMuCiogUmVsYXRpdmUgcmVkaXJlY3RzIGFyZSBub3cgYmFzZWQgb24gdGhlIGxhc3QgcmVzcG9uc2UsIG5vdCB0aGUgZmlyc3QgcmVzcG9uc2UuCgojIyA0LjIuMSAtIDIwMTQtMDgtMTkKCiogRW5zdXJpbmcgdGhhdCB0aGUgU3RyZWFtQWRhcHRlciBkb2VzIG5vdCBhbHdheXMgYWRkIGEgQ29udGVudC1UeXBlIGhlYWRlcgoqIEFkZGluZyBhdXRvbWF0ZWQgZ2l0aHViIHJlbGVhc2VzIHdpdGggYSBwaGFyIGFuZCB6aXAKCiMjIDQuMi4wIC0gMjAxNC0wOC0xNwoKKiBOb3cgbWVyZ2luZyBpbiBkZWZhdWx0IG9wdGlvbnMgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24uCiAgQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjcKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGRlY29kZSBgQ29udGVudC1FbmNvZGluZ2AgcmVzcG9uc2UgYm9kaWVzCiAgdXNpbmcgdGhlIGBkZWNvZGVfY29udGVudGAgcmVxdWVzdCBvcHRpb24uIFRoaXMgaXMgc2V0IHRvIGB0cnVlYCBieSBkZWZhdWx0CiAgdG8gZGVjb2RlIHRoZSByZXNwb25zZSBib2R5IGlmIGl0IGNvbWVzIG92ZXIgdGhlIHdpcmUgd2l0aCBhCiAgYENvbnRlbnQtRW5jb2RpbmdgLiBTZXQgdGhpcyB2YWx1ZSB0byBgZmFsc2VgIHRvIGRpc2FibGUgZGVjb2RpbmcgdGhlCiAgcmVzcG9uc2UgY29udGVudCwgYW5kIHBhc3MgYSBzdHJpbmcgdG8gcHJvdmlkZSBhIHJlcXVlc3QgYEFjY2VwdC1FbmNvZGluZ2AKICBoZWFkZXIgYW5kIHR1cm4gb24gYXV0b21hdGljIHJlc3BvbnNlIGRlY29kaW5nLiBUaGlzIGZlYXR1cmUgbm93IGFsbG93cyB5b3UKICB0byBwYXNzIGFuIGBBY2NlcHQtRW5jb2RpbmdgIGhlYWRlciBpbiB0aGUgaGVhZGVycyBvZiBhIHJlcXVlc3QgYnV0IHN0aWxsCiAgZGlzYWJsZSBhdXRvbWF0aWMgcmVzcG9uc2UgZGVjb2RpbmcuCiAgQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjQKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byB0aHJvdyBhbiBleGNlcHRpb24gaW1tZWRpYXRlbHkgd2hlbiB0cmFuc2ZlcnJpbmcKICByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjAKKiBVcGRhdGluZyBndXp6bGVodHRwL3N0cmVhbXMgZGVwZW5kZW5jeSB0byB+Mi4xCiogTm8gbG9uZ2VyIHV0aWxpemluZyB0aGUgbm93IGRlcHJlY2F0ZWQgbmFtZXNwYWNlZCBtZXRob2RzIGZyb20gdGhlIHN0cmVhbQogIHBhY2thZ2UuCgojIyA0LjEuOCAtIDIwMTQtMDgtMTQKCiogRml4ZWQgYW4gaXNzdWUgaW4gdGhlIEN1cmxGYWN0b3J5IHRoYXQgY2F1c2VkIHNldHRpbmcgdGhlIGBzdHJlYW09ZmFsc2VgCiAgcmVxdWVzdCBvcHRpb24gdG8gdGhyb3cgYW4gZXhjZXB0aW9uLgogIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2OQoqIFRyYW5zYWN0aW9uSXRlcmF0b3Igbm93IGNhbGxzIHJld2luZCBvbiB0aGUgaW5uZXIgaXRlcmF0b3IuCiAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzc2NQoqIFlvdSBjYW4gbm93IHNldCB0aGUgYENvbnRlbnQtVHlwZWAgaGVhZGVyIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhYAogIHdoZW4gY3JlYXRpbmcgUE9TVCByZXF1ZXN0cyB0byBmb3JjZSBtdWx0aXBhcnQgYm9kaWVzLgogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzY4CgojIyA0LjEuNyAtIDIwMTQtMDgtMDcKCiogRml4ZWQgYW4gZXJyb3IgaW4gdGhlIEhpc3RvcnlQbHVnaW4gdGhhdCBjYXVzZWQgdGhlIHNhbWUgcmVxdWVzdCBhbmQgcmVzcG9uc2UKICB0byBiZSBsb2dnZWQgbXVsdGlwbGUgdGltZXMgd2hlbiBhbiBIVFRQIHByb3RvY29sIGVycm9yIG9jY3Vycy4KKiBFbnN1cmluZyB0aGF0IGNVUkwgZG9lcyBub3QgYWRkIGEgZGVmYXVsdCBDb250ZW50LVR5cGUgd2hlbiBubyBDb250ZW50LVR5cGUKICBoYXMgYmVlbiBzdXBwbGllZCBieSB0aGUgdXNlci4gVGhpcyBwcmV2ZW50cyB0aGUgYWRhcHRlciBsYXllciBmcm9tIG1vZGlmeWluZwogIHRoZSByZXF1ZXN0IHRoYXQgaXMgc2VudCBvdmVyIHRoZSB3aXJlIGFmdGVyIGFueSBsaXN0ZW5lcnMgbWF5IGhhdmUgYWxyZWFkeQogIHB1dCB0aGUgcmVxdWVzdCBpbiBhIGRlc2lyZWQgc3RhdGUgKGUuZy4sIHNpZ25lZCB0aGUgcmVxdWVzdCkuCiogVGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdoZW4geW91IGF0dGVtcHQgdG8gc2VuZCByZXF1ZXN0cyB0aGF0IGhhdmUgdGhlCiAgInN0cmVhbSIgc2V0IHRvIHRydWUgaW4gcGFyYWxsZWwgdXNpbmcgdGhlIE11bHRpQWRhcHRlci4KKiBPbmx5IGNhbGxpbmcgY3VybF9tdWx0aV9zZWxlY3Qgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIGNVUkwgaGFuZGxlcy4gVGhpcyB3YXMKICBwcmV2aW91c2x5IGNoYW5nZWQgYW5kIGNhdXNlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMgZHVlIHRvIFBIUAogIGFsd2F5cyBzZWxlY3RpbmcgdW50aWwgdGhlIG1heGltdW0gc2VsZWN0IHRpbWVvdXQuCiogRml4ZWQgYSBidWcgd2hlcmUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGZpZWxkcyB3ZXJlIG5vdCBjb3JyZWN0bHkKICBhZ2dyZWdhdGVkIChlLmcuLCB2YWx1ZXMgd2l0aCAiJiIpLgoKIyMgNC4xLjYgLSAyMDE0LTA4LTAzCgoqIEFkZGVkIGhlbHBlciBtZXRob2RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlcHJlc2VudCBtZXNzYWdlcyBhcyBzdHJpbmdzLAogIGluY2x1ZGluZyBnZXR0aW5nIHRoZSBzdGFydCBsaW5lIGFuZCBnZXR0aW5nIGhlYWRlcnMgYXMgYSBzdHJpbmcuCgojIyA0LjEuNSAtIDIwMTQtMDgtMDIKCiogQXV0b21hdGljYWxseSByZXRyeWluZyBjVVJMICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdCIKICBlcnJvcnMgd2hlbiBwb3NzaWJsZS4KKiBjVVJMIGltcGxlbWVudGF0aW9uIGNsZWFudXAKKiBBbGxvd2luZyBtdWx0aXBsZSBldmVudCBzdWJzY3JpYmVyIGxpc3RlbmVycyB0byBiZSByZWdpc3RlcmVkIHBlciBldmVudCBieQogIHBhc3NpbmcgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGxpc3RlbmVyIGNvbmZpZ3VyYXRpb24uCgojIyA0LjEuNCAtIDIwMTQtMDctMjIKCiogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgbXVsdGktcGFydCBQT1NUIHJlcXVlc3RzIHdpdGggbW9yZSB0aGFuIG9uZSBmaWVsZCB0bwogIHNlcmlhbGl6ZSBpbmNvcnJlY3RseS4KKiBQYXRocyBjYW4gbm93IGJlIHNldCB0byAiMCIKKiBgUmVzcG9uc2VJbnRlcmZhY2U6OnhtbGAgbm93IGFjY2VwdHMgYSBgbGlieG1sX29wdGlvbnNgIG9wdGlvbiBhbmQgYWRkZWQgYQogIG1pc3NpbmcgZGVmYXVsdCBhcmd1bWVudCB0aGF0IHdhcyByZXF1aXJlZCB3aGVuIHBhcnNpbmcgWE1MIHJlc3BvbnNlIGJvZGllcy4KKiBBIGBzYXZlX3RvYCBzdHJlYW0gaXMgbm93IGNyZWF0ZWQgbGF6aWx5LCB3aGljaCBtZWFucyB0aGF0IGZpbGVzIGFyZSBub3QKICBjcmVhdGVkIG9uIGRpc2sgdW5sZXNzIGEgcmVxdWVzdCBzdWNjZWVkcy4KCiMjIDQuMS4zIC0gMjAxNC0wNy0xNQoKKiBWYXJpb3VzIGZpeGVzIHRvIG11bHRpcGFydC9mb3JtLWRhdGEgUE9TVCB1cGxvYWRzCiogV3JhcHBpbmcgZnVuY3Rpb24ucGhwIGluIGFuIGlmLXN0YXRlbWVudCB0byBlbnN1cmUgR3V6emxlIGNhbiBiZSB1c2VkCiAgZ2xvYmFsbHkgYW5kIGluIGEgQ29tcG9zZXIgaW5zdGFsbAoqIEZpeGVkIGFuIGlzc3VlIHdpdGggZ2VuZXJhdGluZyBhbmQgbWVyZ2luZyBpbiBldmVudHMgdG8gYW4gZXZlbnQgYXJyYXkKKiBQT1NUIGhlYWRlcnMgYXJlIG9ubHkgYXBwbGllZCBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QgdG8gYWxsb3cgeW91IHRvIGNoYW5nZQogIHRoZSBxdWVyeSBhZ2dyZWdhdG9yIHVzZWQgYmVmb3JlIHVwbG9hZGluZwoqIEFkZGVkIG11Y2ggbW9yZSByb2J1c3QgcXVlcnkgc3RyaW5nIHBhcnNpbmcKKiBGaXhlZCB2YXJpb3VzIHBhcnNpbmcgYW5kIG5vcm1hbGl6YXRpb24gaXNzdWVzIHdpdGggVVJMcwoqIEZpeGluZyBhbiBpc3N1ZSB3aGVyZSBtdWx0aS12YWx1ZWQgaGVhZGVycyB3ZXJlIG5vdCBiZWluZyB1dGlsaXplZCBjb3JyZWN0bHkKICBpbiB0aGUgU3RyZWFtQWRhcHRlcgoKIyMgNC4xLjIgLSAyMDE0LTA2LTE4CgoqIEFkZGVkIHN1cHBvcnQgZm9yIHNlbmRpbmcgcGF5bG9hZHMgd2l0aCBHRVQgcmVxdWVzdHMKCiMjIDQuMS4xIC0gMjAxNC0wNi0wOAoKKiBGaXhlZCBhbiBpc3N1ZSByZWxhdGVkIHRvIHVzaW5nIGN1c3RvbSBtZXNzYWdlIGZhY3Rvcnkgb3B0aW9ucyBpbiBzdWJjbGFzc2VzCiogRml4ZWQgYW4gaXNzdWUgd2l0aCBuZXN0ZWQgZm9ybSBmaWVsZHMgaW4gYSBtdWx0aS1wYXJ0IFBPU1QKKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHVzaW5nIHRoZSBganNvbmAgcmVxdWVzdCBvcHRpb24gZm9yIFBPU1QgcmVxdWVzdHMKKiBBZGRlZCBgVG9BcnJheUludGVyZmFjZWAgdG8gYEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphcmAKCiMjIDQuMS4wIC0gMjAxNC0wNS0yNwoKKiBBZGRlZCBhIGBqc29uYCByZXF1ZXN0IG9wdGlvbiB0byBlYXNpbHkgc2VyaWFsaXplIEpTT04gcGF5bG9hZHMuCiogQWRkZWQgYSBgR3V6emxlSHR0cFxqc29uX2RlY29kZSgpYCB3cmFwcGVyIHRvIHNhZmVseSBwYXJzZSBKU09OLgoqIEFkZGVkIGBzZXRQb3J0KClgIGFuZCBgZ2V0UG9ydCgpYCB0byBgR3V6emxlSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VgLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHByb3ZpZGUgYW4gZW1pdHRlciB0byBhIGNsaWVudCBpbiB0aGUgY2xpZW50IGNvbnN0cnVjdG9yLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHBlcnNpc3QgYSBjb29raWUgc2Vzc2lvbiB1c2luZyAkX1NFU1NJT04uCiogQWRkZWQgYSB0cmFpdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBldmVudCBsaXN0ZW5lcnMgdG8gYW4gaXRlcmF0b3IuCiogUmVtb3ZlZCByZXF1ZXN0IG1ldGhvZCBjb25zdGFudHMgZnJvbSBSZXF1ZXN0SW50ZXJmYWNlLgoqIEZpeGVkIHdhcm5pbmcgd2hlbiBpbnZhbGlkIHJlcXVlc3Qgc3RhcnQtbGluZXMgYXJlIHJlY2VpdmVkLgoqIFVwZGF0ZWQgTWVzc2FnZUZhY3RvcnkgdG8gd29yayB3aXRoIGN1c3RvbSByZXF1ZXN0IG9wdGlvbiBtZXRob2RzLgoqIFVwZGF0ZWQgY2FjZXJ0IGJ1bmRsZSB0byBsYXRlc3QgYnVpbGQuCgo0LjAuMiAoMjAxNC0wNC0xNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIFByb3h5IHJlcXVlc3RzIHVzaW5nIHRoZSBTdHJlYW1BZGFwdGVyIG5vdyBwcm9wZXJseSB1c2UgcmVxdWVzdF9mdWxsdXJpICgjNjMyKQoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBzY2FsYXJzIGFzIFBPU1QgZmllbGRzICgjNjI4KQoKIyMgNC4wLjEgLSAyMDE0LTA0LTA0CgoqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIG9mIGEgcmVzcG9uc2UgaXMgbm93IHNldCBhcyB0aGUgZXhjZXB0aW9uIGNvZGUgb2YKICBSZXF1ZXN0RXhjZXB0aW9uIG9iamVjdHMuCiogMzAzIHJlZGlyZWN0cyB3aWxsIG5vdyBjb3JyZWN0bHkgc3dpdGNoIGZyb20gUE9TVCB0byBHRVQgcmVxdWVzdHMuCiogVGhlIGRlZmF1bHQgcGFyYWxsZWwgYWRhcHRlciBvZiBhIGNsaWVudCBub3cgY29ycmVjdGx5IHVzZXMgdGhlIE11bHRpQWRhcHRlci4KKiBIYXNEYXRhVHJhaXQgbm93IGluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBkYXRhIGFycmF5IGFzIGFuIGVtcHR5IGFycmF5IHNvCiAgdGhhdCB0aGUgdG9BcnJheSgpIG1ldGhvZCBhbHdheXMgcmV0dXJucyBhbiBhcnJheS4KCiMjIDQuMC4wIC0gMjAxNC0wMy0yOQoKKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgNC4wIHRyYW5zaXRpb24sIHNlZToKICBodHRwOi8vbXRkb3dsaW5nLmNvbS9ibG9nLzIwMTQvMDMvMTUvZ3V6emxlLTQtcmMvCiogRm9yIGluZm9ybWF0aW9uIG9uIGNoYW5nZXMgYW5kIHVwZ3JhZGluZywgc2VlOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvbWFzdGVyL1VQR1JBRElORy5tZCMzeC10by00MAoqIEFkZGVkIGBHdXp6bGVIdHRwXGJhdGNoKClgIGFzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHNlbmRpbmcgcmVxdWVzdHMgaW4KICBwYXJhbGxlbCB3aXRob3V0IG5lZWRpbmcgdG8gd3JpdGUgYXN5bmNocm9ub3VzIGNvZGUuCiogUmVzdHJ1Y3R1cmVkIGhvdyBldmVudHMgYXJlIGFkZGVkIHRvIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6c2VuZEFsbCgpYC4KICBZb3UgY2FuIG5vdyBwYXNzIGEgY2FsbGFibGUgb3IgYW4gYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIGVhY2gKICBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWlucyB0aGUgImZuIiwgInByaW9yaXR5IiwgYW5kICJvbmNlIiBrZXlzLgoKIyMgNC4wLjAucmMtMiAtIDIwMTQtMDMtMjUKCiogUmVtb3ZlZCBgZ2V0Q29uZmlnKClgIGFuZCBgc2V0Q29uZmlnKClgIGZyb20gY2xpZW50cyB0byBhdm9pZCBjb25mdXNpb24KICBhcm91bmQgd2hldGhlciB0aGluZ3MgbGlrZSBiYXNlX3VybCwgbWVzc2FnZV9mYWN0b3J5LCBldGMuIHNob3VsZCBiZSBhYmxlIHRvCiAgYmUgcmV0cmlldmVkIG9yIG1vZGlmaWVkLgoqIEFkZGVkIGBnZXREZWZhdWx0T3B0aW9uKClgIGFuZCBgc2V0RGVmYXVsdE9wdGlvbigpYCB0byBDbGllbnRJbnRlcmZhY2UKKiBmdW5jdGlvbnMucGhwIGZ1bmN0aW9ucyB3ZXJlIHJlbmFtZWQgdXNpbmcgc25ha2VfY2FzZSB0byBtYXRjaCBQSFAgaWRpb21zCiogQWRkZWQgc3VwcG9ydCBmb3IgYEhUVFBfUFJPWFlgLCBgSFRUUFNfUFJPWFlgLCBhbmQKICBgR1VaWkxFX0NVUkxfU0VMRUNUX1RJTUVPVVRgIGVudmlyb25tZW50IHZhcmlhYmxlcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgY3VzdG9tIGBzZW5kQWxsKClgIGV2ZW50IHByaW9yaXRpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBzdHJlYW0gY29udGV4dCBvcHRpb25zIHRvIHRoZSBzdHJlYW0KICBhZGFwdGVyLgoqIEFkZGVkIGEgZnVuY3Rpb25zLnBocCBmdW5jdGlvbiBmb3IgYGdldF9wYXRoKClgIGFuZCBgc2V0X3BhdGgoKWAKKiBDdXJsQWRhcHRlciBhbmQgTXVsdGlBZGFwdGVyIG5vdyB1c2UgYSBjYWxsYWJsZSB0byBnZW5lcmF0ZSBjdXJsIHJlc291cmNlcwoqIE1vY2tBZGFwdGVyIG5vdyBwcm9wZXJseSByZWFkcyBhIGJvZHkgYW5kIGVtaXRzIGEgYGhlYWRlcnNgIGV2ZW50CiogVXBkYXRlZCBVcmwgY2xhc3MgdG8gY2hlY2sgaWYgYSBzY2hlbWUgYW5kIGhvc3QgYXJlIHNldCBiZWZvcmUgYWRkaW5nICI6IgogIGFuZCAiLy8iLiBUaGlzIGFsbG93cyBlbXB0eSBVcmwgKGUuZy4sICIiKSB0byBiZSBzZXJpYWxpemVkIGFzICIiLgoqIFBhcnNpbmcgaW52YWxpZCBYTUwgbm8gbG9uZ2VyIGVtaXRzIHdhcm5pbmdzCiogQ3VybCBjbGFzc2VzIG5vdyBwcm9wZXJseSB0aHJvdyBBZGFwdGVyRXhjZXB0aW9ucwoqIFZhcmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucwoqIFN0cmVhbXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgZmFzdGVyIGBTdHJlYW1cY3JlYXRlKClgIGZ1bmN0aW9uCiogTWFya2VkIGRlcHJlY2F0aW9uX3Byb3h5KCkgYXMgaW50ZXJuYWwKKiBUZXN0IHNlcnZlciBpcyBub3cgYSBjb2xsZWN0aW9uIG9mIHN0YXRpYyBtZXRob2RzIG9uIGEgY2xhc3MKCiMjIDQuMC4wLXJjLjEgLSAyMDE0LTAzLTE1CgoqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9ibG9iL21hc3Rlci9VUEdSQURJTkcubWQjM3gtdG8tNDAKCiMjIDMuOC4xIC0gMjAxNC0wMS0yOAoKKiBCdWc6IEFsd2F5cyB1c2luZyBHRVQgcmVxdWVzdHMgd2hlbiByZWRpcmVjdGluZyBmcm9tIGEgMzAzIHJlc3BvbnNlCiogQnVnOiBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIGlzIG5vdyBjb3JyZWN0bHkgc2V0IHRvIGZhbHNlIHdoZW4gc2V0dGluZyBgJGNlcnRpZmljYXRlQXV0aG9yaXR5YCB0byBmYWxzZSBpbgogIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFNzbFZlcmlmaWNhdGlvbigpYAoqIEJ1ZzogUmVkaXJlY3RQbHVnaW4gbm93IHVzZXMgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2Ugd2hlbiBjb21iaW5pbmcgYSBiYXNlIFVSTCB3aXRoIGEgcmVsYXRpdmUgVVJMCiogQnVnOiBUaGUgYm9keSBvZiBhIHJlcXVlc3QgY2FuIG5vdyBiZSBzZXQgdG8gYCIwImAKKiBTZW5kaW5nIFBIUCBzdHJlYW0gcmVxdWVzdHMgbm8gbG9uZ2VyIGZvcmNlcyBgSFRUUC8xLjBgCiogQWRkaW5nIG1vcmUgaW5mb3JtYXRpb24gdG8gRXhjZXB0aW9uQ29sbGVjdGlvbiBleGNlcHRpb25zIHNvIHRoYXQgdXNlcnMgaGF2ZSBtb3JlIGNvbnRleHQsIGluY2x1ZGluZyBhIHN0YWNrIHRyYWNlIG9mCiAgZWFjaCBzdWItZXhjZXB0aW9uCiogVXBkYXRlZCB0aGUgYCRyZWZgIGF0dHJpYnV0ZSBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyB0byBtZXJnZSBvdmVyIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIG9mIGEgc2NoZW1hIChyYXRoZXIgdGhhbgogIGNsb2JiZXJpbmcgZXZlcnl0aGluZykuCiogTWVyZ2luZyBVUkxzIHdpbGwgbm93IHVzZSB0aGUgcXVlcnkgc3RyaW5nIG9iamVjdCBmcm9tIHRoZSByZWxhdGl2ZSBVUkwgKHRodXMgYWxsb3dpbmcgY3VzdG9tIHF1ZXJ5IGFnZ3JlZ2F0b3JzKQoqIFF1ZXJ5IHN0cmluZ3MgYXJlIG5vdyBwYXJzZWQgaW4gYSB3YXkgdGhhdCB0aGV5IGRvIG5vIGNvbnZlcnQgZW1wdHkga2V5cyB3aXRoIG5vIHZhbHVlIHRvIGhhdmUgYSBkYW5nbGluZyBgPWAuCiAgRm9yIGV4YW1wbGUgYGZvbyZiYXI9YmF6YCBpcyBub3cgY29ycmVjdGx5IHBhcnNlZCBhbmQgcmVjb2duaXplZCBhcyBgZm9vJmJhcj1iYXpgIHJhdGhlciB0aGFuIGBmb289JmJhcj1iYXpgLgoqIE5vdyBwcm9wZXJseSBlc2NhcGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGRlbGltaXRlciB3aGVuIG1hdGNoaW5nIENvb2tpZSBkb21haW5zLgoqIE5ldHdvcmsgYWNjZXNzIGlzIG5vdyBkaXNhYmxlZCB3aGVuIGxvYWRpbmcgWE1MIGRvY3VtZW50cwoKIyMgMy44LjAgLSAyMDEzLTEyLTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhIFBPU1QgbmFtZSBmb3IgYSBmaWxlCiogSlNPTiByZXNwb25zZSBwYXJzaW5nIG5vdyBwcm9wZXJseSB3YWxrcyBhZGRpdGlvbmFsUHJvcGVydGllcwoqIGNVUkwgZXJyb3IgY29kZSAxOCBpcyBub3cgcmV0cmllZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBCYWNrb2ZmUGx1Z2luCiogRml4ZWQgYSBjVVJMIGVycm9yIHdoZW4gVVJMcyBjb250YWluIGZyYWdtZW50cwoqIEZpeGVkIGFuIGlzc3VlIGluIHRoZSBCYWNrb2ZmUGx1Z2luIHJldHJ5IGV2ZW50IHdoZXJlIGl0IHdhcyB0cnlpbmcgdG8gYWNjZXNzIGFsbCBleGNlcHRpb25zIGFzIGlmIHRoZXkgd2VyZQogIEN1cmxFeGNlcHRpb25zCiogQ1VSTE9QVF9QUk9HUkVTUyBmdW5jdGlvbiBmaXggZm9yIFBIUCA1LjUgKDY5ZmNjMWUpCiogQWRkZWQgdGhlIGFiaWxpdHkgZm9yIEd1enpsZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY1VSTCB0aGF0IGRvIG5vdCBzdXBwb3J0IGBDVVJMT1BUX1RJTUVPVVRfTVNgCiogRml4ZWQgYSBidWcgdGhhdCB3YXMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIGVtcHR5IGhlYWRlciBwYXJhbWV0ZXJzCiogVXJpVGVtcGxhdGUgbm93IGhhcyBhIGBzZXRSZWdleCgpYCBtZXRob2QgdG8gbWF0Y2ggdGhlIGRvY3MKKiBUaGUgYGRlYnVnYCByZXF1ZXN0IHBhcmFtZXRlciBub3cgY2hlY2tzIGlmIGl0IGlzIHRydXRoeSByYXRoZXIgdGhhbiBpZiBpdCBleGlzdHMKKiBTZXR0aW5nIHRoZSBgZGVidWdgIHJlcXVlc3QgcGFyYW1ldGVyIHRvIHRydWUgc2hvd3MgdmVyYm9zZSBjVVJMIG91dHB1dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBMb2dQbHVnaW4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjb21iaW5lIFVSTHMgdXNpbmcgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2UKKiBDb21tYW5kIG9iamVjdHMgY2FuIG5vdyByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3JzIGVuY291bnRlcmVkIGJ5IHRoZSBjb21tYW5kCiogVmFyaW91cyBmaXhlcyB0byBjYWNoZSByZXZhbGlkYXRpb24gKCM0MzcgYW5kIDI5Nzk3ZTUpCiogVmFyaW91cyBmaXhlcyB0byB0aGUgQXN5bmNQbHVnaW4KKiBDbGVhbmVkIHVwIGJ1aWxkIHNjcmlwdHMKCiMjIDMuNy40IC0gMjAxMy0xMC0wMgoKKiBCdWcgZml4OiAwIGlzIG5vdyBhbiBhbGxvd2VkIHZhbHVlIGluIGEgZGVzY3JpcHRpb24gcGFyYW1ldGVyIHRoYXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSAoIzQzMCkKKiBCdWcgZml4OiBTY2hlbWFGb3JtYXR0ZXIgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGVuIGZvcm1hdHRpbmcgdG8gYSBVbml4IHRpbWVzdGFtcAogIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLXBocC9pc3N1ZXMvMTQ3KQoqIEJ1ZyBmaXg6IENsZWFuZWQgdXAgYW5kIGZpeGVkIFVSTCBkb3Qgc2VnbWVudCByZW1vdmFsIHRvIHByb3Blcmx5IHJlc29sdmUgaW50ZXJuYWwgZG90cwoqIE1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IHByb3Blcmx5IHNwZWNpZmllZCBhcyA1LjMuMyAodXAgZnJvbSA1LjMuMikgKCM0MjApCiogVXBkYXRlZCB0aGUgYnVuZGxlZCBjYWNlcnQucGVtICgjNDE5KQoqIE9hdXRoUGx1Z2luIG5vdyBzdXBwb3J0cyBhZGRpbmcgYXV0aGVudGljYXRpb24gdG8gaGVhZGVycyBvciBxdWVyeSBzdHJpbmcgKCM0MjUpCgojIyAzLjcuMyAtIDIwMTMtMDktMDgKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gZ2V0IHRoZSBleGNlcHRpb24gYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC9jb21tYW5kIHdoZW4gdXNpbmcgYE11bHRpVHJhbnNmZXJFeGNlcHRpb25gIGFuZAogIGBDb21tYW5kVHJhbnNmZXJFeGNlcHRpb25gLgoqIFNldHRpbmcgYGFkZGl0aW9uYWxQYXJhbWV0ZXJzYCBvZiBhIHJlc3BvbnNlIHRvIGZhbHNlIGlzIG5vdyBob25vcmVkIHdoZW4gcGFyc2luZyByZXNwb25zZXMgd2l0aCBhIHNlcnZpY2UgZGVzY3JpcHRpb24KKiBTY2hlbWFzIGFyZSBvbmx5IGluamVjdGVkIGludG8gcmVzcG9uc2UgbW9kZWxzIHdoZW4gZXhwbGljaXRseSBjb25maWd1cmVkLgoqIE5vIGxvbmdlciBndWVzc2luZyBDb250ZW50LVR5cGUgYmFzZWQgb24gdGhlIHBhdGggb2YgYSByZXF1ZXN0LiBDb250ZW50LVR5cGUgaXMgbm93IG9ubHkgZ3Vlc3NlZCBiYXNlZCBvbiB0aGUgcGF0aCBvZgogIGFuIEVudGl0eUJvZHkuCiogQnVnIGZpeDogQ2h1bmtlZEl0ZXJhdG9yIGNhbiBub3cgcHJvcGVybHkgY2h1bmsgYSBcVHJhdmVyc2FibGUgYXMgd2VsbCBhcyBhbiBcSXRlcmF0b3IuCiogQnVnIGZpeDogRmlsdGVySXRlcmF0b3Igbm93IHJlbGllcyBvbiBgXEl0ZXJhdG9yYCBpbnN0ZWFkIG9mIGBcVHJhdmVyc2FibGVgLgoqIEJ1ZyBmaXg6IEdyYWNlZnVsbHkgaGFuZGxpbmcgbWFsZm9ybWVkIHJlc3BvbnNlcyBpbiBSZXF1ZXN0TWVkaWF0b3I6OndyaXRlUmVzcG9uc2VCb2R5KCkKKiBCdWcgZml4OiBSZXBsYWNlZCBjYWxsIHRvIGNhbkNhY2hlIHdpdGggY2FuQ2FjaGVSZXF1ZXN0IGluIHRoZSBDYWxsYmFja0NhbkNhY2hlU3RyYXRlZ3kgb2YgdGhlIENhY2hlUGx1Z2luCiogQnVnIGZpeDogVmlzaXRpbmcgWE1MIGF0dHJpYnV0ZXMgZmlyc3QgYmVmb3JlIHZpc2l0aW5nIFhNTCBjaGlsZHJlbiB3aGVuIHNlcmlhbGl6aW5nIHJlcXVlc3RzCiogQnVnIGZpeDogUHJvcGVybHkgcGFyc2luZyBoZWFkZXJzIHRoYXQgY29udGFpbiBjb21tYXMgY29udGFpbmVkIGluIHF1b3RlcwoqIEJ1ZyBmaXg6IG1pbWV0eXBlIGd1ZXNzaW5nIGJhc2VkIG9uIGEgZmlsZW5hbWUgaXMgbm93IGNhc2UtaW5zZW5zaXRpdmUKCiMjIDMuNy4yIC0gMjAxMy0wOC0wMgoKKiBCdWcgZml4OiBQcm9wZXJseSBVUkwgZW5jb2RpbmcgcGF0aHMgd2hlbiB1c2luZyB0aGUgUEhQLW9ubHkgdmVyc2lvbiBvZiB0aGUgVXJpVGVtcGxhdGUgZXhwYW5kZXIKICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzM3MQoqIEJ1ZyBmaXg6IENvb2tpZSBkb21haW5zIGFyZSBub3cgbWF0Y2hlZCBjb3JyZWN0bHkgYWNjb3JkaW5nIHRvIFJGQyA2MjY1CiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzcKKiBCdWcgZml4OiBHRVQgcGFyYW1ldGVycyBhcmUgbm93IHVzZWQgd2hlbiBjYWxjdWxhdGluZyBhbiBPQXV0aCBzaWduYXR1cmUKKiBCdWcgZml4OiBGaXhlZCBhbiBpc3N1ZSB3aXRoIGNhY2hlIHJldmFsaWRhdGlvbiB3aGVyZSB0aGUgSWYtTm9uZS1NYXRjaCBoZWFkZXIgd2FzIGJlaW5nIGRvdWJsZSBxdW90ZWQKKiBgR3V6emxlXENvbW1vblxBYnN0cmFjdEhhc0Rpc3BhdGNoZXI6OmRpc3BhdGNoKClgIG5vdyByZXR1cm5zIHRoZSBldmVudCB0aGF0IHdhcyBkaXNwYXRjaGVkCiogYEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nOjpmYWN0b3J5KClgIG5vdyBndWVzc2VzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHF1ZXJ5IGFnZ3JlZ2F0b3IgdG8gdXNlZCBiYXNlZCBvbiB0aGUgaW5wdXQuCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzkKKiBBZGRlZCBhIHdheSB0byBhZGQgY3VzdG9tIGRvbWFpbiBvYmplY3RzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyc2luZyB1c2luZyB0aGUgYG9wZXJhdGlvbi5wYXJzZV9jbGFzc2AgZXZlbnQuIFNlZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMzgwCiogY1VSTCBtdWx0aSBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb25zCgojIyAzLjcuMSAtIDIwMTMtMDctMDUKCiogQnVnIGZpeDogU2V0dGluZyBkZWZhdWx0IG9wdGlvbnMgb24gYSBjbGllbnQgbm93IHdvcmtzCiogQnVnIGZpeDogU2V0dGluZyBvcHRpb25zIG9uIEhFQUQgcmVxdWVzdHMgbm93IHdvcmtzLiBTZWUgIzM1MgoqIEJ1ZyBmaXg6IE1vdmluZyBzdHJlYW0gZmFjdG9yeSBiZWZvcmUgc2VuZCBldmVudCB0byBiZWZvcmUgYnVpbGRpbmcgdGhlIHN0cmVhbS4gU2VlICMzNTMKKiBCdWcgZml4OiBDb29raWVzIG5vIGxvbmdlciBtYXRjaCBvbiBJUCBhZGRyZXNzZXMgcGVyIFJGQyA2MjY1CiogQnVnIGZpeDogQ29ycmVjdGx5IHBhcnNpbmcgaGVhZGVyIHBhcmFtZXRlcnMgdGhhdCBhcmUgaW4gYDw+YCBhbmQgcXVvdGVzCiogQWRkZWQgYGNlcnRgIGFuZCBgc3NsX2tleWAgYXMgcmVxdWVzdCBvcHRpb25zCiogYEhvc3RgIGhlYWRlciBjYW4gbm93IGRpdmVyZ2UgZnJvbSB0aGUgaG9zdCBwYXJ0IG9mIGEgVVJMIGlmIHRoZSBoZWFkZXIgaXMgc2V0IG1hbnVhbGx5CiogYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcTG9jYXRpb25WaXNpdG9yXFJlcXVlc3RcWG1sVmlzaXRvcmAgd2FzIHJld3JpdHRlbiB0byBjaGFuZ2UgZnJvbSB1c2luZyBTaW1wbGVYTUwgdG8gWE1MV3JpdGVyCiogT0F1dGggcGFyYW1ldGVycyBhcmUgb25seSBhZGRlZCB2aWEgdGhlIHBsdWdpbiBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IHNldAoqIEV4Y2VwdGlvbnMgYXJlIG5vdyB0aHJvd24gd2hlbiBhIFVSTCBjYW5ub3QgYmUgcGFyc2VkCiogUmV0dXJuaW5nIGBmYWxzZWAgaWYgYEd1enpsZVxIdHRwXEVudGl0eUJvZHk6OmdldENvbnRlbnRNZDUoKWAgZmFpbHMKKiBOb3Qgc2V0dGluZyBhIGBDb250ZW50LU1ENWAgb24gYSBjb21tYW5kIGlmIGNhbGN1bGF0aW5nIHRoZSBDb250ZW50LU1ENSBmYWlscyB2aWEgdGhlIENvbW1hbmRDb250ZW50TWQ1UGx1Z2luCgojIyAzLjcuMCAtIDIwMTMtMDYtMTAKCiogU2VlIFVQR1JBRElORy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXBncmFkZS4KKiBSZXF1ZXN0cyBub3cgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGFuIGFycmF5IG9mICRvcHRpb25zIHdoZW4gY3JlYXRpbmcgYSByZXF1ZXN0IHRvIG1vcmUgZWFzaWx5IG1vZGlmeSBhCiAgcmVxdWVzdC4gWW91IGNhbiBwYXNzIGEgJ3JlcXVlc3Qub3B0aW9ucycgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvIGEgY2xpZW50IHRvIGFwcGx5IGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIHRvCiAgZXZlcnkgcmVxdWVzdCBjcmVhdGVkIGJ5IGEgY2xpZW50IChlLmcuIGRlZmF1bHQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgaGVhZGVycywgY3VybCBvcHRpb25zLCBldGMuKS4KKiBBZGRlZCBhIHN0YXRpYyBmYWNhZGUgY2xhc3MgdGhhdCBhbGxvd3MgeW91IHRvIHVzZSBHdXp6bGUgd2l0aCBzdGF0aWMgbWV0aG9kcyBhbmQgbW91bnQgdGhlIGNsYXNzIHRvIGBcR3V6emxlYC4KICBTZWUgYEd1enpsZVxIdHRwXFN0YXRpY0NsaWVudDo6bW91bnRgLgoqIEFkZGVkIGBjb21tYW5kLnJlcXVlc3Rfb3B0aW9uc2AgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kYCB0byBwYXNzIHJlcXVlc3Qgb3B0aW9ucyB0byByZXF1ZXN0cwogICAgICBjcmVhdGVkIGJ5IGEgY29tbWFuZCAoZS5nLiBjdXN0b20gaGVhZGVycywgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgdGltZW91dCBzZXR0aW5ncywgZXRjLikuCiogU3RyZWFtIHNpemUgaW4gYEd1enpsZVxTdHJlYW1cUGhwU3RyZWFtUmVxdWVzdEZhY3RvcnlgIHdpbGwgbm93IGJlIHNldCBpZiBDb250ZW50LUxlbmd0aCBpcyByZXR1cm5lZCBpbiB0aGUKICBoZWFkZXJzIG9mIGEgcmVzcG9uc2UKKiBBZGRlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpzZXRQYXRoKCRwYXRoLCAkdmFsdWUpYCB0byBzZXQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IHVzaW5nIGEgbmVzdGVkIGtleQogIChlLmcuIGAkY29sbGVjdGlvbi0+c2V0UGF0aCgnZm9vL2Jhei9iYXInLCAndGVzdCcpOyBlY2hvICRjb2xsZWN0aW9uWydmb28nXVsnYmFyJ11bJ2JhciddO2ApCiogU2VydmljZUJ1aWxkZXJzIG5vdyBzdXBwb3J0IHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgYXJiaXRyYXJ5IGRhdGEKKiBDYWNoZVBsdWdpbiBjYW4gbm93IHB1cmdlIGFsbCByZXNvdXJjZXMgZm9yIGEgZ2l2ZW4gVVJJCiogQ2FjaGVQbHVnaW4gY2FuIGF1dG9tYXRpY2FsbHkgcHVyZ2UgbWF0Y2hpbmcgY2FjaGVkIGl0ZW1zIHdoZW4gYSBub24taWRlbXBvdGVudCByZXF1ZXN0IGlzIHNlbnQgdG8gYSByZXNvdXJjZQoqIENhY2hlUGx1Z2luIG5vdyB1c2VzIHRoZSBWYXJ5IGhlYWRlciB0byBkZXRlcm1pbmUgaWYgYSByZXNvdXJjZSBpcyBhIGNhY2hlIGhpdAoqIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlYCBub3cgaW1wbGVtZW50cyBgXFNlcmlhbGl6YWJsZWAKKiBBZGRlZCBgR3V6emxlXENhY2hlXENhY2hlQWRhcHRlckZhY3Rvcnk6OmZyb21DYWNoZSgpYCB0byBtb3JlIGVhc2lseSBjcmVhdGUgY2FjaGUgYWRhcHRlcnMKKiBgR3V6emxlXFNlcnZpY2VcQ2xpZW50SW50ZXJmYWNlOjpleGVjdXRlKClgIG5vdyBhY2NlcHRzIGFuIGFycmF5LCBzaW5nbGUgY29tbWFuZCwgb3IgVHJhdmVyc2FibGUKKiBGaXhlZCBhIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXJcTGluazo6YWRkTGluaygpYAoqIEJldHRlciBoYW5kbGluZyBvZiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiBhIHN0cmVhbSBpbiBgR3V6emxlXFN0cmVhbVxTdHJlYW1gIHVzaW5nIGZzdGF0KCkgYW5kIGNhY2hpbmcgdGhlIHNpemUKKiBgR3V6emxlXENvbW1vblxFeGNlcHRpb25cRXhjZXB0aW9uQ29sbGVjdGlvbmAgbm93IGNyZWF0ZXMgYSBtb3JlIHJlYWRhYmxlIGV4Y2VwdGlvbiBtZXNzYWdlCiogRml4aW5nIEJDIGJyZWFrOiBBZGRlZCBiYWNrIHRoZSBNb25vbG9nTG9nQWRhcHRlciBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHRlbmRpbmcgZnJvbSBQc3JMb2cgc28gdGhhdCBvbGRlcgogIFN5bWZvbnkgdXNlcnMgY2FuIHN0aWxsIHVzZSB0aGUgb2xkIHZlcnNpb24gb2YgTW9ub2xvZy4KKiBGaXhpbmcgQkMgYnJlYWs6IEFkZGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBiYWNrIGluIGZvciBgR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2U6OmdldFRva2VuaXplZEhlYWRlcigpYC4KICBOb3cgdHJpZ2dlcmluZyBhbiBFX1VTRVJfREVQUkVDQVRFRCB3YXJuaW5nIHdoZW4gdXNlZC4gVXNlIGAkbWVzc2FnZS0+Z2V0SGVhZGVyKCktPnBhcnNlUGFyYW1zKClgLgoqIFNldmVyYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHRvIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb25gCiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlYDoKICBjcmVhdGVSZXF1ZXN0LCBoZWFkLCBkZWxldGUsIHB1dCwgcGF0Y2gsIHBvc3QsIG9wdGlvbnMsIHByZXBhcmVSZXF1ZXN0CiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U6OmNyZWF0ZVJlcXVlc3QoKWAKKiBBZGRlZCBhbiBgYXBwbHlPcHRpb25zKClgIG1ldGhvZCB0byBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlYAoqIENoYW5nZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRib2R5ID0gbnVsbClgIHRvCiAgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRvcHRpb25zID0gYXJyYXkoKSlgLiBZb3UgY2FuIHN0aWxsIHBhc3MgaW4gYQogIHJlc291cmNlLCBzdHJpbmcsIG9yIEVudGl0eUJvZHkgaW50byB0aGUgJG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGRvd25sb2FkIGxvY2F0aW9uIG9mIHRoZSByZXNwb25zZS4KKiBDaGFuZ2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246Ol9fY29uc3RydWN0KCRkYXRhKWAgdG8gbm8gbG9uZ2VyIGFjY2VwdHMgYSBudWxsIHZhbHVlIGZvciBgJGRhdGFgIGJ1dCBhCiAgZGVmYXVsdCBgYXJyYXkoKWAKKiBBZGRlZCBgR3V6emxlXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OmlzUmVwZWF0YWJsZWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldERlZmF1bHRIZWFkZXJzKCkuIFVzZQogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLiBvcgogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYC4KKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRIZWFkZXJzKCkuIFVzZSAkY2xpZW50LT5nZXRDb25maWcoKS0+Z2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnKWAuCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpleHBhbmRUZW1wbGF0ZSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0UmVxdWVzdEZhY3RvcnkoKWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldEN1cmxNdWx0aSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6Y2FuQ2FjaGVgCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpzZXRJc1JlZGlyZWN0YAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6aXNSZWRpcmVjdGAKKiBNYWRlIGBHdXp6bGVcSHR0cFxDbGllbnQ6OmV4cGFuZFRlbXBsYXRlYCBhbmQgYGdldFVyaVRlbXBsYXRlYCBwcm90ZWN0ZWQgbWV0aG9kcy4KKiBZb3UgY2FuIG5vdyBlbmFibGUgRV9VU0VSX0RFUFJFQ0FURUQgd2FybmluZ3MgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgYSBkZXByZWNhdGVkIG1ldGhvZCBieSBzZXR0aW5nCiAgYEd1enpsZVxDb21tb25cVmVyc2lvbjo6JGVtaXRXYXJuaW5nc2AgdG8gdHJ1ZS4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZXNwb25zZUJvZHlSZXBlYXRhYmxlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZQogICAgICBgJHJlcXVlc3QtPmdldFJlc3BvbnNlQm9keSgpLT5pc1JlcGVhdGFibGUoKWAgaW5zdGVhZC4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlCiAgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpjYW5DYWNoZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UKICBgR3V6emxlXFBsdWdpblxDYWNoZVxEZWZhdWx0Q2FuQ2FjaGVTdHJhdGVneS0+Y2FuQ2FjaGVSZXF1ZXN0KClgIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldElzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcQ2FjaGVcQ2FjaGVBZGFwdGVyRmFjdG9yeTo6ZmFjdG9yeSgpYCBhcyBkZXByZWNhdGVkCiogTWFya2VkICdjb21tYW5kLmhlYWRlcnMnLCAnY29tbWFuZC5yZXNwb25zZV9ib2R5JyBhbmQgJ2NvbW1hbmQub25fY29tcGxldGUnIGFzIGRlcHJlY2F0ZWQgZm9yIEFic3RyYWN0Q29tbWFuZC4KICBUaGVzZSB3aWxsIHdvcmsgdGhyb3VnaCBHdXp6bGUgNC4wCiogTWFya2VkICdyZXF1ZXN0LnBhcmFtcycgZm9yIGBHdXp6bGVcSHR0cFxDbGllbnRgIGFzIGRlcHJlY2F0ZWQuIFVzZSBbcmVxdWVzdC5vcHRpb25zXVtwYXJhbXNdLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjplbmFibGVNYWdpY01ldGhvZHMoKWAgYXMgZGVwcmVjYXRlZC4gTWFnaWMgbWV0aG9kcyBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIG9uIGEgR3V6emxlXFNlcnZpY2VcQ2xpZW50LgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpnZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPmdldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJylgLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpzZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuCiogTWFya2VkIGBHdXp6bGVcUGFyc2VyXFVybFxVcmxQYXJzZXJgIGFzIGRlcHJlY2F0ZWQuIEp1c3QgdXNlIFBIUCdzIGBwYXJzZV91cmwoKWAgYW5kIHBlcmNlbnQgZW5jb2RlIHlvdXIgVVRGLTguCiogTWFya2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdCgpYCBhcyBkZXByZWNhdGVkLgoqIE1hcmtlZCBgR3V6emxlXFBsdWdpblxDdXJsQXV0aFxDdXJsQXV0aFBsdWdpbmAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2F1dGgnLCBhcnJheSgndXNlcicsICdwYXNzJywgJ0Jhc2ljfERpZ2VzdCcpO2AKKiBDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlIGFuZCBEZWZhdWx0Q2FjaGVLZXlQcm92aWRlciBhcmUgbm8gbG9uZ2VyIHVzZWQuIEFsbCBvZiB0aGlzIGxvZ2ljIGlzIGhhbmRsZWQgaW4gYQogIENhY2hlU3RvcmFnZUludGVyZmFjZS4gVGhlc2UgdHdvIG9iamVjdHMgYW5kIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KKiBBbHdheXMgc2V0dGluZyBYLWNhY2hlIGhlYWRlcnMgb24gY2FjaGVkIHJlc3BvbnNlcwoqIERlZmF1bHQgY2FjaGUgVFRMcyBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIENhY2hlU3RvcmFnZUludGVyZmFjZSBvZiBhIENhY2hlUGx1Z2luCiogYENhY2hlU3RvcmFnZUludGVyZmFjZTo6Y2FjaGUoJGtleSwgUmVzcG9uc2UgJHJlc3BvbnNlLCAkdHRsID0gbnVsbClgIGhhcyBjaGFuZ2VkIHRvIGBjYWNoZShSZXF1ZXN0SW50ZXJmYWNlCiAgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmZldGNoKCRrZXkpYCBoYXMgY2hhbmdlZCB0byBgZmV0Y2goUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmRlbGV0ZSgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGRlbGV0ZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTtgCiogQWRkZWQgYENhY2hlU3RvcmFnZUludGVyZmFjZTo6cHVyZ2UoJHVybClgCiogYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlS2V5UHJvdmlkZXJJbnRlcmZhY2UgJGNhY2hlS2V5LCBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UgJGNhY2hlLCBDYWNoZVBsdWdpbgogICRwbHVnaW4pYCBoYXMgY2hhbmdlZCB0byBgRGVmYXVsdFJldmFsaWRhdGlvbjo6X19jb25zdHJ1Y3QoQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwKICBDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlICRjYW5DYWNoZSA9IG51bGwpYAoqIEFkZGVkIGBSZXZhbGlkYXRpb25JbnRlcmZhY2U6OnNob3VsZFJldmFsaWRhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2UgJHJlc3BvbnNlKWAKCiMjIDMuNi4wIC0gMjAxMy0wNS0yOQoKKiBTZXJ2aWNlRGVzY3JpcHRpb24gbm93IGltcGxlbWVudHMgVG9BcnJheUludGVyZmFjZQoqIEFkZGVkIGNvbW1hbmQuaGlkZGVuX3BhcmFtcyB0byBibGFja2xpc3QgY2VydGFpbiBoZWFkZXJzIGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhZGRpdGlvbmFsUGFyYW1ldGVycwoqIEd1enpsZSBjYW4gbm93IGNvcnJlY3RseSBwYXJzZSBpbmNvbXBsZXRlIFVSTHMKKiBNaXhlZCBjYXNpbmcgb2YgaGVhZGVycyBhcmUgbm93IGZvcmNlZCB0byBiZSBhIHNpbmdsZSBjb25zaXN0ZW50IGNhc2luZyBhY3Jvc3MgYWxsIHZhbHVlcyBmb3IgdGhhdCBoZWFkZXIuCiogTWVzc2FnZXMgaW50ZXJuYWxseSB1c2UgYSBIZWFkZXJDb2xsZWN0aW9uIG9iamVjdCB0byBkZWxlZ2F0ZSBoYW5kbGluZyBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciByZXNvbHV0aW9uCiogUmVtb3ZlZCB0aGUgd2hvbGUgY2hhbmdlZEhlYWRlcigpIGZ1bmN0aW9uIHN5c3RlbSBvZiBtZXNzYWdlcyBiZWNhdXNlIGFsbCBoZWFkZXIgY2hhbmdlcyBub3cgZ28gdGhyb3VnaCBhZGRIZWFkZXIoKS4KKiBTcGVjaWZpYyBoZWFkZXIgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBjcmVhdGVkIGZvciBjb21wbGV4IGhlYWRlcnMuIFdoZW4gYSBtZXNzYWdlIGNyZWF0ZXMgYSBoZWFkZXIsIGl0IHVzZXMgYQogIEhlYWRlckZhY3Rvcnkgd2hpY2ggY2FuIG1hcCBzcGVjaWZpYyBoZWFkZXJzIHRvIHNwZWNpZmljIGhlYWRlciBjbGFzc2VzLiBUaGVyZSBpcyBub3cgYSBMaW5rIGhlYWRlciBhbmQKICBDYWNoZUNvbnRyb2wgaGVhZGVyIGltcGxlbWVudGF0aW9uLgoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0VXJpVGVtcGxhdGUKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldEN1cmxNdWx0aSgpCiogUmVtb3ZlZCBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnJlY2VpdmVkUmVxdWVzdEhlYWRlcigpIGFuZCBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4KICBHdXp6bGVcSHR0cFxDdXJsXFJlcXVlc3RNZWRpYXRvcgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICRhc1N0cmluZyBwYXJhbWV0ZXIgZnJvbSBNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXIoKS4gSnVzdCBjYXN0IHRoZSBoZWFkZXIgdG8gYSBzdHJpbmcuCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJHRyeUNodW5rZWRUcmFuc2ZlciBvcHRpb24gZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2UKKiBSZW1vdmVkIHRoZSAkYXNPYmplY3RzIGFyZ3VtZW50IGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJzKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OmdldCgpLiBVc2UgZ2V0UGFyc2VyKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OnNldCgpLiBVc2UgcmVnaXN0ZXJQYXJzZXIoKS4KKiBBbGwgcmVzcG9uc2UgaGVhZGVyIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIGEgc3RyaW5nIHJhdGhlciB0aGFuIG1peGluZyBIZWFkZXIgb2JqZWN0cyBhbmQgc3RyaW5ncyBpbmNvbnNpc3RlbnRseQoqIFJlbW92ZWQgY1VSTCBibGFja2xpc3Qgc3VwcG9ydC4gVGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG5vdyB0aGF0IEV4cGVjdCwgQWNjZXB0LCBldGMuIGFyZSBtYW5hZ2VkIGJ5IEd1enpsZQogIGRpcmVjdGx5IHZpYSBpbnRlcmZhY2VzCiogUmVtb3ZlZCB0aGUgaW5qZWN0aW5nIG9mIGEgcmVxdWVzdCBvYmplY3Qgb250byBhIHJlc3BvbnNlIG9iamVjdC4gVGhlIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgYSByZXF1ZXN0IHN0aWxsIGV4aXN0CiAgYnV0IGFyZSBhIG5vLW9wIHVudGlsIHJlbW92ZWQuCiogTW9zdCBjbGFzc2VzIHRoYXQgdXNlZCB0byByZXF1aXJlIGEgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgdHlwZWhpbnQgbm93IHJlcXVlc3QgYQogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXEFycmF5Q29tbWFuZEludGVyZmFjZWAuCiogQWRkZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c3RhcnRSZXNwb25zZSgpYCB0byB0aGUgUmVxdWVzdEludGVyZmFjZSB0byBoYW5kbGUgaW5qZWN0aW5nIGEgcmVzcG9uc2UKICBvbiBhIHJlcXVlc3Qgd2hpbGUgdGhlIHJlcXVlc3QgaXMgc3RpbGwgYmVpbmcgdHJhbnNmZXJyZWQKKiBUaGUgYWJpbGl0eSB0byBjYXNlLWluc2Vuc2l0aXZlbHkgc2VhcmNoIGZvciBoZWFkZXIgdmFsdWVzCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6Omhhc0V4YWN0SGVhZGVyCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdy4gVXNlIGdldEFsbCgpCiogRGVwcmVjYXRlZCBjYWNoZSBjb250cm9sIHNwZWNpZmljIG1ldGhvZHMgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2UuIFVzZSB0aGUgQ2FjaGVDb250cm9sIGhlYWRlciBvYmplY3QKICBpbnN0ZWFkLgoqIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIG5vdyBleHRlbmRzIGZyb20gVG9BcnJheUludGVyZmFjZSBhbmQgQXJyYXlBY2Nlc3MKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjYXN0IE1vZGVsIG9iamVjdHMgdG8gYSBzdHJpbmcgdG8gdmlldyBkZWJ1ZyBpbmZvcm1hdGlvbi4KCiMjIDMuNS4wIC0gMjAxMy0wNS0xMwoKKiBCdWc6IEZpeGVkIGEgcmVncmVzc2lvbiBzbyB0aGF0IHJlcXVlc3QgcmVzcG9uc2VzIGFyZSBwYXJzZWQgb25seSBvbmNlIHBlciBvbmNvbXBsZXRlIGV2ZW50IHJhdGhlciB0aGFuIG11bHRpcGxlIHRpbWVzCiogQnVnOiBCZXR0ZXIgY2xlYW51cCBvZiBvbmUtdGltZSBldmVudHMgYWNyb3NzIHRoZSBib2FyZCAod2hlbiBhbiBldmVudCBpcyBtZWFudCB0byBmaXJlIG9uY2UsIGl0IHdpbGwgbm93IHJlbW92ZQogIGl0c2VsZiBmcm9tIHRoZSBFdmVudERpc3BhdGNoZXIpCiogQnVnOiBgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyYCBub3cgcHJvcGVybHkgd3JpdGVzICJ0b3RhbF90aW1lIiBhbmQgImNvbm5lY3RfdGltZSIgdmFsdWVzCiogQnVnOiBDbG9uaW5nIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgbm93IGNsb25lcyB0aGUgRW50aXR5Qm9keSB0b28KKiBCdWc6IEZpeGVkIGFuIHVuZGVmaW5lZCBpbmRleCBlcnJvciB3aGVuIHBhcnNpbmcgbmVzdGVkIEpTT04gcmVzcG9uc2VzIHdpdGggYSBzZW50QXMgcGFyYW1ldGVyIHRoYXQgcmVmZXJlbmNlIGEKICBub24tZXhpc3RlbnQga2V5CiogQnVnOiBBbGwgX19jYWxsKCkgbWV0aG9kIGFyZ3VtZW50cyBhcmUgbm93IHJlcXVpcmVkIChoZWxwcyB3aXRoIG1vY2tpbmcgZnJhbWV3b3JrcykKKiBEZXByZWNhdGluZyBSZXNwb25zZTo6Z2V0UmVxdWVzdCgpIGFuZCBub3cgdXNpbmcgYSBzaGFsbG93IGNsb25lIG9mIGEgcmVxdWVzdCBvYmplY3QgdG8gcmVtb3ZlIGEgY2lyY3VsYXIgcmVmZXJlbmNlCiAgdG8gaGVscCB3aXRoIHJlZmNvdW50IGJhc2VkIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiByZXNvdXJjZXMgY3JlYXRlZCBieSBzZW5kaW5nIGEgcmVxdWVzdAoqIERlcHJlY2F0aW5nIFpGMSBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzLiBUaGVzZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi4KKiBEZXByZWNhdGluZyBgUmVzcG9uc2U6OmdldFByZXZpb3VzUmVzcG9uc2UoKWAgKG1ldGhvZCBzaWduYXR1cmUgc3RpbGwgZXhpc3RzLCBidXQgaXQncyBkZXByZWNhdGVkKS4gVXNlIHRoZQogIEhpc3RvcnlQbHVnaW4gZm9yIGEgaGlzdG9yeS4KKiBBZGRlZCBhIGByZXNwb25zZUJvZHlgIGFsaWFzIGZvciB0aGUgYHJlc3BvbnNlX2JvZHlgIGxvY2F0aW9uCiogUmVmYWN0b3JlZCBpbnRlcm5hbHMgdG8gbm8gbG9uZ2VyIHJlbHkgb24gUmVzcG9uc2U6OmdldFJlcXVlc3QoKQoqIEhpc3RvcnlQbHVnaW4gY2FuIG5vdyBiZSBjYXN0IHRvIGEgc3RyaW5nCiogSGlzdG9yeVBsdWdpbiBub3cgbG9ncyB0cmFuc2FjdGlvbnMgcmF0aGVyIHRoYW4gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB0byBtb3JlIGFjY3VyYXRlbHkga2VlcCB0cmFjayBvZiB0aGUgcmVxdWVzdHMKICBhbmQgcmVzcG9uc2VzIHRoYXQgYXJlIHNlbnQgb3ZlciB0aGUgd2lyZQoqIEFkZGVkIGBnZXRFZmZlY3RpdmVVcmwoKWAgYW5kIGBnZXRSZWRpcmVjdENvdW50KClgIHRvIFJlc3BvbnNlIG9iamVjdHMKCiMjIDMuNC4zIC0gMjAxMy0wNC0zMAoKKiBCdWcgZml4OiBGaXhpbmcgYnVnIGludHJvZHVjZWQgaW4gMy40LjIgd2hlcmUgcmVkaXJlY3QgcmVzcG9uc2VzIGFyZSBkdXBsaWNhdGVkIG9uIHRoZSBmaW5hbCByZWRpcmVjdGVkIHJlc3BvbnNlCiogQWRkZWQgYSBjaGVjayB0byByZS1leHRyYWN0IHRoZSB0ZW1wIGNhY2VydCBidW5kbGUgZnJvbSB0aGUgcGhhciBiZWZvcmUgc2VuZGluZyBlYWNoIHJlcXVlc3QKCiMjIDMuNC4yIC0gMjAxMy0wNC0yOQoKKiBCdWcgZml4OiBTdHJlYW0gb2JqZWN0cyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAiYSIgYW5kICJhKyIgbW9kZXMKKiBCdWcgZml4OiBSZW1vdmluZyBgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRgIGhlYWRlciB3aGVuIGEgQ29udGVudC1MZW5ndGggaXMgcHJlc2VudAoqIEJ1ZyBmaXg6IEFzeW5jUGx1Z2luIG5vIGxvbmdlciBmb3JjZXMgSEVBRCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IERhdGVUaW1lIHRpbWV6b25lcyBhcmUgbm93IHByb3Blcmx5IGhhbmRsZWQgd2hlbiB1c2luZyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbiBzY2hlbWEgZm9ybWF0dGVyCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IHByb3Blcmx5IGhhbmRsZXMgc3RhbGUtaWYtZXJyb3IgZGlyZWN0aXZlcyB3aGVuIGEgcmVxdWVzdCB0byB0aGUgb3JpZ2luIHNlcnZlciBmYWlscwoqIFNldHRpbmcgYSByZXNwb25zZSBvbiBhIHJlcXVlc3Qgd2lsbCB3cml0ZSB0byB0aGUgY3VzdG9tIHJlcXVlc3QgYm9keSBmcm9tIHRoZSByZXNwb25zZSBib2R5IGlmIG9uZSBpcyBzcGVjaWZpZWQKKiBMb2dQbHVnaW4gbm93IHdyaXRlcyB0byBwaHA6Ly9vdXRwdXQgd2hlbiBTVERFUlIgaXMgdW5kZWZpbmVkCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IG11bHRpcGxlIFBPU1QgZmlsZXMgZm9yIHRoZSBzYW1lIGtleSBpbiBhIHNpbmdsZSBjYWxsCiogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIFBPU1RzIG5vdyB1c2UgdGhlIHV0Zi04IGNoYXJzZXQgYnkgZGVmYXVsdAoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHF1ZXVlIEN1cmxFeGNlcHRpb25zIHRvIHRoZSBNb2NrUGx1Z2luCiogQ2xlYW5lZCB1cCBob3cgbWFudWFsIHJlc3BvbnNlcyBhcmUgcXVldWVkIG9uIHJlcXVlc3RzIChyZW1vdmVkICJxdWV1ZWRfcmVzcG9uc2UiIGFuZCBub3cgdXNpbmcgcmVxdWVzdC5iZWZvcmVfc2VuZCkKKiBDb25maWd1cmF0aW9uIGxvYWRpbmcgbm93IGFsbG93cyByZW1vdGUgZmlsZXMKCiMjIDMuNC4xIC0gMjAxMy0wNC0xNgoKKiBMYXJnZSByZWZhY3RvcmluZyB0byBob3cgQ3VybE11bHRpIGhhbmRsZXMgd29yay4gVGhlcmUgaXMgbm93IGEgcHJveHkgdGhhdCBzaXRzIGluIGZyb250IG9mIGEgcG9vbCBvZiBDdXJsTXVsdGkKICBoYW5kbGVzLiBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24sIGZpeGVzIGEgY291cGxlIGJ1Z3MsIGFuZCBwcm92aWRlcyBhIHNtYWxsIHBlcmZvcm1hbmNlIGJvb3N0LgoqIEV4Y2VwdGlvbnMgYXJlIG5vdyBwcm9wZXJseSBncm91cGVkIHdoZW4gc2VuZGluZyByZXF1ZXN0cyBpbiBwYXJhbGxlbAoqIFJlZGlyZWN0cyBhcmUgbm93IHByb3Blcmx5IGFnZ3JlZ2F0ZWQgd2hlbiBhIG11bHRpIHRyYW5zYWN0aW9uIGZhaWxzCiogUmVkaXJlY3RzIG5vdyBzZXQgdGhlIHJlc3BvbnNlIG9uIHRoZSBvcmlnaW5hbCBvYmplY3QgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlCiogQnVnIGZpeDogTW9kZWwgbmFtZXMgYXJlIG5vdyBwcm9wZXJseSBzZXQgZXZlbiB3aGVuIHVzaW5nICRyZWZzCiogQWRkZWQgc3VwcG9ydCBmb3IgUEhQIDUuNSdzIEN1cmxGaWxlIHRvIHByZXZlbnQgd2FybmluZ3Mgd2l0aCB0aGUgZGVwcmVjYXRlZCBAIHN5bnRheAoqIEFkZGVkIHN1cHBvcnQgZm9yIG9hdXRoX2NhbGxiYWNrIGluIE9BdXRoIHNpZ25hdHVyZXMKKiBBZGRlZCBzdXBwb3J0IGZvciBvYXV0aF92ZXJpZmllciBpbiBPQXV0aCBzaWduYXR1cmVzCiogQWRkZWQgc3VwcG9ydCB0byBhdHRlbXB0IHRvIHJldHJpZXZlIGEgY29tbWFuZCBmaXJzdCBsaXRlcmFsbHksIHRoZW4gdWNmaXJzdCwgdGhlIHdpdGggaW5mbGVjdGlvbgoKIyMgMy40LjAgLSAyMDEzLTA0LTExCgoqIEJ1ZyBmaXg6IFVSTHMgYXJlIG5vdyByZXNvbHZlZCBjb3JyZWN0bHkgYmFzZWQgb24gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4gIzI4OQoqIEJ1ZyBmaXg6IEFic29sdXRlIFVSTHMgd2l0aCBhIHBhdGggaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpbGwgbm93IHByb3Blcmx5IG92ZXJyaWRlIHRoZSBiYXNlIFVSTC4gIzI4OQoqIEJ1ZyBmaXg6IFBhcnNpbmcgYSBxdWVyeSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBQSFAgYXJyYXkgdmFsdWUgd2lsbCBub3cgcmVzdWx0IGluIGFuIGFycmF5LiAjMjYzCiogQnVnIGZpeDogQmV0dGVyIG5vcm1hbGl6YXRpb24gb2YgdGhlIFVzZXItQWdlbnQgaGVhZGVyIHRvIHByZXZlbnQgZHVwbGljYXRlIGhlYWRlcnMuICMyNjQuCiogQnVnIGZpeDogQWRkZWQgYG51bWJlcmAgdHlwZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4KKiBCdWcgZml4OiBlbXB0eSBwYXJhbWV0ZXJzIGFyZSByZW1vdmVkIGZyb20gYW4gT0F1dGggc2lnbmF0dXJlCiogQnVnIGZpeDogUmV2YWxpZGF0aW5nIGEgY2FjaGUgZW50cnkgcHJlZmVycyB0aGUgTGFzdC1Nb2RpZmllZCBvdmVyIHRoZSBEYXRlIGhlYWRlcgoqIEJ1ZyBmaXg6IEZpeGVkICJhcnJheSB0byBzdHJpbmciIGVycm9yIHdoZW4gdmFsaWRhdGluZyBhIHVuaW9uIG9mIHR5cGVzIGluIGEgc2VydmljZSBkZXNjcmlwdGlvbgoqIEJ1ZyBmaXg6IFJlbW92ZWQgY29kZSB0aGF0IGF0dGVtcHRlZCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgYSBzdHJlYW0gd2hlbiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbQoqIEJ1ZyBmaXg6IE5vdCBpbmNsdWRpbmcgYW4gYG9hdXRoX3Rva2VuYCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBpbiB0aGUgT2F1dGhQbHVnaW4uCiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBhZ2dyZWdhdGluZyBzdWNjZXNzZnVsIHJlcXVlc3RzIGFuZCBmYWlsZWQgcmVxdWVzdHMgaW4gQ3VybE11bHRpIHdoZW4gYSByZWRpcmVjdCBvY2N1cnMuCiogVGhlIG5ldyBkZWZhdWx0IENVUkxPUFRfVElNRU9VVCBzZXR0aW5nIGhhcyBiZWVuIGluY3JlYXNlZCB0byAxNTAgc2Vjb25kcyBzbyB0aGF0IEd1enpsZSB3b3JrcyBvbiBwb29yIGNvbm5lY3Rpb25zLgoqIEFkZGVkIGEgZmVhdHVyZSB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0OjpzZXRCb2R5KCkgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBDb250ZW50LVR5cGUgb2YgdGhlIHJlcXVlc3QgaWYKICB0aGUgQ29udGVudC1UeXBlIGNhbiBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBlbnRpdHkgYm9keSBvciB0aGUgcGF0aCBvZiB0aGUgcmVxdWVzdC4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiBhIGNsaWVudCB3aGVuIGdyYWJiaW5nIGEgdGhyb3dhd2F5IGNsaWVudCBmcm9tIGEgYnVpbGRlci4KKiBBZGRlZCBzdXBwb3J0IGZvciBhIFBTUi0zIExvZ0FkYXB0ZXIuCiogQWRkZWQgYSBgY29tbWFuZC5hZnRlcl9wcmVwYXJlYCBldmVudAoqIEFkZGVkIGBvYXV0aF9jYWxsYmFja2AgcGFyYW1ldGVyIHRvIHRoZSBPYXV0aFBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIGN1c3RvbSBzdHJlYW0gY2xhc3Mgd2hlbiB1c2luZyBhIHN0cmVhbSBmYWN0b3J5CiogQWRkZWQgYSBDYWNoaW5nRW50aXR5Qm9keSBkZWNvcmF0b3IKKiBBZGRlZCBzdXBwb3J0IGZvciBgYWRkaXRpb25hbFBhcmFtZXRlcnNgIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHRvIGRlZmluZSBob3cgY3VzdG9tIHBhcmFtZXRlcnMgYXJlIHNlcmlhbGl6ZWQuCiogVGhlIGJ1bmRsZWQgU1NMIGNlcnRpZmljYXRlIGlzIG5vdyBwcm92aWRlZCBpbiB0aGUgcGhhciBmaWxlIGFuZCBleHRyYWN0ZWQgd2hlbiBydW5uaW5nIEd1enpsZSBmcm9tIGEgcGhhci4KKiBZb3UgY2FuIG5vdyBzZW5kIGFueSBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHdpdGggUE9TVCBmaWVsZHMgb3IgUE9TVCBmaWxlcyBhbmQgY1VSTCB3aWxsIGhhbmRsZSBjcmVhdGluZyBib2RpZXMKKiBQT1NUIHJlcXVlc3RzIHVzaW5nIGEgY3VzdG9tIGVudGl0eSBib2R5IGFyZSBub3cgdHJlYXRlZCBleGFjdGx5IGxpa2UgUFVUIHJlcXVlc3RzIGJ1dCB3aXRoIGEgY3VzdG9tIGNVUkwgbWV0aG9kLiBUaGlzCiAgbWVhbnMgdGhhdCB0aGUgcmVkaXJlY3QgYmVoYXZpb3Igb2YgUE9TVCByZXF1ZXN0cyB3aXRoIGN1c3RvbSBib2RpZXMgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgUE9TVCByZXF1ZXN0cyB0aGF0IHVzZQogIFBPU1QgZmllbGRzIG9yIGZpbGVzICh0aGUgbGF0dGVyIGlzIG9ubHkgdXNlZCB3aGVuIGVtdWxhdGluZyBhIGZvcm0gUE9TVCBpbiB0aGUgYnJvd3NlcikuCiogTG90cyBvZiBjbGVhbnVwIHRvIEN1cmxIYW5kbGU6OmZhY3RvcnkgYW5kIFJlcXVlc3RGYWN0b3J5OjpjcmVhdGVSZXF1ZXN0CgojIyAzLjMuMSAtIDIwMTMtMDMtMTAKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIFBIUCBzdHJlYW1pbmcgcmVzcG9uc2VzIGZyb20gSFRUUCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IFJ1bm5pbmcgYW55IGZpbHRlcnMgd2hlbiBwYXJzaW5nIHJlc3BvbnNlIGhlYWRlcnMgd2l0aCBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoqIEJ1ZyBmaXg6IE9hdXRoUGx1Z2luIGZpeGVzIHRvIGFsbG93IGZvciBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBzaWduaW5nLCBhbmQgc29ydGluZyBwYXJhbWV0ZXJzIGJlZm9yZSBzaWduaW5nCiogQnVnIGZpeDogUmVtb3ZlZCB0aGUgYWRkaW5nIG9mIGRlZmF1bHQgZW1wdHkgYXJyYXlzIGFuZCBmYWxzZSBCb29sZWFucyB0byByZXNwb25zZXMgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MKICByZXNwb25zZSBsb2NhdGlvbiB2aXNpdG9ycy4KKiBCdWcgZml4OiBSZW1vdmVkIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jaWVzCiogUmVxdWVzdEZhY3Rvcnk6OmNyZWF0ZSgpIG5vdyB1c2VzIHRoZSBrZXkgb2YgYSBQT1NUIGZpbGUgd2hlbiBzZXR0aW5nIHRoZSBQT1NUIGZpbGUgbmFtZQoqIEFkZGVkIHhtbEFsbG93RW1wdHkgdG8gc2VyaWFsaXplIGFuIFhNTCBib2R5IGV2ZW4gaWYgbm8gWE1MIHNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIHNldAoKIyMgMy4zLjAgLSAyMDEzLTAzLTAzCgoqIEEgbGFyZ2UgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIG1hZGUKKiBCdWcgZml4OiBBZGRlZCAnd2InIGFzIGEgdmFsaWQgd3JpdGUgbW9kZSBmb3Igc3RyZWFtcwoqIEJ1ZyBmaXg6IGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpqc29uKClgIG5vdyBhbGxvd3Mgc2NhbGFyIHZhbHVlcyB0byBiZSByZXR1cm5lZAoqIEJ1ZyBmaXg6IEZpeGVkIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXNwb25zZWAgd2hlcmUgd3JhcHBpbmcgcXVvdGVzIHdlcmUgc3RyaXBwZWQgZnJvbSBgZ2V0RXRhZygpYAoqIEJDOiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3MKKiBCQzogU2V0dGluZyBhIHNlcnZpY2UgZGVzY3JpcHRpb24gb24gYSBjbGllbnQgd2lsbCBubyBsb25nZXIgbW9kaWZ5IHRoZSBjbGllbnQncyBjb21tYW5kIGZhY3Rvcmllcy4KKiBCQzogRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nCiAgdGhlICdlbWl0X2lvJyBrZXkuIFRoaXMgd2FzIHByZXZpb3VzbHkgc2V0IHVuZGVyIGEgcmVxdWVzdCdzIHBhcmFtZXRlcnMgdXNpbmcgJ2N1cmwuZW1pdF9pbycKKiBCQzogYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0ZWFtVHlwZSgpYCBhcmUgbm8gbG9uZ2VyIGNvbnZlcnRlZCB0bwogIGxvd2VyY2FzZQoqIE9wZXJhdGlvbiBwYXJhbWV0ZXIgb2JqZWN0cyBhcmUgbm93IGxhenkgbG9hZGVkIGludGVybmFsbHkKKiBBZGRlZCBFcnJvclJlc3BvbnNlUGx1Z2luIHRoYXQgY2FuIHRocm93IGVycm9ycyBmb3IgcmVzcG9uc2VzIGRlZmluZWQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb25zJyBlcnJvclJlc3BvbnNlcwoqIEFkZGVkIHN1cHBvcnQgZm9yIGluc3RhbnRpYXRpbmcgcmVzcG9uc2VUeXBlPWNsYXNzIHJlc3BvbnNlQ2xhc3MgY2xhc3Nlcy4gQ2xhc3NlcyBtdXN0IGltcGxlbWVudAogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXFJlc3BvbnNlQ2xhc3NJbnRlcmZhY2VgCiogQWRkZWQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbFByb3BlcnRpZXMgZm9yIHRvcC1sZXZlbCBwYXJhbWV0ZXJzIGluIHJlc3BvbnNlVHlwZT1tb2RlbCByZXNwb25zZUNsYXNzZXMuIFRoZXNlCiAgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFsc28gc3VwcG9ydCBsb2NhdGlvbnMgYW5kIGNhbiBiZSB1c2VkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VzIHdoZXJlIHRoZSBvdXRlcm1vc3QgcGFydCBvZiB0aGUKICBKU09OIGlzIGFuIGFycmF5CiogQWRkZWQgc3VwcG9ydCBmb3IgbmVzdGVkIHJlbmFtaW5nIG9mIEpTT04gbW9kZWxzIChyZW5hbWUgc2VudEFzIHRvIG5hbWUpCiogQ2FjaGVQbHVnaW4KICAgICogQWRkZWQgc3VwcG9ydCBmb3Igc3RhbGUtaWYtZXJyb3Igc28gdGhhdCB0aGUgQ2FjaGVQbHVnaW4gY2FuIG5vdyBzZXJ2ZSBzdGFsZSBjb250ZW50IGZyb20gdGhlIGNhY2hlIG9uIGVycm9yCiAgICAqIERlYnVnIGhlYWRlcnMgY2FuIG5vdyBhZGRlZCB0byBjYWNoZWQgcmVzcG9uc2UgaW4gdGhlIENhY2hlUGx1Z2luCgojIyAzLjIuMCAtIDIwMTMtMDItMTQKCiogQ3VybE11bHRpIGlzIG5vIGxvbmdlciByZXVzZWQgZ2xvYmFsbHkuIEEgbmV3IG11bHRpIG9iamVjdCBpcyBjcmVhdGVkIHBlci1jbGllbnQuIFRoaXMgaGVscHMgdG8gaXNvbGF0ZSBjbGllbnRzLgoqIFVSTHMgd2l0aCBubyBwYXRoIG5vIGxvbmdlciBjb250YWluIGEgIi8iIGJ5IGRlZmF1bHQKKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBkb2VzIG5vIGxvbmdlciBtYW5hZ2VzIHRoZSBsZWFkaW5nICI/Ii4gVGhpcyBpcyBub3cgaGFuZGxlZCBpbiBHdXp6bGVcSHR0cFxVcmwuCiogQmFkUmVzcG9uc2VFeGNlcHRpb24gbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBmdWxsIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKKiBBZGRpbmcgc2V0RGF0YSgpIHRvIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGluZyBnZXRSZXNwb25zZUJvZHkoKSB0byBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKKiBWYXJpb3VzIHVwZGF0ZXMgdG8gY2xhc3NlcyB0byB1c2UgU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlIHR5cGUgaGludHMgcmF0aGVyIHRoYW4gU2VydmljZURlc2NyaXB0aW9uCiogSGVhZGVyIHZhbHVlcyBjYW4gbm93IGJlIG5vcm1hbGl6ZWQgaW50byBkaXN0aW5jdCB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBoZWFkZXJzIGFyZSBjb21iaW5lZCB3aXRoIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QKKiB4bWxFbmNvZGluZyBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgZm9yIHRoZSBYTUwgZGVjbGFyYXRpb24gb2YgYSBYTUwgc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb24KKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBub3cgdXNlcyBHdXp6bGVcSHR0cFxRdWVyeUFnZ3JlZ2F0b3JcUXVlcnlBZ2dyZWdhdG9ySW50ZXJmYWNlIG9iamVjdHMgdG8gYWRkIGN1c3RvbSB2YWx1ZQogIGFnZ3JlZ2F0aW9uIGFuZCBubyBsb25nZXIgdXNlcyBjYWxsYmFja3MKKiBUaGUgVVJMIGVuY29kaW5nIGltcGxlbWVudGF0aW9uIG9mIEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nIGNhbiBub3cgYmUgY3VzdG9taXplZAoqIEJ1ZyBmaXg6IEZpbHRlcnMgd2VyZSBub3QgYWx3YXlzIGludm9rZWQgZm9yIGFycmF5IHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyYW1ldGVycwoqIEJ1ZyBmaXg6IFJlZGlyZWN0cyBub3cgdXNlIGEgdGFyZ2V0IHJlc3BvbnNlIGJvZHkgcmF0aGVyIHRoYW4gYSB0ZW1wb3JhcnkgcmVzcG9uc2UgYm9keQoqIEJ1ZyBmaXg6IFRoZSBkZWZhdWx0IGV4cG9uZW50aWFsIGJhY2tvZmYgQmFja29mZlBsdWdpbiB3YXMgbm90IGdpdmluZyB3aGVuIHRoZSByZXF1ZXN0IHRocmVzaG9sZCB3YXMgZXhjZWVkZWQKKiBCdWcgZml4OiBHdXp6bGUgbm93IHRha2VzIHRoZSBmaXJzdCBmb3VuZCB2YWx1ZSB3aGVuIGdyYWJiaW5nIENhY2hlLUNvbnRyb2wgZGlyZWN0aXZlcwoKIyMgMy4xLjIgLSAyMDEzLTAxLTI3CgoqIFJlZmFjdG9yZWQgaG93IG9wZXJhdGlvbiByZXNwb25zZXMgYXJlIHBhcnNlZC4gVmlzaXRvcnMgbm93IGluY2x1ZGUgYSBiZWZvcmUoKSBtZXRob2QgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCiAgcmVzcG9uc2UgYm9keS4gRm9yIGV4YW1wbGUsIHRoZSBYbWxWaXNpdG9yIG5vdyBwYXJzZXMgdGhlIFhNTCByZXNwb25zZSBpbnRvIGFuIGFycmF5IGluIHRoZSBiZWZvcmUoKSBtZXRob2QuCiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgY1VSTCB3b3VsZCBub3QgYXV0b21hdGljYWxseSBkZWNvbXByZXNzIHJlc3BvbnNlcyB3aGVuIHRoZSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIHdhcyBzZW50CiogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBpcyBuZXZlciBzZXQgdG8gMSBiZWNhdXNlIGl0IGlzIGRlcHJlY2F0ZWQgKHNlZSA1ZTBmZjJlZjIwZjgzOWUxOWQxZWViMjk4ZjkwYmEzNTk4Nzg0NDQ0KQoqIEZpeGVkIGEgYnVnIHdoZXJlIHJlZGlyZWN0IHJlc3BvbnNlcyB3ZXJlIG5vdCBjaGFpbmVkIGNvcnJlY3RseSB1c2luZyBnZXRQcmV2aW91c1Jlc3BvbnNlKCkKKiBTZXR0aW5nIGRlZmF1bHQgaGVhZGVycyBvbiBhIGNsaWVudCBhZnRlciBzZXR0aW5nIHRoZSB1c2VyLWFnZW50IHdpbGwgbm90IGVyYXNlIHRoZSB1c2VyLWFnZW50IHNldHRpbmcKCiMjIDMuMS4xIC0gMjAxMy0wMS0yMAoKKiBBZGRpbmcgd2lsZGNhcmQgc3VwcG9ydCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmdldFBhdGgoKQoqIEFkZGluZyBhbGlhcyBzdXBwb3J0IHRvIFNlcnZpY2VCdWlsZGVyIGNvbmZpZ3MKKiBBZGRpbmcgR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcQ29tcG9zaXRlUmVzb3VyY2VJdGVyYXRvckZhY3RvcnkgYW5kIGNsZWFuaW5nIHVwIGZhY3RvcnkgaW50ZXJmYWNlCgojIyAzLjEuMCAtIDIwMTMtMDEtMTIKCiogQkM6IEN1cmxFeGNlcHRpb24gbm93IGV4dGVuZHMgZnJvbSBSZXF1ZXN0RXhjZXB0aW9uIHJhdGhlciB0aGFuIEJhZFJlc3BvbnNlRXhjZXB0aW9uCiogQkM6IFJlbmFtZWQgR3V6emxlXFBsdWdpblxDYWNoZVxDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlOjpjYW5DYWNoZSgpIHRvIGNhbkNhY2hlUmVxdWVzdCgpIGFuZCBhZGRlZCBDYW5DYWNoZVJlc3BvbnNlKCkKKiBBZGRlZCBnZXREYXRhIHRvIFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGVkIGNvbnRleHQgYXJyYXkgdG8gUmVxdWVzdEludGVyZmFjZTo6c2V0U3RhdGUoKQoqIEJ1ZzogUmVtb3ZpbmcgaGFyZCBkZXBlbmRlbmN5IG9uIHRoZSBCYWNrb2ZmUGx1Z2luIGZyb20gR3V6emxlXEh0dHAKKiBCdWc6IEFkZGluZyByZXF1aXJlZCBjb250ZW50LXR5cGUgd2hlbiBKU09OIHJlcXVlc3QgdmlzaXRvciBhZGRzIEpTT04gdG8gYSBjb21tYW5kCiogQnVnOiBGaXhpbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpdGggY3VzdG9tIGRhdGEKKiBNYWRlIGl0IGVhc2llciB0byBkZWFsIHdpdGggZXhjZXB0aW9ucyB0aHJvd24gd2hlbiB0cmFuc2ZlcnJpbmcgY29tbWFuZHMgb3IgcmVxdWVzdHMgaW4gcGFyYWxsZWwgYnkgcHJvdmlkaW5nCiAgYW4gYXJyYXkgb2Ygc3VjY2Vzc2Z1bCBhbmQgZmFpbGVkIHJlc3BvbnNlcwoqIE1vdmVkIGdldFBhdGggZnJvbSBHdXp6bGVcU2VydmljZVxSZXNvdXJjZVxNb2RlbCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24KKiBBZGRlZCBHdXp6bGVcSHR0cFxJb0VtaXR0aW5nRW50aXR5Qm9keQoqIE1vdmVkIGNvbW1hbmQgZmlsdHJhdGlvbiBmcm9tIHZhbGlkYXRvcnMgdG8gbG9jYXRpb24gdmlzaXRvcnMKKiBBZGRlZCBgZXh0ZW5kc2AgYXR0cmlidXRlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIHBhcmFtZXRlcnMKKiBBZGRlZCBnZXRNb2RlbHMgdG8gU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlCgojIyAzLjAuNyAtIDIwMTItMTItMTkKCiogRml4aW5nIHBoYXIgZGV0ZWN0aW9uIHdoZW4gZm9yY2luZyBhIGNhY2VydCB0byBzeXN0ZW0gaWYgbnVsbCBvciB0cnVlCiogQWxsb3dpbmcgZmlsZW5hbWUgdG8gYmUgcGFzc2VkIHRvIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldFJlc3BvbnNlQm9keSgpYAoqIENsZWFuaW5nIHVwIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdGAgbWV0aG9kCiogQWRkaW5nIGEgcmVzcG9uc2VfYm9keSBsb2NhdGlvbiB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoKIyMgMy4wLjYgLSAyMDEyLTEyLTA5CgoqIEN1cmxNdWx0aSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBZGRpbmcgc2V0RXJyb3JSZXNwb25zZXMoKSB0byBPcGVyYXRpb24KKiBjb21wb3Nlci5qc29uIHR3ZWFrcwoKIyMgMy4wLjUgLSAyMDEyLTExLTE4CgoqIEJ1ZzogRml4aW5nIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgY2F1c2VkIGZyb20gcmV2YWxpZGF0aW5nIHdpdGggdGhlIENhY2hlUGx1Z2luCiogQnVnOiBSZXNwb25zZSBib2R5IGNhbiBub3cgYmUgYSBzdHJpbmcgY29udGFpbmluZyAiMCIKKiBCdWc6IFVzaW5nIEd1enpsZSBpbnNpZGUgb2YgYSBwaGFyIHVzZXMgc3lzdGVtIGJ5IGRlZmF1bHQgYnV0IG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIGNhY2VydAoqIEJ1ZzogUXVlcnlTdHJpbmc6OmZyb21TdHJpbmcgbm93IHByb3Blcmx5IHBhcnNlcyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0aGF0IGNvbnRhaW4gZXF1YWwgc2lnbnMKKiBBZGRlZCBzdXBwb3J0IGZvciBYTUwgYXR0cmlidXRlcyBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJlc3BvbnNlcwoqIERlZmF1bHRSZXF1ZXN0U2VyaWFsaXplciBub3cgc3VwcG9ydHMgYXJyYXkgVVJJIHBhcmFtZXRlciB2YWx1ZXMgZm9yIFVSSSB0ZW1wbGF0ZSBleHBhbnNpb24KKiBBZGRlZCBiZXR0ZXIgbWltZXR5cGUgZ3Vlc3NpbmcgdG8gcmVxdWVzdHMgYW5kIHBvc3QgZmlsZXMKCiMjIDMuMC40IC0gMjAxMi0xMS0xMQoKKiBCdWc6IEZpeGVkIGEgYnVnIHdoZW4gYWRkaW5nIG11bHRpcGxlIGNvb2tpZXMgdG8gYSByZXF1ZXN0IHRvIHVzZSB0aGUgY29ycmVjdCBnbHVlIHZhbHVlCiogQnVnOiBDb29raWVzIGNhbiBub3cgYmUgYWRkZWQgdGhhdCBoYXZlIGEgbmFtZSwgZG9tYWluLCBvciB2YWx1ZSBzZXQgdG8gIjAiCiogQnVnOiBVc2luZyB0aGUgc3lzdGVtIGNhY2VydCBidW5kbGUgd2hlbiB1c2luZyB0aGUgUGhhcgoqIEFkZGVkIGpzb24gYW5kIHhtbCBtZXRob2RzIHRvIFJlc3BvbnNlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHBhcnNlIEpTT04gYW5kIFhNTCByZXNwb25zZSBkYXRhIGludG8gZGF0YSBzdHJ1Y3R1cmVzCiogRW5oYW5jZWQgY29va2llIGphciBkZS1kdXBsaWNhdGlvbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGVuYWJsZSBzdHJpY3QgY29va2llIGphcnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIHdoZW4gaW52YWxpZCBjb29raWVzIGFyZSBhZGRlZAoqIEFkZGVkIHNldFN0cmVhbSB0byBTdHJlYW1JbnRlcmZhY2UgdG8gYWN0dWFsbHkgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgY3VzdG9tIHJld2luZCBiZWhhdmlvciBmb3IgZW50aXR5IGJvZGllcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhbnkgc29ydCBvZiBoYXNoIGZvciBhIHN0cmVhbSByYXRoZXIgdGhhbiBqdXN0IGFuIE1ENSBoYXNoCgojIyAzLjAuMyAtIDIwMTItMTEtMDQKCiogSW1wbGVtZW50aW5nIHJlZGlyZWN0cyBpbiBQSFAgcmF0aGVyIHRoYW4gY1VSTAoqIEFkZGVkIFBFQ0wgVVJJIHRlbXBsYXRlIGV4dGVuc2lvbiBhbmQgdXNpbmcgYXMgZGVmYXVsdCBwYXJzZXIgaWYgYXZhaWxhYmxlCiogQnVnOiBGaXhlZCBDb250ZW50LUxlbmd0aCBwYXJzaW5nIG9mIFJlc3BvbnNlIGZhY3RvcnkKKiBBZGRpbmcgcmV3aW5kKCkgbWV0aG9kIHRvIGVudGl0eSBib2RpZXMgYW5kIHN0cmVhbXMuIEFsbG93cyBmb3IgY3VzdG9tIHJld2luZGluZyBvZiBub24tcmVwZWF0YWJsZSBzdHJlYW1zLgoqIEFkZGluZyBUb0FycmF5SW50ZXJmYWNlIHRocm91Z2hvdXQgbGlicmFyeQoqIEZpeGluZyBPYXV0aFBsdWdpbiB0byBjcmVhdGUgdW5pcXVlIG5vbmNlIHZhbHVlcyBwZXIgcmVxdWVzdAoKIyMgMy4wLjIgLSAyMDEyLTEwLTI1CgoqIE1hZ2ljIG1ldGhvZHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBjbGllbnRzCiogTWFnaWMgbWV0aG9kcyByZXR1cm4gdGhlIHJlc3VsdCBvZiBhIGNvbW1hbmQKKiBTZXJ2aWNlIGNsaWVudHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBiYXNlX3VybCBvcHRpb24gaW4gdGhlIGZhY3RvcnkKKiBCdWc6IEZpeGVkIGFuIGlzc3VlIHdpdGggVVJJIHRlbXBsYXRlcyB3aGVyZSBudWxsIHRlbXBsYXRlIHZhcmlhYmxlcyB3ZXJlIGJlaW5nIGV4cGFuZGVkCgojIyAzLjAuMSAtIDIwMTItMTAtMjIKCiogTW9kZWxzIGNhbiBub3cgYmUgdXNlZCBsaWtlIHJlZ3VsYXIgY29sbGVjdGlvbiBvYmplY3RzIGJ5IGNhbGxpbmcgZmlsdGVyLCBtYXAsIGV0Yy4KKiBNb2RlbHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBQYXJhbWV0ZXIgc3RydWN0dXJlIG9yIGluaXRpYWwgZGF0YSBpbiB0aGUgY29uc3RydWN0b3IKKiBBZGRlZCBhIGN1c3RvbSBBcHBlbmRJdGVyYXRvciB0byBnZXQgYXJvdW5kIGEgUEhQIGJ1ZyB3aXRoIHRoZSBgXEFwcGVuZEl0ZXJhdG9yYAoKIyMgMy4wLjAgLSAyMDEyLTEwLTE1CgoqIFJld3JvdGUgc2VydmljZSBkZXNjcmlwdGlvbiBmb3JtYXQgdG8gYmUgYmFzZWQgb24gU3dhZ2dlcgogICAgKiBOb3cgYmFzZWQgb24gSlNPTiBzY2hlbWEKICAgICogQWRkZWQgbmVzdGVkIGlucHV0IHN0cnVjdHVyZXMgYW5kIG5lc3RlZCByZXNwb25zZSBtb2RlbHMKICAgICogU3VwcG9ydCBmb3IgSlNPTiBhbmQgWE1MIGlucHV0IGFuZCBvdXRwdXQgbW9kZWxzCiAgICAqIFJlbmFtZWQgYGNvbW1hbmRzYCB0byBgb3BlcmF0aW9uc2AKICAgICogUmVtb3ZlZCBkb3QgY2xhc3Mgbm90YXRpb24KICAgICogUmVtb3ZlZCBjdXN0b20gdHlwZXMKKiBCcm9rZSB0aGUgcHJvamVjdCBpbnRvIHNtYWxsZXIgdG9wLWxldmVsIG5hbWVzcGFjZXMgdG8gYmUgbW9yZSBjb21wb25lbnQgZnJpZW5kbHkKKiBSZW1vdmVkIHN1cHBvcnQgZm9yIFhNTCBjb25maWdzIGFuZCBkZXNjcmlwdGlvbnMuIFVzZSBhcnJheXMgb3IgSlNPTiBmaWxlcy4KKiBSZW1vdmVkIHRoZSBWYWxpZGF0aW9uIGNvbXBvbmVudCBhbmQgSW5zcGVjdG9yCiogTW92ZWQgYWxsIGNvb2tpZSBjb2RlIHRvIEd1enpsZVxQbHVnaW5cQ29va2llCiogTWFnaWMgbWV0aG9kcyBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudCBub3cgcmV0dXJuIHRoZSBjb21tYW5kIHVuLWV4ZWN1dGVkLgoqIENhbGxpbmcgZ2V0UmVzdWx0KCkgb3IgZ2V0UmVzcG9uc2UoKSBvbiBhIGNvbW1hbmQgd2lsbCBsYXppbHkgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiBuZWVkZWQuCiogTm93IHNoaXBwaW5nIHdpdGggY1VSTCdzIENBIGNlcnRzIGFuZCB1c2luZyBpdCBieSBkZWZhdWx0CiogQWRkZWQgcHJldmlvdXNSZXNwb25zZSgpIG1ldGhvZCB0byByZXNwb25zZSBvYmplY3RzCiogTm8gbG9uZ2VyIHNlbmRpbmcgQWNjZXB0IGFuZCBBY2NlcHQtRW5jb2RpbmcgaGVhZGVycyBvbiBldmVyeSByZXF1ZXN0CiogT25seSBzZW5kaW5nIGFuIEV4cGVjdCBoZWFkZXIgYnkgZGVmYXVsdCB3aGVuIGEgcGF5bG9hZCBpcyBncmVhdGVyIHRoYW4gMU1CCiogQWRkZWQvbW92ZWQgY2xpZW50IG9wdGlvbnM6CiAgICAqIGN1cmwuYmxhY2tsaXN0IHRvIGN1cmwub3B0aW9uLmJsYWNrbGlzdAogICAgKiBBZGRlZCBzc2wuY2VydGlmaWNhdGVfYXV0aG9yaXR5CiogQWRkZWQgYSBHdXp6bGVcSXRlcmF0b3IgY29tcG9uZW50CiogTW92ZWQgcGx1Z2lucyBmcm9tIEd1enpsZVxIdHRwXFBsdWdpbiB0byBHdXp6bGVcUGx1Z2luCiogQWRkZWQgYSBtb3JlIHJvYnVzdCBiYWNrb2ZmIHJldHJ5IHN0cmF0ZWd5IChyZXBsYWNlZCB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luKQoqIEFkZGVkIGEgbW9yZSByb2J1c3QgY2FjaGluZyBwbHVnaW4KKiBBZGRlZCBzZXRCb2R5IHRvIHJlc3BvbnNlIG9iamVjdHMKKiBVcGRhdGluZyBMb2dQbHVnaW4gdG8gdXNlIGEgbW9yZSBmbGV4aWJsZSBNZXNzYWdlRm9ybWF0dGVyCiogQWRkZWQgYSBjb21wbGV0ZWx5IHJldmFtcGVkIGJ1aWxkIHByb2Nlc3MKKiBDbGVhbmluZyB1cCBDb2xsZWN0aW9uIGNsYXNzIGFuZCByZW1vdmluZyBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBnZXQgbWV0aG9kCiogRml4ZWQgWkYyIGNhY2hlIGFkYXB0ZXJzCgojIyAyLjguOCAtIDIwMTItMTAtMTUKCiogQnVnOiBGaXhlZCBhIGNvb2tpZSBpc3N1ZSB0aGF0IGNhdXNlZCBkb3QgcHJlZml4ZWQgZG9tYWlucyB0byBub3QgbWF0Y2ggd2hlcmUgcG9wdWxhciBicm93c2VycyBkaWQKCiMjIDIuOC43IC0gMjAxMi0wOS0zMAoKKiBCdWc6IEZpeGVkIGNvbmZpZyBmaWxlIGFsaWFzZXMgZm9yIEpTT04gaW5jbHVkZXMKKiBCdWc6IEZpeGVkIGNvb2tpZSBidWcgb24gYSByZXF1ZXN0IG9iamVjdCBieSB1c2luZyBDb29raWVQYXJzZXIgdG8gcGFyc2UgY29va2llcyBvbiByZXF1ZXN0cwoqIEJ1ZzogUmVtb3ZpbmcgdGhlIHBhdGggdG8gYSBmaWxlIHdoZW4gc2VuZGluZyBhIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIG9uIGEgUE9TVCB1cGxvYWQKKiBCdWc6IEhhcmRlbmluZyByZXF1ZXN0IGFuZCByZXNwb25zZSBwYXJzaW5nIHRvIGFjY291bnQgZm9yIG1pc3NpbmcgcGFydHMKKiBCdWc6IEZpeGVkIFBFQVIgcGFja2FnaW5nCiogQnVnOiBGaXhlZCBSZXF1ZXN0OjpnZXRJbmZvCiogQnVnOiBGaXhlZCBjYXNlcyB3aGVyZSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gcmV0dXJuIGNvZGVzIHdlcmUgY2F1c2luZyBjdXJsIHRyYW5zYWN0aW9ucyB0byBmYWlsCiogQWRkaW5nIHRoZSBhYmlsaXR5IGZvciB0aGUgbmFtZXNwYWNlIEl0ZXJhdG9yIGZhY3RvcnkgdG8gbG9vayBpbiBtdWx0aXBsZSBkaXJlY3RvcmllcwoqIEFkZGVkIG1vcmUgZ2V0dGVycy9zZXR0ZXJzL3JlbW92ZXJzIGZyb20gc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZW1vdmUgUE9TVCBmaWVsZHMgZnJvbSBPQXV0aCBzaWduYXR1cmVzCiogT0F1dGggcGx1Z2luIG5vdyBzdXBwb3J0cyAyLWxlZ2dlZCBPQXV0aAoKIyMgMi44LjYgLSAyMDEyLTA5LTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBhbmQgYnVpbGQgc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgdXNlIG9mIHZpc2l0b3JzIHRvIGFwcGx5IHBhcmFtZXRlcnMgdG8gbG9jYXRpb25zIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIHRoZSBkeW5hbWljIGNvbW1hbmQKKiBBZGRlZCBhIGBqc29uYCBwYXJhbWV0ZXIgbG9jYXRpb24KKiBOb3cgYWxsb3dpbmcgZG90IG5vdGF0aW9uIGZvciBjbGFzc2VzIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogVXNpbmcgdGhlIHVuaW9uIG9mIHR3byBhcnJheXMgcmF0aGVyIHRoYW4gYW4gYXJyYXlfbWVyZ2Ugd2hlbiBleHRlbmRpbmcgc2VydmljZSBidWlsZGVyIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHBhcmFtcwoqIEVuc3VyaW5nIHRoYXQgYSBzZXJ2aWNlIGlzIGEgc3RyaW5nIGJlZm9yZSBkb2luZyBzdHJwb3MoKSBjaGVja3Mgb24gaXQgd2hlbiBzdWJzdGl0dXRpbmcgc2VydmljZXMgZm9yIHJlZmVyZW5jZXMKICBpbiBzZXJ2aWNlIGJ1aWxkZXIgY29uZmlnIGZpbGVzLgoqIFNlcnZpY2VzIGRlZmluZWQgaW4gdHdvIGRpZmZlcmVudCBjb25maWcgZmlsZXMgdGhhdCBpbmNsdWRlIG9uZSBhbm90aGVyIHdpbGwgYnkgZGVmYXVsdCByZXBsYWNlIHRoZSBwcmV2aW91c2x5CiAgZGVmaW5lZCBzZXJ2aWNlLCBidXQgeW91IGNhbiBub3cgY3JlYXRlIHNlcnZpY2VzIHRoYXQgZXh0ZW5kIHRoZW1zZWx2ZXMgYW5kIG1lcmdlIHRoZWlyIHNldHRpbmdzIG92ZXIgdGhlIHByZXZpb3VzCiogVGhlIEpzb25Mb2FkZXIgbm93IHN1cHBvcnRzIGFsaWFzaW5nIGZpbGVuYW1lcyB3aXRoIGRpZmZlcmVudCBmaWxlbmFtZXMuIFRoaXMgYWxsb3dzIHlvdSB0byBhbGlhcyBzb21ldGhpbmcgbGlrZQogICdfZGVmYXVsdCcgd2l0aCBhIGRlZmF1bHQgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCgojIyAyLjguNSAtIDIwMTItMDgtMjkKCiogQnVnOiBTdXBwcmVzc2VkIGVtcHR5IGFycmF5cyBmcm9tIFVSSSB0ZW1wbGF0ZXMKKiBCdWc6IEFkZGVkIHRoZSBtaXNzaW5nICRvcHRpb25zIGFyZ3VtZW50IGZyb20gU2VydmljZURlc2NyaXB0aW9uOjpmYWN0b3J5IHRvIGVuYWJsZSBjYWNoaW5nCiogQWRkZWQgc3VwcG9ydCBmb3IgSFRUUCByZXNwb25zZXMgdGhhdCBkbyBub3QgY29udGFpbiBhIHJlYXNvbiBwaHJhc2UgaW4gdGhlIHN0YXJ0LWxpbmUKKiBBYnN0cmFjdENvbW1hbmQgY29tbWFuZHMgYXJlIG5vdyBpbnZva2FibGUKKiBBZGRlZCBhIHdheSB0byBnZXQgdGhlIGRhdGEgdXNlZCB3aGVuIHNpZ25pbmcgYW4gT2F1dGggcmVxdWVzdCBiZWZvcmUgYSByZXF1ZXN0IGlzIHNlbnQKCiMjIDIuOC40IC0gMjAxMi0wOC0xNQoKKiBCdWc6IEN1c3RvbSBkZWxheSB0aW1lIGNhbGN1bGF0aW9ucyBhcmUgbm8gbG9uZ2VyIGlnbm9yZWQgaW4gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHRyYW5zZmVyIGVudGl0eSBib2RpZXMgYXMgYSBzdHJpbmcgcmF0aGVyIHRoYW4gc3RyZWFtZWQuIFRoaXMgZ2V0cyBhcm91bmQgY3VybCBlcnJvciA2NS4gU2V0IGBib2R5X2FzX3N0cmluZ2AgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHRvIGVuYWJsZS4KKiBBZGRlZCBhIFN0cmVhbUludGVyZmFjZSwgRW50aXR5Qm9keUludGVyZmFjZSwgYW5kIGFkZGVkIGZ0ZWxsKCkgdG8gR3V6emxlXENvbW1vblxTdHJlYW0KKiBBZGRlZCBhbiBBYnN0cmFjdEVudGl0eUJvZHlEZWNvcmF0b3IgYW5kIGEgUmVhZExpbWl0RW50aXR5Qm9keSBkZWNvcmF0b3IgdG8gdHJhbnNmZXIgb25seSBhIHN1YnNldCBvZiBhIGRlY29yYXRlZCBzdHJlYW0KKiBTdHJlYW0gYW5kIEVudGl0eUJvZHkgb2JqZWN0cyB3aWxsIG5vdyByZXR1cm4gdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIHBvc2l0aW9uIGFmdGVyIGEgcmVhZCByZXF1aXJlZCBvcGVyYXRpb24gKGUuZy4gZ2V0Q29udGVudE1kNSgpKQoqIEFkZGVkIGFkZGl0aW9uYWwgcmVzcG9uc2Ugc3RhdHVzIGNvZGVzCiogUmVtb3ZlZCBTU0wgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IGhlYWRlcgoqIERFTEVURSByZXF1ZXN0cyBjYW4gbm93IHNlbmQgYW4gZW50aXR5IGJvZHkKKiBBZGRlZCBhbiBFdmVudERpc3BhdGNoZXIgdG8gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiBhbmQgYWRkZWQgYW4gRXhwb25lbnRpYWxCYWNrb2ZmTG9nZ2VyIHRvIGxvZyBiYWNrb2ZmIHJldHJpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSBvZiB0aGUgTW9ja1BsdWdpbiB0byBjb25zdW1lIG1vY2tlZCByZXF1ZXN0IGJvZGllcwoqIExvZ1BsdWdpbiBub3cgZXhwb3NlcyByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIGluIHRoZSBleHRyYXMgYXJyYXkKCiMjIDIuOC4zIC0gMjAxMi0wNy0zMAoKKiBCdWc6IEZpeGVkIGEgY2FzZSB3aGVyZSBlbXB0eSBQT1NUIHJlcXVlc3RzIHdlcmUgc2VudCBhcyBHRVQgcmVxdWVzdHMKKiBCdWc6IEZpeGVkIGEgYnVnIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0aGF0IGNhdXNlZCBmYXRhbCBlcnJvcnMgd2hlbiByZXRyeWluZyBhbiBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHRoYXQgZG9lcyBub3QgaGF2ZSBhIGJvZHkKKiBCdWc6IFNldHRpbmcgdGhlIHJlc3BvbnNlIGJvZHkgb2YgYSByZXF1ZXN0IHRvIG51bGwgYWZ0ZXIgY29tcGxldGluZyBhIHJlcXVlc3QsIG5vdCB3aGVuIHNldHRpbmcgdGhlIHN0YXRlIG9mIGEgcmVxdWVzdCB0byBuZXcKKiBBZGRlZCBtdWx0aXBsZSBpbmhlcml0YW5jZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvbW1hbmRzCiogQWRkZWQgYW4gQXBpQ29tbWFuZEludGVyZmFjZSBhbmQgYWRkZWQgYGdldFBhcmFtTmFtZXMoKWAgYW5kIGBoYXNQYXJhbSgpYAoqIFJlbW92ZWQgdGhlIGRlZmF1bHQgMm1iIHNpemUgY3V0b2ZmIGZyb20gdGhlIE1kNVZhbGlkYXRvclBsdWdpbiBzbyB0aGF0IGl0IG5vdyBkZWZhdWx0cyB0byB2YWxpZGF0aW5nIGV2ZXJ5dGhpbmcKKiBDaGFuZ2VkIEN1cmxNdWx0aTo6cGVyZm9ybSB0byBwYXNzIGEgc21hbGxlciB0aW1lb3V0IHRvIEN1cmxNdWx0aTo6ZXhlY3V0ZUhhbmRsZXMKCiMjIDIuOC4yIC0gMjAxMi0wNy0yNAoKKiBCdWc6IFF1ZXJ5IHN0cmluZyB2YWx1ZXMgc2V0IHRvIDAgYXJlIG5vIGxvbmdlciBkcm9wcGVkIGZyb20gdGhlIHF1ZXJ5IHN0cmluZwoqIEJ1ZzogQSBDb2xsZWN0aW9uIG9iamVjdCBpcyBubyBsb25nZXIgY3JlYXRlZCBlYWNoIHRpbWUgYSBjYWxsIGlzIG1hZGUgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kOjpnZXRSZXF1ZXN0SGVhZGVycygpYAoqIEJ1ZzogYCtgIGlzIG5vdyB0cmVhdGVkIGFzIGFuIGVuY29kZWQgc3BhY2Ugd2hlbiBwYXJzaW5nIHF1ZXJ5IHN0cmluZ3MKKiBRdWVyeVN0cmluZyBhbmQgQ29sbGVjdGlvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBbGxvd2luZyBkb3Qgbm90YXRpb24gZm9yIGNsYXNzIHBhdGhzIGluIGZpbHRlcnMgYXR0cmlidXRlIG9mIGEgc2VydmljZSBkZXNjcmlwdGlvbnMKCiMjIDIuOC4xIC0gMjAxMi0wNy0xNgoKKiBMb29zZW5pbmcgRXZlbnQgRGlzcGF0Y2hlciBkZXBlbmRlbmN5CiogUE9TVCByZWRpcmVjdHMgY2FuIG5vdyBiZSBjdXN0b21pemVkIHVzaW5nIENVUkxPUFRfUE9TVFJFRElSCgojIyAyLjguMCAtIDIwMTItMDctMTUKCiogQkM6IEd1enpsZVxIdHRwXFF1ZXJ5CiAgICAqIFF1ZXJ5IHN0cmluZ3Mgd2l0aCBlbXB0eSB2YXJpYWJsZXMgd2lsbCBhbHdheXMgc2hvdyBhbiBlcXVhbCBzaWduIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIFF1ZXJ5U3RyaW5nOjpCTEFOSyAoZS5nLiA/YWNsPSB2cyA/YWNsKQogICAgKiBDaGFuZ2VkIGlzRW5jb2RpbmdWYWx1ZXMoKSBhbmQgaXNFbmNvZGluZ0ZpZWxkcygpIHRvIGlzVXJsRW5jb2RpbmcoKQogICAgKiBDaGFuZ2VkIHNldEVuY29kZVZhbHVlcyhib29sKSBhbmQgc2V0RW5jb2RlRmllbGRzKGJvb2wpIHRvIHVzZVVybEVuY29kaW5nKGJvb2wpCiAgICAqIENoYW5nZWQgdGhlIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9ucyBvZiBRdWVyeVN0cmluZyB0byBiZSBzdGF0aWMgbWV0aG9kcwogICAgKiBDYW4gbm93IHVzZSBmcm9tU3RyaW5nKCkgd2l0aCBxdWVyeXN0cmluZ3MgdGhhdCBoYXZlIGEgbGVhZGluZyA/CiogY1VSTCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIGBjdXJsLmAgcHJlZml4ZWQgcGFyYW1ldGVycwoqIENvbnRlbnQtTGVuZ3RoIGlzIHNldCB0byAwIGJlZm9yZSBlbWl0dGluZyB0aGUgcmVxdWVzdC5iZWZvcmVfc2VuZCBldmVudCB3aGVuIHNlbmRpbmcgYW4gZW1wdHkgcmVxdWVzdCBib2R5CiogQ29va2llcyBhcmUgbm8gbG9uZ2VyIFVSTCBkZWNvZGVkIGJ5IGRlZmF1bHQKKiBCdWc6IFVSSSB0ZW1wbGF0ZSB2YXJpYWJsZXMgc2V0IHRvIG51bGwgYXJlIG5vIGxvbmdlciBleHBhbmRlZAoKIyMgMi43LjIgLSAyMDEyLTA3LTAyCgoqIEJDOiBNb3ZpbmcgdGhpbmdzIHRvIGdldCByZWFkeSBmb3Igc3VidHJlZSBzcGxpdHMuIE1vdmluZyBJbmZsZWN0aW9uIGludG8gQ29tbW9uLiBNb3ZpbmcgR3V6emxlXEh0dHBcUGFyc2VyIHRvIEd1enpsZVxQYXJzZXIuCiogQkM6IFJlbW92aW5nIEd1enpsZVxDb21tb25cQmF0Y2hcQmF0Y2g6OmNvdW50KCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGlzRW1wdHkoKQoqIENhY2hlUGx1Z2luIG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIHJlcXVlc3QgcGFyYW1ldGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgcmVxdWVzdCBjYW4gYmUgY2FjaGVkCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IG9ubHkgY2FjaGVzIEdFVCBhbmQgSEVBRCByZXF1ZXN0cyBieSBkZWZhdWx0CiogQnVnIGZpeDogVXNpbmcgaGVhZGVyIGdsdWUgd2hlbiB0cmFuc2ZlcnJpbmcgaGVhZGVycyBvdmVyIHRoZSB3aXJlCiogQWxsb3dpbmcgZGVlcGx5IG5lc3RlZCBhcnJheXMgZm9yIGNvbXBvc2l0ZSB2YXJpYWJsZXMgaW4gVVJJIHRlbXBsYXRlcwoqIEJhdGNoIGRpdmlzb3JzIGNhbiBub3cgcmV0dXJuIGl0ZXJhdG9ycyBvciBhcnJheXMKCiMjIDIuNy4xIC0gMjAxMi0wNi0yNgoKKiBNaW5vciBwYXRjaCB0byB1cGRhdGUgdmVyc2lvbiBudW1iZXIgaW4gVUEgc3RyaW5nCiogVXBkYXRpbmcgYnVpbGQgcHJvY2VzcwoKIyMgMi43LjAgLSAyMDEyLTA2LTI1CgoqIEJDOiBJbmZsZWN0aW9uIGNsYXNzZXMgbW92ZWQgdG8gR3V6emxlXEluZmxlY3Rpb24uIE5vIGxvbmdlciBzdGF0aWMgbWV0aG9kcy4gQ2FuIG5vdyBpbmplY3QgY3VzdG9tIGluZmxlY3RvcnMgaW50byBjbGFzc2VzLgoqIEJDOiBSZW1vdmVkIG1hZ2ljIHNldFggbWV0aG9kcyBmcm9tIGNvbW1hbmRzCiogQkM6IE1hZ2ljIG1ldGhvZHMgbWFwcGVkIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gY29tbWFuZHMgYXJlIG5vdyBpbmZsZWN0ZWQgaW4gdGhlIGNvbW1hbmQgZmFjdG9yeSByYXRoZXIgdGhhbiB0aGUgY2xpZW50IF9fY2FsbCgpIG1ldGhvZAoqIFZlcmJvc2UgY1VSTCBvcHRpb25zIGFyZSBubyBsb25nZXIgZW5hYmxlZCBieSBkZWZhdWx0LiBTZXQgY3VybC5kZWJ1ZyB0byB0cnVlIG9uIGEgY2xpZW50IHRvIGVuYWJsZS4KKiBCdWc6IE5vdyBhbGxvd2luZyBjb2xvbnMgaW4gYSByZXNwb25zZSBzdGFydC1saW5lIChlLmcuIEhUVFAvMS4xIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlOiBCYWNrLWVuZCBzZXJ2ZXIgaXMgYXQgY2FwYWNpdHkpCiogR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcUmVzb3VyY2VJdGVyYXRvckFwcGx5QmF0Y2hlZCBub3cgaW50ZXJuYWxseSB1c2VzIHRoZSBHdXp6bGVcQ29tbW9uXEJhdGNoIG5hbWVzcGFjZQoqIEFkZGVkIEd1enpsZVxTZXJ2aWNlXFBsdWdpbiBuYW1lc3BhY2UgYW5kIGEgUGx1Z2luQ29sbGVjdGlvblBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBQT1NUIGZpZWxkcyBhbmQgZmlsZXMgaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uCiogR3V6emxlXEh0dHBcRW50aXR5Qm9keTo6ZmFjdG9yeSgpIG5vdyBhY2NlcHRzIG9iamVjdHMgd2l0aCBhIF9fdG9TdHJpbmcoKSBtZXRob2QKKiBBZGRpbmcgYSBjb21tYW5kLmJlZm9yZV9wcmVwYXJlIGV2ZW50IHRvIGNsaWVudHMKKiBBZGRlZCBCYXRjaENsb3N1cmVUcmFuc2ZlciBhbmQgQmF0Y2hDbG9zdXJlRGl2aXNvcgoqIEJhdGNoVHJhbnNmZXJFeGNlcHRpb24gbm93IGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGJhdGNoIGRpdmlzb3IgYW5kIHRyYW5zZmVyIHN0cmF0ZWdpZXMKKiBGaXhlZCBzb21lIHRlc3RzIHNvIHRoYXQgdGhleSBwYXNzIG1vcmUgcmVsaWFibHkKKiBBZGRlZCBHdXp6bGVcQ29tbW9uXExvZ1xBcnJheUxvZ0FkYXB0ZXIKCiMjIDIuNi42IC0gMjAxMi0wNi0xMAoKKiBCQzogUmVtb3ZpbmcgR3V6emxlXEh0dHBcUGx1Z2luXEJhdGNoUXVldWVQbHVnaW4KKiBCQzogUmVtb3ZpbmcgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kU2V0CiogQWRkaW5nIGdlbmVyaWMgYmF0Y2hpbmcgc3lzdGVtIChyZXBsYWNlcyB0aGUgYmF0Y2ggcXVldWUgcGx1Z2luIGFuZCBjb21tYW5kIHNldCkKKiBVcGRhdGluZyBaRiBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzIGFuZCBub3cgdXNpbmcgWkYncyBjb21wb3NlciByZXBvc2l0b3J5CiogQnVnOiBTZXR0aW5nIHRoZSBuYW1lIG9mIGVhY2ggQXBpUGFyYW0gd2hlbiBjcmVhdGluZyB0aHJvdWdoIGFuIEFwaUNvbW1hbmQKKiBBZGRpbmcgcmVzdWx0X3R5cGUsIHJlc3VsdF9kb2MsIGRlcHJlY2F0ZWQsIGFuZCBkb2NfdXJsIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogQnVnOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IGNvb2tpZSBoZWFkZXIgY2FzaW5nIGJhY2sgdG8gJ0Nvb2tpZScKCiMjIDIuNi41IC0gMjAxMi0wNi0wMwoKKiBCQzogUmVuYW1pbmcgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpnZXRSZXNvdXJjZVVyaSgpIHRvIGdldFJlc291cmNlKCkKKiBCQzogUmVtb3ZpbmcgdW51c2VkIEFVVEhfQkFTSUMgYW5kIEFVVEhfRElHRVNUIGNvbnN0YW50cyBmcm9tCiogQkM6IEd1enpsZVxIdHRwXENvb2tpZSBpcyBub3cgdXNlZCB0byBtYW5hZ2UgU2V0LUNvb2tpZSBkYXRhLCBub3QgQ29va2llIGRhdGEKKiBCQzogUmVuYW1pbmcgbWV0aG9kcyBpbiB0aGUgQ29va2llSmFySW50ZXJmYWNlCiogTW92aW5nIGFsbW9zdCBhbGwgY29va2llIGxvZ2ljIG91dCBvZiB0aGUgQ29va2llUGx1Z2luIGFuZCBpbnRvIHRoZSBDb29raWUgb3IgQ29va2llSmFyIGltcGxlbWVudGF0aW9ucwoqIE1ha2luZyB0aGUgZGVmYXVsdCBnbHVlIGZvciBIVFRQIGhlYWRlcnMgJzsnIGluc3RlYWQgb2YgJywnCiogQWRkaW5nIGEgcmVtb3ZlVmFsdWUgdG8gR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXIKKiBBZGRpbmcgZ2V0Q29va2llcygpIHRvIHJlcXVlc3QgaW50ZXJmYWNlLgoqIE1ha2luZyBpdCBlYXNpZXIgdG8gYWRkIGV2ZW50IHN1YnNjcmliZXJzIHRvIEhhc0Rpc3BhdGNoZXJJbnRlcmZhY2UgY2xhc3Nlcy4gQ2FuIG5vdyBkaXJlY3RseSBjYWxsIGFkZFN1YnNjcmliZXIoKQoKIyMgMi42LjQgLSAyMDEyLTA1LTMwCgoqIEJDOiBDbGVhbmluZyB1cCBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIGluIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cy4gQWRkaW5nIFBvc3RGaWxlIGNsYXNzLgoqIEJDOiBNb3ZpbmcgQXBpQ29tbWFuZCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEluc3BlY3RvciBhbmQgb24gdG8gdGhlIEFwaUNvbW1hbmQKKiBCdWc6IEZpeGluZyBtYWdpYyBtZXRob2QgY29tbWFuZCBjYWxscyBvbiBjbGllbnRzCiogQnVnOiBFbWFpbCBjb25zdHJhaW50IG9ubHkgdmFsaWRhdGVzIHN0cmluZ3MKKiBCdWc6IEFnZ3JlZ2F0ZSBQT1NUIGZpZWxkcyB3aGVuIFBPU1QgZmlsZXMgYXJlIHByZXNlbnQgaW4gY3VybCBoYW5kbGUKKiBCdWc6IEZpeGluZyBkZWZhdWx0IFVzZXItQWdlbnQgaGVhZGVyCiogQnVnOiBPbmx5IGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHBhcmFtZXRlcnMgaW4gY29tbWFuZHMgaWYgdGhleSBhcmUgc3BlY2lmaWVkCiogQnVnOiBOb3QgcmVxdWlyaW5nIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VzIG9yIHN0YXR1cyBjb2RlcyB0byBtYXRjaCBhIHByZWRlZmluZWQgbGlzdCBvZiBjb2RlcwoqIEFsbG93aW5nIHRoZSB1c2Ugb2YgZG90IG5vdGF0aW9uIGZvciBjbGFzcyBuYW1lc3BhY2VzIHdoZW4gdXNpbmcgaW5zdGFuY2Vfb2YgY29uc3RyYWludAoqIEFkZGVkIGFueV9tYXRjaCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQKKiBBZGRlZCBhbiBBc3luY1BsdWdpbgoqIFBhc3NpbmcgcmVxdWVzdCBvYmplY3QgdG8gdGhlIGNhbGN1bGF0ZVdhaXQgbWV0aG9kIG9mIHRoZSBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4KKiBBbGxvd2luZyB0aGUgcmVzdWx0IG9mIGEgY29tbWFuZCBvYmplY3QgdG8gYmUgY2hhbmdlZAoqIFBhcnNpbmcgbG9jYXRpb24gYW5kIHR5cGUgc3ViIHZhbHVlcyB3aGVuIGluc3RhbnRpYXRpbmcgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJhdGhlciB0aGFuIG92ZXIgYW5kIG92ZXIgYXQgcnVudGltZQoKIyMgMi42LjMgLSAyMDEyLTA1LTIzCgoqIFtCQ10gR3V6emxlXENvbW1vblxGcm9tQ29uZmlnSW50ZXJmYWNlIG5vIGxvbmdlciByZXF1aXJlcyBhbnkgY29uZmlnIG9wdGlvbnMuCiogW0JDXSBSZWZhY3RvcmluZyBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIG9uIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3QuIFRoZXkgYXJlIG5vdyBzZXBhcmF0ZSBmcm9tIFBPU1QgZmllbGRzLgoqIFlvdSBjYW4gbm93IHVzZSBhbiBhcnJheSBvZiBkYXRhIHdoZW4gY3JlYXRpbmcgUFVUIHJlcXVlc3QgYm9kaWVzIGluIHRoZSByZXF1ZXN0IGZhY3RvcnkuCiogUmVtb3ZpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQgSFRUUFMgcmVxdWVzdHMgbmVlZGVkIGEgQ2FjaGUtQ29udHJvbDogcHVibGljIGRpcmVjdGl2ZSB0byBiZSBjYWNoZWFibGUuCiogW0h0dHBdIEFkZGluZyBzdXBwb3J0IGZvciBDb250ZW50LVR5cGUgaW4gbXVsdGlwYXJ0IFBPU1QgdXBsb2FkcyBwZXIgdXBsb2FkCiogW0h0dHBdIEFkZGVkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBtdWx0aXBsZSBmaWxlcyB1c2luZyB0aGUgc2FtZSBuYW1lIChmb29bMF0sIGZvb1sxXSkKKiBBZGRpbmcgbW9yZSBQT1NUIGRhdGEgb3BlcmF0aW9ucyBmb3IgZWFzaWVyIG1hbmlwdWxhdGlvbiBvZiBQT1NUIGRhdGEuCiogWW91IGNhbiBub3cgc2V0IGVtcHR5IFBPU1QgZmllbGRzLgoqIFRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBvbmx5IHNob3duIG9uIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCB1c2UgUE9TVCBmaWxlcy4KKiBTcGxpdCB0aGUgR3V6emxlXFNlcnZpY2VcSW5zcGVjdG9yOjp2YWxpZGF0ZUNvbmZpZyBtZXRob2QgaW50byB0d28gbWV0aG9kcy4gT25lIHRvIGluaXRpYWxpemUgd2hlbiBhIGNvbW1hbmQgaXMgY3JlYXRlZCwgYW5kIG9uZSB0byB2YWxpZGF0ZS4KKiBDUyB1cGRhdGVzCgojIyAyLjYuMiAtIDIwMTItMDUtMTkKCiogW0h0dHBdIEJldHRlciBoYW5kbGluZyBvZiBuZXN0ZWQgc2NvcGUgcmVxdWVzdHMgaW4gQ3VybE11bHRpLiAgUmVxdWVzdHMgYXJlIG5vdyBhbHdheXMgcHJlcGFyZXMgaW4gdGhlIHNlbmQoKSBtZXRob2QgcmF0aGVyIHRoYW4gdGhlIGFkZFJlcXVlc3QoKSBtZXRob2QuCgojIyAyLjYuMSAtIDIwMTItMDUtMTkKCiogW0JDXSBSZW1vdmluZyAncGF0aCcgc3VwcG9ydCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4gIFVzZSAndXJpJy4KKiBbQkNdIEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6cGFyc2VEb2NCbG9jayBpcyBub3cgcHJvdGVjdGVkLiBBZGRpbmcgZ2V0QXBpUGFyYW1zRm9yQ2xhc3MoKSB3aXRoIGNhY2hlLgoqIFtCQ10gUmVtb3ZpbmcgR3V6emxlXENvbW1vblxOdWxsT2JqZWN0LiAgVXNlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmcvTnVsbE9iamVjdCBpZiB5b3UgbmVlZCBpdC4KKiBbQkNdIFJlbW92aW5nIEd1enpsZVxDb21tb25cWG1sRWxlbWVudC4KKiBBbGwgY29tbWFuZHMsIGJvdGggZHluYW1pYyBhbmQgY29uY3JldGUsIGhhdmUgQXBpQ29tbWFuZCBvYmplY3RzLgoqIEFkZGluZyBhIGZpeCBmb3IgQ3VybE11bHRpIHNvIHRoYXQgaWYgYWxsIG9mIHRoZSBjb25uZWN0aW9ucyBlbmNvdW50ZXIgc29tZSBzb3J0IG9mIGN1cmwgZXJyb3IsIHRoZW4gdGhlIGxvb3AgZXhpdHMuCiogQWRkaW5nIGNoZWNrcyB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHNvIHRoYXQgZW1wdHkgUE9TVCBmaWxlcyBhbmQgZmllbGRzIGFyZSBpZ25vcmVkLgoqIE1ha2luZyB0aGUgbWV0aG9kIHNpZ25hdHVyZSBvZiBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5IG1vcmUgZmxleGlibGUuCgojIyAyLjYuMCAtIDIwMTItMDUtMTUKCiogW0JDXSBNb3ZpbmcgR3V6emxlXFNlcnZpY2VcQnVpbGRlciB0byBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyCiogW0JDXSBFeGVjdXRpbmcgYSBDb21tYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCByYXRoZXIgdGhhbiB0aGUgY29tbWFuZAoqIFtCQ10gTW92aW5nIGFsbCBIVFRQIHBhcnNpbmcgbG9naWMgdG8gR3V6emxlXEh0dHBcUGFyc2Vycy4gQWxsb3dzIGZvciBmYXN0ZXIgQyBpbXBsZW1lbnRhdGlvbnMgaWYgbmVlZGVkLgoqIFtCQ10gQ2hhbmdpbmcgdGhlIEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OnNldFByb3RvY29sKCkgbWV0aG9kIHRvIGFjY2VwdCBhIHByb3RvY29sIGFuZCB2ZXJzaW9uIGluIHNlcGFyYXRlIGFyZ3MuCiogW0JDXSBNb3ZpbmcgUmVzb3VyY2VJdGVyYXRvciogdG8gR3V6emxlXFNlcnZpY2VcUmVzb3VyY2UKKiBbQkNdIENvbXBsZXRlbHkgcmVmYWN0b3JlZCBSZXNvdXJjZUl0ZXJhdG9ycyB0byBpdGVyYXRlIG92ZXIgYSBjbG9uZWQgY29tbWFuZCBvYmplY3QKKiBbQkNdIE1vdmVkIEd1enpsZVxIdHRwXFVyaVRlbXBsYXRlIHRvIEd1enpsZVxIdHRwXFBhcnNlclxVcmlUZW1wbGF0ZVxVcmlUZW1wbGF0ZQoqIFtCQ10gR3V6emxlXEd1enpsZSBpcyBub3cgZGVwcmVjYXRlZAoqIE1vdmluZyBHdXp6bGVcQ29tbW9uXEd1enpsZTo6aW5qZWN0IHRvIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0CiogQWRkaW5nIEd1enpsZVxWZXJzaW9uIGNsYXNzIHRvIGdpdmUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCBHdXp6bGUKKiBBZGRpbmcgR3V6emxlXEh0dHBcVXRpbHMgY2xhc3MgdG8gcHJvdmlkZSBnZXREZWZhdWx0VXNlckFnZW50KCkgYW5kIGdldEh0dHBEYXRlKCkKKiBBZGRpbmcgR3V6emxlXEN1cmxcQ3VybFZlcnNpb24gdG8gbWFuYWdlIGNhY2hpbmcgY3VybF92ZXJzaW9uKCkgZGF0YQoqIFNlcnZpY2VEZXNjcmlwdGlvbiBhbmQgU2VydmljZUJ1aWxkZXIgYXJlIG5vdyBjYWNoZWFibGUgdXNpbmcgc2ltaWxhciBjb25maWdzCiogQ2hhbmdpbmcgdGhlIGZvcm1hdCBvZiBYTUwgYW5kIEpTT04gc2VydmljZSBidWlsZGVyIGNvbmZpZ3MuICBCYWNrd2FyZHMgY29tcGF0aWJsZS4KKiBDbGVhbmVkIHVwIENvb2tpZSBwYXJzaW5nCiogVHJpbW1pbmcgdGhlIGRlZmF1bHQgR3V6emxlIFVzZXItQWdlbnQgaGVhZGVyCiogQWRkaW5nIGEgc2V0T25Db21wbGV0ZSgpIG1ldGhvZCB0byBDb21tYW5kcyB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBjb21wbGV0ZXMKKiBLZWVwaW5nIHRyYWNrIG9mIHJlcXVlc3RzIHRoYXQgd2VyZSBtb2NrZWQgaW4gdGhlIE1vY2tQbHVnaW4KKiBGaXhlZCBhIGNhY2hpbmcgYnVnIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogSW5zcGVjdG9yIG9iamVjdHMgY2FuIGJlIGluamVjdGVkIGludG8gYSBDb21tYW5kIG9iamVjdAoqIFJlZmFjdG9yaW5nIGEgbG90IG9mIGNvZGUgYW5kIHRlc3RzIHRvIGJlIGNhc2UgaW5zZW5zaXRpdmUgd2hlbiBkZWFsaW5nIHdpdGggaGVhZGVycwoqIEFkZGluZyBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlckNvbXBhcmlzb24gZm9yIGVhc3kgY29tcGFyaXNvbiBvZiBIVFRQIGhlYWRlcnMgdXNpbmcgYSBEU0wKKiBBZGRpbmcgdGhlIGFiaWxpdHkgdG8gc2V0IGdsb2JhbCBvcHRpb24gb3ZlcnJpZGVzIHRvIHNlcnZpY2UgYnVpbGRlciBjb25maWdzCiogQWRkaW5nIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgb3RoZXIgc2VydmljZSBidWlsZGVyIGNvbmZpZyBmaWxlcyBmcm9tIHdpdGhpbiBYTUwgYW5kIEpTT04gZmlsZXMKKiBNb3ZpbmcgdGhlIHBhcnNlUXVlcnkgbWV0aG9kIG91dCBvZiBVcmwgYW5kIG9uIHRvIFF1ZXJ5U3RyaW5nOjpmcm9tU3RyaW5nKCkgYXMgYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QuCgojIyAyLjUuMCAtIDIwMTItMDUtMDgKCiogTWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCiogW0JDXSBTaW1wbGlmeWluZyBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24uICBQbGVhc2UgY2hlY2sgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgZmVhdHVyZXMgdGhhdCBhcmUgbm93IGRlcHJlY2F0ZWQuCiogW0JDXSBVc2luZyBhIGN1c3RvbSB2YWxpZGF0aW9uIHN5c3RlbSB0aGF0IGFsbG93cyBhIGZseXdlaWdodCBpbXBsZW1lbnRhdGlvbiBmb3IgbXVjaCBmYXN0ZXIgdmFsaWRhdGlvbi4gTm8gbG9uZ2VyIHVzaW5nIFN5bWZvbnkyIFZhbGlkYXRpb24gY29tcG9uZW50LgoqIFtCQ10gTm8gbG9uZ2VyIHN1cHBvcnRpbmcgInt7IH19IiBmb3IgaW5qZWN0aW5nIGludG8gY29tbWFuZCBvciBVcmlUZW1wbGF0ZXMuICBVc2UgInt9IgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHBhc3NlZCBwYXJhbWV0ZXJzIHRvIGFsbCByZXF1ZXN0cyBjcmVhdGVkIGJ5IGEgY2xpZW50CiogQWRkZWQgY2FsbGJhY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCiogVXNpbmcgbWljcm90aW1lIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0byBhbGxvdyBtb3JlIGdyYW51bGFyIGJhY2tvZmYgc3RyYXRlZ2llcy4KKiBSZXdpbmRpbmcgcmVxdWVzdCBzdHJlYW0gYm9kaWVzIHdoZW4gcmV0cnlpbmcgcmVxdWVzdHMKKiBFeGNlcHRpb24gaXMgdGhyb3duIHdoZW4gSlNPTiByZXNwb25zZSBib2R5IGNhbm5vdCBiZSBkZWNvZGVkCiogQWRkZWQgY29uZmlndXJhYmxlIG1hZ2ljIG1ldGhvZCBjYWxscyB0byBjbGllbnRzIGFuZCBjb21tYW5kcy4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuCiogRml4ZWQgYSBkZWZlY3QgdGhhdCBhZGRlZCBhIGhhc2ggdG8gZXZlcnkgcGFyc2VkIFVSTCBwYXJ0CiogRml4ZWQgZHVwbGljYXRlIG5vbmUgZ2VuZXJhdGlvbiBmb3IgT2F1dGhQbHVnaW4uCiogRW1pdHRpbmcgYW4gZXZlbnQgZWFjaCB0aW1lIGEgY2xpZW50IGlzIGdlbmVyYXRlZCBieSBhIFNlcnZpY2VCdWlsZGVyCiogVXNpbmcgYW4gQXBpUGFyYW1zIG9iamVjdCBpbnN0ZWFkIG9mIGEgQ29sbGVjdGlvbiBmb3IgcGFyYW1ldGVycyBvZiBhbiBBcGlDb21tYW5kCiogY2FjaGUuKiByZXF1ZXN0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gcGFyYW1zLmNhY2hlLioKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgYXJiaXRyYXJ5IGN1cmwgb3B0aW9ucyBvbiByZXF1ZXN0cyAoZGlzYWJsZV93aXJlLCBwcm9ncmVzcywgZXRjLikuIFNlZSBDdXJsSGFuZGxlLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdHlwZSB2YWxpZGF0aW9uIG9mIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogU2VydmljZURlc2NyaXB0aW9ucyBhbmQgU2VydmljZUJ1aWxkZXJzIGFyZSBub3cgU2VyaWFsaXphYmxlCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IGxpYnJhcnkiLAogICAgImtleXdvcmRzIjogWyJmcmFtZXdvcmsiLCAiaHR0cCIsICJyZXN0IiwgIndlYiBzZXJ2aWNlIiwgImN1cmwiLCAiY2xpZW50IiwgIkhUVFAgY2xpZW50Il0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2d1enpsZXBocC5vcmcvIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjUiLAogICAgICAgICJndXp6bGVodHRwL3BzcjciOiAiXjEuNCIsCiAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjEuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuOC4zNSB8fCBeNS43IHx8IF42LjQgfHwgXjcuMCIsCiAgICAgICAgInBzci9sb2ciOiAiXjEuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgImZpbGVzIjogWyJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIl0sCiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcVGVzdHNcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYuMy1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLTIwMTggTWljaGFlbCBEb3dsaW5nLCBodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlLCBQSFAgSFRUUCBjbGllbnQKPT09PT09PT09PT09PT09PT09PT09PT0KClshW0xhdGVzdCBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL2d1enpsZS9ndXp6bGUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcmVsZWFzZXMpClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby90cmF2aXMvZ3V6emxlL2d1enpsZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ3V6emxlL2d1enpsZSkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9ndXp6bGVodHRwL2d1enpsZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZ3V6emxlaHR0cC9ndXp6bGUpCgpHdXp6bGUgaXMgYSBQSFAgSFRUUCBjbGllbnQgdGhhdCBtYWtlcyBpdCBlYXN5IHRvIHNlbmQgSFRUUCByZXF1ZXN0cyBhbmQKdHJpdmlhbCB0byBpbnRlZ3JhdGUgd2l0aCB3ZWIgc2VydmljZXMuCgotIFNpbXBsZSBpbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIHF1ZXJ5IHN0cmluZ3MsIFBPU1QgcmVxdWVzdHMsIHN0cmVhbWluZyBsYXJnZQogIHVwbG9hZHMsIHN0cmVhbWluZyBsYXJnZSBkb3dubG9hZHMsIHVzaW5nIEhUVFAgY29va2llcywgdXBsb2FkaW5nIEpTT04gZGF0YSwKICBldGMuLi4KLSBDYW4gc2VuZCBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVxdWVzdHMgdXNpbmcgdGhlIHNhbWUgaW50ZXJmYWNlLgotIFVzZXMgUFNSLTcgaW50ZXJmYWNlcyBmb3IgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIHN0cmVhbXMuIFRoaXMgYWxsb3dzIHlvdQogIHRvIHV0aWxpemUgb3RoZXIgUFNSLTcgY29tcGF0aWJsZSBsaWJyYXJpZXMgd2l0aCBHdXp6bGUuCi0gQWJzdHJhY3RzIGF3YXkgdGhlIHVuZGVybHlpbmcgSFRUUCB0cmFuc3BvcnQsIGFsbG93aW5nIHlvdSB0byB3cml0ZQogIGVudmlyb25tZW50IGFuZCB0cmFuc3BvcnQgYWdub3N0aWMgY29kZTsgaS5lLiwgbm8gaGFyZCBkZXBlbmRlbmN5IG9uIGNVUkwsCiAgUEhQIHN0cmVhbXMsIHNvY2tldHMsIG9yIG5vbi1ibG9ja2luZyBldmVudCBsb29wcy4KLSBNaWRkbGV3YXJlIHN5c3RlbSBhbGxvd3MgeW91IHRvIGF1Z21lbnQgYW5kIGNvbXBvc2UgY2xpZW50IGJlaGF2aW9yLgoKYGBgcGhwCiRjbGllbnQgPSBuZXcgXEd1enpsZUh0dHBcQ2xpZW50KCk7CiRyZXMgPSAkY2xpZW50LT5yZXF1ZXN0KCdHRVQnLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlJyk7CmVjaG8gJHJlcy0+Z2V0U3RhdHVzQ29kZSgpOwovLyAyMDAKZWNobyAkcmVzLT5nZXRIZWFkZXJMaW5lKCdjb250ZW50LXR5cGUnKTsKLy8gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmOCcKZWNobyAkcmVzLT5nZXRCb2R5KCk7Ci8vICd7ImlkIjogMTQyMDA1MywgIm5hbWUiOiAiZ3V6emxlIiwgLi4ufScKCi8vIFNlbmQgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QuCiRyZXF1ZXN0ID0gbmV3IFxHdXp6bGVIdHRwXFBzcjdcUmVxdWVzdCgnR0VUJywgJ2h0dHA6Ly9odHRwYmluLm9yZycpOwokcHJvbWlzZSA9ICRjbGllbnQtPnNlbmRBc3luYygkcmVxdWVzdCktPnRoZW4oZnVuY3Rpb24gKCRyZXNwb25zZSkgewogICAgZWNobyAnSSBjb21wbGV0ZWQhICcgLiAkcmVzcG9uc2UtPmdldEJvZHkoKTsKfSk7CiRwcm9taXNlLT53YWl0KCk7CmBgYAoKIyMgSGVscCBhbmQgZG9jcwoKLSBbRG9jdW1lbnRhdGlvbl0oaHR0cDovL2d1enpsZXBocC5vcmcvKQotIFtTdGFjayBPdmVyZmxvd10oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvZ3V6emxlKQotIFtHaXR0ZXJdKGh0dHBzOi8vZ2l0dGVyLmltL2d1enpsZS9ndXp6bGUpCgoKIyMgSW5zdGFsbGluZyBHdXp6bGUKClRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCBHdXp6bGUgaXMgdGhyb3VnaApbQ29tcG9zZXJdKGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcpLgoKYGBgYmFzaAojIEluc3RhbGwgQ29tcG9zZXIKY3VybCAtc1MgaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvaW5zdGFsbGVyIHwgcGhwCmBgYAoKTmV4dCwgcnVuIHRoZSBDb21wb3NlciBjb21tYW5kIHRvIGluc3RhbGwgdGhlIGxhdGVzdCBzdGFibGUgdmVyc2lvbiBvZiBHdXp6bGU6CgpgYGBiYXNoCnBocCBjb21wb3Nlci5waGFyIHJlcXVpcmUgZ3V6emxlaHR0cC9ndXp6bGUKYGBgCgpBZnRlciBpbnN0YWxsaW5nLCB5b3UgbmVlZCB0byByZXF1aXJlIENvbXBvc2VyJ3MgYXV0b2xvYWRlcjoKCmBgYHBocApyZXF1aXJlICd2ZW5kb3IvYXV0b2xvYWQucGhwJzsKYGBgCgpZb3UgY2FuIHRoZW4gbGF0ZXIgdXBkYXRlIEd1enpsZSB1c2luZyBjb21wb3NlcjoKCiBgYGBiYXNoCmNvbXBvc2VyLnBoYXIgdXBkYXRlCiBgYGAKCgojIyBWZXJzaW9uIEd1aWRhbmNlCgp8IFZlcnNpb24gfCBTdGF0dXMgICAgIHwgUGFja2FnaXN0ICAgICAgICAgICB8IE5hbWVzcGFjZSAgICB8IFJlcG8gICAgICAgICAgICAgICAgfCBEb2NzICAgICAgICAgICAgICAgIHwgUFNSLTcgfCBQSFAgVmVyc2lvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCAzLnggICAgIHwgRU9MICAgICAgICB8IGBndXp6bGUvZ3V6emxlYCAgICAgfCBgR3V6emxlYCAgICAgfCBbdjNdW2d1enpsZS0zLXJlcG9dIHwgW3YzXVtndXp6bGUtMy1kb2NzXSB8IE5vICAgIHwgPj0gNS4zLjMgICAgfAp8IDQueCAgICAgfCBFT0wgICAgICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2NF1bZ3V6emxlLTQtcmVwb10gfCBOL0EgICAgICAgICAgICAgICAgIHwgTm8gICAgfCA+PSA1LjQgICAgICB8CnwgNS54ICAgICB8IE1haW50YWluZWQgfCBgZ3V6emxlaHR0cC9ndXp6bGVgIHwgYEd1enpsZUh0dHBgIHwgW3Y1XVtndXp6bGUtNS1yZXBvXSB8IFt2NV1bZ3V6emxlLTUtZG9jc10gfCBObyAgICB8ID49IDUuNCAgICAgIHwKfCA2LnggICAgIHwgTGF0ZXN0ICAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjZdW2d1enpsZS02LXJlcG9dIHwgW3Y2XVtndXp6bGUtNi1kb2NzXSB8IFllcyAgIHwgPj0gNS41ICAgICAgfAoKW2d1enpsZS0zLXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZTMKW2d1enpsZS00LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzQueApbZ3V6emxlLTUtcmVwb106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNS4zCltndXp6bGUtNi1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUKW2d1enpsZS0zLWRvY3NdOiBodHRwOi8vZ3V6emxlMy5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LwpbZ3V6emxlLTUtZG9jc106IGh0dHA6Ly9ndXp6bGUucmVhZHRoZWRvY3Mub3JnL2VuLzUuMy8KW2d1enpsZS02LWRvY3NdOiBodHRwOi8vZ3V6emxlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Client.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFyOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEBtZXRob2QgUmVzcG9uc2VJbnRlcmZhY2UgZ2V0KHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBoZWFkKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBwdXQoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFJlc3BvbnNlSW50ZXJmYWNlIHBvc3Qoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFJlc3BvbnNlSW50ZXJmYWNlIHBhdGNoKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBkZWxldGUoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFByb21pc2VcUHJvbWlzZUludGVyZmFjZSBnZXRBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIGhlYWRBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIHB1dEFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgcG9zdEFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgcGF0Y2hBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIGRlbGV0ZUFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICovCmNsYXNzIENsaWVudCBpbXBsZW1lbnRzIENsaWVudEludGVyZmFjZQp7CiAgICAvKiogQHZhciBhcnJheSBEZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyAqLwogICAgcHJpdmF0ZSAkY29uZmlnOwoKICAgIC8qKgogICAgICogQ2xpZW50cyBhY2NlcHQgYW4gYXJyYXkgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBjcmVhdGluZyBhIGNsaWVudCB1c2luZyBhIGJhc2VfdXJpIGFuZCBhbiBhcnJheSBvZgogICAgICogZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0OgogICAgICoKICAgICAqICAgICAkY2xpZW50ID0gbmV3IENsaWVudChbCiAgICAgKiAgICAgICAgICdiYXNlX3VyaScgICAgICAgID0+ICdodHRwOi8vd3d3LmZvby5jb20vMS4wLycsCiAgICAgKiAgICAgICAgICd0aW1lb3V0JyAgICAgICAgID0+IDAsCiAgICAgKiAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IGZhbHNlLAogICAgICogICAgICAgICAncHJveHknICAgICAgICAgICA9PiAnMTkyLjE2OC4xNi4xOjEwJwogICAgICogICAgIF0pOwogICAgICoKICAgICAqIENsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvcHRpb25zOgogICAgICoKICAgICAqIC0gaGFuZGxlcjogKGNhbGxhYmxlKSBGdW5jdGlvbiB0aGF0IHRyYW5zZmVycyBIVFRQIHJlcXVlc3RzIG92ZXIgdGhlCiAgICAgKiAgIHdpcmUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKICAgICAqICAgYW5kIGFycmF5IG9mIHRyYW5zZmVyIG9wdGlvbnMsIGFuZCBtdXN0IHJldHVybiBhCiAgICAgKiAgIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYQogICAgICogICBQc3I3XEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZSBvbiBzdWNjZXNzLiAiaGFuZGxlciIgaXMgYQogICAgICogICBjb25zdHJ1Y3RvciBvbmx5IG9wdGlvbiB0aGF0IGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHBlci9yZXF1ZXN0CiAgICAgKiAgIG9wdGlvbnMuIElmIG5vIGhhbmRsZXIgaXMgcHJvdmlkZWQsIGEgZGVmYXVsdCBoYW5kbGVyIHdpbGwgYmUgY3JlYXRlZAogICAgICogICB0aGF0IGVuYWJsZXMgYWxsIG9mIHRoZSByZXF1ZXN0IG9wdGlvbnMgYmVsb3cgYnkgYXR0YWNoaW5nIGFsbCBvZiB0aGUKICAgICAqICAgZGVmYXVsdCBtaWRkbGV3YXJlIHRvIHRoZSBoYW5kbGVyLgogICAgICogLSBiYXNlX3VyaTogKHN0cmluZ3xVcmlJbnRlcmZhY2UpIEJhc2UgVVJJIG9mIHRoZSBjbGllbnQgdGhhdCBpcyBtZXJnZWQKICAgICAqICAgaW50byByZWxhdGl2ZSBVUklzLiBDYW4gYmUgYSBzdHJpbmcgb3IgaW5zdGFuY2Ugb2YgVXJpSW50ZXJmYWNlLgogICAgICogLSAqKjogYW55IHJlcXVlc3Qgb3B0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb25maWcgQ2xpZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiAgICAgKgogICAgICogQHNlZSBcR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9ucyBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSByZXF1ZXN0IG9wdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY29uZmlnID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkY29uZmlnWydoYW5kbGVyJ10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2hhbmRsZXInXSA9IEhhbmRsZXJTdGFjazo6Y3JlYXRlKCk7CiAgICAgICAgfSBlbHNlaWYgKCFpc19jYWxsYWJsZSgkY29uZmlnWydoYW5kbGVyJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoYW5kbGVyIG11c3QgYmUgYSBjYWxsYWJsZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ29udmVydCB0aGUgYmFzZV91cmkgdG8gYSBVcmlJbnRlcmZhY2UKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snYmFzZV91cmknXSkpIHsKICAgICAgICAgICAgJGNvbmZpZ1snYmFzZV91cmknXSA9IFBzcjdcdXJpX2ZvcigkY29uZmlnWydiYXNlX3VyaSddKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb25maWd1cmVEZWZhdWx0cygkY29uZmlnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKQogICAgewogICAgICAgIGlmIChjb3VudCgkYXJncykgPCAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdNYWdpYyByZXF1ZXN0IG1ldGhvZHMgcmVxdWlyZSBhIFVSSSBhbmQgb3B0aW9uYWwgb3B0aW9ucyBhcnJheScpOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICRhcmdzWzBdOwogICAgICAgICRvcHRzID0gaXNzZXQoJGFyZ3NbMV0pID8gJGFyZ3NbMV0gOiBbXTsKCiAgICAgICAgcmV0dXJuIHN1YnN0cigkbWV0aG9kLCAtNSkgPT09ICdBc3luYycKICAgICAgICAgICAgPyAkdGhpcy0+cmVxdWVzdEFzeW5jKHN1YnN0cigkbWV0aG9kLCAwLCAtNSksICR1cmksICRvcHRzKQogICAgICAgICAgICA6ICR0aGlzLT5yZXF1ZXN0KCRtZXRob2QsICR1cmksICRvcHRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFzeW5jKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgLy8gTWVyZ2UgdGhlIGJhc2UgVVJJIGludG8gdGhlIHJlcXVlc3QgVVJJIGlmIG5lZWRlZC4KICAgICAgICAkb3B0aW9ucyA9ICR0aGlzLT5wcmVwYXJlRGVmYXVsdHMoJG9wdGlvbnMpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnRyYW5zZmVyKAogICAgICAgICAgICAkcmVxdWVzdC0+d2l0aFVyaSgkdGhpcy0+YnVpbGRVcmkoJHJlcXVlc3QtPmdldFVyaSgpLCAkb3B0aW9ucyksICRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0hvc3QnKSksCiAgICAgICAgICAgICRvcHRpb25zCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwogICAgICAgIHJldHVybiAkdGhpcy0+c2VuZEFzeW5jKCRyZXF1ZXN0LCAkb3B0aW9ucyktPndhaXQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdEFzeW5jKCRtZXRob2QsICR1cmkgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkb3B0aW9ucyA9ICR0aGlzLT5wcmVwYXJlRGVmYXVsdHMoJG9wdGlvbnMpOwogICAgICAgIC8vIFJlbW92ZSByZXF1ZXN0IG1vZGlmeWluZyBwYXJhbWV0ZXIgYmVjYXVzZSBpdCBjYW4gYmUgZG9uZSB1cC1mcm9udC4KICAgICAgICAkaGVhZGVycyA9IGlzc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pID8gJG9wdGlvbnNbJ2hlYWRlcnMnXSA6IFtdOwogICAgICAgICRib2R5ID0gaXNzZXQoJG9wdGlvbnNbJ2JvZHknXSkgPyAkb3B0aW9uc1snYm9keSddIDogbnVsbDsKICAgICAgICAkdmVyc2lvbiA9IGlzc2V0KCRvcHRpb25zWyd2ZXJzaW9uJ10pID8gJG9wdGlvbnNbJ3ZlcnNpb24nXSA6ICcxLjEnOwogICAgICAgIC8vIE1lcmdlIHRoZSBVUkkgaW50byB0aGUgYmFzZSBVUkkuCiAgICAgICAgJHVyaSA9ICR0aGlzLT5idWlsZFVyaSgkdXJpLCAkb3B0aW9ucyk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRib2R5KSkgewogICAgICAgICAgICAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICB9CiAgICAgICAgJHJlcXVlc3QgPSBuZXcgUHNyN1xSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgICAgIC8vIFJlbW92ZSB0aGUgb3B0aW9uIHNvIHRoYXQgdGhleSBhcmUgbm90IGRvdWJseS1hcHBsaWVkLgogICAgICAgIHVuc2V0KCRvcHRpb25zWydoZWFkZXJzJ10sICRvcHRpb25zWydib2R5J10sICRvcHRpb25zWyd2ZXJzaW9uJ10pOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnRyYW5zZmVyKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJG1ldGhvZCwgJHVyaSA9ICcnLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCRtZXRob2QsICR1cmksICRvcHRpb25zKS0+d2FpdCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoJG9wdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICRvcHRpb24gPT09IG51bGwKICAgICAgICAgICAgPyAkdGhpcy0+Y29uZmlnCiAgICAgICAgICAgIDogKGlzc2V0KCR0aGlzLT5jb25maWdbJG9wdGlvbl0pID8gJHRoaXMtPmNvbmZpZ1skb3B0aW9uXSA6IG51bGwpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRVcmkoJHVyaSwgYXJyYXkgJGNvbmZpZykKICAgIHsKICAgICAgICAvLyBmb3IgQkMgd2UgYWNjZXB0IG51bGwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGZhaWwgaW4gdXJpX2ZvcgogICAgICAgICR1cmkgPSBQc3I3XHVyaV9mb3IoJHVyaSA9PT0gbnVsbCA/ICcnIDogJHVyaSk7CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydiYXNlX3VyaSddKSkgewogICAgICAgICAgICAkdXJpID0gUHNyN1xVcmlSZXNvbHZlcjo6cmVzb2x2ZShQc3I3XHVyaV9mb3IoJGNvbmZpZ1snYmFzZV91cmknXSksICR1cmkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRIb3N0KCkgIT09ICcnID8gJHVyaS0+d2l0aFNjaGVtZSgnaHR0cCcpIDogJHVyaTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgYSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb25maWcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb25maWd1cmVEZWZhdWx0cyhhcnJheSAkY29uZmlnKQogICAgewogICAgICAgICRkZWZhdWx0cyA9IFsKICAgICAgICAgICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gUmVkaXJlY3RNaWRkbGV3YXJlOjokZGVmYXVsdFNldHRpbmdzLAogICAgICAgICAgICAnaHR0cF9lcnJvcnMnICAgICA9PiB0cnVlLAogICAgICAgICAgICAnZGVjb2RlX2NvbnRlbnQnICA9PiB0cnVlLAogICAgICAgICAgICAndmVyaWZ5JyAgICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAnY29va2llcycgICAgICAgICA9PiBmYWxzZQogICAgICAgIF07CgogICAgICAgIC8vIFVzZSB0aGUgc3RhbmRhcmQgTGludXggSFRUUF9QUk9YWSBhbmQgSFRUUFNfUFJPWFkgaWYgc2V0LgoKICAgICAgICAvLyBXZSBjYW4gb25seSB0cnVzdCB0aGUgSFRUUF9QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBhIENMSQogICAgICAgIC8vIHByb2Nlc3MgZHVlIHRvIHRoZSBmYWN0IHRoYXQgUEhQIGhhcyBubyByZWxpYWJsZSBtZWNoYW5pc20gdG8KICAgICAgICAvLyBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCAiSFRUUF8iLgogICAgICAgIGlmIChwaHBfc2FwaV9uYW1lKCkgPT0gJ2NsaScgJiYgZ2V0ZW52KCdIVFRQX1BST1hZJykpIHsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydodHRwJ10gPSBnZXRlbnYoJ0hUVFBfUFJPWFknKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJveHkgPSBnZXRlbnYoJ0hUVFBTX1BST1hZJykpIHsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydodHRwcyddID0gJHByb3h5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRub1Byb3h5ID0gZ2V0ZW52KCdOT19QUk9YWScpKSB7CiAgICAgICAgICAgICRjbGVhbmVkTm9Qcm94eSA9IHN0cl9yZXBsYWNlKCcgJywgJycsICRub1Byb3h5KTsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydubyddID0gZXhwbG9kZSgnLCcsICRjbGVhbmVkTm9Qcm94eSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29uZmlnID0gJGNvbmZpZyArICRkZWZhdWx0czsKCiAgICAgICAgaWYgKCFlbXB0eSgkY29uZmlnWydjb29raWVzJ10pICYmICRjb25maWdbJ2Nvb2tpZXMnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkdGhpcy0+Y29uZmlnWydjb29raWVzJ10gPSBuZXcgQ29va2llSmFyKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIGRlZmF1bHQgdXNlci1hZ2VudCBoZWFkZXIuCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+Y29uZmlnWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSA9IFsnVXNlci1BZ2VudCcgPT4gZGVmYXVsdF91c2VyX2FnZW50KCldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFkZCB0aGUgVXNlci1BZ2VudCBoZWFkZXIgaWYgb25lIHdhcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddKSBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJG5hbWUpID09PSAndXNlci1hZ2VudCcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddWydVc2VyLUFnZW50J10gPSBkZWZhdWx0X3VzZXJfYWdlbnQoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBNZXJnZXMgZGVmYXVsdCBvcHRpb25zIGludG8gdGhlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25zIHRvIG1vZGlmeSBieSByZWZlcmVuY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRzKCRvcHRpb25zKQogICAgewogICAgICAgICRkZWZhdWx0cyA9ICR0aGlzLT5jb25maWc7CgogICAgICAgIGlmICghZW1wdHkoJGRlZmF1bHRzWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIC8vIERlZmF1bHQgaGVhZGVycyBhcmUgb25seSBhZGRlZCBpZiB0aGV5IGFyZSBub3QgcHJlc2VudC4KICAgICAgICAgICAgJGRlZmF1bHRzWydfY29uZGl0aW9uYWwnXSA9ICRkZWZhdWx0c1snaGVhZGVycyddOwogICAgICAgICAgICB1bnNldCgkZGVmYXVsdHNbJ2hlYWRlcnMnXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBoZWFkZXJzIGlzIHJlcXVpcmVkIGFzIHRoZXkgYXJlIGFkZGVkIGFzCiAgICAgICAgLy8gY29uZGl0aW9uYWwgaGVhZGVycyBhbmQgYXMgaGVhZGVycyBwYXNzZWQgdG8gYSByZXF1ZXN0IGN0b3IuCiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2hlYWRlcnMnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgLy8gQWxsb3dzIGRlZmF1bHQgaGVhZGVycyB0byBiZSB1bnNldC4KICAgICAgICAgICAgaWYgKCRvcHRpb25zWydoZWFkZXJzJ10gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRkZWZhdWx0c1snX2NvbmRpdGlvbmFsJ10gPSBudWxsOwogICAgICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSk7CiAgICAgICAgICAgIH0gZWxzZWlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoZWFkZXJzIG11c3QgYmUgYW4gYXJyYXknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2hhbGxvdyBtZXJnZSBkZWZhdWx0cyB1bmRlcm5lYXRoIG9wdGlvbnMuCiAgICAgICAgJHJlc3VsdCA9ICRvcHRpb25zICsgJGRlZmF1bHRzOwoKICAgICAgICAvLyBSZW1vdmUgbnVsbCB2YWx1ZXMuCiAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoJHYgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyZXN1bHRbJGtdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmFuc2ZlcnMgdGhlIGdpdmVuIHJlcXVlc3QgYW5kIGFwcGxpZXMgcmVxdWVzdCBvcHRpb25zLgogICAgICoKICAgICAqIFRoZSBVUkkgb2YgdGhlIHJlcXVlc3QgaXMgbm90IG1vZGlmaWVkIGFuZCB0aGUgcmVxdWVzdCBvcHRpb25zIGFyZSB1c2VkCiAgICAgKiBhcy1pcyB3aXRob3V0IG1lcmdpbmcgaW4gZGVmYXVsdCBvcHRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJhbnNmZXIoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgLy8gc2F2ZV90byAtPiBzaW5rCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzYXZlX3RvJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzaW5rJ10gPSAkb3B0aW9uc1snc2F2ZV90byddOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snc2F2ZV90byddKTsKICAgICAgICB9CgogICAgICAgIC8vIGV4Y2VwdGlvbnMgLT4gaHR0cF9lcnJvcnMKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2V4Y2VwdGlvbnMnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2h0dHBfZXJyb3JzJ10gPSAkb3B0aW9uc1snZXhjZXB0aW9ucyddOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snZXhjZXB0aW9ucyddKTsKICAgICAgICB9CgogICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmFwcGx5T3B0aW9ucygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICRoYW5kbGVyID0gJG9wdGlvbnNbJ2hhbmRsZXInXTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIFByb21pc2VccHJvbWlzZV9mb3IoJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBhcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJG1vZGlmeSA9IFsKICAgICAgICAgICAgJ3NldF9oZWFkZXJzJyA9PiBbXSwKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXSA9ICRvcHRpb25zWydoZWFkZXJzJ107CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JtX3BhcmFtcyddKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ211bHRpcGFydCddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1lvdSBjYW5ub3QgdXNlICcKICAgICAgICAgICAgICAgICAgICAuICdmb3JtX3BhcmFtcyBhbmQgbXVsdGlwYXJ0IGF0IHRoZSBzYW1lIHRpbWUuIFVzZSB0aGUgJwogICAgICAgICAgICAgICAgICAgIC4gJ2Zvcm1fcGFyYW1zIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBzZW5kIGFwcGxpY2F0aW9uLycKICAgICAgICAgICAgICAgICAgICAuICd4LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdHMsIGFuZCB0aGUgbXVsdGlwYXJ0ICcKICAgICAgICAgICAgICAgICAgICAuICdvcHRpb24gdG8gc2VuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHJlcXVlc3RzLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBodHRwX2J1aWxkX3F1ZXJ5KCRvcHRpb25zWydmb3JtX3BhcmFtcyddLCAnJywgJyYnKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2Zvcm1fcGFyYW1zJ10pOwogICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBoZWFkZXIgaW4gZGlmZmVyZW50IGNhc2UgYW5kIHNldCB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gPSBQc3I3XF9jYXNlbGVzc19yZW1vdmUoWydDb250ZW50LVR5cGUnXSwgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydtdWx0aXBhcnQnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2JvZHknXSA9IG5ldyBQc3I3XE11bHRpcGFydFN0cmVhbSgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydqc29uJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBcR3V6emxlSHR0cFxqc29uX2VuY29kZSgkb3B0aW9uc1snanNvbiddKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2pzb24nXSk7CiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcX2Nhc2VsZXNzX3JlbW92ZShbJ0NvbnRlbnQtVHlwZSddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ11bJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSkKICAgICAgICAgICAgJiYgJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10gIT09IHRydWUKICAgICAgICApIHsKICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddID0gUHNyN1xfY2FzZWxlc3NfcmVtb3ZlKFsnQWNjZXB0LUVuY29kaW5nJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0FjY2VwdC1FbmNvZGluZyddID0gJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2JvZHknXSkpIHsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zWydib2R5J10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kaWZ5Wydib2R5J10gPSBQc3I3XHN0cmVhbV9mb3IoJG9wdGlvbnNbJ2JvZHknXSk7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydib2R5J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snYXV0aCddKSAmJiBpc19hcnJheSgkb3B0aW9uc1snYXV0aCddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1snYXV0aCddOwogICAgICAgICAgICAkdHlwZSA9IGlzc2V0KCR2YWx1ZVsyXSkgPyBzdHJ0b2xvd2VyKCR2YWx1ZVsyXSkgOiAnYmFzaWMnOwogICAgICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICdiYXNpYyc6CiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddID0gUHNyN1xfY2FzZWxlc3NfcmVtb3ZlKFsnQXV0aG9yaXphdGlvbiddLCAkbW9kaWZ5WydzZXRfaGVhZGVycyddKTsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydBdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJwogICAgICAgICAgICAgICAgICAgICAgICAuIGJhc2U2NF9lbmNvZGUoIiR2YWx1ZVswXTokdmFsdWVbMV0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2RpZ2VzdCc6CiAgICAgICAgICAgICAgICAgICAgLy8gQHRvZG86IERvIG5vdCByZWx5IG9uIGN1cmwKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snY3VybCddW0NVUkxPUFRfSFRUUEFVVEhdID0gQ1VSTEFVVEhfRElHRVNUOwogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ250bG0nOgogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9IVFRQQVVUSF0gPSBDVVJMQVVUSF9OVExNOwogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydxdWVyeSddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1sncXVlcnknXTsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IGh0dHBfYnVpbGRfcXVlcnkoJHZhbHVlLCBudWxsLCAnJicsIFBIUF9RVUVSWV9SRkMzOTg2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncXVlcnkgbXVzdCBiZSBhIHN0cmluZyBvciBhcnJheScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtb2RpZnlbJ3F1ZXJ5J10gPSAkdmFsdWU7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydxdWVyeSddKTsKICAgICAgICB9CgogICAgICAgIC8vIEVuc3VyZSB0aGF0IHNpbmsgaXMgbm90IGFuIGludmFsaWQgdmFsdWUuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaW5rJ10pKSB7CiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBtb3JlIHNpbmsgdmFsaWRhdGlvbj8KICAgICAgICAgICAgaWYgKGlzX2Jvb2woJG9wdGlvbnNbJ3NpbmsnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdzaW5rIG11c3Qgbm90IGJlIGEgYm9vbGVhbicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVxdWVzdCA9IFBzcjdcbW9kaWZ5X3JlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0Qm9keSgpIGluc3RhbmNlb2YgUHNyN1xNdWx0aXBhcnRTdHJlYW0pIHsKICAgICAgICAgICAgLy8gVXNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGlmIGEgQ29udGVudC1UeXBlIGlzIG5vdCBzZXQuCiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcX2Nhc2VsZXNzX3JlbW92ZShbJ0NvbnRlbnQtVHlwZSddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ11bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScKICAgICAgICAgICAgICAgIC4gJHJlcXVlc3QtPmdldEJvZHkoKS0+Z2V0Qm91bmRhcnkoKTsKICAgICAgICB9CgogICAgICAgIC8vIE1lcmdlIGluIGNvbmRpdGlvbmFsIGhlYWRlcnMgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydfY29uZGl0aW9uYWwnXSkpIHsKICAgICAgICAgICAgLy8gQnVpbGQgdXAgdGhlIGNoYW5nZXMgc28gaXQncyBpbiBhIHNpbmdsZSBjbG9uZSBvZiB0aGUgbWVzc2FnZS4KICAgICAgICAgICAgJG1vZGlmeSA9IFtdOwogICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcigkaykpIHsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWyRrXSA9ICR2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ID0gUHNyN1xtb2RpZnlfcmVxdWVzdCgkcmVxdWVzdCwgJG1vZGlmeSk7CiAgICAgICAgICAgIC8vIERvbid0IHBhc3MgdGhpcyBpbnRlcm5hbCB2YWx1ZSBhbG9uZyB0byBtaWRkbGV3YXJlL2hhbmRsZXJzLgogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXF1ZXN0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW52YWxpZEJvZHkoKQogICAgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYXNzaW5nIGluIHRoZSAiYm9keSIgcmVxdWVzdCAnCiAgICAgICAgICAgIC4gJ29wdGlvbiBhcyBhbiBhcnJheSB0byBzZW5kIGEgUE9TVCByZXF1ZXN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcKICAgICAgICAgICAgLiAnUGxlYXNlIHVzZSB0aGUgImZvcm1fcGFyYW1zIiByZXF1ZXN0IG9wdGlvbiB0byBzZW5kIGEgJwogICAgICAgICAgICAuICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdCwgb3IgdGhlICJtdWx0aXBhcnQiICcKICAgICAgICAgICAgLiAncmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhIG11bHRpcGFydC9mb3JtLWRhdGEgcmVxdWVzdC4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/ClientInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxHdXp6bGVFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogQ2xpZW50IGludGVyZmFjZSBmb3Igc2VuZGluZyBIVFRQIHJlcXVlc3RzLgogKi8KaW50ZXJmYWNlIENsaWVudEludGVyZmFjZQp7CiAgICBjb25zdCBWRVJTSU9OID0gJzYuMy4zJzsKCiAgICAvKioKICAgICAqIFNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOwoKICAgIC8qKgogICAgICogQXN5bmNocm9ub3VzbHkgc2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBzZW5kCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGdpdmVuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB0byB0aGUgdHJhbnNmZXIuCiAgICAgKgogICAgICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kQXN5bmMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJG1ldGhvZCAgSFRUUCBtZXRob2QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdCgkbWV0aG9kLCAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYygkbWV0aG9kLCAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTsKCiAgICAvKioKICAgICAqIEdldCBhIGNsaWVudCBjb25maWd1cmF0aW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBUaGVzZSBvcHRpb25zIGluY2x1ZGUgZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgb2YgdGhlIGNsaWVudCwgYSAiaGFuZGxlciIKICAgICAqIChpZiB1dGlsaXplZCBieSB0aGUgY29uY3JldGUgY2xpZW50KSwgYW5kIGEgImJhc2VfdXJpIiBpZiB1dGlsaXplZCBieQogICAgICogdGhlIGNvbmNyZXRlIGNsaWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG9wdGlvbiBUaGUgY29uZmlnIG9wdGlvbiB0byByZXRyaWV2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoJG9wdGlvbiA9IG51bGwpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogQ29va2llIGphciB0aGF0IHN0b3JlcyBjb29raWVzIGFzIGFuIGFycmF5CiAqLwpjbGFzcyBDb29raWVKYXIgaW1wbGVtZW50cyBDb29raWVKYXJJbnRlcmZhY2UKewogICAgLyoqIEB2YXIgU2V0Q29va2llW10gTG9hZGVkIGNvb2tpZSBkYXRhICovCiAgICBwcml2YXRlICRjb29raWVzID0gW107CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkc3RyaWN0TW9kZTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRzdHJpY3RNb2RlICAgU2V0IHRvIHRydWUgdG8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIGludmFsaWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llcyBhcmUgYWRkZWQgdG8gdGhlIGNvb2tpZSBqYXIuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvb2tpZUFycmF5IEFycmF5IG9mIFNldENvb2tpZSBvYmplY3RzIG9yIGEgaGFzaCBvZgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBTZXRDb29raWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpY3RNb2RlID0gZmFsc2UsICRjb29raWVBcnJheSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zdHJpY3RNb2RlID0gJHN0cmljdE1vZGU7CgogICAgICAgIGZvcmVhY2ggKCRjb29raWVBcnJheSBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICghKCRjb29raWUgaW5zdGFuY2VvZiBTZXRDb29raWUpKSB7CiAgICAgICAgICAgICAgICAkY29va2llID0gbmV3IFNldENvb2tpZSgkY29va2llKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRjb29raWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBDb29raWUgamFyIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkgYW5kIGRvbWFpbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb29raWVzIENvb2tpZXMgdG8gY3JlYXRlIHRoZSBqYXIgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluICBEb21haW4gdG8gc2V0IHRoZSBjb29raWVzIHRvCiAgICAgKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5ICRjb29raWVzLCAkZG9tYWluKQogICAgewogICAgICAgICRjb29raWVKYXIgPSBuZXcgc2VsZigpOwogICAgICAgIGZvcmVhY2ggKCRjb29raWVzIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkY29va2llSmFyLT5zZXRDb29raWUobmV3IFNldENvb2tpZShbCiAgICAgICAgICAgICAgICAnRG9tYWluJyAgPT4gJGRvbWFpbiwKICAgICAgICAgICAgICAgICdOYW1lJyAgICA9PiAkbmFtZSwKICAgICAgICAgICAgICAgICdWYWx1ZScgICA9PiAkdmFsdWUsCiAgICAgICAgICAgICAgICAnRGlzY2FyZCcgPT4gdHJ1ZQogICAgICAgICAgICBdKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvb2tpZUphcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29va2llVmFsdWUoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBpZiB0aGlzIGNvb2tpZSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIHN0b3JhZ2UKICAgICAqIHRoYXQgc3Vydml2ZXMgYmV0d2VlbiByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0Q29va2llICRjb29raWUgQmVpbmcgZXZhbHVhdGVkLgogICAgICogQHBhcmFtIGJvb2wgJGFsbG93U2Vzc2lvbkNvb2tpZXMgSWYgd2Ugc2hvdWxkIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaG91bGRQZXJzaXN0KAogICAgICAgIFNldENvb2tpZSAkY29va2llLAogICAgICAgICRhbGxvd1Nlc3Npb25Db29raWVzID0gZmFsc2UKICAgICkgewogICAgICAgIGlmICgkY29va2llLT5nZXRFeHBpcmVzKCkgfHwgJGFsbG93U2Vzc2lvbkNvb2tpZXMpIHsKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgY29va2llIGJhc2VkIG9uIHRoZSBuYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBjb29raWUgbmFtZSB0byBzZWFyY2ggZm9yCiAgICAgKiBAcmV0dXJuIFNldENvb2tpZXxudWxsIGNvb2tpZSB0aGF0IHdhcyBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llQnlOYW1lKCRuYW1lKQogICAgewogICAgICAgIC8vIGRvbid0IGFsbG93IGEgbnVsbCBuYW1lCiAgICAgICAgaWYgKCRuYW1lID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICgkY29va2llLT5nZXROYW1lKCkgIT09IG51bGwgJiYgc3RyY2FzZWNtcCgkY29va2llLT5nZXROYW1lKCksICRuYW1lKSA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb29raWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB7CiAgICAgICAgICAgIHJldHVybiAkY29va2llLT50b0FycmF5KCk7CiAgICAgICAgfSwgJHRoaXMtPmdldEl0ZXJhdG9yKCktPmdldEFycmF5Q29weSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoJGRvbWFpbiA9IG51bGwsICRwYXRoID0gbnVsbCwgJG5hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmICghJGRvbWFpbikgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFtdOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCEkcGF0aCkgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB1c2UgKCRwYXRoLCAkZG9tYWluKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZWlmICghJG5hbWUpIHsKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMgPSBhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgdXNlICgkcGF0aCwgJGRvbWFpbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB1c2UgKCRwYXRoLCAkZG9tYWluLCAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPmdldE5hbWUoKSA9PSAkbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAkY29va2llLT5tYXRjaGVzUGF0aCgkcGF0aCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkZG9tYWluKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclNlc3Npb25Db29raWVzKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGNvb2tpZS0+Z2V0RXhwaXJlcygpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29va2llKFNldENvb2tpZSAkY29va2llKQogICAgewogICAgICAgIC8vIElmIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSAoYnV0IG5vdCAwKSwgaWdub3JlIHRoZSBzZXQtY29va2llCiAgICAgICAgLy8gc3RyaW5nIGVudGlyZWx5LgogICAgICAgICRuYW1lID0gJGNvb2tpZS0+Z2V0TmFtZSgpOwogICAgICAgIGlmICghJG5hbWUgJiYgJG5hbWUgIT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBPbmx5IGFsbG93IGNvb2tpZXMgd2l0aCBzZXQgYW5kIHZhbGlkIGRvbWFpbiwgbmFtZSwgdmFsdWUKICAgICAgICAkcmVzdWx0ID0gJGNvb2tpZS0+dmFsaWRhdGUoKTsKICAgICAgICBpZiAoJHJlc3VsdCAhPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmljdE1vZGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb29raWU6ICcgLiAkcmVzdWx0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZW1vdmVDb29raWVJZkVtcHR5KCRjb29raWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZXNvbHZlIGNvbmZsaWN0cyB3aXRoIHByZXZpb3VzbHkgc2V0IGNvb2tpZXMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAkaSA9PiAkYykgewoKICAgICAgICAgICAgLy8gVHdvIGNvb2tpZXMgYXJlIGlkZW50aWNhbCwgd2hlbiB0aGVpciBwYXRoLCBhbmQgZG9tYWluIGFyZQogICAgICAgICAgICAvLyBpZGVudGljYWwuCiAgICAgICAgICAgIGlmICgkYy0+Z2V0UGF0aCgpICE9ICRjb29raWUtPmdldFBhdGgoKSB8fAogICAgICAgICAgICAgICAgJGMtPmdldERvbWFpbigpICE9ICRjb29raWUtPmdldERvbWFpbigpIHx8CiAgICAgICAgICAgICAgICAkYy0+Z2V0TmFtZSgpICE9ICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGUgcHJldmlvdXNseSBzZXQgY29va2llIGlzIGEgZGlzY2FyZCBjb29raWUgYW5kIHRoaXMgb25lIGlzCiAgICAgICAgICAgIC8vIG5vdCBzbyBhbGxvdyB0aGUgbmV3IGNvb2tpZSB0byBiZSBzZXQKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGMtPmdldERpc2NhcmQoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGNvb2tpZSdzIGV4cGlyYXRpb24gaXMgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUsIHRoZW4KICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIGNvb2tpZQogICAgICAgICAgICBpZiAoJGNvb2tpZS0+Z2V0RXhwaXJlcygpID4gJGMtPmdldEV4cGlyZXMoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIGJldHRlciBjaGFuZ2UgaXQKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldFZhbHVlKCkgIT09ICRjLT5nZXRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+Y29va2llc1skaV0pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRoZSBjb29raWUgZXhpc3RzLCBzbyBubyBuZWVkIHRvIGNvbnRpbnVlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb29raWVzW10gPSAkY29va2llOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+Y29va2llcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKGFycmF5X3ZhbHVlcygkdGhpcy0+Y29va2llcykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleHRyYWN0Q29va2llcygKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgKSB7CiAgICAgICAgaWYgKCRjb29raWVIZWFkZXIgPSAkcmVzcG9uc2UtPmdldEhlYWRlcignU2V0LUNvb2tpZScpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRjb29raWVIZWFkZXIgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgJHNjID0gU2V0Q29va2llOjpmcm9tU3RyaW5nKCRjb29raWUpOwogICAgICAgICAgICAgICAgaWYgKCEkc2MtPmdldERvbWFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNjLT5zZXREb21haW4oJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKDAgIT09IHN0cnBvcygkc2MtPmdldFBhdGgoKSwgJy8nKSkgewogICAgICAgICAgICAgICAgICAgICRzYy0+c2V0UGF0aCgkdGhpcy0+Z2V0Q29va2llUGF0aEZyb21SZXF1ZXN0KCRyZXF1ZXN0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRzYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyBjb29raWUgcGF0aCBmb2xsb3dpbmcgUkZDIDYyNjUgc2VjdGlvbiA1LjEuNAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4xLjQKICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCkKICAgIHsKICAgICAgICAkdXJpUGF0aCA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgnJyAgPT09ICR1cmlQYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAnLyc7CiAgICAgICAgfQogICAgICAgIGlmICgwICE9PSBzdHJwb3MoJHVyaVBhdGgsICcvJykpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CiAgICAgICAgaWYgKCcvJyA9PT0gJHVyaVBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CiAgICAgICAgaWYgKDAgPT09ICRsYXN0U2xhc2hQb3MgPSBzdHJycG9zKCR1cmlQYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Vic3RyKCR1cmlQYXRoLCAwLCAkbGFzdFNsYXNoUG9zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgICR2YWx1ZXMgPSBbXTsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICAkcGF0aCA9ICR1cmktPmdldFBhdGgoKSA/OiAnLyc7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKSAmJgogICAgICAgICAgICAgICAgJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkaG9zdCkgJiYKICAgICAgICAgICAgICAgICEkY29va2llLT5pc0V4cGlyZWQoKSAmJgogICAgICAgICAgICAgICAgKCEkY29va2llLT5nZXRTZWN1cmUoKSB8fCAkc2NoZW1lID09PSAnaHR0cHMnKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICRjb29raWUtPmdldE5hbWUoKSAuICc9JwogICAgICAgICAgICAgICAgICAgIC4gJGNvb2tpZS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZXMKICAgICAgICAgICAgPyAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29va2llJywgaW1wbG9kZSgnOyAnLCAkdmFsdWVzKSkKICAgICAgICAgICAgOiAkcmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIElmIGEgY29va2llIGFscmVhZHkgZXhpc3RzIGFuZCB0aGUgc2VydmVyIGFza3MgdG8gc2V0IGl0IGFnYWluIHdpdGggYQogICAgICogbnVsbCB2YWx1ZSwgdGhlIGNvb2tpZSBtdXN0IGJlIGRlbGV0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIFNldENvb2tpZSAkY29va2llCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVtb3ZlQ29va2llSWZFbXB0eShTZXRDb29raWUgJGNvb2tpZSkKICAgIHsKICAgICAgICAkY29va2llVmFsdWUgPSAkY29va2llLT5nZXRWYWx1ZSgpOwogICAgICAgIGlmICgkY29va2llVmFsdWUgPT09IG51bGwgfHwgJGNvb2tpZVZhbHVlID09PSAnJykgewogICAgICAgICAgICAkdGhpcy0+Y2xlYXIoCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXREb21haW4oKSwKICAgICAgICAgICAgICAgICRjb29raWUtPmdldFBhdGgoKSwKICAgICAgICAgICAgICAgICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogU3RvcmVzIEhUVFAgY29va2llcy4KICoKICogSXQgZXh0cmFjdHMgY29va2llcyBmcm9tIEhUVFAgcmVxdWVzdHMsIGFuZCByZXR1cm5zIHRoZW0gaW4gSFRUUCByZXNwb25zZXMuCiAqIENvb2tpZUphckludGVyZmFjZSBpbnN0YW5jZXMgYXV0b21hdGljYWxseSBleHBpcmUgY29udGFpbmVkIGNvb2tpZXMgd2hlbgogKiBuZWNlc3NhcnkuIFN1YmNsYXNzZXMgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcKICogY29va2llcyBmcm9tIGEgZmlsZSwgZGF0YWJhc2UsIGV0Yy4KICoKICogQGxpbmsgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwgSW5zcGlyYXRpb24KICovCmludGVyZmFjZSBDb29raWVKYXJJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSByZXF1ZXN0IHdpdGggYWRkZWQgY29va2llIGhlYWRlcnMuCiAgICAgKgogICAgICogSWYgbm8gbWF0Y2hpbmcgY29va2llcyBhcmUgZm91bmQgaW4gdGhlIGNvb2tpZSBqYXIsIHRoZW4gbm8gQ29va2llCiAgICAgKiBoZWFkZXIgaXMgYWRkZWQgdG8gdGhlIHJlcXVlc3QgYW5kIHRoZSBzYW1lIHJlcXVlc3QgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCBvYmplY3QgdG8gbW9kaWZ5LgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZSByZXR1cm5zIHRoZSBtb2RpZmllZCByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTsKCiAgICAvKioKICAgICAqIEV4dHJhY3QgY29va2llcyBmcm9tIGFuIEhUVFAgcmVzcG9uc2UgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIENvb2tpZUphci4KICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSBSZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdENvb2tpZXMoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICk7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY29va2llIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEBwYXJhbSBTZXRDb29raWUgJGNvb2tpZSBDb29raWUgdG8gc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb29raWUoU2V0Q29va2llICRjb29raWUpOwoKICAgIC8qKgogICAgICogUmVtb3ZlIGNvb2tpZXMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKgogICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBlbXB0eSB0aGUgd2hvbGUgY29va2llIGphci4KICAgICAqIElmIGdpdmVuIGEgJGRvbWFpbiBhcmd1bWVudCBvbmx5IGNvb2tpZXMgYmVsb25naW5nIHRvIHRoYXQgZG9tYWluIHdpbGwKICAgICAqIGJlIHJlbW92ZWQuIElmIGdpdmVuIGEgJGRvbWFpbiBhbmQgJHBhdGggYXJndW1lbnQsIGNvb2tpZXMgYmVsb25naW5nIHRvCiAgICAgKiB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aGluIHRoYXQgZG9tYWluIGFyZSByZW1vdmVkLiBJZiBnaXZlbiBhbGwgdGhyZWUKICAgICAqIGFyZ3VtZW50cywgdGhlbiB0aGUgY29va2llIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLCBwYXRoIGFuZCBkb21haW4gaXMKICAgICAqIHJlbW92ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluIENsZWFycyBjb29raWVzIG1hdGNoaW5nIGEgZG9tYWluCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgQ2xlYXJzIGNvb2tpZXMgbWF0Y2hpbmcgYSBkb21haW4gYW5kIHBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICBDbGVhcnMgY29va2llcyBtYXRjaGluZyBhIGRvbWFpbiwgcGF0aCwgYW5kIG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIENvb2tpZUphckludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoJGRvbWFpbiA9IG51bGwsICRwYXRoID0gbnVsbCwgJG5hbWUgPSBudWxsKTsKCiAgICAvKioKICAgICAqIERpc2NhcmQgYWxsIHNlc3Npb25zIGNvb2tpZXMuCiAgICAgKgogICAgICogUmVtb3ZlcyBjb29raWVzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleHBpcmUgZmllbGQgb3IgYSBoYXZlIGEgZGlzY2FyZAogICAgICogZmllbGQgc2V0IHRvIHRydWUuIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGFnZW50IHNodXRzIGRvd24gYWNjb3JkaW5nCiAgICAgKiB0byBSRkMgMjk2NS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyU2Vzc2lvbkNvb2tpZXMoKTsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBjb29raWUgamFyIHRvIGFuIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFBlcnNpc3RzIG5vbi1zZXNzaW9uIGNvb2tpZXMgdXNpbmcgYSBKU09OIGZvcm1hdHRlZCBmaWxlCiAqLwpjbGFzcyBGaWxlQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKiBAdmFyIHN0cmluZyBmaWxlbmFtZSAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqIEB2YXIgYm9vbCBDb250cm9sIHdoZXRoZXIgdG8gcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMgb3Igbm90LiAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBGaWxlQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZUZpbGUgICAgICAgIEZpbGUgdG8gc3RvcmUgdGhlIGNvb2tpZSBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb29raWVGaWxlLCAkc3RvcmVTZXNzaW9uQ29va2llcyA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5maWxlbmFtZSA9ICRjb29raWVGaWxlOwogICAgICAgICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzID0gJHN0b3JlU2Vzc2lvbkNvb2tpZXM7CgogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY29va2llRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmxvYWQoJGNvb2tpZUZpbGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBmaWxlIHdoZW4gc2h1dHRpbmcgZG93bgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNhdmUoJHRoaXMtPmZpbGVuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBjb29raWVzIHRvIGEgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlIHRvIHNhdmUKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lKQogICAgewogICAgICAgICRqc29uID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRoaXMgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAvKiogQHZhciBTZXRDb29raWUgJGNvb2tpZSAqLwogICAgICAgICAgICBpZiAoQ29va2llSmFyOjpzaG91bGRQZXJzaXN0KCRjb29raWUsICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzKSkgewogICAgICAgICAgICAgICAgJGpzb25bXSA9ICRjb29raWUtPnRvQXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGpzb25TdHIgPSBcR3V6emxlSHR0cFxqc29uX2VuY29kZSgkanNvbik7CiAgICAgICAgaWYgKGZhbHNlID09PSBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRqc29uU3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBzYXZlIGZpbGUgeyRmaWxlbmFtZX0iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGNvb2tpZXMgZnJvbSBhIEpTT04gZm9ybWF0dGVkIGZpbGUuCiAgICAgKgogICAgICogT2xkIGNvb2tpZXMgYXJlIGtlcHQgdW5sZXNzIG92ZXJ3cml0dGVuIGJ5IG5ld2x5IGxvYWRlZCBvbmVzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIENvb2tpZSBmaWxlIHRvIGxvYWQuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkanNvbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkanNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBsb2FkIGZpbGUgeyRmaWxlbmFtZX0iKTsKICAgICAgICB9IGVsc2VpZiAoJGpzb24gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gXEd1enpsZUh0dHBcanNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgIGlmIChpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoanNvbl9kZWNvZGUoJGpzb24sIHRydWUpIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRDb29raWUobmV3IFNldENvb2tpZSgkY29va2llKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoc3RybGVuKCRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgY29va2llIGZpbGU6IHskZmlsZW5hbWV9Iik7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFBlcnNpc3RzIGNvb2tpZXMgaW4gdGhlIGNsaWVudCBzZXNzaW9uCiAqLwpjbGFzcyBTZXNzaW9uQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKiBAdmFyIHN0cmluZyBzZXNzaW9uIGtleSAqLwogICAgcHJpdmF0ZSAkc2Vzc2lvbktleTsKICAgIAogICAgLyoqIEB2YXIgYm9vbCBDb250cm9sIHdoZXRoZXIgdG8gcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMgb3Igbm90LiAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBTZXNzaW9uQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlc3Npb25LZXkgICAgICAgIFNlc3Npb24ga2V5IG5hbWUgdG8gc3RvcmUgdGhlIGNvb2tpZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBpbiBzZXNzaW9uCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlc3Npb25LZXksICRzdG9yZVNlc3Npb25Db29raWVzID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlc3Npb25LZXkgPSAkc2Vzc2lvbktleTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwogICAgICAgICR0aGlzLT5sb2FkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlcyBjb29raWVzIHRvIHNlc3Npb24gd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBjb29raWVzIHRvIHRoZSBjbGllbnQgc2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpCiAgICB7CiAgICAgICAgJGpzb24gPSBbXTsKICAgICAgICBmb3JlYWNoICgkdGhpcyBhcyAkY29va2llKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIFNldENvb2tpZSAkY29va2llICovCiAgICAgICAgICAgIGlmIChDb29raWVKYXI6OnNob3VsZFBlcnNpc3QoJGNvb2tpZSwgJHRoaXMtPnN0b3JlU2Vzc2lvbkNvb2tpZXMpKSB7CiAgICAgICAgICAgICAgICAkanNvbltdID0gJGNvb2tpZS0+dG9BcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkX1NFU1NJT05bJHRoaXMtPnNlc3Npb25LZXldID0ganNvbl9lbmNvZGUoJGpzb24pOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGNsaWVudCBzZXNzaW9uIGludG8gdGhlIGRhdGEgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWQoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyR0aGlzLT5zZXNzaW9uS2V5XSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfU0VTU0lPTlskdGhpcy0+c2Vzc2lvbktleV0sIHRydWUpOwogICAgICAgIGlmIChpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnNldENvb2tpZShuZXcgU2V0Q29va2llKCRjb29raWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChzdHJsZW4oJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBjb29raWUgZGF0YSIpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFNldC1Db29raWUgb2JqZWN0CiAqLwpjbGFzcyBTZXRDb29raWUKewogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgc3RhdGljICRkZWZhdWx0cyA9IFsKICAgICAgICAnTmFtZScgICAgID0+IG51bGwsCiAgICAgICAgJ1ZhbHVlJyAgICA9PiBudWxsLAogICAgICAgICdEb21haW4nICAgPT4gbnVsbCwKICAgICAgICAnUGF0aCcgICAgID0+ICcvJywKICAgICAgICAnTWF4LUFnZScgID0+IG51bGwsCiAgICAgICAgJ0V4cGlyZXMnICA9PiBudWxsLAogICAgICAgICdTZWN1cmUnICAgPT4gZmFsc2UsCiAgICAgICAgJ0Rpc2NhcmQnICA9PiBmYWxzZSwKICAgICAgICAnSHR0cE9ubHknID0+IGZhbHNlCiAgICBdOwoKICAgIC8qKiBAdmFyIGFycmF5IENvb2tpZSBkYXRhICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IFNldENvb2tpZSBvYmplY3QgZnJvbSBhIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBTZXQtQ29va2llIGhlYWRlciBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKCRjb29raWUpCiAgICB7CiAgICAgICAgLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IHJldHVybiBhcnJheQogICAgICAgICRkYXRhID0gc2VsZjo6JGRlZmF1bHRzOwogICAgICAgIC8vIEV4cGxvZGUgdGhlIGNvb2tpZSBzdHJpbmcgdXNpbmcgYSBzZXJpZXMgb2Ygc2VtaWNvbG9ucwogICAgICAgICRwaWVjZXMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnOycsICRjb29raWUpKSk7CiAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSAoZmlyc3Qga3ZwKSBtdXN0IGV4aXN0IGFuZCBpbmNsdWRlIGFuIGVxdWFsIHNpZ24uCiAgICAgICAgaWYgKGVtcHR5KCRwaWVjZXNbMF0pIHx8ICFzdHJwb3MoJHBpZWNlc1swXSwgJz0nKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBjb29raWUgcGllY2VzIGludG8gdGhlIHBhcnNlZCBkYXRhIGFycmF5CiAgICAgICAgZm9yZWFjaCAoJHBpZWNlcyBhcyAkcGFydCkgewogICAgICAgICAgICAkY29va2llUGFydHMgPSBleHBsb2RlKCc9JywgJHBhcnQsIDIpOwogICAgICAgICAgICAka2V5ID0gdHJpbSgkY29va2llUGFydHNbMF0pOwogICAgICAgICAgICAkdmFsdWUgPSBpc3NldCgkY29va2llUGFydHNbMV0pCiAgICAgICAgICAgICAgICA/IHRyaW0oJGNvb2tpZVBhcnRzWzFdLCAiIFxuXHJcdFwwXHgwQiIpCiAgICAgICAgICAgICAgICA6IHRydWU7CgogICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBub24tY29va2llcyB3aGVuIGNvb2tpZXMgaGF2ZSBiZWVuIGZvdW5kCiAgICAgICAgICAgIGlmIChlbXB0eSgkZGF0YVsnTmFtZSddKSkgewogICAgICAgICAgICAgICAgJGRhdGFbJ05hbWUnXSA9ICRrZXk7CiAgICAgICAgICAgICAgICAkZGF0YVsnVmFsdWUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoc2VsZjo6JGRlZmF1bHRzKSBhcyAkc2VhcmNoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKCRzZWFyY2gsICRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRzZWFyY2hdID0gJHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRkYXRhWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIEFycmF5IG9mIGNvb2tpZSBkYXRhIHByb3ZpZGVkIGJ5IGEgQ29va2llIHBhcnNlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5X3JlcGxhY2Uoc2VsZjo6JGRlZmF1bHRzLCAkZGF0YSk7CiAgICAgICAgLy8gRXh0cmFjdCB0aGUgRXhwaXJlcyB2YWx1ZSBhbmQgdHVybiBpdCBpbnRvIGEgVU5JWCB0aW1lc3RhbXAgaWYgbmVlZGVkCiAgICAgICAgaWYgKCEkdGhpcy0+Z2V0RXhwaXJlcygpICYmICR0aGlzLT5nZXRNYXhBZ2UoKSkgewogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIEV4cGlyZXMgZGF0ZQogICAgICAgICAgICAkdGhpcy0+c2V0RXhwaXJlcyh0aW1lKCkgKyAkdGhpcy0+Z2V0TWF4QWdlKCkpOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+Z2V0RXhwaXJlcygpICYmICFpc19udW1lcmljKCR0aGlzLT5nZXRFeHBpcmVzKCkpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCR0aGlzLT5nZXRFeHBpcmVzKCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgJHN0ciA9ICR0aGlzLT5kYXRhWydOYW1lJ10gLiAnPScgLiAkdGhpcy0+ZGF0YVsnVmFsdWUnXSAuICc7ICc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCRrICE9PSAnTmFtZScgJiYgJGsgIT09ICdWYWx1ZScgJiYgJHYgIT09IG51bGwgJiYgJHYgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdFeHBpcmVzJykgewogICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJ0V4cGlyZXM9JyAuIGdtZGF0ZSgnRCwgZCBNIFkgSDppOnMgXEdcTVxUJywgJHYpIC4gJzsgJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAoJHYgPT09IHRydWUgPyAkayA6ICJ7JGt9PXskdn0iKSAuICc7ICc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBydHJpbSgkc3RyLCAnOyAnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb29raWUgbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ05hbWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgY29va2llIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENvb2tpZSBuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKCRuYW1lKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydOYW1lJ10gPSAkbmFtZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgY29va2llIHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ1ZhbHVlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvb2tpZSB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIENvb2tpZSB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWUoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydWYWx1ZSddID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkb21haW4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb21haW4oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRG9tYWluJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRvbWFpbiBvZiB0aGUgY29va2llCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREb21haW4oJGRvbWFpbikKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRG9tYWluJ10gPSAkZG9tYWluOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwYXRoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnUGF0aCddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXRoIG9mIHRoZSBjb29raWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggb2YgdGhlIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aCgkcGF0aCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnUGF0aCddID0gJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIGxpZmV0aW1lIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcwogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heEFnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydNYXgtQWdlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1heC1hZ2Ugb2YgdGhlIGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1heEFnZSBNYXggYWdlIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4QWdlKCRtYXhBZ2UpCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbJ01heC1BZ2UnXSA9ICRtYXhBZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgVU5JWCB0aW1lc3RhbXAgd2hlbiB0aGUgY29va2llIEV4cGlyZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0V4cGlyZXMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdW5peCB0aW1lc3RhbXAgZm9yIHdoaWNoIHRoZSBjb29raWUgd2lsbCBleHBpcmUKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lc3RhbXAgVW5peCB0aW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4cGlyZXMoJHRpbWVzdGFtcCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRXhwaXJlcyddID0gaXNfbnVtZXJpYygkdGltZXN0YW1wKQogICAgICAgICAgICA/IChpbnQpICR0aW1lc3RhbXAKICAgICAgICAgICAgOiBzdHJ0b3RpbWUoJHRpbWVzdGFtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlY3VyZSBjb29raWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjdXJlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ1NlY3VyZSddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoZSBjb29raWUgaXMgc2VjdXJlCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNlY3VyZSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiBzZWN1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlY3VyZSgkc2VjdXJlKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydTZWN1cmUnXSA9ICRzZWN1cmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlc3Npb24gY29va2llCiAgICAgKgogICAgICogQHJldHVybiBudWxsfGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc2NhcmQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSBzZXNzaW9uIGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICRkaXNjYXJkIFNldCB0byB0cnVlIG9yIGZhbHNlIGlmIHRoaXMgaXMgYSBzZXNzaW9uIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGlzY2FyZCgkZGlzY2FyZCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddID0gJGRpc2NhcmQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhbiBIVFRQIG9ubHkgY29va2llCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIdHRwT25seSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydIdHRwT25seSddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYW4gSFRUUCBvbmx5IGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICRodHRwT25seSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiB0aGlzIGlzIEhUVFAgb25seQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cE9ubHkoJGh0dHBPbmx5KQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydIdHRwT25seSddID0gJGh0dHBPbmx5OwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIGNvb2tpZSBtYXRjaGVzIGEgcGF0aCB2YWx1ZS4KICAgICAqCiAgICAgKiBBIHJlcXVlc3QtcGF0aCBwYXRoLW1hdGNoZXMgYSBnaXZlbiBjb29raWUtcGF0aCBpZiBhdCBsZWFzdCBvbmUgb2YKICAgICAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkczoKICAgICAqCiAgICAgKiAtIFRoZSBjb29raWUtcGF0aCBhbmQgdGhlIHJlcXVlc3QtcGF0aCBhcmUgaWRlbnRpY2FsLgogICAgICogLSBUaGUgY29va2llLXBhdGggaXMgYSBwcmVmaXggb2YgdGhlIHJlcXVlc3QtcGF0aCwgYW5kIHRoZSBsYXN0CiAgICAgKiAgIGNoYXJhY3RlciBvZiB0aGUgY29va2llLXBhdGggaXMgJXgyRiAoIi8iKS4KICAgICAqIC0gVGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0LXBhdGgsIGFuZCB0aGUgZmlyc3QKICAgICAqICAgY2hhcmFjdGVyIG9mIHRoZSByZXF1ZXN0LXBhdGggdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZS0KICAgICAqICAgcGF0aCBpcyBhICV4MkYgKCIvIikgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RQYXRoIFBhdGggdG8gY2hlY2sgYWdhaW5zdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2hlc1BhdGgoJHJlcXVlc3RQYXRoKQogICAgewogICAgICAgICRjb29raWVQYXRoID0gJHRoaXMtPmdldFBhdGgoKTsKCiAgICAgICAgLy8gTWF0Y2ggb24gZXhhY3QgbWF0Y2hlcyBvciB3aGVuIHBhdGggaXMgdGhlIGRlZmF1bHQgZW1wdHkgIi8iCiAgICAgICAgaWYgKCRjb29raWVQYXRoID09PSAnLycgfHwgJGNvb2tpZVBhdGggPT0gJHJlcXVlc3RQYXRoKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0IHBhdGguCiAgICAgICAgaWYgKDAgIT09IHN0cnBvcygkcmVxdWVzdFBhdGgsICRjb29raWVQYXRoKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBNYXRjaCBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvb2tpZS1wYXRoIGlzICIvIgogICAgICAgIGlmIChzdWJzdHIoJGNvb2tpZVBhdGgsIC0xLCAxKSA9PT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2ggaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgaW5jbHVkZWQgaW4gY29va2llIHBhdGggaXMgIi8iCiAgICAgICAgcmV0dXJuIHN1YnN0cigkcmVxdWVzdFBhdGgsIHN0cmxlbigkY29va2llUGF0aCksIDEpID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIG1hdGNoZXMgYSBkb21haW4gdmFsdWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21haW4gRG9tYWluIHRvIGNoZWNrIGFnYWluc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXNEb21haW4oJGRvbWFpbikKICAgIHsKICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgJy4nIGFzIHBlciBzcGVjIGluIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyNjUjc2VjdGlvbi01LjIuMwogICAgICAgICRjb29raWVEb21haW4gPSBsdHJpbSgkdGhpcy0+Z2V0RG9tYWluKCksICcuJyk7CgogICAgICAgIC8vIERvbWFpbiBub3Qgc2V0IG9yIGV4YWN0IG1hdGNoLgogICAgICAgIGlmICghJGNvb2tpZURvbWFpbiB8fCAhc3RyY2FzZWNtcCgkZG9tYWluLCAkY29va2llRG9tYWluKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoaW5nIHRoZSBzdWJkb21haW4gYWNjb3JkaW5nIHRvIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyNjUjc2VjdGlvbi01LjEuMwogICAgICAgIGlmIChmaWx0ZXJfdmFyKCRkb21haW4sIEZJTFRFUl9WQUxJREFURV9JUCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChib29sKSBwcmVnX21hdGNoKCcvXC4nIC4gcHJlZ19xdW90ZSgkY29va2llRG9tYWluLCAnLycpIC4gJyQvJywgJGRvbWFpbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIGlzIGV4cGlyZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRXhwaXJlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRFeHBpcmVzKCkgIT09IG51bGwgJiYgdGltZSgpID4gJHRoaXMtPmdldEV4cGlyZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIFJGQyA2MjY1CiAgICAgKgogICAgICogQHJldHVybiBib29sfHN0cmluZyBSZXR1cm5zIHRydWUgaWYgdmFsaWQgb3IgYW4gZXJyb3IgbWVzc2FnZSBpZiBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpCiAgICB7CiAgICAgICAgLy8gTmFtZXMgbXVzdCBub3QgYmUgZW1wdHksIGJ1dCBjYW4gYmUgMAogICAgICAgICRuYW1lID0gJHRoaXMtPmdldE5hbWUoKTsKICAgICAgICBpZiAoZW1wdHkoJG5hbWUpICYmICFpc19udW1lcmljKCRuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSc7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBhbnkgb2YgdGhlIGludmFsaWQgY2hhcmFjdGVycyBhcmUgcHJlc2VudCBpbiB0aGUgY29va2llIG5hbWUKICAgICAgICBpZiAocHJlZ19tYXRjaCgKICAgICAgICAgICAgJy9bXHgwMC1ceDIwXHgyMlx4MjgtXHgyOVx4MmNceDJmXHgzYS1ceDQwXHg1Y1x4N2JceDdkXHg3Zl0vJywKICAgICAgICAgICAgJG5hbWUKICAgICAgICApKSB7CiAgICAgICAgICAgIHJldHVybiAnQ29va2llIG5hbWUgbXVzdCBub3QgY29udGFpbiBpbnZhbGlkIGNoYXJhY3RlcnM6IEFTQ0lJICcKICAgICAgICAgICAgICAgIC4gJ0NvbnRyb2wgY2hhcmFjdGVycyAoMC0zMTsxMjcpLCBzcGFjZSwgdGFiIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgLiAnZm9sbG93aW5nIGNoYXJhY3RlcnM6ICgpPD5ALDs6XCIvPz17fSc7CiAgICAgICAgfQoKICAgICAgICAvLyBWYWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSwgYnV0IGNhbiBiZSAwCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPmdldFZhbHVlKCk7CiAgICAgICAgaWYgKGVtcHR5KCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknOwogICAgICAgIH0KCiAgICAgICAgLy8gRG9tYWlucyBtdXN0IG5vdCBiZSBlbXB0eSwgYnV0IGNhbiBiZSAwCiAgICAgICAgLy8gQSAiMCIgaXMgbm90IGEgdmFsaWQgaW50ZXJuZXQgZG9tYWluLCBidXQgbWF5IGJlIHVzZWQgYXMgc2VydmVyIG5hbWUKICAgICAgICAvLyBpbiBhIHByaXZhdGUgbmV0d29yay4KICAgICAgICAkZG9tYWluID0gJHRoaXMtPmdldERvbWFpbigpOwogICAgICAgIGlmIChlbXB0eSgkZG9tYWluKSAmJiAhaXNfbnVtZXJpYygkZG9tYWluKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgZG9tYWluIG11c3Qgbm90IGJlIGVtcHR5JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogRXhjZXB0aW9uIHdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMgKDR4eCBvciA1eHggZXJyb3IpCiAqLwpjbGFzcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24KewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10KICAgICkgewogICAgICAgIGlmIChudWxsID09PSAkcmVzcG9uc2UpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoCiAgICAgICAgICAgICAgICAnSW5zdGFudGlhdGluZyB0aGUgJyAuIF9fQ0xBU1NfXyAuICcgY2xhc3Mgd2l0aG91dCBhIFJlc3BvbnNlIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuJywKICAgICAgICAgICAgICAgIEVfVVNFUl9ERVBSRUNBVEVECiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcmV2aW91cywgJGhhbmRsZXJDb250ZXh0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGEgY2xpZW50IGVycm9yIGlzIGVuY291bnRlcmVkICg0eHggY29kZXMpCiAqLwpjbGFzcyBDbGllbnRFeGNlcHRpb24gZXh0ZW5kcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4KICoKICogTm90ZSB0aGF0IG5vIHJlc3BvbnNlIGlzIHByZXNlbnQgZm9yIGEgQ29ubmVjdEV4Y2VwdGlvbgogKi8KY2xhc3MgQ29ubmVjdEV4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24KewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgXEV4Y2VwdGlvbiAkcHJldmlvdXMgPSBudWxsLAogICAgICAgIGFycmF5ICRoYW5kbGVyQ29udGV4dCA9IFtdCiAgICApIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkcmVxdWVzdCwgbnVsbCwgJHByZXZpb3VzLCAkaGFuZGxlckNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNwb25zZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Jlc3BvbnNlKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEBtZXRob2Qgc3RyaW5nIGdldE1lc3NhZ2UoKQogKiBAbWV0aG9kIFxUaHJvd2FibGV8bnVsbCBnZXRQcmV2aW91cygpCiAqIEBtZXRob2QgbWl4ZWQgZ2V0Q29kZSgpCiAqIEBtZXRob2Qgc3RyaW5nIGdldEZpbGUoKQogKiBAbWV0aG9kIGludCBnZXRMaW5lKCkKICogQG1ldGhvZCBhcnJheSBnZXRUcmFjZSgpCiAqIEBtZXRob2Qgc3RyaW5nIGdldFRyYWNlQXNTdHJpbmcoKQogKi8KaW50ZXJmYWNlIEd1enpsZUV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIEhUVFAgUmVxdWVzdCBleGNlcHRpb24KICovCmNsYXNzIFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBUcmFuc2ZlckV4Y2VwdGlvbgp7CiAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlICovCiAgICBwcml2YXRlICRyZXF1ZXN0OwoKICAgIC8qKiBAdmFyIFJlc3BvbnNlSW50ZXJmYWNlICovCiAgICBwcml2YXRlICRyZXNwb25zZTsKCiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHJpdmF0ZSAkaGFuZGxlckNvbnRleHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10KICAgICkgewogICAgICAgIC8vIFNldCB0aGUgY29kZSBvZiB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXNwb25zZSBpcyBzZXQgYW5kIG5vdCBmdXR1cmUuCiAgICAgICAgJGNvZGUgPSAkcmVzcG9uc2UgJiYgISgkcmVzcG9uc2UgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKQogICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpCiAgICAgICAgICAgIDogMDsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSwgJHByZXZpb3VzKTsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckNvbnRleHQgPSAkaGFuZGxlckNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBXcmFwIG5vbi1SZXF1ZXN0RXhjZXB0aW9ucyB3aXRoIGEgUmVxdWVzdEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAkZQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBFeGNlcHRpb24oUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgXEV4Y2VwdGlvbiAkZSkKICAgIHsKICAgICAgICByZXR1cm4gJGUgaW5zdGFuY2VvZiBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgICAgICAgID8gJGUKICAgICAgICAgICAgOiBuZXcgUmVxdWVzdEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkcmVxdWVzdCwgbnVsbCwgJGUpOwogICAgfQoKICAgIC8qKgogICAgICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGV4Y2VwdGlvbiB3aXRoIGEgbm9ybWFsaXplZCBlcnJvciBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICBSZXF1ZXN0CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlIFJlc3BvbnNlIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAgJHByZXZpb3VzIFByZXZpb3VzIGV4Y2VwdGlvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRjdHggICAgICBPcHRpb25hbCBoYW5kbGVyIGNvbnRleHQuCiAgICAgKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGN0eCA9IFtdCiAgICApIHsKICAgICAgICBpZiAoISRyZXNwb25zZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICAgICAnRXJyb3IgY29tcGxldGluZyByZXF1ZXN0JywKICAgICAgICAgICAgICAgICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICRwcmV2aW91cywKICAgICAgICAgICAgICAgICRjdHgKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRsZXZlbCA9IChpbnQpIGZsb29yKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpIC8gMTAwKTsKICAgICAgICBpZiAoJGxldmVsID09PSA0KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdDbGllbnQgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gQ2xpZW50RXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2VpZiAoJGxldmVsID09PSA1KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdTZXJ2ZXIgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gU2VydmVyRXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGFiZWwgPSAnVW5zdWNjZXNzZnVsIHJlcXVlc3QnOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gX19DTEFTU19fOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKICAgICAgICAkdXJpID0gc3RhdGljOjpvYmZ1c2NhdGVVcmkoJHVyaSk7CgogICAgICAgIC8vIENsaWVudCBFcnJvcjogYEdFVCAvYCByZXN1bHRlZCBpbiBhIGA0MDQgTm90IEZvdW5kYCByZXNwb25zZToKICAgICAgICAvLyA8aHRtbD4gLi4uICh0cnVuY2F0ZWQpCiAgICAgICAgJG1lc3NhZ2UgPSBzcHJpbnRmKAogICAgICAgICAgICAnJXM6IGAlcyAlc2AgcmVzdWx0ZWQgaW4gYSBgJXMgJXNgIHJlc3BvbnNlJywKICAgICAgICAgICAgJGxhYmVsLAogICAgICAgICAgICAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICR1cmksCiAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLAogICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgKTsKCiAgICAgICAgJHN1bW1hcnkgPSBzdGF0aWM6OmdldFJlc3BvbnNlQm9keVN1bW1hcnkoJHJlc3BvbnNlKTsKCiAgICAgICAgaWYgKCRzdW1tYXJ5ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICI6XG57JHN1bW1hcnl9XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyAkY2xhc3NOYW1lKCRtZXNzYWdlLCAkcmVxdWVzdCwgJHJlc3BvbnNlLCAkcHJldmlvdXMsICRjdHgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBXaWxsIHJldHVybiBgbnVsbGAgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBwcmludGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZXNwb25zZUJvZHlTdW1tYXJ5KFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoISRib2R5LT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRzdW1tYXJ5ID0gJGJvZHktPnJlYWQoMTIwKTsKICAgICAgICAkYm9keS0+cmV3aW5kKCk7CgogICAgICAgIGlmICgkc2l6ZSA+IDEyMCkgewogICAgICAgICAgICAkc3VtbWFyeSAuPSAnICh0cnVuY2F0ZWQuLi4pJzsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoZXMgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIsIGluY2x1ZGluZyB1bmljb2RlIGNoYXJhY3RlcnM6CiAgICAgICAgLy8gbGV0dGVycywgbWFya3MsIG51bWJlcnMsIHB1bmN0dWF0aW9uLCBzcGFjaW5nLCBhbmQgc2VwYXJhdG9ycy4KICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1teXHBMXHBNXHBOXHBQXHBTXHBaXG5cclx0XS8nLCAkc3VtbWFyeSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPYmZ1c2NhdGVzIFVSSSBpZiB0aGVyZSBpcyBhbiB1c2VybmFtZSBhbmQgYSBwYXNzd29yZCBwcmVzZW50CiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gb2JmdXNjYXRlVXJpKCR1cmkpCiAgICB7CiAgICAgICAgJHVzZXJJbmZvID0gJHVyaS0+Z2V0VXNlckluZm8oKTsKCiAgICAgICAgaWYgKGZhbHNlICE9PSAoJHBvcyA9IHN0cnBvcygkdXNlckluZm8sICc6JykpKSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpLT53aXRoVXNlckluZm8oc3Vic3RyKCR1c2VySW5mbywgMCwgJHBvcyksICcqKionKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYXNzb2NpYXRlZCByZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2UgIT09IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgZnJvbSB0aGUgdW5kZXJseWluZyBoYW5kbGVyLgogICAgICoKICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gd2hpY2ggaGFuZGxlciB5b3UgYXJlCiAgICAgKiB1c2luZy4gSXQgbWF5IGFsc28gYmUganVzdCBhbiBlbXB0eSBhcnJheS4gUmVseWluZyBvbiB0aGlzIGRhdGEgd2lsbAogICAgICogY291cGxlIHlvdSB0byBhIHNwZWNpZmljIGhhbmRsZXIsIGJ1dCBjYW4gZ2l2ZSBtb3JlIGRlYnVnIGluZm9ybWF0aW9uCiAgICAgKiB3aGVuIG5lZWRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyQ29udGV4dCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyQ29udGV4dDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIHNlZWsgZmFpbHMgb24gYSBzdHJlYW0uCiAqLwpjbGFzcyBTZWVrRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24KewogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJHBvcyA9IDAsICRtc2cgPSAnJykKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkbXNnID0gJG1zZyA/OiAnQ291bGQgbm90IHNlZWsgdGhlIHN0cmVhbSB0byBwb3NpdGlvbiAnIC4gJHBvczsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2cpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGEgc2VydmVyIGVycm9yIGlzIGVuY291bnRlcmVkICg1eHggY29kZXMpCiAqLwpjbGFzcyBTZXJ2ZXJFeGNlcHRpb24gZXh0ZW5kcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKY2xhc3MgVG9vTWFueVJlZGlyZWN0c0V4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24ge30K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKY2xhc3MgVHJhbnNmZXJFeGNlcHRpb24gZXh0ZW5kcyBcUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEd1enpsZUV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxIYW5kbGVyOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxNdWx0aUhhbmRsZXI7CnVzZSBHdXp6bGVIdHRwXEhhbmRsZXJcUHJveHk7CnVzZSBHdXp6bGVIdHRwXEhhbmRsZXJcU3RyZWFtSGFuZGxlcjsKCi8qKgogKiBFeHBhbmRzIGEgVVJJIHRlbXBsYXRlCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlICBVUkkgdGVtcGxhdGUKICogQHBhcmFtIGFycmF5ICAkdmFyaWFibGVzIFRlbXBsYXRlIHZhcmlhYmxlcwogKgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdXJpX3RlbXBsYXRlKCR0ZW1wbGF0ZSwgYXJyYXkgJHZhcmlhYmxlcykKewogICAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ3VyaV90ZW1wbGF0ZScpKSB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgcmV0dXJuIFx1cmlfdGVtcGxhdGUoJHRlbXBsYXRlLCAkdmFyaWFibGVzKTsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCiAgICB9CgogICAgc3RhdGljICR1cmlUZW1wbGF0ZTsKICAgIGlmICghJHVyaVRlbXBsYXRlKSB7CiAgICAgICAgJHVyaVRlbXBsYXRlID0gbmV3IFVyaVRlbXBsYXRlKCk7CiAgICB9CgogICAgcmV0dXJuICR1cmlUZW1wbGF0ZS0+ZXhwYW5kKCR0ZW1wbGF0ZSwgJHZhcmlhYmxlcyk7Cn0KCi8qKgogKiBEZWJ1ZyBmdW5jdGlvbiB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwcm92aWRlZCB2YWx1ZSB0eXBlIGFuZCBjbGFzcy4KICoKICogQHBhcmFtIG1peGVkICRpbnB1dAogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIGFuZAogKiAgICAgICAgICAgICAgICBpZiBhIGNsYXNzIGlzIHByb3ZpZGVkLCB0aGUgY2xhc3MgbmFtZS4KICovCmZ1bmN0aW9uIGRlc2NyaWJlX3R5cGUoJGlucHV0KQp7CiAgICBzd2l0Y2ggKGdldHR5cGUoJGlucHV0KSkgewogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgIHJldHVybiAnb2JqZWN0KCcgLiBnZXRfY2xhc3MoJGlucHV0KSAuICcpJzsKICAgICAgICBjYXNlICdhcnJheSc6CiAgICAgICAgICAgIHJldHVybiAnYXJyYXkoJyAuIGNvdW50KCRpbnB1dCkgLiAnKSc7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICAgICAgdmFyX2R1bXAoJGlucHV0KTsKICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IHZzIGRvdWJsZQogICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJ2RvdWJsZSgnLCAnZmxvYXQoJywgcnRyaW0ob2JfZ2V0X2NsZWFuKCkpKTsKICAgIH0KfQoKLyoqCiAqIFBhcnNlcyBhbiBhcnJheSBvZiBoZWFkZXIgbGluZXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXJzLgogKgogKiBAcGFyYW0gYXJyYXkgJGxpbmVzIEhlYWRlciBsaW5lcyBhcnJheSBvZiBzdHJpbmdzIGluIHRoZSBmb2xsb3dpbmcKICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICJOYW1lOiBWYWx1ZSIKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gaGVhZGVyc19mcm9tX2xpbmVzKCRsaW5lcykKewogICAgJGhlYWRlcnMgPSBbXTsKCiAgICBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCc6JywgJGxpbmUsIDIpOwogICAgICAgICRoZWFkZXJzW3RyaW0oJHBhcnRzWzBdKV1bXSA9IGlzc2V0KCRwYXJ0c1sxXSkKICAgICAgICAgICAgPyB0cmltKCRwYXJ0c1sxXSkKICAgICAgICAgICAgOiBudWxsOwogICAgfQoKICAgIHJldHVybiAkaGVhZGVyczsKfQoKLyoqCiAqIFJldHVybnMgYSBkZWJ1ZyBzdHJlYW0gYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIE9wdGlvbmFsIHZhbHVlCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UKICovCmZ1bmN0aW9uIGRlYnVnX3Jlc291cmNlKCR2YWx1ZSA9IG51bGwpCnsKICAgIGlmIChpc19yZXNvdXJjZSgkdmFsdWUpKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0gZWxzZWlmIChkZWZpbmVkKCdTVERPVVQnKSkgewogICAgICAgIHJldHVybiBTVERPVVQ7CiAgICB9CgogICAgcmV0dXJuIGZvcGVuKCdwaHA6Ly9vdXRwdXQnLCAndycpOwp9CgovKioKICogQ2hvb3NlcyBhbmQgY3JlYXRlcyBhIGRlZmF1bHQgaGFuZGxlciB0byB1c2UgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LgogKgogKiBUaGUgcmV0dXJuZWQgaGFuZGxlciBpcyBub3Qgd3JhcHBlZCBieSBhbnkgZGVmYXVsdCBtaWRkbGV3YXJlcy4KICoKICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyB2aWFibGUgSGFuZGxlciBpcyBhdmFpbGFibGUuCiAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyB0aGUgYmVzdCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc3lzdGVtLgogKi8KZnVuY3Rpb24gY2hvb3NlX2hhbmRsZXIoKQp7CiAgICAkaGFuZGxlciA9IG51bGw7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX211bHRpX2V4ZWMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7CiAgICAgICAgJGhhbmRsZXIgPSBQcm94eTo6d3JhcFN5bmMobmV3IEN1cmxNdWx0aUhhbmRsZXIoKSwgbmV3IEN1cmxIYW5kbGVyKCkpOwogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9leGVjJykpIHsKICAgICAgICAkaGFuZGxlciA9IG5ldyBDdXJsSGFuZGxlcigpOwogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9tdWx0aV9leGVjJykpIHsKICAgICAgICAkaGFuZGxlciA9IG5ldyBDdXJsTXVsdGlIYW5kbGVyKCk7CiAgICB9CgogICAgaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7CiAgICAgICAgJGhhbmRsZXIgPSAkaGFuZGxlcgogICAgICAgICAgICA/IFByb3h5Ojp3cmFwU3RyZWFtaW5nKCRoYW5kbGVyLCBuZXcgU3RyZWFtSGFuZGxlcigpKQogICAgICAgICAgICA6IG5ldyBTdHJlYW1IYW5kbGVyKCk7CiAgICB9IGVsc2VpZiAoISRoYW5kbGVyKSB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdHdXp6bGVIdHRwIHJlcXVpcmVzIGNVUkwsIHRoZSAnCiAgICAgICAgICAgIC4gJ2FsbG93X3VybF9mb3BlbiBpbmkgc2V0dGluZywgb3IgYSBjdXN0b20gSFRUUCBoYW5kbGVyLicpOwogICAgfQoKICAgIHJldHVybiAkaGFuZGxlcjsKfQoKLyoqCiAqIEdldCB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZyB0byB1c2Ugd2l0aCBHdXp6bGUKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGRlZmF1bHRfdXNlcl9hZ2VudCgpCnsKICAgIHN0YXRpYyAkZGVmYXVsdEFnZW50ID0gJyc7CgogICAgaWYgKCEkZGVmYXVsdEFnZW50KSB7CiAgICAgICAgJGRlZmF1bHRBZ2VudCA9ICdHdXp6bGVIdHRwLycgLiBDbGllbnQ6OlZFUlNJT047CiAgICAgICAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKSB7CiAgICAgICAgICAgICRkZWZhdWx0QWdlbnQgLj0gJyBjdXJsLycgLiBcY3VybF92ZXJzaW9uKClbJ3ZlcnNpb24nXTsKICAgICAgICB9CiAgICAgICAgJGRlZmF1bHRBZ2VudCAuPSAnIFBIUC8nIC4gUEhQX1ZFUlNJT047CiAgICB9CgogICAgcmV0dXJuICRkZWZhdWx0QWdlbnQ7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNhY2VydCBidW5kbGUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4KICoKICogRmlyc3QsIHRoZSBvcGVuc3NsLmNhZmlsZSBhbmQgY3VybC5jYWluZm8gcGhwLmluaSBzZXR0aW5ncyBhcmUgY2hlY2tlZC4KICogSWYgdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBjb21tb24gbG9jYXRpb25zIGZvcgogKiBidW5kbGVzIGZvdW5kIG9uIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgRnJlZUJTRCwgT1MgWAogKiBhbmQgV2luZG93cyBhcmUgY2hlY2tlZC4gSWYgYW55IG9mIHRoZXNlIGZpbGUgbG9jYXRpb25zIGFyZSBmb3VuZCBvbgogKiBkaXNrLCB0aGV5IHdpbGwgYmUgdXRpbGl6ZWQuCiAqCiAqIE5vdGU6IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgbm8gYnVuZGxlIGNhbiBiZSBmb3VuZC4KICovCmZ1bmN0aW9uIGRlZmF1bHRfY2FfYnVuZGxlKCkKewogICAgc3RhdGljICRjYWNoZWQgPSBudWxsOwogICAgc3RhdGljICRjYWZpbGVzID0gWwogICAgICAgIC8vIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhIChwcm92aWRlZCBieSB0aGUgY2EtY2VydGlmaWNhdGVzIHBhY2thZ2UpCiAgICAgICAgJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JywKICAgICAgICAvLyBVYnVudHUsIERlYmlhbiAocHJvdmlkZWQgYnkgdGhlIGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICcvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0JywKICAgICAgICAvLyBGcmVlQlNEIChwcm92aWRlZCBieSB0aGUgY2Ffcm9vdF9uc3MgcGFja2FnZSkKICAgICAgICAnL3Vzci9sb2NhbC9zaGFyZS9jZXJ0cy9jYS1yb290LW5zcy5jcnQnLAogICAgICAgIC8vIFNMRVMgMTIgKHByb3ZpZGVkIGJ5IHRoZSBjYS1jZXJ0aWZpY2F0ZXMgcGFja2FnZSkKICAgICAgICAnL3Zhci9saWIvY2EtY2VydGlmaWNhdGVzL2NhLWJ1bmRsZS5wZW0nLAogICAgICAgIC8vIE9TIFggcHJvdmlkZWQgYnkgaG9tZWJyZXcgKHVzaW5nIHRoZSBkZWZhdWx0IHBhdGgpCiAgICAgICAgJy91c3IvbG9jYWwvZXRjL29wZW5zc2wvY2VydC5wZW0nLAogICAgICAgIC8vIEdvb2dsZSBhcHAgZW5naW5lCiAgICAgICAgJy9ldGMvY2EtY2VydGlmaWNhdGVzLmNydCcsCiAgICAgICAgLy8gV2luZG93cz8KICAgICAgICAnQzpcXHdpbmRvd3NcXHN5c3RlbTMyXFxjdXJsLWNhLWJ1bmRsZS5jcnQnLAogICAgICAgICdDOlxcd2luZG93c1xcY3VybC1jYS1idW5kbGUuY3J0JywKICAgIF07CgogICAgaWYgKCRjYWNoZWQpIHsKICAgICAgICByZXR1cm4gJGNhY2hlZDsKICAgIH0KCiAgICBpZiAoJGNhID0gaW5pX2dldCgnb3BlbnNzbC5jYWZpbGUnKSkgewogICAgICAgIHJldHVybiAkY2FjaGVkID0gJGNhOwogICAgfQoKICAgIGlmICgkY2EgPSBpbmlfZ2V0KCdjdXJsLmNhaW5mbycpKSB7CiAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkY2E7CiAgICB9CgogICAgZm9yZWFjaCAoJGNhZmlsZXMgYXMgJGZpbGVuYW1lKSB7CiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkZmlsZW5hbWU7CiAgICAgICAgfQogICAgfQoKICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbig8PDwgRU9UCk5vIHN5c3RlbSBDQSBidW5kbGUgY291bGQgYmUgZm91bmQgaW4gYW55IG9mIHRoZSB0aGUgY29tbW9uIHN5c3RlbSBsb2NhdGlvbnMuClBIUCB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNS42IGFyZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSdzCkNBIGJ1bmRsZSBieSBkZWZhdWx0LiBJbiBvcmRlciB0byB2ZXJpZnkgcGVlciBjZXJ0aWZpY2F0ZXMsIHlvdSB3aWxsIG5lZWQgdG8Kc3VwcGx5IHRoZSBwYXRoIG9uIGRpc2sgdG8gYSBjZXJ0aWZpY2F0ZSBidW5kbGUgdG8gdGhlICd2ZXJpZnknIHJlcXVlc3QKb3B0aW9uOiBodHRwOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuL2xhdGVzdC9jbGllbnRzLmh0bWwjdmVyaWZ5LiBJZiB5b3UgZG8gbm90Cm5lZWQgYSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBidW5kbGUsIHRoZW4gTW96aWxsYSBwcm92aWRlcyBhIGNvbW1vbmx5IHVzZWQgQ0EKYnVuZGxlIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGhlcmUgKHByb3ZpZGVkIGJ5IHRoZSBtYWludGFpbmVyIG9mIGNVUkwpOgpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYmFnZGVyL2NhLWJ1bmRsZS9tYXN0ZXIvY2EtYnVuZGxlLmNydC4gT25jZQp5b3UgaGF2ZSBhIENBIGJ1bmRsZSBhdmFpbGFibGUgb24gZGlzaywgeW91IGNhbiBzZXQgdGhlICdvcGVuc3NsLmNhZmlsZScgUEhQCmluaSBzZXR0aW5nIHRvIHBvaW50IHRvIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBhbGxvd2luZyB5b3UgdG8gb21pdCB0aGUgJ3ZlcmlmeScKcmVxdWVzdCBvcHRpb24uIFNlZSBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbCBmb3IgbW9yZQppbmZvcm1hdGlvbi4KRU9UCiAgICApOwp9CgovKioKICogQ3JlYXRlcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBsb3dlcmNhc2UgaGVhZGVyIG5hbWVzIHRvIHRoZSBhY3R1YWwKICogaGVhZGVyIGNhc2luZy4KICoKICogQHBhcmFtIGFycmF5ICRoZWFkZXJzCiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIG5vcm1hbGl6ZV9oZWFkZXJfa2V5cyhhcnJheSAkaGVhZGVycykKewogICAgJHJlc3VsdCA9IFtdOwogICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkaGVhZGVycykgYXMgJGtleSkgewogICAgICAgICRyZXN1bHRbc3RydG9sb3dlcigka2V5KV0gPSAka2V5OwogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBob3N0IG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICoKICogVGhpcyBtZXRob2Qgd2lsbCBzdHJpcCBhIHBvcnQgZnJvbSB0aGUgaG9zdCBpZiBpdCBpcyBwcmVzZW50LiBFYWNoIHBhdHRlcm4KICogY2FuIGJlIG1hdGNoZWQgd2l0aCBhbiBleGFjdCBtYXRjaCAoZS5nLiwgImZvby5jb20iID09ICJmb28uY29tIikgb3IgYQogKiBwYXJ0aWFsIG1hdGNoOiAoZS5nLiwgImZvby5jb20iID09ICJiYXouZm9vLmNvbSIgYW5kICIuZm9vLmNvbSIgPT0KICogImJhei5mb28uY29tIiwgYnV0ICIuZm9vLmNvbSIgIT0gImZvby5jb20iKS4KICoKICogQXJlYXMgYXJlIG1hdGNoZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKICogMS4gIioiICh3aXRob3V0IHF1b3RlcykgYWx3YXlzIG1hdGNoZXMgYW55IGhvc3RzLgogKiAyLiBBbiBleGFjdCBtYXRjaC4KICogMy4gVGhlIGFyZWEgc3RhcnRzIHdpdGggIi4iIGFuZCB0aGUgYXJlYSBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBob3N0LiBlLmcuCiAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0ICAgICAgICAgSG9zdCB0byBjaGVjayBhZ2FpbnN0IHRoZSBwYXR0ZXJucy4KICogQHBhcmFtIGFycmF5ICAkbm9Qcm94eUFycmF5IEFuIGFycmF5IG9mIGhvc3QgcGF0dGVybnMuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaXNfaG9zdF9pbl9ub3Byb3h5KCRob3N0LCBhcnJheSAkbm9Qcm94eUFycmF5KQp7CiAgICBpZiAoc3RybGVuKCRob3N0KSA9PT0gMCkgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFbXB0eSBob3N0IHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gU3RyaXAgcG9ydCBpZiBwcmVzZW50LgogICAgaWYgKHN0cnBvcygkaG9zdCwgJzonKSkgewogICAgICAgICRob3N0ID0gZXhwbG9kZSgkaG9zdCwgJzonLCAyKVswXTsKICAgIH0KCiAgICBmb3JlYWNoICgkbm9Qcm94eUFycmF5IGFzICRhcmVhKSB7CiAgICAgICAgLy8gQWx3YXlzIG1hdGNoIG9uIHdpbGRjYXJkcy4KICAgICAgICBpZiAoJGFyZWEgPT09ICcqJykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2VpZiAoZW1wdHkoJGFyZWEpKSB7CiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIG9uIGVtcHR5IHZhbHVlcy4KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfSBlbHNlaWYgKCRhcmVhID09PSAkaG9zdCkgewogICAgICAgICAgICAvLyBFeGFjdCBtYXRjaGVzLgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTcGVjaWFsIG1hdGNoIGlmIHRoZSBhcmVhIHdoZW4gcHJlZml4ZWQgd2l0aCAiLiIuIFJlbW92ZSBhbnkKICAgICAgICAgICAgLy8gZXhpc3RpbmcgbGVhZGluZyAiLiIgYW5kIGFkZCBhIG5ldyBsZWFkaW5nICIuIi4KICAgICAgICAgICAgJGFyZWEgPSAnLicgLiBsdHJpbSgkYXJlYSwgJy4nKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkaG9zdCwgLShzdHJsZW4oJGFyZWEpKSkgPT09ICRhcmVhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBqc29uX2RlY29kZSB0aGF0IHRocm93cyB3aGVuIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtIHN0cmluZyAkanNvbiAgICBKU09OIGRhdGEgdG8gcGFyc2UKICogQHBhcmFtIGJvb2wgJGFzc29jICAgICBXaGVuIHRydWUsIHJldHVybmVkIG9iamVjdHMgd2lsbCBiZSBjb252ZXJ0ZWQKICogICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFzc29jaWF0aXZlIGFycmF5cy4KICogQHBhcmFtIGludCAgICAkZGVwdGggICBVc2VyIHNwZWNpZmllZCByZWN1cnNpb24gZGVwdGguCiAqIEBwYXJhbSBpbnQgICAgJG9wdGlvbnMgQml0bWFzayBvZiBKU09OIGRlY29kZSBvcHRpb25zLgogKgogKiBAcmV0dXJuIG1peGVkCiAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZGVjb2RlZC4KICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5qc29uLWRlY29kZS5waHAKICovCmZ1bmN0aW9uIGpzb25fZGVjb2RlKCRqc29uLCAkYXNzb2MgPSBmYWxzZSwgJGRlcHRoID0gNTEyLCAkb3B0aW9ucyA9IDApCnsKICAgICRkYXRhID0gXGpzb25fZGVjb2RlKCRqc29uLCAkYXNzb2MsICRkZXB0aCwgJG9wdGlvbnMpOwogICAgaWYgKEpTT05fRVJST1JfTk9ORSAhPT0ganNvbl9sYXN0X2Vycm9yKCkpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgJ2pzb25fZGVjb2RlIGVycm9yOiAnIC4ganNvbl9sYXN0X2Vycm9yX21zZygpCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJGRhdGE7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBKU09OIGVuY29kaW5nIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVGhlIHZhbHVlIGJlaW5nIGVuY29kZWQKICogQHBhcmFtIGludCAgICAkb3B0aW9ucyBKU09OIGVuY29kZSBvcHRpb24gYml0bWFzawogKiBAcGFyYW0gaW50ICAgICRkZXB0aCAgIFNldCB0aGUgbWF4aW11bSBkZXB0aC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KICoKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBKU09OIGNhbm5vdCBiZSBlbmNvZGVkLgogKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZW5jb2RlLnBocAogKi8KZnVuY3Rpb24ganNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucyA9IDAsICRkZXB0aCA9IDUxMikKewogICAgJGpzb24gPSBcanNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucywgJGRlcHRoKTsKICAgIGlmIChKU09OX0VSUk9SX05PTkUgIT09IGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICdqc29uX2VuY29kZSBlcnJvcjogJyAuIGpzb25fbGFzdF9lcnJvcl9tc2coKQogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRqc29uOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/functions_include.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXHVyaV90ZW1wbGF0ZScpKSB7CiAgICByZXF1aXJlIF9fRElSX18gLiAnL2Z1bmN0aW9ucy5waHAnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgR3V6emxlSHR0cFxQc3I3XExhenlPcGVuU3RyZWFtOwp1c2UgR3V6emxlSHR0cFxUcmFuc2ZlclN0YXRzOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIENyZWF0ZXMgY3VybCByZXNvdXJjZXMgZnJvbSBhIHJlcXVlc3QKICovCmNsYXNzIEN1cmxGYWN0b3J5IGltcGxlbWVudHMgQ3VybEZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgJGhhbmRsZXMgPSBbXTsKCiAgICAvKiogQHZhciBpbnQgVG90YWwgbnVtYmVyIG9mIGlkbGUgaGFuZGxlcyB0byBrZWVwIGluIGNhY2hlICovCiAgICBwcml2YXRlICRtYXhIYW5kbGVzOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkbWF4SGFuZGxlcyBNYXhpbXVtIG51bWJlciBvZiBpZGxlIGhhbmRsZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWF4SGFuZGxlcykKICAgIHsKICAgICAgICAkdGhpcy0+bWF4SGFuZGxlcyA9ICRtYXhIYW5kbGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydfYm9keV9hc19zdHJpbmcnXSA9ICRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ107CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ10pOwogICAgICAgIH0KCiAgICAgICAgJGVhc3kgPSBuZXcgRWFzeUhhbmRsZTsKICAgICAgICAkZWFzeS0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICRlYXN5LT5vcHRpb25zID0gJG9wdGlvbnM7CiAgICAgICAgJGNvbmYgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbmYoJGVhc3kpOwogICAgICAgICR0aGlzLT5hcHBseU1ldGhvZCgkZWFzeSwgJGNvbmYpOwogICAgICAgICR0aGlzLT5hcHBseUhhbmRsZXJPcHRpb25zKCRlYXN5LCAkY29uZik7CiAgICAgICAgJHRoaXMtPmFwcGx5SGVhZGVycygkZWFzeSwgJGNvbmYpOwogICAgICAgIHVuc2V0KCRjb25mWydfaGVhZGVycyddKTsKCiAgICAgICAgLy8gQWRkIGhhbmRsZXIgb3B0aW9ucyBmcm9tIHRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY3VybCddKSkgewogICAgICAgICAgICAkY29uZiA9IGFycmF5X3JlcGxhY2UoJGNvbmYsICRvcHRpb25zWydjdXJsJ10pOwogICAgICAgIH0KCiAgICAgICAgJGNvbmZbQ1VSTE9QVF9IRUFERVJGVU5DVElPTl0gPSAkdGhpcy0+Y3JlYXRlSGVhZGVyRm4oJGVhc3kpOwogICAgICAgICRlYXN5LT5oYW5kbGUgPSAkdGhpcy0+aGFuZGxlcwogICAgICAgICAgICA/IGFycmF5X3BvcCgkdGhpcy0+aGFuZGxlcykKICAgICAgICAgICAgOiBjdXJsX2luaXQoKTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkZWFzeS0+aGFuZGxlLCAkY29uZik7CgogICAgICAgIHJldHVybiAkZWFzeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVsZWFzZShFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRyZXNvdXJjZSA9ICRlYXN5LT5oYW5kbGU7CiAgICAgICAgdW5zZXQoJGVhc3ktPmhhbmRsZSk7CgogICAgICAgIGlmIChjb3VudCgkdGhpcy0+aGFuZGxlcykgPj0gJHRoaXMtPm1heEhhbmRsZXMpIHsKICAgICAgICAgICAgY3VybF9jbG9zZSgkcmVzb3VyY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGhvbGQgb250byByZWZlcmVuY2VzCiAgICAgICAgICAgIC8vIGFuZCBhcmUgbm90IGNsZWFuZWQgdXAgYnkgY3VybF9yZXNldC4gVXNpbmcgY3VybF9zZXRvcHRfYXJyYXkKICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24sIHNvIHJlbW92aW5nIGVhY2ggb25lCiAgICAgICAgICAgIC8vIGluZGl2aWR1YWxseS4KICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgbnVsbCk7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBjdXJsX3Jlc2V0KCRyZXNvdXJjZSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzW10gPSAkcmVzb3VyY2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGxldGVzIGEgY1VSTCB0cmFuc2FjdGlvbiwgZWl0aGVyIHJldHVybmluZyBhIHJlc3BvbnNlIHByb21pc2Ugb3IgYQogICAgICogcmVqZWN0ZWQgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgICAgICAgICAgICAgJGhhbmRsZXIKICAgICAqIEBwYXJhbSBFYXN5SGFuZGxlICAgICAgICAgICAkZWFzeQogICAgICogQHBhcmFtIEN1cmxGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5IERpY3RhdGVzIGhvdyB0aGUgaGFuZGxlIGlzIHJlbGVhc2VkCiAgICAgKgogICAgICogQHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2goCiAgICAgICAgY2FsbGFibGUgJGhhbmRsZXIsCiAgICAgICAgRWFzeUhhbmRsZSAkZWFzeSwKICAgICAgICBDdXJsRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeQogICAgKSB7CiAgICAgICAgaWYgKGlzc2V0KCRlYXN5LT5vcHRpb25zWydvbl9zdGF0cyddKSkgewogICAgICAgICAgICBzZWxmOjppbnZva2VTdGF0cygkZWFzeSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRlYXN5LT5yZXNwb25zZSB8fCAkZWFzeS0+ZXJybm8pIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbmlzaEVycm9yKCRoYW5kbGVyLCAkZWFzeSwgJGZhY3RvcnkpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBpZiBpdCBpcyBwcmVzZW50IGFuZCB0aGVyZSBpcyBubyBlcnJvci4KICAgICAgICAkZmFjdG9yeS0+cmVsZWFzZSgkZWFzeSk7CgogICAgICAgIC8vIFJld2luZCB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UgaWYgcG9zc2libGUuCiAgICAgICAgJGJvZHkgPSAkZWFzeS0+cmVzcG9uc2UtPmdldEJvZHkoKTsKICAgICAgICBpZiAoJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxlZFByb21pc2UoJGVhc3ktPnJlc3BvbnNlKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbnZva2VTdGF0cyhFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRjdXJsU3RhdHMgPSBjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJHN0YXRzID0gbmV3IFRyYW5zZmVyU3RhdHMoCiAgICAgICAgICAgICRlYXN5LT5yZXF1ZXN0LAogICAgICAgICAgICAkZWFzeS0+cmVzcG9uc2UsCiAgICAgICAgICAgICRjdXJsU3RhdHNbJ3RvdGFsX3RpbWUnXSwKICAgICAgICAgICAgJGVhc3ktPmVycm5vLAogICAgICAgICAgICAkY3VybFN0YXRzCiAgICAgICAgKTsKICAgICAgICBjYWxsX3VzZXJfZnVuYygkZWFzeS0+b3B0aW9uc1snb25fc3RhdHMnXSwgJHN0YXRzKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2hFcnJvcigKICAgICAgICBjYWxsYWJsZSAkaGFuZGxlciwKICAgICAgICBFYXN5SGFuZGxlICRlYXN5LAogICAgICAgIEN1cmxGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5CiAgICApIHsKICAgICAgICAvLyBHZXQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIHJlbGVhc2UgdGhlIGhhbmRsZSB0byB0aGUgZmFjdG9yeS4KICAgICAgICAkY3R4ID0gWwogICAgICAgICAgICAnZXJybm8nID0+ICRlYXN5LT5lcnJubywKICAgICAgICAgICAgJ2Vycm9yJyA9PiBjdXJsX2Vycm9yKCRlYXN5LT5oYW5kbGUpLAogICAgICAgIF0gKyBjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGZhY3RvcnktPnJlbGVhc2UoJGVhc3kpOwoKICAgICAgICAvLyBSZXRyeSB3aGVuIG5vdGhpbmcgaXMgcHJlc2VudCBvciB3aGVuIGN1cmwgZmFpbGVkIHRvIHJld2luZC4KICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ19lcnJfbWVzc2FnZSddKQogICAgICAgICAgICAmJiAoISRlYXN5LT5lcnJubyB8fCAkZWFzeS0+ZXJybm8gPT0gNjUpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpyZXRyeUZhaWxlZFJld2luZCgkaGFuZGxlciwgJGVhc3ksICRjdHgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUmVqZWN0aW9uKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICRjdHgpCiAgICB7CiAgICAgICAgc3RhdGljICRjb25uZWN0aW9uRXJyb3JzID0gWwogICAgICAgICAgICBDVVJMRV9PUEVSQVRJT05fVElNRU9VVEVEICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QgICAgICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiAgICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9HT1RfTk9USElORyAgICAgICAgICA9PiB0cnVlLAogICAgICAgIF07CgogICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbkhlYWRlcnMgZXZlbnQsIHRoZW4KICAgICAgICAvLyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlIHRoYXQgd3JhcHMgdGhhdCBleGNlcHRpb24uCiAgICAgICAgaWYgKCRlYXN5LT5vbkhlYWRlcnNFeGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigKICAgICAgICAgICAgICAgIG5ldyBSZXF1ZXN0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbl9oZWFkZXJzIGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgJGVhc3ktPm9uSGVhZGVyc0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAkY3R4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9IHNwcmludGYoCiAgICAgICAgICAgICdjVVJMIGVycm9yICVzOiAlcyAoJXMpJywKICAgICAgICAgICAgJGN0eFsnZXJybm8nXSwKICAgICAgICAgICAgJGN0eFsnZXJyb3InXSwKICAgICAgICAgICAgJ3NlZSBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9saWJjdXJsLWVycm9ycy5odG1sJwogICAgICAgICk7CgogICAgICAgIC8vIENyZWF0ZSBhIGNvbm5lY3Rpb24gZXhjZXB0aW9uIGlmIGl0IHdhcyBhIHNwZWNpZmljIGVycm9yIGNvZGUuCiAgICAgICAgJGVycm9yID0gaXNzZXQoJGNvbm5lY3Rpb25FcnJvcnNbJGVhc3ktPmVycm5vXSkKICAgICAgICAgICAgPyBuZXcgQ29ubmVjdEV4Y2VwdGlvbigkbWVzc2FnZSwgJGVhc3ktPnJlcXVlc3QsIG51bGwsICRjdHgpCiAgICAgICAgICAgIDogbmV3IFJlcXVlc3RFeGNlcHRpb24oJG1lc3NhZ2UsICRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+cmVzcG9uc2UsIG51bGwsICRjdHgpOwoKICAgICAgICByZXR1cm4gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRlcnJvcik7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29uZihFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRjb25mID0gWwogICAgICAgICAgICAnX2hlYWRlcnMnICAgICAgICAgICAgID0+ICRlYXN5LT5yZXF1ZXN0LT5nZXRIZWFkZXJzKCksCiAgICAgICAgICAgIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCAgPT4gJGVhc3ktPnJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICBDVVJMT1BUX1VSTCAgICAgICAgICAgID0+IChzdHJpbmcpICRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKS0+d2l0aEZyYWdtZW50KCcnKSwKICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBmYWxzZSwKICAgICAgICAgICAgQ1VSTE9QVF9IRUFERVIgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAgICAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCA9PiAxNTAsCiAgICAgICAgXTsKCiAgICAgICAgaWYgKGRlZmluZWQoJ0NVUkxPUFRfUFJPVE9DT0xTJykpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9QUk9UT0NPTFNdID0gQ1VSTFBST1RPX0hUVFAgfCBDVVJMUFJPVE9fSFRUUFM7CiAgICAgICAgfQoKICAgICAgICAkdmVyc2lvbiA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKICAgICAgICBpZiAoJHZlcnNpb24gPT0gMS4xKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUF9WRVJTSU9OXSA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKICAgICAgICB9IGVsc2VpZiAoJHZlcnNpb24gPT0gMi4wKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUF9WRVJTSU9OXSA9IENVUkxfSFRUUF9WRVJTSU9OXzJfMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBfVkVSU0lPTl0gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbmY7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseU1ldGhvZChFYXN5SGFuZGxlICRlYXN5LCBhcnJheSAmJGNvbmYpCiAgICB7CiAgICAgICAgJGJvZHkgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICRzaXplID0gJGJvZHktPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRzaXplID09PSBudWxsIHx8ICRzaXplID4gMCkgewogICAgICAgICAgICAkdGhpcy0+YXBwbHlCb2R5KCRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+b3B0aW9ucywgJGNvbmYpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkbWV0aG9kID0gJGVhc3ktPnJlcXVlc3QtPmdldE1ldGhvZCgpOwogICAgICAgIGlmICgkbWV0aG9kID09PSAnUFVUJyB8fCAkbWV0aG9kID09PSAnUE9TVCcpIHsKICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMgogICAgICAgICAgICBpZiAoISRlYXN5LT5yZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdDb250ZW50LUxlbmd0aDogMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ0hFQUQnKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfTk9CT0RZXSA9IHRydWU7CiAgICAgICAgICAgIHVuc2V0KAogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9XUklURUZVTkNUSU9OXSwKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUkVBREZVTkNUSU9OXSwKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfRklMRV0sCiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0lORklMRV0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseUJvZHkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIGFycmF5ICYkY29uZikKICAgIHsKICAgICAgICAkc2l6ZSA9ICRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgPyAoaW50KSAkcmVxdWVzdC0+Z2V0SGVhZGVyTGluZSgnQ29udGVudC1MZW5ndGgnKQogICAgICAgICAgICA6IG51bGw7CgogICAgICAgIC8vIFNlbmQgdGhlIGJvZHkgYXMgYSBzdHJpbmcgaWYgdGhlIHNpemUgaXMgbGVzcyB0aGFuIDFNQiBPUiBpZiB0aGUKICAgICAgICAvLyBbY3VybF1bYm9keV9hc19zdHJpbmddIHJlcXVlc3QgdmFsdWUgaXMgc2V0LgogICAgICAgIGlmICgoJHNpemUgIT09IG51bGwgJiYgJHNpemUgPCAxMDAwMDAwKSB8fAogICAgICAgICAgICAhZW1wdHkoJG9wdGlvbnNbJ19ib2R5X2FzX3N0cmluZyddKQogICAgICAgICkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX1BPU1RGSUVMRFNdID0gKHN0cmluZykgJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgLy8gRG9uJ3QgZHVwbGljYXRlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIKICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnLCAkY29uZik7CiAgICAgICAgICAgICR0aGlzLT5yZW1vdmVIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJywgJGNvbmYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfVVBMT0FEXSA9IHRydWU7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9JTkZJTEVTSVpFXSA9ICRzaXplOwogICAgICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnLCAkY29uZik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICAgICBpZiAoJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgJGJvZHktPnJld2luZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUkVBREZVTkNUSU9OXSA9IGZ1bmN0aW9uICgkY2gsICRmZCwgJGxlbmd0aCkgdXNlICgkYm9keSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRib2R5LT5yZWFkKCRsZW5ndGgpOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIEV4cGVjdCBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHByZXZlbnQgY3VybCBmcm9tIGFkZGluZyBpdAogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignRXhwZWN0JykpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gJ0V4cGVjdDonOwogICAgICAgIH0KCiAgICAgICAgLy8gY1VSTCBzb21ldGltZXMgYWRkcyBhIGNvbnRlbnQtdHlwZSBieSBkZWZhdWx0LiBQcmV2ZW50IHRoaXMuCiAgICAgICAgaWYgKCEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb250ZW50LVR5cGUnKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQ29udGVudC1UeXBlOic7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlIZWFkZXJzKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICYkY29uZikKICAgIHsKICAgICAgICBmb3JlYWNoICgkY29uZlsnX2hlYWRlcnMnXSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgICAgIC8vIGNVUkwgcmVxdWlyZXMgYSBzcGVjaWFsIGZvcm1hdCBmb3IgZW1wdHkgaGVhZGVycy4KICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzE4ODIgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAiJG5hbWU7IjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gIiRuYW1lOiAkdmFsdWUiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdGhlIEFjY2VwdCBoZWFkZXIgaWYgb25lIHdhcyBub3Qgc2V0CiAgICAgICAgaWYgKCEkZWFzeS0+cmVxdWVzdC0+aGFzSGVhZGVyKCdBY2NlcHQnKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQWNjZXB0Oic7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgaGVhZGVyIGZyb20gdGhlIG9wdGlvbnMgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciB0byByZW1vdmUKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyB0byBtb2RpZnkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVIZWFkZXIoJG5hbWUsIGFycmF5ICYkb3B0aW9ucykKICAgIHsKICAgICAgICBmb3JlYWNoIChhcnJheV9rZXlzKCRvcHRpb25zWydfaGVhZGVycyddKSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcCgka2V5LCAkbmFtZSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydfaGVhZGVycyddWyRrZXldKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5SGFuZGxlck9wdGlvbnMoRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJiRjb25mKQogICAgewogICAgICAgICRvcHRpb25zID0gJGVhc3ktPm9wdGlvbnM7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJpZnknXSkpIHsKICAgICAgICAgICAgaWYgKCRvcHRpb25zWyd2ZXJpZnknXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRjb25mW0NVUkxPUFRfQ0FJTkZPXSk7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTF9WRVJJRllIT1NUXSA9IDA7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTF9WRVJJRllQRUVSXSA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVF0gPSAyOwogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUl0gPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGZpbGUvZm9sZGVyL2xpbmsgcGF0aCBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBleGlzdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRvcHRpb25zWyd2ZXJpZnknXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIENBIGJ1bmRsZSBub3QgZm91bmQ6IHskb3B0aW9uc1sndmVyaWZ5J119IgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgZGlyZWN0b3J5IG9yIGEgbGluayB0byBhIGRpcmVjdG9yeSB1c2UgQ1VSTE9QVF9DQVBBVEguCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90LCBpdCdzIHByb2JhYmx5IGEgZmlsZSwgb3IgYSBsaW5rIHRvIGEgZmlsZSwgc28gdXNlIENVUkxPUFRfQ0FJTkZPLgogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJG9wdGlvbnNbJ3ZlcmlmeSddKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAoaXNfbGluaygkb3B0aW9uc1sndmVyaWZ5J10pICYmIGlzX2RpcihyZWFkbGluaygkb3B0aW9uc1sndmVyaWZ5J10pKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9DQVBBVEhdID0gJG9wdGlvbnNbJ3ZlcmlmeSddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfQ0FJTkZPXSA9ICRvcHRpb25zWyd2ZXJpZnknXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10pKSB7CiAgICAgICAgICAgICRhY2NlcHQgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0SGVhZGVyTGluZSgnQWNjZXB0LUVuY29kaW5nJyk7CiAgICAgICAgICAgIGlmICgkYWNjZXB0KSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0VOQ09ESU5HXSA9ICRhY2NlcHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0VOQ09ESU5HXSA9ICcnOwogICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IGN1cmwgc2VuZCB0aGUgaGVhZGVyIG92ZXIgdGhlIHdpcmUKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdBY2NlcHQtRW5jb2Rpbmc6JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaW5rJ10pKSB7CiAgICAgICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJHNpbmspKSB7CiAgICAgICAgICAgICAgICAkc2luayA9IFxHdXp6bGVIdHRwXFBzcjdcc3RyZWFtX2Zvcigkc2luayk7CiAgICAgICAgICAgIH0gZWxzZWlmICghaXNfZGlyKGRpcm5hbWUoJHNpbmspKSkgewogICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgYmVmb3JlIGZhaWxpbmcgaW4gY3VybC4KICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICdEaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3QgZm9yIHNpbmsgdmFsdWUgb2YgJXMnLAogICAgICAgICAgICAgICAgICAgIGRpcm5hbWUoJHNpbmspLAogICAgICAgICAgICAgICAgICAgICRzaW5rCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzaW5rID0gbmV3IExhenlPcGVuU3RyZWFtKCRzaW5rLCAndysnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZWFzeS0+c2luayA9ICRzaW5rOwogICAgICAgICAgICAkY29uZltDVVJMT1BUX1dSSVRFRlVOQ1RJT05dID0gZnVuY3Rpb24gKCRjaCwgJHdyaXRlKSB1c2UgKCRzaW5rKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHNpbmstPndyaXRlKCR3cml0ZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVXNlIGEgZGVmYXVsdCB0ZW1wIHN0cmVhbSBpZiBubyBzaW5rIHdhcyBzZXQuCiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfRklMRV0gPSBmb3BlbigncGhwOi8vdGVtcCcsICd3KycpOwogICAgICAgICAgICAkZWFzeS0+c2luayA9IFBzcjdcc3RyZWFtX2ZvcigkY29uZltDVVJMT1BUX0ZJTEVdKTsKICAgICAgICB9CiAgICAgICAgJHRpbWVvdXRSZXF1aXJlc05vU2lnbmFsID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd0aW1lb3V0J10pKSB7CiAgICAgICAgICAgICR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCB8PSAkb3B0aW9uc1sndGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9USU1FT1VUX01TXSA9ICRvcHRpb25zWyd0aW1lb3V0J10gKiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgLy8gQ1VSTCBkZWZhdWx0IHZhbHVlIGlzIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pKSB7CiAgICAgICAgICAgIGlmICgndjQnID09PSAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0lQUkVTT0xWRV0gPSBDVVJMX0lQUkVTT0xWRV9WNDsKICAgICAgICAgICAgfSBlbHNlaWYgKCd2NicgPT09ICRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSVBSRVNPTFZFXSA9IENVUkxfSVBSRVNPTFZFX1Y2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddKSkgewogICAgICAgICAgICAkdGltZW91dFJlcXVpcmVzTm9TaWduYWwgfD0gJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NU10gPSAkb3B0aW9uc1snY29ubmVjdF90aW1lb3V0J10gKiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCAmJiBzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSAhPT0gJ1dJTicpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9OT1NJR05BTF0gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9QUk9YWV0gPSAkb3B0aW9uc1sncHJveHknXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzY2hlbWUgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm94eSddWyRzY2hlbWVdKSkgewogICAgICAgICAgICAgICAgICAgICRob3N0ID0gJGVhc3ktPnJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncHJveHknXVsnbm8nXSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIVxHdXp6bGVIdHRwXGlzX2hvc3RfaW5fbm9wcm94eSgkaG9zdCwgJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10pCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUFJPWFldID0gJG9wdGlvbnNbJ3Byb3h5J11bJHNjaGVtZV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2NlcnQnXSkpIHsKICAgICAgICAgICAgJGNlcnQgPSAkb3B0aW9uc1snY2VydCddOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGNlcnQpKSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTENFUlRQQVNTV0RdID0gJGNlcnRbMV07CiAgICAgICAgICAgICAgICAkY2VydCA9ICRjZXJ0WzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJGNlcnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAiU1NMIGNlcnRpZmljYXRlIG5vdCBmb3VuZDogeyRjZXJ0fSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xDRVJUXSA9ICRjZXJ0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzc2xfa2V5J10pKSB7CiAgICAgICAgICAgICRzc2xLZXkgPSAkb3B0aW9uc1snc3NsX2tleSddOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHNzbEtleSkpIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfU1NMS0VZUEFTU1dEXSA9ICRzc2xLZXlbMV07CiAgICAgICAgICAgICAgICAkc3NsS2V5ID0gJHNzbEtleVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRzc2xLZXkpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAiU1NMIHByaXZhdGUga2V5IG5vdCBmb3VuZDogeyRzc2xLZXl9IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTEtFWV0gPSAkc3NsS2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm9ncmVzcyddKSkgewogICAgICAgICAgICAkcHJvZ3Jlc3MgPSAkb3B0aW9uc1sncHJvZ3Jlc3MnXTsKICAgICAgICAgICAgaWYgKCFpc19jYWxsYWJsZSgkcHJvZ3Jlc3MpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAncHJvZ3Jlc3MgY2xpZW50IG9wdGlvbiBtdXN0IGJlIGNhbGxhYmxlJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29uZltDVVJMT1BUX05PUFJPR1JFU1NdID0gZmFsc2U7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUFJPR1JFU1NGVU5DVElPTl0gPSBmdW5jdGlvbiAoKSB1c2UgKCRwcm9ncmVzcykgewogICAgICAgICAgICAgICAgJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CiAgICAgICAgICAgICAgICAvLyBQSFAgNS41IHB1c2hlZCB0aGUgaGFuZGxlIG9udG8gdGhlIHN0YXJ0IG9mIHRoZSBhcmdzCiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJGFyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoJHByb2dyZXNzLCAkYXJncyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWJ1ZyddKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX1NUREVSUl0gPSBcR3V6emxlSHR0cFxkZWJ1Z19yZXNvdXJjZSgkb3B0aW9uc1snZGVidWcnXSk7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfVkVSQk9TRV0gPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGEgcmVzcG9uc2Ugd2FzIHNldCBvbiBhIHRyYW5zYWN0aW9uLiBJZiBvbmUKICAgICAqIHdhcyBub3Qgc2V0LCB0aGVuIHRoZSByZXF1ZXN0IGlzIHJldHJpZWQgaWYgcG9zc2libGUuIFRoaXMgZXJyb3IKICAgICAqIHR5cGljYWxseSBtZWFucyB5b3UgYXJlIHNlbmRpbmcgYSBwYXlsb2FkLCBjdXJsIGVuY291bnRlcmVkIGEKICAgICAqICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdCIgZXJyb3IsIHRyaWVkIHRvIHJld2luZCB0aGUKICAgICAqIHN0cmVhbSwgYW5kIHRoZW4gZW5jb3VudGVyZWQgYSAibmVjZXNzYXJ5IGRhdGEgcmV3aW5kIHdhc24ndCBwb3NzaWJsZSIKICAgICAqIGVycm9yLCBjYXVzaW5nIHRoZSByZXF1ZXN0IHRvIGJlIHNlbnQgdGhyb3VnaCBjdXJsX211bHRpX2luZm9fcmVhZCgpCiAgICAgKiB3aXRob3V0IGFuIGVycm9yIHN0YXR1cy4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmV0cnlGYWlsZWRSZXdpbmQoCiAgICAgICAgY2FsbGFibGUgJGhhbmRsZXIsCiAgICAgICAgRWFzeUhhbmRsZSAkZWFzeSwKICAgICAgICBhcnJheSAkY3R4CiAgICApIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyBPbmx5IHJld2luZCBpZiB0aGUgYm9keSBoYXMgYmVlbiByZWFkIGZyb20uCiAgICAgICAgICAgICRib2R5ID0gJGVhc3ktPnJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgaWYgKCRib2R5LT50ZWxsKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcUnVudGltZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkY3R4WydlcnJvciddID0gJ1RoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseSBmYWlsZWQgd2l0aG91dCAnCiAgICAgICAgICAgICAgICAuICdwcm92aWRpbmcgYW4gZXJyb3IuIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiByZXRyaWVkLCAnCiAgICAgICAgICAgICAgICAuICdidXQgYXR0ZW1wdGluZyB0byByZXdpbmQgdGhlIHJlcXVlc3QgYm9keSBmYWlsZWQuICcKICAgICAgICAgICAgICAgIC4gJ0V4Y2VwdGlvbjogJyAuICRlOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlUmVqZWN0aW9uKCRlYXN5LCAkY3R4KTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHJ5IG5vIG1vcmUgdGhhbiAzIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAuCiAgICAgICAgaWYgKCFpc3NldCgkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddKSkgewogICAgICAgICAgICAkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddID0gMTsKICAgICAgICB9IGVsc2VpZiAoJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXSA9PSAyKSB7CiAgICAgICAgICAgICRjdHhbJ2Vycm9yJ10gPSAnVGhlIGNVUkwgcmVxdWVzdCB3YXMgcmV0cmllZCAzIHRpbWVzICcKICAgICAgICAgICAgICAgIC4gJ2FuZCBkaWQgbm90IHN1Y2NlZWQuIFRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoZSBmYWlsdXJlICcKICAgICAgICAgICAgICAgIC4gJ2lzIHRoYXQgY1VSTCB3YXMgdW5hYmxlIHRvIHJld2luZCB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCAnCiAgICAgICAgICAgICAgICAuICdhbmQgc3Vic2VxdWVudCByZXRyaWVzIHJlc3VsdGVkIGluIHRoZSBzYW1lIGVycm9yLiBUdXJuIG9uICcKICAgICAgICAgICAgICAgIC4gJ3RoZSBkZWJ1ZyBvcHRpb24gdG8gc2VlIHdoYXQgd2VudCB3cm9uZy4gU2VlICcKICAgICAgICAgICAgICAgIC4gJ2h0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NDcyMDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uJzsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXSsrOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+b3B0aW9ucyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVIZWFkZXJGbihFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgIGlmIChpc3NldCgkZWFzeS0+b3B0aW9uc1snb25faGVhZGVycyddKSkgewogICAgICAgICAgICAkb25IZWFkZXJzID0gJGVhc3ktPm9wdGlvbnNbJ29uX2hlYWRlcnMnXTsKCiAgICAgICAgICAgIGlmICghaXNfY2FsbGFibGUoJG9uSGVhZGVycykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvbkhlYWRlcnMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkY2gsICRoKSB1c2UgKAogICAgICAgICAgICAkb25IZWFkZXJzLAogICAgICAgICAgICAkZWFzeSwKICAgICAgICAgICAgJiRzdGFydGluZ1Jlc3BvbnNlCiAgICAgICAgKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHRyaW0oJGgpOwogICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgICAgJGVhc3ktPmNyZWF0ZVJlc3BvbnNlKCk7CiAgICAgICAgICAgICAgICBpZiAoJG9uSGVhZGVycyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvbkhlYWRlcnMoJGVhc3ktPnJlc3BvbnNlKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgZXhjZXB0aW9uIHdpdGggdGhlIGhhbmRsZSBhbmQgdHJpZ2dlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGN1cmwgaGVhZGVyIHdyaXRlIGVycm9yIGJ5IHJldHVybmluZyAwLgogICAgICAgICAgICAgICAgICAgICAgICAkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uID0gJGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkc3RhcnRpbmdSZXNwb25zZSkgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICRlYXN5LT5oZWFkZXJzID0gWyR2YWx1ZV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZWFzeS0+aGVhZGVyc1tdID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHJsZW4oJGgpOwogICAgICAgIH07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgppbnRlcmZhY2UgQ3VybEZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgY1VSTCBoYW5kbGUgcmVzb3VyY2UuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgVHJhbnNmZXIgb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gRWFzeUhhbmRsZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiB3aGVuIGFuIG9wdGlvbiBjYW5ub3QgYmUgYXBwbGllZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTsKCiAgICAvKioKICAgICAqIFJlbGVhc2UgYW4gZWFzeSBoYW5kbGUsIGFsbG93aW5nIGl0IHRvIGJlIHJldXNlZCBvciBjbG9zZWQuCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiBtdXN0IGNhbGwgdW5zZXQgb24gdGhlIGVhc3kgaGFuZGxlJ3MgImhhbmRsZSIgcHJvcGVydHkuCiAgICAgKgogICAgICogQHBhcmFtIEVhc3lIYW5kbGUgJGVhc3kKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBjVVJMIGVhc3kgaGFuZGxlcyBhcyBhIHRyYW5zcG9ydCBsYXllci4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybEhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgImNsaWVudCIga2V5IG9mIHRoZSByZXF1ZXN0LgogKi8KY2xhc3MgQ3VybEhhbmRsZXIKewogICAgLyoqIEB2YXIgQ3VybEZhY3RvcnlJbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJGZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBmYWN0b3J5OiBPcHRpb25hbCBjdXJsIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgY1VSTCBoYW5kbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBoYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5mYWN0b3J5ID0gaXNzZXQoJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10pCiAgICAgICAgICAgID8gJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10KICAgICAgICAgICAgOiBuZXcgQ3VybEZhY3RvcnkoMyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkZWFzeSA9ICR0aGlzLT5mYWN0b3J5LT5jcmVhdGUoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICBjdXJsX2V4ZWMoJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGVhc3ktPmVycm5vID0gY3VybF9lcnJubygkZWFzeS0+aGFuZGxlKTsKCiAgICAgICAgcmV0dXJuIEN1cmxGYWN0b3J5OjpmaW5pc2goJHRoaXMsICRlYXN5LCAkdGhpcy0+ZmFjdG9yeSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFJldHVybnMgYW4gYXN5bmNocm9ub3VzIHJlc3BvbnNlIHVzaW5nIGN1cmxfbXVsdGlfKiBmdW5jdGlvbnMuCiAqCiAqIFdoZW4gdXNpbmcgdGhlIEN1cmxNdWx0aUhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgcHJvdmlkZWQgcmVxdWVzdCBvcHRpb25zLgogKgogKiBAcHJvcGVydHkgcmVzb3VyY2UgJF9taCBJbnRlcm5hbCB1c2Ugb25seS4gTGF6eSBsb2FkZWQgbXVsdGktaGFuZGxlLgogKi8KY2xhc3MgQ3VybE11bHRpSGFuZGxlcgp7CiAgICAvKiogQHZhciBDdXJsRmFjdG9yeUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkZmFjdG9yeTsKICAgIHByaXZhdGUgJHNlbGVjdFRpbWVvdXQ7CiAgICBwcml2YXRlICRhY3RpdmU7CiAgICBwcml2YXRlICRoYW5kbGVzID0gW107CiAgICBwcml2YXRlICRkZWxheXMgPSBbXTsKCiAgICAvKioKICAgICAqIFRoaXMgaGFuZGxlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKICAgICAqCiAgICAgKiAtIGhhbmRsZV9mYWN0b3J5OiBBbiBvcHRpb25hbCBmYWN0b3J5ICB1c2VkIHRvIGNyZWF0ZSBjdXJsIGhhbmRsZXMKICAgICAqIC0gc2VsZWN0X3RpbWVvdXQ6IE9wdGlvbmFsIHRpbWVvdXQgKGluIHNlY29uZHMpIHRvIGJsb2NrIGJlZm9yZSB0aW1pbmcKICAgICAqICAgb3V0IHdoaWxlIHNlbGVjdGluZyBjdXJsIGhhbmRsZXMuIERlZmF1bHRzIHRvIDEgc2Vjb25kLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+ZmFjdG9yeSA9IGlzc2V0KCRvcHRpb25zWydoYW5kbGVfZmFjdG9yeSddKQogICAgICAgICAgICA/ICRvcHRpb25zWydoYW5kbGVfZmFjdG9yeSddIDogbmV3IEN1cmxGYWN0b3J5KDUwKTsKICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9IGlzc2V0KCRvcHRpb25zWydzZWxlY3RfdGltZW91dCddKQogICAgICAgICAgICA/ICRvcHRpb25zWydzZWxlY3RfdGltZW91dCddIDogMTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKCRuYW1lID09PSAnX21oJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9taCA9IGN1cmxfbXVsdGlfaW5pdCgpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICBjdXJsX211bHRpX2Nsb3NlKCR0aGlzLT5fbWgpOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+X21oKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRlYXN5ID0gJHRoaXMtPmZhY3RvcnktPmNyZWF0ZSgkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICRpZCA9IChpbnQpICRlYXN5LT5oYW5kbGU7CgogICAgICAgICRwcm9taXNlID0gbmV3IFByb21pc2UoCiAgICAgICAgICAgIFskdGhpcywgJ2V4ZWN1dGUnXSwKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgkaWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y2FuY2VsKCRpZCk7CiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICAkdGhpcy0+YWRkUmVxdWVzdChbJ2Vhc3knID0+ICRlYXN5LCAnZGVmZXJyZWQnID0+ICRwcm9taXNlXSk7CgogICAgICAgIHJldHVybiAkcHJvbWlzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRpY2tzIHRoZSBjdXJsIGV2ZW50IGxvb3AuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aWNrKCkKICAgIHsKICAgICAgICAvLyBBZGQgYW55IGRlbGF5ZWQgaGFuZGxlcyBpZiBuZWVkZWQuCiAgICAgICAgaWYgKCR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgJGN1cnJlbnRUaW1lID0gbWljcm90aW1lKHRydWUpOwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVsYXlzIGFzICRpZCA9PiAkZGVsYXkpIHsKICAgICAgICAgICAgICAgIGlmICgkY3VycmVudFRpbWUgPj0gJGRlbGF5KSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgICAgICAgICBjdXJsX211bHRpX2FkZF9oYW5kbGUoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fbWgsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzWyRpZF1bJ2Vhc3knXS0+aGFuZGxlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSB0YXNrIHF1ZXVlIHdoaWNoIG1heSBhZGQgYWRkaXRpb25hbCByZXF1ZXN0cy4KICAgICAgICBQXHF1ZXVlKCktPnJ1bigpOwoKICAgICAgICBpZiAoJHRoaXMtPmFjdGl2ZSAmJgogICAgICAgICAgICBjdXJsX211bHRpX3NlbGVjdCgkdGhpcy0+X21oLCAkdGhpcy0+c2VsZWN0VGltZW91dCkgPT09IC0xCiAgICAgICAgKSB7CiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSB1c2xlZXAgaWYgYSBzZWxlY3QgcmV0dXJucyAtMS4KICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTYxMTQxCiAgICAgICAgICAgIHVzbGVlcCgyNTApOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfZXhlYygkdGhpcy0+X21oLCAkdGhpcy0+YWN0aXZlKSA9PT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKTsKCiAgICAgICAgJHRoaXMtPnByb2Nlc3NNZXNzYWdlcygpOwogICAgfQoKICAgIC8qKgogICAgICogUnVucyB1bnRpbCBhbGwgb3V0c3RhbmRpbmcgY29ubmVjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkcXVldWUgPSBQXHF1ZXVlKCk7CgogICAgICAgIHdoaWxlICgkdGhpcy0+aGFuZGxlcyB8fCAhJHF1ZXVlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRyYW5zZmVycywgdGhlbiBzbGVlcCBmb3IgdGhlIG5leHQgZGVsYXkKICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWN0aXZlICYmICR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgICAgIHVzbGVlcCgkdGhpcy0+dGltZVRvTmV4dCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+dGljaygpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZFJlcXVlc3QoYXJyYXkgJGVudHJ5KQogICAgewogICAgICAgICRlYXN5ID0gJGVudHJ5WydlYXN5J107CiAgICAgICAgJGlkID0gKGludCkgJGVhc3ktPmhhbmRsZTsKICAgICAgICAkdGhpcy0+aGFuZGxlc1skaWRdID0gJGVudHJ5OwogICAgICAgIGlmIChlbXB0eSgkZWFzeS0+b3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKCR0aGlzLT5fbWgsICRlYXN5LT5oYW5kbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5kZWxheXNbJGlkXSA9IG1pY3JvdGltZSh0cnVlKSArICgkZWFzeS0+b3B0aW9uc1snZGVsYXknXSAvIDEwMDApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENhbmNlbHMgYSBoYW5kbGUgZnJvbSBzZW5kaW5nIGFuZCByZW1vdmVzIHJlZmVyZW5jZXMgdG8gaXQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaWQgSGFuZGxlIElEIHRvIGNhbmNlbCBhbmQgcmVtb3ZlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2FuY2VsKCRpZCkKICAgIHsKICAgICAgICAvLyBDYW5ub3QgY2FuY2VsIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZC4KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5oYW5kbGVzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRoYW5kbGUgPSAkdGhpcy0+aGFuZGxlc1skaWRdWydlYXN5J10tPmhhbmRsZTsKICAgICAgICB1bnNldCgkdGhpcy0+ZGVsYXlzWyRpZF0sICR0aGlzLT5oYW5kbGVzWyRpZF0pOwogICAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgkdGhpcy0+X21oLCAkaGFuZGxlKTsKICAgICAgICBjdXJsX2Nsb3NlKCRoYW5kbGUpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlcygpCiAgICB7CiAgICAgICAgd2hpbGUgKCRkb25lID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoJHRoaXMtPl9taCkpIHsKICAgICAgICAgICAgJGlkID0gKGludCkgJGRvbmVbJ2hhbmRsZSddOwogICAgICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoJHRoaXMtPl9taCwgJGRvbmVbJ2hhbmRsZSddKTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSkpIHsKICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IHdhcyBjYW5jZWxsZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudHJ5ID0gJHRoaXMtPmhhbmRsZXNbJGlkXTsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSwgJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgJGVudHJ5WydlYXN5J10tPmVycm5vID0gJGRvbmVbJ3Jlc3VsdCddOwogICAgICAgICAgICAkZW50cnlbJ2RlZmVycmVkJ10tPnJlc29sdmUoCiAgICAgICAgICAgICAgICBDdXJsRmFjdG9yeTo6ZmluaXNoKAogICAgICAgICAgICAgICAgICAgICR0aGlzLAogICAgICAgICAgICAgICAgICAgICRlbnRyeVsnZWFzeSddLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWN0b3J5CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdGltZVRvTmV4dCgpCiAgICB7CiAgICAgICAgJGN1cnJlbnRUaW1lID0gbWljcm90aW1lKHRydWUpOwogICAgICAgICRuZXh0VGltZSA9IFBIUF9JTlRfTUFYOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWxheXMgYXMgJHRpbWUpIHsKICAgICAgICAgICAgaWYgKCR0aW1lIDwgJG5leHRUaW1lKSB7CiAgICAgICAgICAgICAgICAkbmV4dFRpbWUgPSAkdGltZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1heCgwLCAkbmV4dFRpbWUgLSAkY3VycmVudFRpbWUpICogMTAwMDAwMDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFBzcjdcUmVzcG9uc2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUmVwcmVzZW50cyBhIGNVUkwgZWFzeSBoYW5kbGUgYW5kIHRoZSBkYXRhIGl0IHBvcHVsYXRlcy4KICoKICogQGludGVybmFsCiAqLwpmaW5hbCBjbGFzcyBFYXN5SGFuZGxlCnsKICAgIC8qKiBAdmFyIHJlc291cmNlIGNVUkwgcmVzb3VyY2UgKi8KICAgIHB1YmxpYyAkaGFuZGxlOwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSBXaGVyZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gKi8KICAgIHB1YmxpYyAkc2luazsKCiAgICAvKiogQHZhciBhcnJheSBSZWNlaXZlZCBIVFRQIGhlYWRlcnMgc28gZmFyICovCiAgICBwdWJsaWMgJGhlYWRlcnMgPSBbXTsKCiAgICAvKiogQHZhciBSZXNwb25zZUludGVyZmFjZSBSZWNlaXZlZCByZXNwb25zZSAoaWYgYW55KSAqLwogICAgcHVibGljICRyZXNwb25zZTsKCiAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlIFJlcXVlc3QgYmVpbmcgc2VudCAqLwogICAgcHVibGljICRyZXF1ZXN0OwoKICAgIC8qKiBAdmFyIGFycmF5IFJlcXVlc3Qgb3B0aW9ucyAqLwogICAgcHVibGljICRvcHRpb25zID0gW107CgogICAgLyoqIEB2YXIgaW50IGNVUkwgZXJyb3IgbnVtYmVyIChpZiBhbnkpICovCiAgICBwdWJsaWMgJGVycm5vID0gMDsKCiAgICAvKiogQHZhciBcRXhjZXB0aW9uIEV4Y2VwdGlvbiBkdXJpbmcgb25faGVhZGVycyAoaWYgYW55KSAqLwogICAgcHVibGljICRvbkhlYWRlcnNFeGNlcHRpb247CgogICAgLyoqCiAgICAgKiBBdHRhY2ggYSByZXNwb25zZSB0byB0aGUgZWFzeSBoYW5kbGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGhlYWRlcnMuCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmhlYWRlcnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTm8gaGVhZGVycyBoYXZlIGJlZW4gcmVjZWl2ZWQnKTsKICAgICAgICB9CgogICAgICAgIC8vIEhUVFAtdmVyc2lvbiBTUCBzdGF0dXMtY29kZSBTUCByZWFzb24tcGhyYXNlCiAgICAgICAgJHN0YXJ0TGluZSA9IGV4cGxvZGUoJyAnLCBhcnJheV9zaGlmdCgkdGhpcy0+aGVhZGVycyksIDMpOwogICAgICAgICRoZWFkZXJzID0gXEd1enpsZUh0dHBcaGVhZGVyc19mcm9tX2xpbmVzKCR0aGlzLT5oZWFkZXJzKTsKICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBcR3V6emxlSHR0cFxub3JtYWxpemVfaGVhZGVyX2tleXMoJGhlYWRlcnMpOwoKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydkZWNvZGVfY29udGVudCddKQogICAgICAgICAgICAmJiBpc3NldCgkbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkKICAgICAgICApIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWVuY29kaW5nJ10KICAgICAgICAgICAgICAgID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dOwogICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWxlbmd0aCddCiAgICAgICAgICAgICAgICAgICAgPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dOwoKICAgICAgICAgICAgICAgICRib2R5TGVuZ3RoID0gKGludCkgJHRoaXMtPnNpbmstPmdldFNpemUoKTsKICAgICAgICAgICAgICAgIGlmICgkYm9keUxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0gPSAkYm9keUxlbmd0aDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEF0dGFjaCBhIHJlc3BvbnNlIHRvIHRoZSBlYXN5IGhhbmRsZSB3aXRoIHRoZSBwYXJzZWQgaGVhZGVycy4KICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoCiAgICAgICAgICAgICRzdGFydExpbmVbMV0sCiAgICAgICAgICAgICRoZWFkZXJzLAogICAgICAgICAgICAkdGhpcy0+c2luaywKICAgICAgICAgICAgc3Vic3RyKCRzdGFydExpbmVbMF0sIDUpLAogICAgICAgICAgICBpc3NldCgkc3RhcnRMaW5lWzJdKSA/IChzdHJpbmcpICRzdGFydExpbmVbMl0gOiBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgJG1zZyA9ICRuYW1lID09PSAnaGFuZGxlJwogICAgICAgICAgICA/ICdUaGUgRWFzeUhhbmRsZSBoYXMgYmVlbiByZWxlYXNlZCcKICAgICAgICAgICAgOiAnSW52YWxpZCBwcm9wZXJ0eTogJyAuICRuYW1lOwogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbXNnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyU3RhY2s7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEhhbmRsZXIgdGhhdCByZXR1cm5zIHJlc3BvbnNlcyBvciB0aHJvdyBleGNlcHRpb25zIGZyb20gYSBxdWV1ZS4KICovCmNsYXNzIE1vY2tIYW5kbGVyIGltcGxlbWVudHMgXENvdW50YWJsZQp7CiAgICBwcml2YXRlICRxdWV1ZSA9IFtdOwogICAgcHJpdmF0ZSAkbGFzdFJlcXVlc3Q7CiAgICBwcml2YXRlICRsYXN0T3B0aW9uczsKICAgIHByaXZhdGUgJG9uRnVsZmlsbGVkOwogICAgcHJpdmF0ZSAkb25SZWplY3RlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgTW9ja0hhbmRsZXIgdGhhdCB1c2VzIHRoZSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgbGlzdCBvZgogICAgICogbWlkZGxld2FyZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRxdWV1ZSBBcnJheSBvZiByZXNwb25zZXMsIGNhbGxhYmxlcywgb3IgZXhjZXB0aW9ucy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyBmdWxmaWxsZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uUmVqZWN0ZWQgIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgcmVqZWN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBIYW5kbGVyU3RhY2sKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVXaXRoTWlkZGxld2FyZSgKICAgICAgICBhcnJheSAkcXVldWUgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgY2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApIHsKICAgICAgICByZXR1cm4gSGFuZGxlclN0YWNrOjpjcmVhdGUobmV3IHNlbGYoJHF1ZXVlLCAkb25GdWxmaWxsZWQsICRvblJlamVjdGVkKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgcGFzc2VkIGluIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgb2YKICAgICAqIHtAc2VlIFBzcjdcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlfSBvYmplY3RzLCBFeGNlcHRpb25zLAogICAgICogY2FsbGFibGVzLCBvciBQcm9taXNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXVlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uRnVsZmlsbGVkIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZnVsZmlsbGVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkICBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgYXJyYXkgJHF1ZXVlID0gbnVsbCwKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJG9uRnVsZmlsbGVkOwogICAgICAgICR0aGlzLT5vblJlamVjdGVkID0gJG9uUmVqZWN0ZWQ7CgogICAgICAgIGlmICgkcXVldWUpIHsKICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnYXBwZW5kJ10sICRxdWV1ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5xdWV1ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdNb2NrIHF1ZXVlIGlzIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIHVzbGVlcCgkb3B0aW9uc1snZGVsYXknXSAqIDEwMDApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmxhc3RSZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICAgICAgJHRoaXMtPmxhc3RPcHRpb25zID0gJG9wdGlvbnM7CiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXlfc2hpZnQoJHRoaXMtPnF1ZXVlKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfY2FsbGFibGUoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSgkcmVzcG9uc2UpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFJlcXVlc3RFeGNlcHRpb24oJG1zZywgJHJlcXVlc3QsICRyZXNwb25zZSwgJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfY2FsbGFibGUoJHJlc3BvbnNlKSkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSBjYWxsX3VzZXJfZnVuYygkcmVzcG9uc2UsICRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSAkcmVzcG9uc2UgaW5zdGFuY2VvZiBcRXhjZXB0aW9uCiAgICAgICAgICAgID8gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRyZXNwb25zZSkKICAgICAgICAgICAgOiBcR3V6emxlSHR0cFxQcm9taXNlXHByb21pc2VfZm9yKCRyZXNwb25zZSk7CgogICAgICAgIHJldHVybiAkcmVzcG9uc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlcXVlc3QsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52b2tlU3RhdHMoJHJlcXVlc3QsICRvcHRpb25zLCAkdmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5vbkZ1bGZpbGxlZCwgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50cyA9IChzdHJpbmcpICR2YWx1ZS0+Z2V0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRzaW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJHNpbmssICRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX3N0cmluZygkc2luaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHNpbmssICRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRzaW5rIGluc3RhbmNlb2YgXFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaW5rLT53cml0ZSgkY29udGVudHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkcmVxdWVzdCwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkcmVxdWVzdCwgJG9wdGlvbnMsIG51bGwsICRyZWFzb24pOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPm9uUmVqZWN0ZWQsICRyZWFzb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigkcmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIHZhcmlhZGljIHJlcXVlc3RzLCBleGNlcHRpb25zLCBjYWxsYWJsZXMsIG9yIHByb21pc2VzCiAgICAgKiB0byB0aGUgcXVldWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoKQogICAgewogICAgICAgIGZvcmVhY2ggKGZ1bmNfZ2V0X2FyZ3MoKSBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBcRXhjZXB0aW9uCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCBpc19jYWxsYWJsZSgkdmFsdWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXVlW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRXhwZWN0ZWQgYSByZXNwb25zZSBvciAnCiAgICAgICAgICAgICAgICAgICAgLiAnZXhjZXB0aW9uLiBGb3VuZCAnIC4gXEd1enpsZUh0dHBcZGVzY3JpYmVfdHlwZSgkdmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCByZWNlaXZlZCByZXF1ZXN0LgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFzdFJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhc3QgcmVjZWl2ZWQgcmVxdWVzdCBvcHRpb25zLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RPcHRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RPcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPnF1ZXVlKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICAkcmVhc29uID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9zdGF0cyddKSkgewogICAgICAgICAgICAkc3RhdHMgPSBuZXcgVHJhbnNmZXJTdGF0cygkcmVxdWVzdCwgJHJlc3BvbnNlLCAwLCAkcmVhc29uKTsKICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoJG9wdGlvbnNbJ29uX3N0YXRzJ10sICRzdGF0cyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFJlcXVlc3RPcHRpb25zOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByb3ZpZGVzIGJhc2ljIHByb3hpZXMgZm9yIGhhbmRsZXJzLgogKi8KY2xhc3MgUHJveHkKewogICAgLyoqCiAgICAgKiBTZW5kcyBzeW5jaHJvbm91cyByZXF1ZXN0cyB0byBhIHNwZWNpZmljIGhhbmRsZXIgd2hpbGUgc2VuZGluZyBhbGwgb3RoZXIKICAgICAqIHJlcXVlc3RzIHRvIGFub3RoZXIgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlZmF1bHQgSGFuZGxlciB1c2VkIGZvciBub3JtYWwgcmVzcG9uc2VzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHN5bmMgICAgSGFuZGxlciB1c2VkIGZvciBzeW5jaHJvbm91cyByZXNwb25zZXMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIHRoZSBjb21wb3NlZCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBTeW5jKAogICAgICAgIGNhbGxhYmxlICRkZWZhdWx0LAogICAgICAgIGNhbGxhYmxlICRzeW5jCiAgICApIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRkZWZhdWx0LCAkc3luYykgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSkKICAgICAgICAgICAgICAgID8gJGRlZmF1bHQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICAgICAgOiAkc3luYygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kcyBzdHJlYW1pbmcgcmVxdWVzdHMgdG8gYSBzdHJlYW1pbmcgY29tcGF0aWJsZSBoYW5kbGVyIHdoaWxlIHNlbmRpbmcKICAgICAqIGFsbCBvdGhlciByZXF1ZXN0cyB0byBhIGRlZmF1bHQgaGFuZGxlci4KICAgICAqCiAgICAgKiBUaGlzLCBmb3IgZXhhbXBsZSwgY291bGQgYmUgdXNlZnVsIGZvciB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZQogICAgICogcGVyZm9ybWFuY2UgYmVuZWZpdHMgb2YgY3VybCB3aGlsZSBzdGlsbCBzdXBwb3J0aW5nIHRydWUgc3RyZWFtaW5nCiAgICAgKiB0aHJvdWdoIHRoZSBTdHJlYW1IYW5kbGVyLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVmYXVsdCAgIEhhbmRsZXIgdXNlZCBmb3Igbm9uLXN0cmVhbWluZyByZXNwb25zZXMKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc3RyZWFtaW5nIEhhbmRsZXIgdXNlZCBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyB0aGUgY29tcG9zZWQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cmFwU3RyZWFtaW5nKAogICAgICAgIGNhbGxhYmxlICRkZWZhdWx0LAogICAgICAgIGNhbGxhYmxlICRzdHJlYW1pbmcKICAgICkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGRlZmF1bHQsICRzdHJlYW1pbmcpIHsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCRvcHRpb25zWydzdHJlYW0nXSkKICAgICAgICAgICAgICAgID8gJGRlZmF1bHQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICAgICAgOiAkc3RyZWFtaW5nKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBQSFAncyBIVFRQIHN0cmVhbSB3cmFwcGVyLgogKi8KY2xhc3MgU3RyZWFtSGFuZGxlcgp7CiAgICBwcml2YXRlICRsYXN0SGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogU2VuZHMgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZC4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIC8vIFNsZWVwIGlmIHRoZXJlIGlzIGEgZGVsYXkgc3BlY2lmaWVkLgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkc3RhcnRUaW1lID0gaXNzZXQoJG9wdGlvbnNbJ29uX3N0YXRzJ10pID8gbWljcm90aW1lKHRydWUpIDogbnVsbDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aG91dEhlYWRlcignRXhwZWN0Jyk7CgogICAgICAgICAgICAvLyBBcHBlbmQgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgYm9keSBzaXplIGlzIHplcm8gdG8gbWF0Y2gKICAgICAgICAgICAgLy8gY1VSTCdzIGJlaGF2aW9yLgogICAgICAgICAgICBpZiAoMCA9PT0gJHJlcXVlc3QtPmdldEJvZHkoKS0+Z2V0U2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNyZWF0ZVJlc3BvbnNlKAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAkb3B0aW9ucywKICAgICAgICAgICAgICAgICR0aGlzLT5jcmVhdGVTdHJlYW0oJHJlcXVlc3QsICRvcHRpb25zKSwKICAgICAgICAgICAgICAgICRzdGFydFRpbWUKICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBlcnJvciB3YXMgYSBuZXR3b3JraW5nIGVycm9yLgogICAgICAgICAgICAkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgIC8vIFRoaXMgbGlzdCBjYW4gcHJvYmFibHkgZ2V0IG1vcmUgY29tcHJlaGVuc2l2ZS4KICAgICAgICAgICAgaWYgKHN0cnBvcygkbWVzc2FnZSwgJ2dldGFkZHJpbmZvJykgLy8gRE5TIGxvb2t1cCBmYWlsZWQKICAgICAgICAgICAgICAgIHx8IHN0cnBvcygkbWVzc2FnZSwgJ0Nvbm5lY3Rpb24gcmVmdXNlZCcpCiAgICAgICAgICAgICAgICB8fCBzdHJwb3MoJG1lc3NhZ2UsICJjb3VsZG4ndCBjb25uZWN0IHRvIGhvc3QiKSAvLyBlcnJvciBvbiBISFZNCiAgICAgICAgICAgICAgICB8fCBzdHJwb3MoJG1lc3NhZ2UsICJjb25uZWN0aW9uIGF0dGVtcHQgZmFpbGVkIikKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZSA9IG5ldyBDb25uZWN0RXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksICRyZXF1ZXN0LCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGUgPSBSZXF1ZXN0RXhjZXB0aW9uOjp3cmFwRXhjZXB0aW9uKCRyZXF1ZXN0LCAkZSk7CiAgICAgICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkb3B0aW9ucywgJHJlcXVlc3QsICRzdGFydFRpbWUsIG51bGwsICRlKTsKCiAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgJHN0YXJ0VGltZSwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgICRlcnJvciA9IG51bGwKICAgICkgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snb25fc3RhdHMnXSkpIHsKICAgICAgICAgICAgJHN0YXRzID0gbmV3IFRyYW5zZmVyU3RhdHMoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZSwKICAgICAgICAgICAgICAgIG1pY3JvdGltZSh0cnVlKSAtICRzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAkZXJyb3IsCiAgICAgICAgICAgICAgICBbXQogICAgICAgICAgICApOwogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkb3B0aW9uc1snb25fc3RhdHMnXSwgJHN0YXRzKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZSgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgICRzdHJlYW0sCiAgICAgICAgJHN0YXJ0VGltZQogICAgKSB7CiAgICAgICAgJGhkcnMgPSAkdGhpcy0+bGFzdEhlYWRlcnM7CiAgICAgICAgJHRoaXMtPmxhc3RIZWFkZXJzID0gW107CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnICcsIGFycmF5X3NoaWZ0KCRoZHJzKSwgMyk7CiAgICAgICAgJHZlciA9IGV4cGxvZGUoJy8nLCAkcGFydHNbMF0pWzFdOwogICAgICAgICRzdGF0dXMgPSAkcGFydHNbMV07CiAgICAgICAgJHJlYXNvbiA9IGlzc2V0KCRwYXJ0c1syXSkgPyAkcGFydHNbMl0gOiBudWxsOwogICAgICAgICRoZWFkZXJzID0gXEd1enpsZUh0dHBcaGVhZGVyc19mcm9tX2xpbmVzKCRoZHJzKTsKICAgICAgICBsaXN0KCRzdHJlYW0sICRoZWFkZXJzKSA9ICR0aGlzLT5jaGVja0RlY29kZSgkb3B0aW9ucywgJGhlYWRlcnMsICRzdHJlYW0pOwogICAgICAgICRzdHJlYW0gPSBQc3I3XHN0cmVhbV9mb3IoJHN0cmVhbSk7CiAgICAgICAgJHNpbmsgPSAkc3RyZWFtOwoKICAgICAgICBpZiAoc3RyY2FzZWNtcCgnSEVBRCcsICRyZXF1ZXN0LT5nZXRNZXRob2QoKSkpIHsKICAgICAgICAgICAgJHNpbmsgPSAkdGhpcy0+Y3JlYXRlU2luaygkc3RyZWFtLCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSBuZXcgUHNyN1xSZXNwb25zZSgkc3RhdHVzLCAkaGVhZGVycywgJHNpbmssICR2ZXIsICRyZWFzb24pOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydvbl9oZWFkZXJzJ10oJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgJG1zZyA9ICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbl9oZWFkZXJzIGV2ZW50JzsKICAgICAgICAgICAgICAgICRleCA9IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCRtc2csICRyZXF1ZXN0LCAkcmVzcG9uc2UsICRlKTsKICAgICAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJGV4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRG8gbm90IGRyYWluIHdoZW4gdGhlIHJlcXVlc3QgaXMgYSBIRUFEIHJlcXVlc3QgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAvLyBubyBib2R5LgogICAgICAgIGlmICgkc2luayAhPT0gJHN0cmVhbSkgewogICAgICAgICAgICAkdGhpcy0+ZHJhaW4oCiAgICAgICAgICAgICAgICAkc3RyZWFtLAogICAgICAgICAgICAgICAgJHNpbmssCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkb3B0aW9ucywgJHJlcXVlc3QsICRzdGFydFRpbWUsICRyZXNwb25zZSwgbnVsbCk7CgogICAgICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkcmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU2luayhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snc3RyZWFtJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkc3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgJHNpbmsgPSBpc3NldCgkb3B0aW9uc1snc2luayddKQogICAgICAgICAgICA/ICRvcHRpb25zWydzaW5rJ10KICAgICAgICAgICAgOiBmb3BlbigncGhwOi8vdGVtcCcsICdyKycpOwoKICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCRzaW5rKQogICAgICAgICAgICA/IG5ldyBQc3I3XExhenlPcGVuU3RyZWFtKCRzaW5rLCAndysnKQogICAgICAgICAgICA6IFBzcjdcc3RyZWFtX2Zvcigkc2luayk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0RlY29kZShhcnJheSAkb3B0aW9ucywgYXJyYXkgJGhlYWRlcnMsICRzdHJlYW0pCiAgICB7CiAgICAgICAgLy8gQXV0b21hdGljYWxseSBkZWNvZGUgcmVzcG9uc2VzIHdoZW4gaW5zdHJ1Y3RlZC4KICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWNvZGVfY29udGVudCddKSkgewogICAgICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBcR3V6emxlSHR0cFxub3JtYWxpemVfaGVhZGVyX2tleXMoJGhlYWRlcnMpOwogICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ10pKSB7CiAgICAgICAgICAgICAgICAkZW5jb2RpbmcgPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV07CiAgICAgICAgICAgICAgICBpZiAoJGVuY29kaW5nWzBdID09PSAnZ3ppcCcgfHwgJGVuY29kaW5nWzBdID09PSAnZGVmbGF0ZScpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZWFtID0gbmV3IFBzcjdcSW5mbGF0ZVN0cmVhbSgKICAgICAgICAgICAgICAgICAgICAgICAgUHNyN1xzdHJlYW1fZm9yKCRzdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtZW5jb2RpbmcnXQogICAgICAgICAgICAgICAgICAgICAgICA9ICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddXTsKICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY29udGVudC1lbmNvZGluZyBoZWFkZXIKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV0pOwogICAgICAgICAgICAgICAgICAgIC8vIEZpeCBjb250ZW50LWxlbmd0aCBoZWFkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtbGVuZ3RoJ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRsZW5ndGggPSAoaW50KSAkc3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0gPSBbJGxlbmd0aF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHN0cmVhbSwgJGhlYWRlcnNdOwogICAgfQoKICAgIC8qKgogICAgICogRHJhaW5zIHRoZSBzb3VyY2Ugc3RyZWFtIGludG8gdGhlICJzaW5rIiBjbGllbnQgb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHNvdXJjZQogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc2luawogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkY29udGVudExlbmd0aCBIZWFkZXIgc3BlY2lmeWluZyB0aGUgYW1vdW50IG9mCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdG8gcmVhZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiB3aGVuIHRoZSBzaW5rIG9wdGlvbiBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRyYWluKAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc291cmNlLAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc2luaywKICAgICAgICAkY29udGVudExlbmd0aAogICAgKSB7CiAgICAgICAgLy8gSWYgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaXMgcHJvdmlkZWQsIHRoZW4gc3RvcCByZWFkaW5nIG9uY2UKICAgICAgICAvLyB0aGF0IG51bWJlciBvZiBieXRlcyBoYXMgYmVlbiByZWFkLiBUaGlzIGNhbiBwcmV2ZW50IGluZmluaXRlbHkKICAgICAgICAvLyByZWFkaW5nIGZyb20gYSBzdHJlYW0gd2hlbiBkZWFsaW5nIHdpdGggc2VydmVycyB0aGF0IGRvIG5vdCBob25vcgogICAgICAgIC8vIENvbm5lY3Rpb246IENsb3NlIGhlYWRlcnMuCiAgICAgICAgUHNyN1xjb3B5X3RvX3N0cmVhbSgKICAgICAgICAgICAgJHNvdXJjZSwKICAgICAgICAgICAgJHNpbmssCiAgICAgICAgICAgIChzdHJsZW4oJGNvbnRlbnRMZW5ndGgpID4gMCAmJiAoaW50KSAkY29udGVudExlbmd0aCA+IDApID8gKGludCkgJGNvbnRlbnRMZW5ndGggOiAtMQogICAgICAgICk7CgogICAgICAgICRzaW5rLT5zZWVrKDApOwogICAgICAgICRzb3VyY2UtPmNsb3NlKCk7CgogICAgICAgIHJldHVybiAkc2luazsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHJlc291cmNlIGFuZCBjaGVjayB0byBlbnN1cmUgaXQgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYWJsZSB0aGF0IHJldHVybnMgc3RyZWFtIHJlc291cmNlCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICAkZXJyb3JzID0gbnVsbDsKICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbiAoJF8sICRtc2csICRmaWxlLCAkbGluZSkgdXNlICgmJGVycm9ycykgewogICAgICAgICAgICAkZXJyb3JzW10gPSBbCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1zZywKICAgICAgICAgICAgICAgICdmaWxlJyAgICA9PiAkZmlsZSwKICAgICAgICAgICAgICAgICdsaW5lJyAgICA9PiAkbGluZQogICAgICAgICAgICBdOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgJHJlc291cmNlID0gJGNhbGxiYWNrKCk7CiAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgogICAgICAgIGlmICghJHJlc291cmNlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gJ0Vycm9yIGNyZWF0aW5nIHJlc291cmNlOiAnOwogICAgICAgICAgICBmb3JlYWNoICgkZXJyb3JzIGFzICRlcnIpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlcnIgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSAuPSAiWyRrZXldICR2YWx1ZSIgLiBQSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih0cmltKCRtZXNzYWdlKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc291cmNlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIHN0YXRpYyAkbWV0aG9kczsKICAgICAgICBpZiAoISRtZXRob2RzKSB7CiAgICAgICAgICAgICRtZXRob2RzID0gYXJyYXlfZmxpcChnZXRfY2xhc3NfbWV0aG9kcyhfX0NMQVNTX18pKTsKICAgICAgICB9CgogICAgICAgIC8vIEhUVFAvMS4xIHN0cmVhbXMgdXNpbmcgdGhlIFBIUCBzdHJlYW0gd3JhcHBlciByZXF1aXJlIGEKICAgICAgICAvLyBDb25uZWN0aW9uOiBjbG9zZSBoZWFkZXIKICAgICAgICBpZiAoJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpID09ICcxLjEnCiAgICAgICAgICAgICYmICEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb25uZWN0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIFNTTCBpcyB2ZXJpZmllZCBieSBkZWZhdWx0CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWyd2ZXJpZnknXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zID0gW107CiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbnRleHQoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkgJiYgIWlzX2NhbGxhYmxlKCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnMpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkbWV0aG9kID0gImFkZF97JGtleX0iOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRob2RzWyRtZXRob2RdKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT57JG1ldGhvZH0oJHJlcXVlc3QsICRjb250ZXh0LCAkdmFsdWUsICRwYXJhbXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pKSB7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignc3RyZWFtX2NvbnRleHQgbXVzdCBiZSBhbiBhcnJheScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb250ZXh0ID0gYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoCiAgICAgICAgICAgICAgICAkY29udGV4dCwKICAgICAgICAgICAgICAgICRvcHRpb25zWydzdHJlYW1fY29udGV4dCddCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBNaWNyb3NvZnQgTlRMTSBhdXRoZW50aWNhdGlvbiBvbmx5IHN1cHBvcnRlZCB3aXRoIGN1cmwgaGFuZGxlcgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYXV0aCddKQogICAgICAgICAgICAmJiBpc19hcnJheSgkb3B0aW9uc1snYXV0aCddKQogICAgICAgICAgICAmJiBpc3NldCgkb3B0aW9uc1snYXV0aCddWzJdKQogICAgICAgICAgICAmJiAnbnRsbScgPT0gJG9wdGlvbnNbJ2F1dGgnXVsyXQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignTWljcm9zb2Z0IE5UTE0gYXV0aGVudGljYXRpb24gb25seSBzdXBwb3J0ZWQgd2l0aCBjdXJsIGhhbmRsZXInKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+cmVzb2x2ZUhvc3QoJHJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Y3JlYXRlUmVzb3VyY2UoCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJGNvbnRleHQsICRwYXJhbXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHQsICRwYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVSZXNvdXJjZSgKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgkdXJpLCAmJGh0dHBfcmVzcG9uc2VfaGVhZGVyLCAkY29udGV4dCwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICRyZXNvdXJjZSA9IGZvcGVuKChzdHJpbmcpICR1cmksICdyJywgbnVsbCwgJGNvbnRleHQpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RIZWFkZXJzID0gJGh0dHBfcmVzcG9uc2VfaGVhZGVyOwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sncmVhZF90aW1lb3V0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlYWRUaW1lb3V0ID0gJG9wdGlvbnNbJ3JlYWRfdGltZW91dCddOwogICAgICAgICAgICAgICAgICAgICRzZWMgPSAoaW50KSAkcmVhZFRpbWVvdXQ7CiAgICAgICAgICAgICAgICAgICAgJHVzZWMgPSAoJHJlYWRUaW1lb3V0IC0gJHNlYykgKiAxMDAwMDA7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtX3NldF90aW1lb3V0KCRyZXNvdXJjZSwgJHNlYywgJHVzZWMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2ZUhvc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pICYmICFmaWx0ZXJfdmFyKCR1cmktPmdldEhvc3QoKSwgRklMVEVSX1ZBTElEQVRFX0lQKSkgewogICAgICAgICAgICBpZiAoJ3Y0JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJHJlY29yZHMgPSBkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIEROU19BKTsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlY29yZHNbMF1bJ2lwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3RFeGNlcHRpb24oc3ByaW50ZigiQ291bGQgbm90IHJlc29sdmUgSVB2NCBhZGRyZXNzIGZvciBob3N0ICclcyciLCAkdXJpLT5nZXRIb3N0KCkpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJHJlY29yZHNbMF1bJ2lwJ10pOwogICAgICAgICAgICB9IGVsc2VpZiAoJ3Y2JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJHJlY29yZHMgPSBkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIEROU19BQUFBKTsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlY29yZHNbMF1bJ2lwdjYnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihzcHJpbnRmKCJDb3VsZCBub3QgcmVzb2x2ZSBJUHY2IGFkZHJlc3MgZm9yIGhvc3QgJyVzJyIsICR1cmktPmdldEhvc3QoKSksICRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgnWycgLiAkcmVjb3Jkc1swXVsnaXB2NiddIC4gJ10nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29udGV4dChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgICRoZWFkZXJzID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICR2YWwpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzIC49ICIkbmFtZTogJHZhbFxyXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkY29udGV4dCA9IFsKICAgICAgICAgICAgJ2h0dHAnID0+IFsKICAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgICA9PiAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICAgICAnaGVhZGVyJyAgICAgICAgICAgPT4gJGhlYWRlcnMsCiAgICAgICAgICAgICAgICAncHJvdG9jb2xfdmVyc2lvbicgPT4gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpLAogICAgICAgICAgICAgICAgJ2lnbm9yZV9lcnJvcnMnICAgID0+IHRydWUsCiAgICAgICAgICAgICAgICAnZm9sbG93X2xvY2F0aW9uJyAgPT4gMCwKICAgICAgICAgICAgXSwKICAgICAgICBdOwoKICAgICAgICAkYm9keSA9IChzdHJpbmcpICRyZXF1ZXN0LT5nZXRCb2R5KCk7CgogICAgICAgIGlmICghZW1wdHkoJGJvZHkpKSB7CiAgICAgICAgICAgICRjb250ZXh0WydodHRwJ11bJ2NvbnRlbnQnXSA9ICRib2R5OwogICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBIVFRQIGhhbmRsZXIgZnJvbSBhZGRpbmcgYSBDb250ZW50LVR5cGUgaGVhZGVyLgogICAgICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtVHlwZScpKSB7CiAgICAgICAgICAgICAgICAkY29udGV4dFsnaHR0cCddWydoZWFkZXInXSAuPSAiQ29udGVudC1UeXBlOlxyXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkY29udGV4dFsnaHR0cCddWydoZWFkZXInXSA9IHJ0cmltKCRjb250ZXh0WydodHRwJ11bJ2hlYWRlciddKTsKCiAgICAgICAgcmV0dXJuICRjb250ZXh0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3Byb3h5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2h0dHAnXVsncHJveHknXSA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2NoZW1lID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCR2YWx1ZVskc2NoZW1lXSkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHZhbHVlWydubyddKQogICAgICAgICAgICAgICAgICAgIHx8ICFcR3V6emxlSHR0cFxpc19ob3N0X2luX25vcHJveHkoCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVbJ25vJ10KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snaHR0cCddWydwcm94eSddID0gJHZhbHVlWyRzY2hlbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3RpbWVvdXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgJiRvcHRpb25zLCAkdmFsdWUsICYkcGFyYW1zKQogICAgewogICAgICAgIGlmICgkdmFsdWUgPiAwKSB7CiAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ3RpbWVvdXQnXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfdmVyaWZ5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSB0cnVlKSB7CiAgICAgICAgICAgIC8vIFBIUCA1LjYgb3IgZ3JlYXRlciB3aWxsIGZpbmQgdGhlIHN5c3RlbSBjZXJ0IGJ5IGRlZmF1bHQuIFdoZW4KICAgICAgICAgICAgLy8gPCA1LjYsIHVzZSB0aGUgR3V6emxlIGJ1bmRsZWQgY2FjZXJ0LgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDYwMCkgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydjYWZpbGUnXSA9IFxHdXp6bGVIdHRwXGRlZmF1bHRfY2FfYnVuZGxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydjYWZpbGUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlNTTCBDQSBidW5kbGUgbm90IGZvdW5kOiAkdmFsdWUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXInXSA9IGZhbHNlOwogICAgICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3ZlcmlmeV9wZWVyX25hbWUnXSA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgdmVyaWZ5IHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgfQoKICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3ZlcmlmeV9wZWVyJ10gPSB0cnVlOwogICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXJfbmFtZSddID0gdHJ1ZTsKICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ2FsbG93X3NlbGZfc2lnbmVkJ10gPSBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9jZXJ0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3Bhc3NwaHJhc2UnXSA9ICR2YWx1ZVsxXTsKICAgICAgICAgICAgJHZhbHVlID0gJHZhbHVlWzBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiU1NMIGNlcnRpZmljYXRlIG5vdCBmb3VuZDogeyR2YWx1ZX0iKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydzc2wnXVsnbG9jYWxfY2VydCddID0gJHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3Byb2dyZXNzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICAkdGhpcy0+YWRkTm90aWZpY2F0aW9uKAogICAgICAgICAgICAkcGFyYW1zLAogICAgICAgICAgICBmdW5jdGlvbiAoJGNvZGUsICRhLCAkYiwgJGMsICR0cmFuc2ZlcnJlZCwgJHRvdGFsKSB1c2UgKCR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCRjb2RlID09IFNUUkVBTV9OT1RJRllfUFJPR1JFU1MpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUoJHRvdGFsLCAkdHJhbnNmZXJyZWQsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9kZWJ1ZyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCAmJG9wdGlvbnMsICR2YWx1ZSwgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRtYXAgPSBbCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQ09OTkVDVCAgICAgICA9PiAnQ09OTkVDVCcsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQVVUSF9SRVFVSVJFRCA9PiAnQVVUSF9SRVFVSVJFRCcsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQVVUSF9SRVNVTFQgICA9PiAnQVVUSF9SRVNVTFQnLAogICAgICAgICAgICBTVFJFQU1fTk9USUZZX01JTUVfVFlQRV9JUyAgPT4gJ01JTUVfVFlQRV9JUycsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfRklMRV9TSVpFX0lTICA9PiAnRklMRV9TSVpFX0lTJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9SRURJUkVDVEVEICAgID0+ICdSRURJUkVDVEVEJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9QUk9HUkVTUyAgICAgID0+ICdQUk9HUkVTUycsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfRkFJTFVSRSAgICAgICA9PiAnRkFJTFVSRScsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQ09NUExFVEVEICAgICA9PiAnQ09NUExFVEVEJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9SRVNPTFZFICAgICAgID0+ICdSRVNPTFZFJywKICAgICAgICBdOwogICAgICAgIHN0YXRpYyAkYXJncyA9IFsnc2V2ZXJpdHknLCAnbWVzc2FnZScsICdtZXNzYWdlX2NvZGUnLAogICAgICAgICAgICAnYnl0ZXNfdHJhbnNmZXJyZWQnLCAnYnl0ZXNfbWF4J107CgogICAgICAgICR2YWx1ZSA9IFxHdXp6bGVIdHRwXGRlYnVnX3Jlc291cmNlKCR2YWx1ZSk7CiAgICAgICAgJGlkZW50ID0gJHJlcXVlc3QtPmdldE1ldGhvZCgpIC4gJyAnIC4gJHJlcXVlc3QtPmdldFVyaSgpLT53aXRoRnJhZ21lbnQoJycpOwogICAgICAgICR0aGlzLT5hZGROb3RpZmljYXRpb24oCiAgICAgICAgICAgICRwYXJhbXMsCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJGlkZW50LCAkdmFsdWUsICRtYXAsICRhcmdzKSB7CiAgICAgICAgICAgICAgICAkcGFzc2VkID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICAgICAgICAgJGNvZGUgPSBhcnJheV9zaGlmdCgkcGFzc2VkKTsKICAgICAgICAgICAgICAgIGZwcmludGYoJHZhbHVlLCAnPCVzPiBbJXNdICcsICRpZGVudCwgJG1hcFskY29kZV0pOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXlfZmlsdGVyKCRwYXNzZWQpIGFzICRpID0+ICR2KSB7CiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCR2YWx1ZSwgJGFyZ3NbJGldIC4gJzogIicgLiAkdiAuICciICcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZndyaXRlKCR2YWx1ZSwgIlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkTm90aWZpY2F0aW9uKGFycmF5ICYkcGFyYW1zLCBjYWxsYWJsZSAkbm90aWZ5KQogICAgewogICAgICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uIGlmIG5lZWRlZC4KICAgICAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ25vdGlmaWNhdGlvbiddKSkgewogICAgICAgICAgICAkcGFyYW1zWydub3RpZmljYXRpb24nXSA9ICRub3RpZnk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmFtc1snbm90aWZpY2F0aW9uJ10gPSAkdGhpcy0+Y2FsbEFycmF5KFsKICAgICAgICAgICAgICAgICRwYXJhbXNbJ25vdGlmaWNhdGlvbiddLAogICAgICAgICAgICAgICAgJG5vdGlmeQogICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjYWxsQXJyYXkoYXJyYXkgJGZ1bmN0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgdXNlICgkZnVuY3Rpb25zKSB7CiAgICAgICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICAgICBmb3JlYWNoICgkZnVuY3Rpb25zIGFzICRmbikgewogICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZuLCAkYXJncyk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/HandlerStack.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIENyZWF0ZXMgYSBjb21wb3NlZCBHdXp6bGUgaGFuZGxlciBmdW5jdGlvbiBieSBzdGFja2luZyBtaWRkbGV3YXJlcyBvbiB0b3Agb2YKICogYW4gSFRUUCBoYW5kbGVyIGZ1bmN0aW9uLgogKi8KY2xhc3MgSGFuZGxlclN0YWNrCnsKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRoYW5kbGVyOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRzdGFjayA9IFtdOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfG51bGwgKi8KICAgIHByaXZhdGUgJGNhY2hlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHdpbGwgd3JhcCB0aGUgcHJvdmlkZWQgaGFuZGxlciBvciB1c2UgdGhlIG1vc3QKICAgICAqIGFwcHJvcHJpYXRlIGRlZmF1bHQgaGFuZGxlciBmb3IgeW91ciBzeXN0ZW0uIFRoZSByZXR1cm5lZCBIYW5kbGVyU3RhY2sgaGFzCiAgICAgKiBzdXBwb3J0IGZvciBjb29raWVzLCByZWRpcmVjdHMsIEhUVFAgZXJyb3IgZXhjZXB0aW9ucywgYW5kIHByZXBhcmluZyBhIGJvZHkKICAgICAqIGJlZm9yZSBzZW5kaW5nLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YWNrIGNhbiBiZSBwYXNzZWQgdG8gYSBjbGllbnQgaW4gdGhlICJoYW5kbGVyIgogICAgICogb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkaGFuZGxlciBIVFRQIGhhbmRsZXIgZnVuY3Rpb24gdG8gdXNlIHdpdGggdGhlIHN0YWNrLiBJZiBubwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgaXMgcHJvdmlkZWQsIHRoZSBiZXN0IGhhbmRsZXIgZm9yIHlvdXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2lsbCBiZSB1dGlsaXplZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEhhbmRsZXJTdGFjawogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHN0YWNrID0gbmV3IHNlbGYoJGhhbmRsZXIgPzogY2hvb3NlX2hhbmRsZXIoKSk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6Omh0dHBFcnJvcnMoKSwgJ2h0dHBfZXJyb3JzJyk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6OnJlZGlyZWN0KCksICdhbGxvd19yZWRpcmVjdHMnKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6Y29va2llcygpLCAnY29va2llcycpOwogICAgICAgICRzdGFjay0+cHVzaChNaWRkbGV3YXJlOjpwcmVwYXJlQm9keSgpLCAncHJlcGFyZV9ib2R5Jyk7CgogICAgICAgIHJldHVybiAkc3RhY2s7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGhhbmRsZXIgVW5kZXJseWluZyBIVFRQIGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEludm9rZXMgdGhlIGhhbmRsZXIgc3RhY2sgYXMgYSBjb21wb3NlZCBoYW5kbGVyCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkaGFuZGxlciA9ICR0aGlzLT5yZXNvbHZlKCk7CgogICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogRHVtcHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YWNrLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZGVwdGggPSAwOwogICAgICAgICRzdGFjayA9IFtdOwogICAgICAgIGlmICgkdGhpcy0+aGFuZGxlcikgewogICAgICAgICAgICAkc3RhY2tbXSA9ICIwKSBIYW5kbGVyOiAiIC4gJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHRoaXMtPmhhbmRsZXIpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJHRoaXMtPnN0YWNrKSBhcyAkdHVwbGUpIHsKICAgICAgICAgICAgJGRlcHRoKys7CiAgICAgICAgICAgICRzdHIgPSAieyRkZXB0aH0pIE5hbWU6ICd7JHR1cGxlWzFdfScsICI7CiAgICAgICAgICAgICRzdHIgLj0gIkZ1bmN0aW9uOiAiIC4gJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHR1cGxlWzBdKTsKICAgICAgICAgICAgJHJlc3VsdCA9ICI+IHskc3RyfVxueyRyZXN1bHR9IjsKICAgICAgICAgICAgJHN0YWNrW10gPSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkc3RhY2spIGFzICRrKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gIjwgeyRzdGFja1ska119XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIEhUVFAgaGFuZGxlciB0aGF0IGFjdHVhbGx5IHJldHVybnMgYSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkaGFuZGxlciBBY2NlcHRzIGEgcmVxdWVzdCBhbmQgYXJyYXkgb2Ygb3B0aW9ucyBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgUHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhhbmRsZXIoY2FsbGFibGUgJGhhbmRsZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVpbGRlciBoYXMgYSBoYW5kbGVyLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzSGFuZGxlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSAkdGhpcy0+aGFuZGxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFVuc2hpZnQgYSBtaWRkbGV3YXJlIHRvIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJG5hbWUgICAgICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdChjYWxsYWJsZSAkbWlkZGxld2FyZSwgJG5hbWUgPSBudWxsKQogICAgewogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPnN0YWNrLCBbJG1pZGRsZXdhcmUsICRuYW1lXSk7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgbWlkZGxld2FyZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICRuYW1lICAgICAgIE5hbWUgdG8gcmVnaXN0ZXIgZm9yIHRoaXMgbWlkZGxld2FyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2goY2FsbGFibGUgJG1pZGRsZXdhcmUsICRuYW1lID0gJycpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YWNrW10gPSBbJG1pZGRsZXdhcmUsICRuYW1lXTsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG1pZGRsZXdhcmUgYmVmb3JlIGFub3RoZXIgbWlkZGxld2FyZSBieSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkZmluZE5hbWUgICBNaWRkbGV3YXJlIHRvIGZpbmQKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHdpdGhOYW1lICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVmb3JlKCRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsICR3aXRoTmFtZSA9ICcnKQogICAgewogICAgICAgICR0aGlzLT5zcGxpY2UoJGZpbmROYW1lLCAkd2l0aE5hbWUsICRtaWRkbGV3YXJlLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG1pZGRsZXdhcmUgYWZ0ZXIgYW5vdGhlciBtaWRkbGV3YXJlIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRmaW5kTmFtZSAgIE1pZGRsZXdhcmUgdG8gZmluZAogICAgICogQHBhcmFtIGNhbGxhYmxlICRtaWRkbGV3YXJlIE1pZGRsZXdhcmUgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgICAkd2l0aE5hbWUgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZnRlcigkZmluZE5hbWUsIGNhbGxhYmxlICRtaWRkbGV3YXJlLCAkd2l0aE5hbWUgPSAnJykKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWlkZGxld2FyZSBieSBpbnN0YW5jZSBvciBuYW1lIGZyb20gdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxzdHJpbmcgJHJlbW92ZSBNaWRkbGV3YXJlIHRvIHJlbW92ZSBieSBpbnN0YW5jZSBvciBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRyZW1vdmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICAgICAgJGlkeCA9IGlzX2NhbGxhYmxlKCRyZW1vdmUpID8gMCA6IDE7CiAgICAgICAgJHRoaXMtPnN0YWNrID0gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPnN0YWNrLAogICAgICAgICAgICBmdW5jdGlvbiAoJHR1cGxlKSB1c2UgKCRpZHgsICRyZW1vdmUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdHVwbGVbJGlkeF0gIT09ICRyZW1vdmU7CiAgICAgICAgICAgIH0KICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2UgdGhlIG1pZGRsZXdhcmUgYW5kIGhhbmRsZXIgaW50byBhIHNpbmdsZSBjYWxsYWJsZSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jYWNoZWQpIHsKICAgICAgICAgICAgaWYgKCEoJHByZXYgPSAkdGhpcy0+aGFuZGxlcikpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ05vIGhhbmRsZXIgaGFzIGJlZW4gc3BlY2lmaWVkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJHRoaXMtPnN0YWNrKSBhcyAkZm4pIHsKICAgICAgICAgICAgICAgICRwcmV2ID0gJGZuWzBdKCRwcmV2KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmNhY2hlZCA9ICRwcmV2OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWNoZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEJ5TmFtZSgkbmFtZSkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RhY2sgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCR2WzFdID09PSAkbmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTWlkZGxld2FyZSBub3QgZm91bmQ6ICRuYW1lIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpY2VzIGEgZnVuY3Rpb24gaW50byB0aGUgbWlkZGxld2FyZSBsaXN0IGF0IGEgc3BlY2lmaWMgcG9zaXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICAgICAgICAgICRmaW5kTmFtZQogICAgICogQHBhcmFtICAgICAgICAgICR3aXRoTmFtZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRtaWRkbGV3YXJlCiAgICAgKiBAcGFyYW0gICAgICAgICAgJGJlZm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNwbGljZSgkZmluZE5hbWUsICR3aXRoTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsICRiZWZvcmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICAgICAgJGlkeCA9ICR0aGlzLT5maW5kQnlOYW1lKCRmaW5kTmFtZSk7CiAgICAgICAgJHR1cGxlID0gWyRtaWRkbGV3YXJlLCAkd2l0aE5hbWVdOwoKICAgICAgICBpZiAoJGJlZm9yZSkgewogICAgICAgICAgICBpZiAoJGlkeCA9PT0gMCkgewogICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+c3RhY2ssICR0dXBsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHR1cGxlLCAkdGhpcy0+c3RhY2tbJGlkeF1dOwogICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCR0aGlzLT5zdGFjaywgJGlkeCwgMSwgJHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkaWR4ID09PSBjb3VudCgkdGhpcy0+c3RhY2spIC0gMSkgewogICAgICAgICAgICAkdGhpcy0+c3RhY2tbXSA9ICR0dXBsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHRoaXMtPnN0YWNrWyRpZHhdLCAkdHVwbGVdOwogICAgICAgICAgICBhcnJheV9zcGxpY2UoJHRoaXMtPnN0YWNrLCAkaWR4LCAxLCAkcmVwbGFjZW1lbnQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb3ZpZGVzIGEgZGVidWcgc3RyaW5nIGZvciBhIGdpdmVuIGNhbGxhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxjYWxsYWJsZSAkZm4gRnVuY3Rpb24gdG8gd3JpdGUgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWJ1Z0NhbGxhYmxlKCRmbikKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuICJjYWxsYWJsZSh7JGZufSkiOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2FycmF5KCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkZm5bMF0pCiAgICAgICAgICAgICAgICA/ICJjYWxsYWJsZSh7JGZuWzBdfTo6eyRmblsxXX0pIgogICAgICAgICAgICAgICAgOiAiY2FsbGFibGUoWyciIC4gZ2V0X2NsYXNzKCRmblswXSkgLiAiJywgJ3skZm5bMV19J10pIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnY2FsbGFibGUoJyAuIHNwbF9vYmplY3RfaGFzaCgkZm4pIC4gJyknOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/MessageFormatter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBGb3JtYXRzIGxvZyBtZXNzYWdlcyB1c2luZyB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGZvciByZXF1ZXN0cywgcmVzcG9uc2VzLAogKiBhbmQgb3RoZXIgdHJhbnNhY3Rpb25hbCBkYXRhLgogKgogKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMgYXJlIHN1cHBvcnRlZDoKICoKICogLSB7cmVxdWVzdH06ICAgICAgICBGdWxsIEhUVFAgcmVxdWVzdCBtZXNzYWdlCiAqIC0ge3Jlc3BvbnNlfTogICAgICAgRnVsbCBIVFRQIHJlc3BvbnNlIG1lc3NhZ2UKICogLSB7dHN9OiAgICAgICAgICAgICBJU08gODYwMSBkYXRlIGluIEdNVAogKiAtIHtkYXRlX2lzb184NjAxfSAgIElTTyA4NjAxIGRhdGUgaW4gR01UCiAqIC0ge2RhdGVfY29tbW9uX2xvZ30gQXBhY2hlIGNvbW1vbiBsb2cgZGF0ZSB1c2luZyB0aGUgY29uZmlndXJlZCB0aW1lem9uZS4KICogLSB7aG9zdH06ICAgICAgICAgICBIb3N0IG9mIHRoZSByZXF1ZXN0CiAqIC0ge21ldGhvZH06ICAgICAgICAgTWV0aG9kIG9mIHRoZSByZXF1ZXN0CiAqIC0ge3VyaX06ICAgICAgICAgICAgVVJJIG9mIHRoZSByZXF1ZXN0CiAqIC0ge3ZlcnNpb259OiAgICAgICAgUHJvdG9jb2wgdmVyc2lvbgogKiAtIHt0YXJnZXR9OiAgICAgICAgIFJlcXVlc3QgdGFyZ2V0IG9mIHRoZSByZXF1ZXN0IChwYXRoICsgcXVlcnkgKyBmcmFnbWVudCkKICogLSB7aG9zdG5hbWV9OiAgICAgICBIb3N0bmFtZSBvZiB0aGUgbWFjaGluZSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QKICogLSB7Y29kZX06ICAgICAgICAgICBTdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UgKGlmIGF2YWlsYWJsZSkKICogLSB7cGhyYXNlfTogICAgICAgICBSZWFzb24gcGhyYXNlIG9mIHRoZSByZXNwb25zZSAgKGlmIGF2YWlsYWJsZSkKICogLSB7ZXJyb3J9OiAgICAgICAgICBBbnkgZXJyb3IgbWVzc2FnZXMgKGlmIGF2YWlsYWJsZSkKICogLSB7cmVxX2hlYWRlcl8qfTogICBSZXBsYWNlIGAqYCB3aXRoIHRoZSBsb3dlcmNhc2VkIG5hbWUgb2YgYSByZXF1ZXN0IGhlYWRlciB0byBhZGQgdG8gdGhlIG1lc3NhZ2UKICogLSB7cmVzX2hlYWRlcl8qfTogICBSZXBsYWNlIGAqYCB3aXRoIHRoZSBsb3dlcmNhc2VkIG5hbWUgb2YgYSByZXNwb25zZSBoZWFkZXIgdG8gYWRkIHRvIHRoZSBtZXNzYWdlCiAqIC0ge3JlcV9oZWFkZXJzfTogICAgUmVxdWVzdCBoZWFkZXJzCiAqIC0ge3Jlc19oZWFkZXJzfTogICAgUmVzcG9uc2UgaGVhZGVycwogKiAtIHtyZXFfYm9keX06ICAgICAgIFJlcXVlc3QgYm9keQogKiAtIHtyZXNfYm9keX06ICAgICAgIFJlc3BvbnNlIGJvZHkKICovCmNsYXNzIE1lc3NhZ2VGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiBBcGFjaGUgQ29tbW9uIExvZyBGb3JtYXQuCiAgICAgKiBAbGluayBodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9sb2dzLmh0bWwjY29tbW9uCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBjb25zdCBDTEYgPSAie2hvc3RuYW1lfSB7cmVxX2hlYWRlcl9Vc2VyLUFnZW50fSAtIFt7ZGF0ZV9jb21tb25fbG9nfV0gXCJ7bWV0aG9kfSB7dGFyZ2V0fSBIVFRQL3t2ZXJzaW9ufVwiIHtjb2RlfSB7cmVzX2hlYWRlcl9Db250ZW50LUxlbmd0aH0iOwogICAgY29uc3QgREVCVUcgPSAiPj4+Pj4+Pj5cbntyZXF1ZXN0fVxuPDw8PDw8PDxcbntyZXNwb25zZX1cbi0tLS0tLS0tXG57ZXJyb3J9IjsKICAgIGNvbnN0IFNIT1JUID0gJ1t7dHN9XSAie21ldGhvZH0ge3RhcmdldH0gSFRUUC97dmVyc2lvbn0iIHtjb2RlfSc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFRlbXBsYXRlIHVzZWQgdG8gZm9ybWF0IGxvZyBtZXNzYWdlcyAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZSBMb2cgbWVzc2FnZSB0ZW1wbGF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRlbXBsYXRlID0gc2VsZjo6Q0xGKQogICAgewogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZSA/OiBzZWxmOjpDTEY7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIG1lc3NhZ2Ugc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICAkcmVxdWVzdCAgUmVxdWVzdCB0aGF0IHdhcyBzZW50CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAgJGVycm9yICAgIEV4Y2VwdGlvbiB0aGF0IHdhcyByZWNlaXZlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgIFxFeGNlcHRpb24gJGVycm9yID0gbnVsbAogICAgKSB7CiAgICAgICAgJGNhY2hlID0gW107CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcve1xzKihbQS1aYS16X1wtXC4wLTldKylccyp9LycsCiAgICAgICAgICAgIGZ1bmN0aW9uIChhcnJheSAkbWF0Y2hlcykgdXNlICgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZXJyb3IsICYkY2FjaGUpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY2FjaGVbJG1hdGNoZXNbMV1dKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkY2FjaGVbJG1hdGNoZXNbMV1dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJG1hdGNoZXNbMV0pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IFBzcjdcc3RyKCRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzcG9uc2UnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gUHNyN1xzdHIoJHJlc3BvbnNlKSA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXFfaGVhZGVycyc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSB0cmltKCRyZXF1ZXN0LT5nZXRNZXRob2QoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyAnIC4gJHJlcXVlc3QtPmdldFJlcXVlc3RUYXJnZXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyBIVFRQLycgLiAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkgLiAiXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPmhlYWRlcnMoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfaGVhZGVycyc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUC8lcyAlZCAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC4gIlxyXG4iIC4gJHRoaXMtPmhlYWRlcnMoJHJlc3BvbnNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcV9ib2R5JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRCb2R5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc19ib2R5JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNwb25zZSA/ICRyZXNwb25zZS0+Z2V0Qm9keSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0cyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZV9pc29fODYwMSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSBnbWRhdGUoJ2MnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZV9jb21tb25fbG9nJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IGRhdGUoJ2QvTS9ZOkg6aTpzIE8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWV0aG9kJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRNZXRob2QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VyaSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGFyZ2V0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRSZXF1ZXN0VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcV92ZXJzaW9uJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzX3ZlcnNpb24nOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKCdIb3N0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3RuYW1lJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IGdldGhvc3RuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BocmFzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZXJyb3IgPyAkZXJyb3ItPmdldE1lc3NhZ2UoKSA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHByZWZpeGVkIGR5bmFtaWMgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRtYXRjaGVzWzFdLCAncmVxX2hlYWRlcl8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKHN1YnN0cigkbWF0Y2hlc1sxXSwgMTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3Jlc19oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZShzdWJzdHIoJG1hdGNoZXNbMV0sIDExKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjYWNoZVskbWF0Y2hlc1sxXV0gPSAkcmVzdWx0OwogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICR0aGlzLT50ZW1wbGF0ZQogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBoZWFkZXJzKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRuYW1lIC4gJzogJyAuIGltcGxvZGUoJywgJywgJHZhbHVlcykgLiAiXHJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJpbSgkcmVzdWx0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Middleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFySW50ZXJmYWNlOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ0xldmVsOwoKLyoqCiAqIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhbmQgd3JhcCBoYW5kbGVycyB3aXRoIGhhbmRsZXIgbWlkZGxld2FyZS4KICovCmZpbmFsIGNsYXNzIE1pZGRsZXdhcmUKewogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYWRkcyBjb29raWVzIHRvIHJlcXVlc3RzLgogICAgICoKICAgICAqIFRoZSBvcHRpb25zIGFycmF5IG11c3QgYmUgc2V0IHRvIGEgQ29va2llSmFySW50ZXJmYWNlIGluIG9yZGVyIHRvIHVzZQogICAgICogY29va2llcy4gVGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBmb3IgeW91IGJ5IGEgY2xpZW50LgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvb2tpZXMoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snY29va2llcyddKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCEoJG9wdGlvbnNbJ2Nvb2tpZXMnXSBpbnN0YW5jZW9mIENvb2tpZUphckludGVyZmFjZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignY29va2llcyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvb2tpZUphciA9ICRvcHRpb25zWydjb29raWVzJ107CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRjb29raWVKYXItPndpdGhDb29raWVIZWFkZXIoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucykKICAgICAgICAgICAgICAgICAgICAtPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVzcG9uc2UpIHVzZSAoJGNvb2tpZUphciwgJHJlcXVlc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb29raWVKYXItPmV4dHJhY3RDb29raWVzKCRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHRocm93cyBleGNlcHRpb25zIGZvciA0eHggb3IgNXh4IHJlc3BvbnNlcyB3aGVuIHRoZQogICAgICogImh0dHBfZXJyb3IiIHJlcXVlc3Qgb3B0aW9uIGlzIHNldCB0byB0cnVlLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGh0dHBFcnJvcnMoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snaHR0cF9lcnJvcnMnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpLT50aGVuKAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpIHVzZSAoJHJlcXVlc3QsICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2RlID0gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZSA8IDQwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBSZXF1ZXN0RXhjZXB0aW9uOjpjcmVhdGUoJHJlcXVlc3QsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHB1c2hlcyBoaXN0b3J5IGRhdGEgdG8gYW4gQXJyYXlBY2Nlc3MgY29udGFpbmVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxcQXJyYXlBY2Nlc3MgJGNvbnRhaW5lciBDb250YWluZXIgdG8gaG9sZCB0aGUgaGlzdG9yeSAoYnkgcmVmZXJlbmNlKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IG9yIEFycmF5QWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc3RvcnkoJiRjb250YWluZXIpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkY29udGFpbmVyKSAmJiAhJGNvbnRhaW5lciBpbnN0YW5jZW9mIFxBcnJheUFjY2VzcykgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaGlzdG9yeSBjb250YWluZXIgbXVzdCBiZSBhbiBhcnJheSBvciBvYmplY3QgaW1wbGVtZW50aW5nIEFycmF5QWNjZXNzJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCYkY29udGFpbmVyKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAmJGNvbnRhaW5lcikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkcmVxdWVzdCwgJiRjb250YWluZXIsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250YWluZXJbXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0JyAgPT4gJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+ICR2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicgICAgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyAgPT4gJG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRyZXF1ZXN0LCAmJGNvbnRhaW5lciwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcltdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3QnICA9PiAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNwb25zZScgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicgICAgPT4gJHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyAgPT4gJG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigkcmVhc29uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaW52b2tlcyBhIGNhbGxiYWNrIGJlZm9yZSBhbmQgYWZ0ZXIgc2VuZGluZyBhIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhlIHByb3ZpZGVkIGxpc3RlbmVyIGNhbm5vdCBtb2RpZnkgb3IgYWx0ZXIgdGhlIHJlc3BvbnNlLiBJdCBzaW1wbHkKICAgICAqICJ0YXBzIiBpbnRvIHRoZSBjaGFpbiB0byBiZSBub3RpZmllZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwcm9taXNlLiBUaGUKICAgICAqIGJlZm9yZSBsaXN0ZW5lciBhY2NlcHRzIGEgcmVxdWVzdCBhbmQgb3B0aW9ucyBhcnJheSwgYW5kIHRoZSBhZnRlcgogICAgICogbGlzdGVuZXIgYWNjZXB0cyBhIHJlcXVlc3QsIG9wdGlvbnMgYXJyYXksIGFuZCByZXNwb25zZSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYmVmb3JlIEZ1bmN0aW9uIHRvIGludm9rZSBiZWZvcmUgZm9yd2FyZGluZyB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYWZ0ZXIgIEZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgZm9yd2FyZGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0YXAoY2FsbGFibGUgJGJlZm9yZSA9IG51bGwsIGNhbGxhYmxlICRhZnRlciA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkYmVmb3JlLCAkYWZ0ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRiZWZvcmUsICRhZnRlcikgewogICAgICAgICAgICAgICAgaWYgKCRiZWZvcmUpIHsKICAgICAgICAgICAgICAgICAgICAkYmVmb3JlKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKCRhZnRlcikgewogICAgICAgICAgICAgICAgICAgICRhZnRlcigkcmVxdWVzdCwgJG9wdGlvbnMsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaGFuZGxlcyByZXF1ZXN0IHJlZGlyZWN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRpcmVjdCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgewogICAgICAgICAgICByZXR1cm4gbmV3IFJlZGlyZWN0TWlkZGxld2FyZSgkaGFuZGxlcik7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCByZXRyaWVzIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBib29sZWFuIHJlc3VsdCBvZgogICAgICogaW52b2tpbmcgdGhlIHByb3ZpZGVkICJkZWNpZGVyIiBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBJZiBubyBkZWxheSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgZXhwb25lbnRpYWwKICAgICAqIGJhY2tvZmYgd2lsbCBiZSB1dGlsaXplZC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlY2lkZXIgRnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YgcmV0cmllcywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcXVlc3QsIFtyZXNwb25zZV0sIGFuZCBbZXhjZXB0aW9uXSBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMgdG8gYmUgcmV0cmllZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVsYXkgICBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZiByZXRyaWVzIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cnkoY2FsbGFibGUgJGRlY2lkZXIsIGNhbGxhYmxlICRkZWxheSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZGVjaWRlciwgJGRlbGF5KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmV0cnlNaWRkbGV3YXJlKCRkZWNpZGVyLCAkaGFuZGxlciwgJGRlbGF5KTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGxvZ3MgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIGVycm9ycyB1c2luZyBhIG1lc3NhZ2UKICAgICAqIGZvcm1hdHRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gTG9nZ2VySW50ZXJmYWNlICAkbG9nZ2VyIExvZ3MgbWVzc2FnZXMuCiAgICAgKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyIEZvcm1hdHRlciB1c2VkIHRvIGNyZWF0ZSBtZXNzYWdlIHN0cmluZ3MuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAkbG9nTGV2ZWwgTGV2ZWwgYXQgd2hpY2ggdG8gbG9nIHJlcXVlc3RzLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZyhMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciwgTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyLCAkbG9nTGV2ZWwgPSBMb2dMZXZlbDo6SU5GTykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRsb2dnZXIsICRmb3JtYXR0ZXIsICRsb2dMZXZlbCkgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykgdXNlICgkaGFuZGxlciwgJGxvZ2dlciwgJGZvcm1hdHRlciwgJGxvZ0xldmVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKS0+dGhlbigKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHJlc3BvbnNlKSB1c2UgKCRsb2dnZXIsICRyZXF1ZXN0LCAkZm9ybWF0dGVyLCAkbG9nTGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPmxvZygkbG9nTGV2ZWwsICRtZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRsb2dnZXIsICRyZXF1ZXN0LCAkZm9ybWF0dGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9ICRyZWFzb24gaW5zdGFuY2VvZiBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZWFzb24tPmdldFJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSwgJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPm5vdGljZSgkbWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtaWRkbGV3YXJlIGFkZHMgYSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBpZiBwb3NzaWJsZSwgYSBkZWZhdWx0CiAgICAgKiBjb250ZW50LWxlbmd0aCBvciB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXIsIGFuZCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUJvZHkoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVwYXJlQm9keU1pZGRsZXdhcmUoJGhhbmRsZXIpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYXBwbGllcyBhIG1hcCBmdW5jdGlvbiB0byB0aGUgcmVxdWVzdCBiZWZvcmUgcGFzc2luZyB0bwogICAgICogdGhlIG5leHQgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZuIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFJlcXVlc3RJbnRlcmZhY2UgYW5kIHJldHVybnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgYSBSZXF1ZXN0SW50ZXJmYWNlLgogICAgICogQHJldHVybiBjYWxsYWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hcFJlcXVlc3QoY2FsbGFibGUgJGZuKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGZuKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAkZm4pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkZm4oJHJlcXVlc3QpLCAkb3B0aW9ucyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCBhcHBsaWVzIGEgbWFwIGZ1bmN0aW9uIHRvIHRoZSByZXNvbHZlZCBwcm9taXNlJ3MKICAgICAqIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZm4gRnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgUmVzcG9uc2VJbnRlcmZhY2UgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgYSBSZXNwb25zZUludGVyZmFjZS4KICAgICAqIEByZXR1cm4gY2FsbGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXBSZXNwb25zZShjYWxsYWJsZSAkZm4pCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZm4pIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRmbikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oJGZuKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/Pool.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc29ySW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEVhY2hQcm9taXNlOwoKLyoqCiAqIFNlbmRzIGFuZCBpdGVyYXRvciBvZiByZXF1ZXN0cyBjb25jdXJyZW50bHkgdXNpbmcgYSBjYXBwZWQgcG9vbCBzaXplLgogKgogKiBUaGUgcG9vbCB3aWxsIHJlYWQgZnJvbSBhbiBpdGVyYXRvciB1bnRpbCBpdCBpcyBjYW5jZWxsZWQgb3IgdW50aWwgdGhlCiAqIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLiBXaGVuIGEgcmVxdWVzdCBpcyB5aWVsZGVkLCB0aGUgcmVxdWVzdCBpcyBzZW50IGFmdGVyCiAqIGFwcGx5aW5nIHRoZSAicmVxdWVzdF9vcHRpb25zIiByZXF1ZXN0IG9wdGlvbnMgKGlmIHByb3ZpZGVkIGluIHRoZSBjdG9yKS4KICoKICogV2hlbiBhIGZ1bmN0aW9uIGlzIHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yLCB0aGUgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdGhlCiAqICJyZXF1ZXN0X29wdGlvbnMiIGFycmF5IHRoYXQgc2hvdWxkIGJlIG1lcmdlZCBvbiB0b3Agb2YgYW55IGV4aXN0aW5nCiAqIG9wdGlvbnMsIGFuZCB0aGUgZnVuY3Rpb24gTVVTVCB0aGVuIHJldHVybiBhIHdhaXQtYWJsZSBwcm9taXNlLgogKi8KY2xhc3MgUG9vbCBpbXBsZW1lbnRzIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIEVhY2hQcm9taXNlICovCiAgICBwcml2YXRlICRlYWNoOwoKICAgIC8qKgogICAgICogQHBhcmFtIENsaWVudEludGVyZmFjZSAkY2xpZW50ICAgQ2xpZW50IHVzZWQgdG8gc2VuZCB0aGUgcmVxdWVzdHMuCiAgICAgKiBAcGFyYW0gYXJyYXl8XEl0ZXJhdG9yICRyZXF1ZXN0cyBSZXF1ZXN0cyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5LgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAkY29uZmlnICAgQXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucwogICAgICogICAgIC0gY29uY3VycmVuY3k6IChpbnQpIE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5CiAgICAgKiAgICAgLSBvcHRpb25zOiBBcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0LgogICAgICogICAgIC0gZnVsZmlsbGVkOiAoY2FsbGFibGUpIEZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuCiAgICAgKiAgICAgLSByZWplY3RlZDogKGNhbGxhYmxlKSBGdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhIHJlcXVlc3QgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBDbGllbnRJbnRlcmZhY2UgJGNsaWVudCwKICAgICAgICAkcmVxdWVzdHMsCiAgICAgICAgYXJyYXkgJGNvbmZpZyA9IFtdCiAgICApIHsKICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1sncG9vbF9zaXplJ10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2NvbmN1cnJlbmN5J10gPSAkY29uZmlnWydwb29sX3NpemUnXTsKICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCRjb25maWdbJ2NvbmN1cnJlbmN5J10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2NvbmN1cnJlbmN5J10gPSAyNTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydvcHRpb25zJ10pKSB7CiAgICAgICAgICAgICRvcHRzID0gJGNvbmZpZ1snb3B0aW9ucyddOwogICAgICAgICAgICB1bnNldCgkY29uZmlnWydvcHRpb25zJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvcHRzID0gW107CiAgICAgICAgfQoKICAgICAgICAkaXRlcmFibGUgPSBcR3V6emxlSHR0cFxQcm9taXNlXGl0ZXJfZm9yKCRyZXF1ZXN0cyk7CiAgICAgICAgJHJlcXVlc3RzID0gZnVuY3Rpb24gKCkgdXNlICgkaXRlcmFibGUsICRjbGllbnQsICRvcHRzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVyYWJsZSBhcyAka2V5ID0+ICRyZm4pIHsKICAgICAgICAgICAgICAgIGlmICgkcmZuIGluc3RhbmNlb2YgUmVxdWVzdEludGVyZmFjZSkgewogICAgICAgICAgICAgICAgICAgIHlpZWxkICRrZXkgPT4gJGNsaWVudC0+c2VuZEFzeW5jKCRyZm4sICRvcHRzKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgkcmZuKSkgewogICAgICAgICAgICAgICAgICAgIHlpZWxkICRrZXkgPT4gJHJmbigkb3B0cyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHZhbHVlIHlpZWxkZWQgYnkgJwogICAgICAgICAgICAgICAgICAgICAgICAuICd0aGUgaXRlcmF0b3IgbXVzdCBiZSBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAuICdvciBhIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyAnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3dpdGggYSBQc3I3XE1lc3NhZ2VcSHR0cFxSZXNwb25zZUludGVyZmFjZSBvYmplY3QuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAkdGhpcy0+ZWFjaCA9IG5ldyBFYWNoUHJvbWlzZSgkcmVxdWVzdHMoKSwgJGNvbmZpZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHByb21pc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWFjaC0+cHJvbWlzZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgbXVsdGlwbGUgcmVxdWVzdHMgY29uY3VycmVudGx5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHJlc3BvbnNlcwogICAgICogYW5kIGV4Y2VwdGlvbnMgdGhhdCB1c2VzIHRoZSBzYW1lIG9yZGVyaW5nIGFzIHRoZSBwcm92aWRlZCByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBJTVBPUlRBTlQ6IFRoaXMgbWV0aG9kIGtlZXBzIGV2ZXJ5IHJlcXVlc3QgYW5kIHJlc3BvbnNlIGluIG1lbW9yeSwgYW5kCiAgICAgKiBhcyBzdWNoLCBpcyBOT1QgcmVjb21tZW5kZWQgd2hlbiBzZW5kaW5nIGEgbGFyZ2UgbnVtYmVyIG9yIGFuCiAgICAgKiBpbmRldGVybWluYXRlIG51bWJlciBvZiByZXF1ZXN0cyBjb25jdXJyZW50bHkuCiAgICAgKgogICAgICogQHBhcmFtIENsaWVudEludGVyZmFjZSAkY2xpZW50ICAgQ2xpZW50IHVzZWQgdG8gc2VuZCB0aGUgcmVxdWVzdHMKICAgICAqIEBwYXJhbSBhcnJheXxcSXRlcmF0b3IgJHJlcXVlc3RzIFJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5LgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAkb3B0aW9ucyAgUGFzc2VzIHRocm91Z2ggdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGluCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QHNlZSBHdXp6bGVIdHRwXFBvb2w6Ol9fY29uc3RydWN0fQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSByZXNwb25zZSBvciBhbiBleGNlcHRpb24KICAgICAqICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGUgcmVxdWVzdHMgd2VyZSBzZW50LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBldmVudCBmb3JtYXQgaXMgaW5jb3JyZWN0LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJhdGNoKAogICAgICAgIENsaWVudEludGVyZmFjZSAkY2xpZW50LAogICAgICAgICRyZXF1ZXN0cywKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApIHsKICAgICAgICAkcmVzID0gW107CiAgICAgICAgc2VsZjo6Y21wQ2FsbGJhY2soJG9wdGlvbnMsICdmdWxmaWxsZWQnLCAkcmVzKTsKICAgICAgICBzZWxmOjpjbXBDYWxsYmFjaygkb3B0aW9ucywgJ3JlamVjdGVkJywgJHJlcyk7CiAgICAgICAgJHBvb2wgPSBuZXcgc3RhdGljKCRjbGllbnQsICRyZXF1ZXN0cywgJG9wdGlvbnMpOwogICAgICAgICRwb29sLT5wcm9taXNlKCktPndhaXQoKTsKICAgICAgICBrc29ydCgkcmVzKTsKCiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY21wQ2FsbGJhY2soYXJyYXkgJiRvcHRpb25zLCAkbmFtZSwgYXJyYXkgJiRyZXN1bHRzKQogICAgewogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJG5hbWVdKSkgewogICAgICAgICAgICAkb3B0aW9uc1skbmFtZV0gPSBmdW5jdGlvbiAoJHYsICRrKSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGtdID0gJHY7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGN1cnJlbnRGbiA9ICRvcHRpb25zWyRuYW1lXTsKICAgICAgICAgICAgJG9wdGlvbnNbJG5hbWVdID0gZnVuY3Rpb24gKCR2LCAkaykgdXNlICgmJHJlc3VsdHMsICRjdXJyZW50Rm4pIHsKICAgICAgICAgICAgICAgICRjdXJyZW50Rm4oJHYsICRrKTsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyRrXSA9ICR2OwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogUHJlcGFyZXMgcmVxdWVzdHMgdGhhdCBjb250YWluIGEgYm9keSwgYWRkaW5nIHRoZSBDb250ZW50LUxlbmd0aCwKICogQ29udGVudC1UeXBlLCBhbmQgRXhwZWN0IGhlYWRlcnMuCiAqLwpjbGFzcyBQcmVwYXJlQm9keU1pZGRsZXdhcmUKewogICAgLyoqIEB2YXIgY2FsbGFibGUgICovCiAgICBwcml2YXRlICRuZXh0SGFuZGxlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIG5vIGJvZHkuCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkbW9kaWZ5ID0gW107CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC10eXBlIGlmIHBvc3NpYmxlLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgaWYgKCR1cmkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRNZXRhZGF0YSgndXJpJykpIHsKICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9IFBzcjdcbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkdXJpKSkgewogICAgICAgICAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0NvbnRlbnQtVHlwZSddID0gJHR5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC1sZW5ndGggb3IgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1MZW5ndGgnKQogICAgICAgICAgICAmJiAhJHJlcXVlc3QtPmhhc0hlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnKQogICAgICAgICkgewogICAgICAgICAgICAkc2l6ZSA9ICRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKTsKICAgICAgICAgICAgaWYgKCRzaXplICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydDb250ZW50LUxlbmd0aCddID0gJHNpemU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydUcmFuc2Zlci1FbmNvZGluZyddID0gJ2NodW5rZWQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIGV4cGVjdCBoZWFkZXIgaWYgbmVlZGVkLgogICAgICAgICR0aGlzLT5hZGRFeHBlY3RIZWFkZXIoJHJlcXVlc3QsICRvcHRpb25zLCAkbW9kaWZ5KTsKCiAgICAgICAgcmV0dXJuICRmbihQc3I3XG1vZGlmeV9yZXF1ZXN0KCRyZXF1ZXN0LCAkbW9kaWZ5KSwgJG9wdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRXhwZWN0SGVhZGVyKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgYXJyYXkgJiRtb2RpZnkKICAgICkgewogICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgRXhwZWN0IGhlYWRlciBzaG91bGQgYmUgdXNlZAogICAgICAgIGlmICgkcmVxdWVzdC0+aGFzSGVhZGVyKCdFeHBlY3QnKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZXhwZWN0ID0gaXNzZXQoJG9wdGlvbnNbJ2V4cGVjdCddKSA/ICRvcHRpb25zWydleHBlY3QnXSA6IG51bGw7CgogICAgICAgIC8vIFJldHVybiBpZiBkaXNhYmxlZCBvciBpZiB5b3UncmUgbm90IHVzaW5nIEhUVFAvMS4xIG9yIEhUVFAvMi4wCiAgICAgICAgaWYgKCRleHBlY3QgPT09IGZhbHNlIHx8ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKSA8IDEuMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZXhwZWN0IGhlYWRlciBpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZAogICAgICAgIGlmICgkZXhwZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIEJ5IGRlZmF1bHQsIHNlbmQgdGhlIGV4cGVjdCBoZWFkZXIgd2hlbiB0aGUgcGF5bG9hZCBpcyA+IDFtYgogICAgICAgIGlmICgkZXhwZWN0ID09PSBudWxsKSB7CiAgICAgICAgICAgICRleHBlY3QgPSAxMDQ4NTc2OwogICAgICAgIH0KCiAgICAgICAgLy8gQWx3YXlzIGFkZCBpZiB0aGUgYm9keSBjYW5ub3QgYmUgcmV3b3VuZCwgdGhlIHNpemUgY2Fubm90IGJlCiAgICAgICAgLy8gZGV0ZXJtaW5lZCwgb3IgdGhlIHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXRvZmYgdGhyZXNob2xkCiAgICAgICAgJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICRzaXplID0gJGJvZHktPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRzaXplID09PSBudWxsIHx8ICRzaXplID49IChpbnQpICRleHBlY3QgfHwgISRib2R5LT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnRXhwZWN0J10gPSAnMTAwLUNvbnRpbnVlJzsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQmFkUmVzcG9uc2VFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxUb29NYW55UmVkaXJlY3RzRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogUmVxdWVzdCByZWRpcmVjdCBtaWRkbGV3YXJlLgogKgogKiBBcHBseSB0aGlzIG1pZGRsZXdhcmUgbGlrZSBvdGhlciBtaWRkbGV3YXJlIHVzaW5nCiAqIHtAc2VlIEd1enpsZUh0dHBcTWlkZGxld2FyZTo6cmVkaXJlY3QoKX0uCiAqLwpjbGFzcyBSZWRpcmVjdE1pZGRsZXdhcmUKewogICAgY29uc3QgSElTVE9SWV9IRUFERVIgPSAnWC1HdXp6bGUtUmVkaXJlY3QtSGlzdG9yeSc7CgogICAgY29uc3QgU1RBVFVTX0hJU1RPUllfSEVBREVSID0gJ1gtR3V6emxlLVJlZGlyZWN0LVN0YXR1cy1IaXN0b3J5JzsKCiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0U2V0dGluZ3MgPSBbCiAgICAgICAgJ21heCcgICAgICAgICAgICAgPT4gNSwKICAgICAgICAncHJvdG9jb2xzJyAgICAgICA9PiBbJ2h0dHAnLCAnaHR0cHMnXSwKICAgICAgICAnc3RyaWN0JyAgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAncmVmZXJlcicgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAndHJhY2tfcmVkaXJlY3RzJyA9PiBmYWxzZSwKICAgIF07CgogICAgLyoqIEB2YXIgY2FsbGFibGUgICovCiAgICBwcml2YXRlICRuZXh0SGFuZGxlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgaWYgKGVtcHR5KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ10gPSBzZWxmOjokZGVmYXVsdFNldHRpbmdzOwogICAgICAgIH0gZWxzZWlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignYWxsb3dfcmVkaXJlY3RzIG11c3QgYmUgdHJ1ZSwgZmFsc2UsIG9yIGFycmF5Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aCB0aGUgcHJvdmlkZWQgc2V0dGluZ3MKICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddICs9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydtYXgnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbihmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jaGVja1JlZGlyZWN0KCRyZXF1ZXN0LCAkb3B0aW9ucywgJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAkb3B0aW9ucwogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZXxQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1JlZGlyZWN0KAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICApIHsKICAgICAgICBpZiAoc3Vic3RyKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCAwLCAxKSAhPSAnMycKICAgICAgICAgICAgfHwgISRyZXNwb25zZS0+aGFzSGVhZGVyKCdMb2NhdGlvbicpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Z3VhcmRNYXgoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAkbmV4dFJlcXVlc3QgPSAkdGhpcy0+bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgJG9wdGlvbnMsICRyZXNwb25zZSk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ29uX3JlZGlyZWN0J10pKSB7CiAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydvbl9yZWRpcmVjdCddLAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAkbmV4dFJlcXVlc3QtPmdldFVyaSgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBQcm9taXNlSW50ZXJmYWNlfFJlc3BvbnNlSW50ZXJmYWNlICRwcm9taXNlICovCiAgICAgICAgJHByb21pc2UgPSAkdGhpcygkbmV4dFJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgLy8gQWRkIGhlYWRlcnMgdG8gYmUgYWJsZSB0byB0cmFjayBoaXN0b3J5IG9mIHJlZGlyZWN0cy4KICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsndHJhY2tfcmVkaXJlY3RzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+d2l0aFRyYWNraW5nKAogICAgICAgICAgICAgICAgJHByb21pc2UsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAkbmV4dFJlcXVlc3QtPmdldFVyaSgpLAogICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJvbWlzZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHdpdGhUcmFja2luZyhQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlLCAkdXJpLCAkc3RhdHVzQ29kZSkKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uIChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpIHVzZSAoJHVyaSwgJHN0YXR1c0NvZGUpIHsKICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhcmUgcHVzaGluZyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgYXMgdGhpcwogICAgICAgICAgICAgICAgLy8gd291bGQgYmUgYW4gZWFybGllciByZXNwb25zZSB0aGFuIHdoYXQgaXMgY3VycmVudGx5IHByZXNlbnQKICAgICAgICAgICAgICAgIC8vIGluIHRoZSBoaXN0b3J5IGhlYWRlci4KICAgICAgICAgICAgICAgICRoaXN0b3J5SGVhZGVyID0gJHJlc3BvbnNlLT5nZXRIZWFkZXIoc2VsZjo6SElTVE9SWV9IRUFERVIpOwogICAgICAgICAgICAgICAgJHN0YXR1c0hlYWRlciA9ICRyZXNwb25zZS0+Z2V0SGVhZGVyKHNlbGY6OlNUQVRVU19ISVNUT1JZX0hFQURFUik7CiAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRoaXN0b3J5SGVhZGVyLCAkdXJpKTsKICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHN0YXR1c0hlYWRlciwgJHN0YXR1c0NvZGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZS0+d2l0aEhlYWRlcihzZWxmOjpISVNUT1JZX0hFQURFUiwgJGhpc3RvcnlIZWFkZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT53aXRoSGVhZGVyKHNlbGY6OlNUQVRVU19ISVNUT1JZX0hFQURFUiwgJHN0YXR1c0hlYWRlcik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ3VhcmRNYXgoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zKQogICAgewogICAgICAgICRjdXJyZW50ID0gaXNzZXQoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSkKICAgICAgICAgICAgPyAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddCiAgICAgICAgICAgIDogMDsKICAgICAgICAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddID0gJGN1cnJlbnQgKyAxOwogICAgICAgICRtYXggPSAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ21heCddOwoKICAgICAgICBpZiAoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSA+ICRtYXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiV2lsbCBub3QgZm9sbG93IG1vcmUgdGhhbiB7JG1heH0gcmVkaXJlY3RzIiwKICAgICAgICAgICAgICAgICRyZXF1ZXN0CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGlmeVJlcXVlc3QoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBhcnJheSAkb3B0aW9ucywKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICkgewogICAgICAgIC8vIFJlcXVlc3QgbW9kaWZpY2F0aW9ucyB0byBhcHBseS4KICAgICAgICAkbW9kaWZ5ID0gW107CiAgICAgICAgJHByb3RvY29scyA9ICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsncHJvdG9jb2xzJ107CgogICAgICAgIC8vIFVzZSBhIEdFVCByZXF1ZXN0IGlmIHRoaXMgaXMgYW4gZW50aXR5IGVuY2xvc2luZyByZXF1ZXN0IGFuZCB3ZSBhcmUKICAgICAgICAvLyBub3QgZm9yY2luZyBSRkMgY29tcGxpYW5jZSwgYnV0IHJhdGhlciBlbXVsYXRpbmcgd2hhdCBhbGwgYnJvd3NlcnMKICAgICAgICAvLyB3b3VsZCBkby4KICAgICAgICAkc3RhdHVzQ29kZSA9ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpOwogICAgICAgIGlmICgkc3RhdHVzQ29kZSA9PSAzMDMgfHwKICAgICAgICAgICAgKCRzdGF0dXNDb2RlIDw9IDMwMiAmJiAkcmVxdWVzdC0+Z2V0Qm9keSgpICYmICEkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ3N0cmljdCddKQogICAgICAgICkgewogICAgICAgICAgICAkbW9kaWZ5WydtZXRob2QnXSA9ICdHRVQnOwogICAgICAgICAgICAkbW9kaWZ5Wydib2R5J10gPSAnJzsKICAgICAgICB9CgogICAgICAgICRtb2RpZnlbJ3VyaSddID0gJHRoaXMtPnJlZGlyZWN0VXJpKCRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcm90b2NvbHMpOwogICAgICAgIFBzcjdccmV3aW5kX2JvZHkoJHJlcXVlc3QpOwoKICAgICAgICAvLyBBZGQgdGhlIFJlZmVyZXIgaGVhZGVyIGlmIGl0IGlzIHRvbGQgdG8gZG8gc28gYW5kIG9ubHkKICAgICAgICAvLyBhZGQgdGhlIGhlYWRlciBpZiB3ZSBhcmUgbm90IHJlZGlyZWN0aW5nIGZyb20gaHR0cHMgdG8gaHR0cC4KICAgICAgICBpZiAoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydyZWZlcmVyJ10KICAgICAgICAgICAgJiYgJG1vZGlmeVsndXJpJ10tPmdldFNjaGVtZSgpID09PSAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpCiAgICAgICAgKSB7CiAgICAgICAgICAgICR1cmkgPSAkcmVxdWVzdC0+Z2V0VXJpKCktPndpdGhVc2VySW5mbygnJywgJycpOwogICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydSZWZlcmVyJ10gPSAoc3RyaW5nKSAkdXJpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3JlbW92ZV9oZWFkZXJzJ11bXSA9ICdSZWZlcmVyJzsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBBdXRob3JpemF0aW9uIGhlYWRlciBpZiBob3N0IGlzIGRpZmZlcmVudC4KICAgICAgICBpZiAoJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCkgIT09ICRtb2RpZnlbJ3VyaSddLT5nZXRIb3N0KCkpIHsKICAgICAgICAgICAgJG1vZGlmeVsncmVtb3ZlX2hlYWRlcnMnXVtdID0gJ0F1dGhvcml6YXRpb24nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFBzcjdcbW9kaWZ5X3JlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBhcHByb3ByaWF0ZSBVUkwgb24gdGhlIHJlcXVlc3QgYmFzZWQgb24gdGhlIGxvY2F0aW9uIGhlYWRlcgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICAkcmVxdWVzdAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRwcm90b2NvbHMKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZGlyZWN0VXJpKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlLAogICAgICAgIGFycmF5ICRwcm90b2NvbHMKICAgICkgewogICAgICAgICRsb2NhdGlvbiA9IFBzcjdcVXJpUmVzb2x2ZXI6OnJlc29sdmUoCiAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgbmV3IFBzcjdcVXJpKCRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZSgnTG9jYXRpb24nKSkKICAgICAgICApOwoKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVkaXJlY3QgVVJJIGlzIGFsbG93ZWQgYmFzZWQgb24gdGhlIHByb3RvY29scy4KICAgICAgICBpZiAoIWluX2FycmF5KCRsb2NhdGlvbi0+Z2V0U2NoZW1lKCksICRwcm90b2NvbHMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXNwb25zZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgIHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ1JlZGlyZWN0IFVSSSwgJXMsIGRvZXMgbm90IHVzZSBvbmUgb2YgdGhlIGFsbG93ZWQgcmVkaXJlY3QgcHJvdG9jb2xzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGltcGxvZGUoJywgJywgJHByb3RvY29scykKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsb2NhdGlvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RequestOptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7CgovKioKICogVGhpcyBjbGFzcyBjb250YWlucyBhIGxpc3Qgb2YgYnVpbHQtaW4gR3V6emxlIHJlcXVlc3Qgb3B0aW9ucy4KICoKICogTW9yZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIG9wdGlvbiBjYW4gYmUgZm91bmQgYXQgaHR0cDovL2d1enpsZXBocC5vcmcvLgogKgogKiBAbGluayBodHRwOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuL3Y2L3JlcXVlc3Qtb3B0aW9ucy5odG1sCiAqLwpmaW5hbCBjbGFzcyBSZXF1ZXN0T3B0aW9ucwp7CiAgICAvKioKICAgICAqIGFsbG93X3JlZGlyZWN0czogKGJvb2x8YXJyYXkpIENvbnRyb2xzIHJlZGlyZWN0IGJlaGF2aW9yLiBQYXNzIGZhbHNlCiAgICAgKiB0byBkaXNhYmxlIHJlZGlyZWN0cywgcGFzcyB0cnVlIHRvIGVuYWJsZSByZWRpcmVjdHMsIHBhc3MgYW4KICAgICAqIGFzc29jaWF0aXZlIHRvIHByb3ZpZGUgY3VzdG9tIHJlZGlyZWN0IHNldHRpbmdzLiBEZWZhdWx0cyB0byAiZmFsc2UiLgogICAgICogVGhpcyBvcHRpb24gb25seSB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBSZWRpcmVjdE1pZGRsZXdhcmUuIFdoZW4KICAgICAqIHBhc3NpbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXksIHlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZQogICAgICogcGFpcnM6CiAgICAgKgogICAgICogLSBtYXg6IChpbnQsIGRlZmF1bHQ9NSkgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCByZWRpcmVjdHMuCiAgICAgKiAtIHN0cmljdDogKGJvb2wsIGRlZmF1bHQ9ZmFsc2UpIFNldCB0byB0cnVlIHRvIHVzZSBzdHJpY3QgcmVkaXJlY3RzCiAgICAgKiAgIG1lYW5pbmcgcmVkaXJlY3QgUE9TVCByZXF1ZXN0cyB3aXRoIFBPU1QgcmVxdWVzdHMgdnMuIGRvaW5nIHdoYXQgbW9zdAogICAgICogICBicm93c2VycyBkbyB3aGljaCBpcyByZWRpcmVjdCBQT1NUIHJlcXVlc3RzIHdpdGggR0VUIHJlcXVlc3RzCiAgICAgKiAtIHJlZmVyZXI6IChib29sLCBkZWZhdWx0PXRydWUpIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoZSBSZWZlcmVyCiAgICAgKiAgIGhlYWRlci4KICAgICAqIC0gcHJvdG9jb2xzOiAoYXJyYXksIGRlZmF1bHQ9WydodHRwJywgJ2h0dHBzJ10pIEFsbG93ZWQgcmVkaXJlY3QKICAgICAqICAgcHJvdG9jb2xzLgogICAgICogLSBvbl9yZWRpcmVjdDogKGNhbGxhYmxlKSBQSFAgY2FsbGFibGUgdGhhdCBpcyBpbnZva2VkIHdoZW4gYSByZWRpcmVjdAogICAgICogICBpcyBlbmNvdW50ZXJlZC4gVGhlIGNhbGxhYmxlIGlzIGludm9rZWQgd2l0aCB0aGUgcmVxdWVzdCwgdGhlIHJlZGlyZWN0CiAgICAgKiAgIHJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkLCBhbmQgdGhlIGVmZmVjdGl2ZSBVUkkuIEFueSByZXR1cm4gdmFsdWUKICAgICAqICAgZnJvbSB0aGUgb25fcmVkaXJlY3QgZnVuY3Rpb24gaXMgaWdub3JlZC4KICAgICAqLwogICAgY29uc3QgQUxMT1dfUkVESVJFQ1RTID0gJ2FsbG93X3JlZGlyZWN0cyc7CgogICAgLyoqCiAgICAgKiBhdXRoOiAoYXJyYXkpIFBhc3MgYW4gYXJyYXkgb2YgSFRUUCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIHRvIHVzZQogICAgICogd2l0aCB0aGUgcmVxdWVzdC4gVGhlIGFycmF5IG11c3QgY29udGFpbiB0aGUgdXNlcm5hbWUgaW4gaW5kZXggWzBdLAogICAgICogdGhlIHBhc3N3b3JkIGluIGluZGV4IFsxXSwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgYnVpbHQtaW4KICAgICAqIGF1dGhlbnRpY2F0aW9uIHR5cGUgaW4gaW5kZXggWzJdLiBQYXNzIG51bGwgdG8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbgogICAgICogZm9yIGEgcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgQVVUSCA9ICdhdXRoJzsKCiAgICAvKioKICAgICAqIGJvZHk6IChyZXNvdXJjZXxzdHJpbmd8bnVsbHxpbnR8ZmxvYXR8U3RyZWFtSW50ZXJmYWNlfGNhbGxhYmxlfFxJdGVyYXRvcikKICAgICAqIEJvZHkgdG8gc2VuZCBpbiB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgQk9EWSA9ICdib2R5JzsKCiAgICAvKioKICAgICAqIGNlcnQ6IChzdHJpbmd8YXJyYXkpIFNldCB0byBhIHN0cmluZyB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZmlsZQogICAgICogY29udGFpbmluZyBhIFBFTSBmb3JtYXR0ZWQgU1NMIGNsaWVudCBzaWRlIGNlcnRpZmljYXRlLiBJZiBhIHBhc3N3b3JkCiAgICAgKiBpcyByZXF1aXJlZCwgdGhlbiBzZXQgY2VydCB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBQRU0KICAgICAqIGZpbGUgaW4gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQgYnkgdGhlIGNlcnRpZmljYXRlIHBhc3N3b3JkCiAgICAgKiBpbiB0aGUgc2Vjb25kIGFycmF5IGVsZW1lbnQuCiAgICAgKi8KICAgIGNvbnN0IENFUlQgPSAnY2VydCc7CgogICAgLyoqCiAgICAgKiBjb29raWVzOiAoYm9vbHxHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXJJbnRlcmZhY2UsIGRlZmF1bHQ9ZmFsc2UpCiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgY29va2llcyBhcmUgdXNlZCBpbiBhIHJlcXVlc3Qgb3Igd2hhdCBjb29raWUKICAgICAqIGphciB0byB1c2Ugb3Igd2hhdCBjb29raWVzIHRvIHNlbmQuIFRoaXMgb3B0aW9uIG9ubHkgd29ya3MgaWYgeW91cgogICAgICogaGFuZGxlciBoYXMgdGhlIGBjb29raWVgIG1pZGRsZXdhcmUuIFZhbGlkIHZhbHVlcyBhcmUgYGZhbHNlYCBhbmQKICAgICAqIGFuIGluc3RhbmNlIG9mIHtAc2VlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZX0uCiAgICAgKi8KICAgIGNvbnN0IENPT0tJRVMgPSAnY29va2llcyc7CgogICAgLyoqCiAgICAgKiBjb25uZWN0X3RpbWVvdXQ6IChmbG9hdCwgZGVmYXVsdD0wKSBGbG9hdCBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YKICAgICAqIHNlY29uZHMgdG8gd2FpdCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBhIHNlcnZlci4gVXNlIDAgdG8gd2FpdAogICAgICogaW5kZWZpbml0ZWx5ICh0aGUgZGVmYXVsdCBiZWhhdmlvcikuCiAgICAgKi8KICAgIGNvbnN0IENPTk5FQ1RfVElNRU9VVCA9ICdjb25uZWN0X3RpbWVvdXQnOwoKICAgIC8qKgogICAgICogZGVidWc6IChib29sfHJlc291cmNlKSBTZXQgdG8gdHJ1ZSBvciBzZXQgdG8gYSBQSFAgc3RyZWFtIHJldHVybmVkIGJ5CiAgICAgKiBmb3BlbigpICBlbmFibGUgZGVidWcgb3V0cHV0IHdpdGggdGhlIEhUVFAgaGFuZGxlciB1c2VkIHRvIHNlbmQgYQogICAgICogcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgREVCVUcgPSAnZGVidWcnOwoKICAgIC8qKgogICAgICogZGVjb2RlX2NvbnRlbnQ6IChib29sLCBkZWZhdWx0PXRydWUpIFNwZWNpZnkgd2hldGhlciBvciBub3QKICAgICAqIENvbnRlbnQtRW5jb2RpbmcgcmVzcG9uc2VzIChnemlwLCBkZWZsYXRlLCBldGMuKSBhcmUgYXV0b21hdGljYWxseQogICAgICogZGVjb2RlZC4KICAgICAqLwogICAgY29uc3QgREVDT0RFX0NPTlRFTlQgPSAnZGVjb2RlX2NvbnRlbnQnOwoKICAgIC8qKgogICAgICogZGVsYXk6IChpbnQpIFRoZSBhbW91bnQgb2YgdGltZSB0byBkZWxheSBiZWZvcmUgc2VuZGluZyBpbiBtaWxsaXNlY29uZHMuCiAgICAgKi8KICAgIGNvbnN0IERFTEFZID0gJ2RlbGF5JzsKCiAgICAvKioKICAgICAqIGV4cGVjdDogKGJvb2x8aW50ZWdlcikgQ29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIuCiAgICAgKgogICAgICogU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIGZvciBhbGwKICAgICAqIHJlcXVlc3RzIHRoYXQgc2VuZHMgYSBib2R5LiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIgZm9yIGFsbCByZXF1ZXN0cy4gU2V0IHRvIGEgbnVtYmVyIHNvIHRoYXQKICAgICAqIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgaW4gb3JkZXIgdG8gc2VuZAogICAgICogdGhlIEV4cGVjdCBoZWFkZXIuIFNldHRpbmcgdG8gYSBudW1iZXIgd2lsbCBzZW5kIHRoZSBFeHBlY3QgaGVhZGVyIGZvcgogICAgICogYWxsIHJlcXVlc3RzIGluIHdoaWNoIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yCiAgICAgKiB3aGVyZSB0aGUgYm9keSBpcyBub3QgcmV3aW5kYWJsZS4KICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCBHdXp6bGUgd2lsbCBhZGQgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIHdoZW4gdGhlCiAgICAgKiBzaXplIG9mIHRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBncmVhdGVyIHRoYW4gMSBNQiBhbmQgYSByZXF1ZXN0IGlzCiAgICAgKiB1c2luZyBIVFRQLzEuMS4KICAgICAqLwogICAgY29uc3QgRVhQRUNUID0gJ2V4cGVjdCc7CgogICAgLyoqCiAgICAgKiBmb3JtX3BhcmFtczogKGFycmF5KSBBc3NvY2lhdGl2ZSBhcnJheSBvZiBmb3JtIGZpZWxkIG5hbWVzIHRvIHZhbHVlcwogICAgICogd2hlcmUgZWFjaCB2YWx1ZSBpcyBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBTZXRzIHRoZSBDb250ZW50LVR5cGUKICAgICAqIGhlYWRlciB0byBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgd2hlbiBubyBDb250ZW50LVR5cGUgaGVhZGVyCiAgICAgKiBpcyBhbHJlYWR5IHByZXNlbnQuCiAgICAgKi8KICAgIGNvbnN0IEZPUk1fUEFSQU1TID0gJ2Zvcm1fcGFyYW1zJzsKCiAgICAvKioKICAgICAqIGhlYWRlcnM6IChhcnJheSkgQXNzb2NpYXRpdmUgYXJyYXkgb2YgSFRUUCBoZWFkZXJzLiBFYWNoIHZhbHVlIE1VU1QgYmUKICAgICAqIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuCiAgICAgKi8KICAgIGNvbnN0IEhFQURFUlMgPSAnaGVhZGVycyc7CgogICAgLyoqCiAgICAgKiBodHRwX2Vycm9yczogKGJvb2wsIGRlZmF1bHQ9dHJ1ZSkgU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgZXhjZXB0aW9ucwogICAgICogd2hlbiBhIG5vbi0gc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiBCeSBkZWZhdWx0LAogICAgICogZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBmb3IgNHh4IGFuZCA1eHggcmVzcG9uc2VzLiBUaGlzIG9wdGlvbiBvbmx5CiAgICAgKiB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBgaHR0cEVycm9yc2AgbWlkZGxld2FyZS4KICAgICAqLwogICAgY29uc3QgSFRUUF9FUlJPUlMgPSAnaHR0cF9lcnJvcnMnOwoKICAgIC8qKgogICAgICoganNvbjogKG1peGVkKSBBZGRzIEpTT04gZGF0YSB0byBhIHJlcXVlc3QuIFRoZSBwcm92aWRlZCB2YWx1ZSBpcyBKU09OCiAgICAgKiBlbmNvZGVkIGFuZCBhIENvbnRlbnQtVHlwZSBoZWFkZXIgb2YgYXBwbGljYXRpb24vanNvbiB3aWxsIGJlIGFkZGVkIHRvCiAgICAgKiB0aGUgcmVxdWVzdCBpZiBubyBDb250ZW50LVR5cGUgaGVhZGVyIGlzIGFscmVhZHkgcHJlc2VudC4KICAgICAqLwogICAgY29uc3QgSlNPTiA9ICdqc29uJzsKCiAgICAvKioKICAgICAqIG11bHRpcGFydDogKGFycmF5KSBBcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBhCiAgICAgKiByZXF1aXJlZCAibmFtZSIga2V5IG1hcHBpbmcgdG8gdGhlIGZvcm0gZmllbGQsIG5hbWUsIGEgcmVxdWlyZWQKICAgICAqICJjb250ZW50cyIga2V5IG1hcHBpbmcgdG8gYSBTdHJlYW1JbnRlcmZhY2V8cmVzb3VyY2V8c3RyaW5nLCBhbgogICAgICogb3B0aW9uYWwgImhlYWRlcnMiIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1c3RvbSBoZWFkZXJzLCBhbmQgYW4KICAgICAqIG9wdGlvbmFsICJmaWxlbmFtZSIga2V5IG1hcHBpbmcgdG8gYSBzdHJpbmcgdG8gc2VuZCBhcyB0aGUgZmlsZW5hbWUgaW4KICAgICAqIHRoZSBwYXJ0LiBJZiBubyAiZmlsZW5hbWUiIGtleSBpcyBwcmVzZW50LCB0aGVuIG5vICJmaWxlbmFtZSIgYXR0cmlidXRlCiAgICAgKiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXJ0LgogICAgICovCiAgICBjb25zdCBNVUxUSVBBUlQgPSAnbXVsdGlwYXJ0JzsKCiAgICAvKioKICAgICAqIG9uX2hlYWRlcnM6IChjYWxsYWJsZSkgQSBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgSFRUUCBoZWFkZXJzCiAgICAgKiBvZiB0aGUgcmVzcG9uc2UgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCB0aGUgYm9keSBoYXMgbm90IHlldCBiZWd1biB0bwogICAgICogZG93bmxvYWQuCiAgICAgKi8KICAgIGNvbnN0IE9OX0hFQURFUlMgPSAnb25faGVhZGVycyc7CgogICAgLyoqCiAgICAgKiBvbl9zdGF0czogKGNhbGxhYmxlKSBhbGxvd3MgeW91IHRvIGdldCBhY2Nlc3MgdG8gdHJhbnNmZXIgc3RhdGlzdGljcyBvZgogICAgICogYSByZXF1ZXN0IGFuZCBhY2Nlc3MgdGhlIGxvd2VyIGxldmVsIHRyYW5zZmVyIGRldGFpbHMgb2YgdGhlIGhhbmRsZXIKICAgICAqIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGNsaWVudC4gYGBvbl9zdGF0c2BgIGlzIGEgY2FsbGFibGUgdGhhdCBpcyBpbnZva2VkCiAgICAgKiB3aGVuIGEgaGFuZGxlciBoYXMgZmluaXNoZWQgc2VuZGluZyBhIHJlcXVlc3QuIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCiAgICAgKiB3aXRoIHRyYW5zZmVyIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHJlcXVlc3QsIHRoZSByZXNwb25zZSByZWNlaXZlZCwgb3IKICAgICAqIHRoZSBlcnJvciBlbmNvdW50ZXJlZC4gSW5jbHVkZWQgaW4gdGhlIGRhdGEgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lCiAgICAgKiB0YWtlbiB0byBzZW5kIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBjb25zdCBPTl9TVEFUUyA9ICdvbl9zdGF0cyc7CgogICAgLyoqCiAgICAgKiBwcm9ncmVzczogKGNhbGxhYmxlKSBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdHJhbnNmZXIKICAgICAqIHByb2dyZXNzIGlzIG1hZGUuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25hbAogICAgICogYXJndW1lbnRzOiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIGRvd25sb2FkZWQsIHRoZQogICAgICogbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQgc28gZmFyLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlCiAgICAgKiB1cGxvYWRlZCwgdGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuCiAgICAgKi8KICAgIGNvbnN0IFBST0dSRVNTID0gJ3Byb2dyZXNzJzsKCiAgICAvKioKICAgICAqIHByb3h5OiAoc3RyaW5nfGFycmF5KSBQYXNzIGEgc3RyaW5nIHRvIHNwZWNpZnkgYW4gSFRUUCBwcm94eSwgb3IgYW4KICAgICAqIGFycmF5IHRvIHNwZWNpZnkgZGlmZmVyZW50IHByb3hpZXMgZm9yIGRpZmZlcmVudCBwcm90b2NvbHMgKHdoZXJlIHRoZQogICAgICoga2V5IGlzIHRoZSBwcm90b2NvbCBhbmQgdGhlIHZhbHVlIGlzIGEgcHJveHkgc3RyaW5nKS4KICAgICAqLwogICAgY29uc3QgUFJPWFkgPSAncHJveHknOwoKICAgIC8qKgogICAgICogcXVlcnk6IChhcnJheXxzdHJpbmcpIEFzc29jaWF0aXZlIGFycmF5IG9mIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdG8gYWRkCiAgICAgKiB0byB0aGUgcmVxdWVzdC4gVGhpcyBvcHRpb24gdXNlcyBQSFAncyBodHRwX2J1aWxkX3F1ZXJ5KCkgdG8gY3JlYXRlCiAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBQYXNzIGEgc3RyaW5nIHZhbHVlIGlmIHlvdSBuZWVkIG1vcmUKICAgICAqIGNvbnRyb2wgdGhhbiB3aGF0IHRoaXMgbWV0aG9kIHByb3ZpZGVzCiAgICAgKi8KICAgIGNvbnN0IFFVRVJZID0gJ3F1ZXJ5JzsKCiAgICAvKioKICAgICAqIHNpbms6IChyZXNvdXJjZXxzdHJpbmd8U3RyZWFtSW50ZXJmYWNlKSBXaGVyZSB0aGUgZGF0YSBvZiB0aGUKICAgICAqIHJlc3BvbnNlIGlzIHdyaXR0ZW4gdG8uIERlZmF1bHRzIHRvIGEgUEhQIHRlbXAgc3RyZWFtLiBQcm92aWRpbmcgYQogICAgICogc3RyaW5nIHdpbGwgd3JpdGUgZGF0YSB0byBhIGZpbGUgYnkgdGhlIGdpdmVuIG5hbWUuCiAgICAgKi8KICAgIGNvbnN0IFNJTksgPSAnc2luayc7CgogICAgLyoqCiAgICAgKiBzeW5jaHJvbm91czogKGJvb2wpIFNldCB0byB0cnVlIHRvIGluZm9ybSBIVFRQIGhhbmRsZXJzIHRoYXQgeW91IGludGVuZAogICAgICogb24gd2FpdGluZyBvbiB0aGUgcmVzcG9uc2UuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igb3B0aW1pemF0aW9ucy4gTm90ZQogICAgICogdGhhdCBhIHByb21pc2UgaXMgc3RpbGwgcmV0dXJuZWQgaWYgeW91IGFyZSB1c2luZyBvbmUgb2YgdGhlIGFzeW5jCiAgICAgKiBjbGllbnQgbWV0aG9kcy4KICAgICAqLwogICAgY29uc3QgU1lOQ0hST05PVVMgPSAnc3luY2hyb25vdXMnOwoKICAgIC8qKgogICAgICogc3NsX2tleTogKGFycmF5fHN0cmluZykgU3BlY2lmeSB0aGUgcGF0aCB0byBhIGZpbGUgY29udGFpbmluZyBhIHByaXZhdGUKICAgICAqIFNTTCBrZXkgaW4gUEVNIGZvcm1hdC4gSWYgYSBwYXNzd29yZCBpcyByZXF1aXJlZCwgdGhlbiBzZXQgdG8gYW4gYXJyYXkKICAgICAqIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIFNTTCBrZXkgaW4gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQKICAgICAqIGJ5IHRoZSBwYXNzd29yZCByZXF1aXJlZCBmb3IgdGhlIGNlcnRpZmljYXRlIGluIHRoZSBzZWNvbmQgZWxlbWVudC4KICAgICAqLwogICAgY29uc3QgU1NMX0tFWSA9ICdzc2xfa2V5JzsKCiAgICAvKioKICAgICAqIHN0cmVhbTogU2V0IHRvIHRydWUgdG8gYXR0ZW1wdCB0byBzdHJlYW0gYSByZXNwb25zZSByYXRoZXIgdGhhbgogICAgICogZG93bmxvYWQgaXQgYWxsIHVwLWZyb250LgogICAgICovCiAgICBjb25zdCBTVFJFQU0gPSAnc3RyZWFtJzsKCiAgICAvKioKICAgICAqIHZlcmlmeTogKGJvb2x8c3RyaW5nLCBkZWZhdWx0PXRydWUpIERlc2NyaWJlcyB0aGUgU1NMIGNlcnRpZmljYXRlCiAgICAgKiB2ZXJpZmljYXRpb24gYmVoYXZpb3Igb2YgYSByZXF1ZXN0LiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgU1NMCiAgICAgKiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gdXNpbmcgdGhlIHN5c3RlbSBDQSBidW5kbGUgd2hlbiBhdmFpbGFibGUKICAgICAqICh0aGUgZGVmYXVsdCkuIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAodGhpcwogICAgICogaXMgaW5zZWN1cmUhKS4gU2V0IHRvIGEgc3RyaW5nIHRvIHByb3ZpZGUgdGhlIHBhdGggdG8gYSBDQSBidW5kbGUgb24KICAgICAqIGRpc2sgdG8gZW5hYmxlIHZlcmlmaWNhdGlvbiB1c2luZyBhIGN1c3RvbSBjZXJ0aWZpY2F0ZS4KICAgICAqLwogICAgY29uc3QgVkVSSUZZID0gJ3ZlcmlmeSc7CgogICAgLyoqCiAgICAgKiB0aW1lb3V0OiAoZmxvYXQsIGRlZmF1bHQ9MCkgRmxvYXQgZGVzY3JpYmluZyB0aGUgdGltZW91dCBvZiB0aGUKICAgICAqIHJlcXVlc3QgaW4gc2Vjb25kcy4gVXNlIDAgdG8gd2FpdCBpbmRlZmluaXRlbHkgKHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4KICAgICAqLwogICAgY29uc3QgVElNRU9VVCA9ICd0aW1lb3V0JzsKCiAgICAvKioKICAgICAqIHJlYWRfdGltZW91dDogKGZsb2F0LCBkZWZhdWx0PWRlZmF1bHRfc29ja2V0X3RpbWVvdXQgaW5pIHNldHRpbmcpIEZsb2F0IGRlc2NyaWJpbmcKICAgICAqIHRoZSBib2R5IHJlYWQgdGltZW91dCwgZm9yIHN0cmVhbSByZXF1ZXN0cy4KICAgICAqLwogICAgY29uc3QgUkVBRF9USU1FT1VUID0gJ3JlYWRfdGltZW91dCc7CgogICAgLyoqCiAgICAgKiB2ZXJzaW9uOiAoZmxvYXQpIFNwZWNpZmllcyB0aGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIHRvIGF0dGVtcHQgdG8gdXNlLgogICAgICovCiAgICBjb25zdCBWRVJTSU9OID0gJ3ZlcnNpb24nOwoKICAgIC8qKgogICAgICogZm9yY2VfaXBfcmVzb2x2ZTogKGJvb2wpIEZvcmNlIGNsaWVudCB0byB1c2Ugb25seSBpcHY0IG9yIGlwdjYgcHJvdG9jb2wKICAgICAqLwogICAgY29uc3QgRk9SQ0VfSVBfUkVTT0xWRSA9ICdmb3JjZV9pcF9yZXNvbHZlJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBNaWRkbGV3YXJlIHRoYXQgcmV0cmllcyByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgYm9vbGVhbiByZXN1bHQgb2YKICogaW52b2tpbmcgdGhlIHByb3ZpZGVkICJkZWNpZGVyIiBmdW5jdGlvbi4KICovCmNsYXNzIFJldHJ5TWlkZGxld2FyZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZSAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRkZWNpZGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRkZWNpZGVyICAgICBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZiByZXRyaWVzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcXVlc3QsIFtyZXNwb25zZV0sIGFuZCBbZXhjZXB0aW9uXSBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG5leHRIYW5kbGVyIE5leHQgaGFuZGxlciB0byBpbnZva2UuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlbGF5ICAgICAgIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFtyZXNwb25zZV0gYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgdG8gZGVsYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBjYWxsYWJsZSAkZGVjaWRlciwKICAgICAgICBjYWxsYWJsZSAkbmV4dEhhbmRsZXIsCiAgICAgICAgY2FsbGFibGUgJGRlbGF5ID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPmRlY2lkZXIgPSAkZGVjaWRlcjsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICAgICAgJHRoaXMtPmRlbGF5ID0gJGRlbGF5ID86IF9fQ0xBU1NfXyAuICc6OmV4cG9uZW50aWFsRGVsYXknOwogICAgfQoKICAgIC8qKgogICAgICogRGVmYXVsdCBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5IGZ1bmN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAkcmV0cmllcwogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhwb25lbnRpYWxEZWxheSgkcmV0cmllcykKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgcG93KDIsICRyZXRyaWVzIC0gMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ3JldHJpZXMnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3JldHJpZXMnXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkZm4gPSAkdGhpcy0+bmV4dEhhbmRsZXI7CiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbigKICAgICAgICAgICAgICAgICR0aGlzLT5vbkZ1bGZpbGxlZCgkcmVxdWVzdCwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgJHRoaXMtPm9uUmVqZWN0ZWQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gb25GdWxmaWxsZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkcmVxLCAkb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIWNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJHRoaXMtPmRlY2lkZXIsCiAgICAgICAgICAgICAgICAkb3B0aW9uc1sncmV0cmllcyddLAogICAgICAgICAgICAgICAgJHJlcSwKICAgICAgICAgICAgICAgICR2YWx1ZSwKICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvUmV0cnkoJHJlcSwgJG9wdGlvbnMsICR2YWx1ZSk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIG9uUmVqZWN0ZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJHJlcSwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCFjYWxsX3VzZXJfZnVuYygKICAgICAgICAgICAgICAgICR0aGlzLT5kZWNpZGVyLAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3JldHJpZXMnXSwKICAgICAgICAgICAgICAgICRyZXEsCiAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgJHJlYXNvbgogICAgICAgICAgICApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRyZWFzb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZG9SZXRyeSgkcmVxLCAkb3B0aW9ucyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvUmV0cnkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwpCiAgICB7CiAgICAgICAgJG9wdGlvbnNbJ2RlbGF5J10gPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+ZGVsYXksICsrJG9wdGlvbnNbJ3JldHJpZXMnXSwgJHJlc3BvbnNlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/TransferStats.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFJlcHJlc2VudHMgZGF0YSBhdCB0aGUgcG9pbnQgYWZ0ZXIgaXQgd2FzIHRyYW5zZmVycmVkIGVpdGhlciBzdWNjZXNzZnVsbHkKICogb3IgYWZ0ZXIgYSBuZXR3b3JrIGVycm9yLgogKi8KZmluYWwgY2xhc3MgVHJhbnNmZXJTdGF0cwp7CiAgICBwcml2YXRlICRyZXF1ZXN0OwogICAgcHJpdmF0ZSAkcmVzcG9uc2U7CiAgICBwcml2YXRlICR0cmFuc2ZlclRpbWU7CiAgICBwcml2YXRlICRoYW5kbGVyU3RhdHM7CiAgICBwcml2YXRlICRoYW5kbGVyRXJyb3JEYXRhOwoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICAgICAgICAgIFJlcXVlc3QgdGhhdCB3YXMgc2VudC4KICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgICAgICAgICBSZXNwb25zZSByZWNlaXZlZCAoaWYgYW55KQogICAgICogQHBhcmFtIG51bGwgICAgICAgICAgICAgICR0cmFuc2ZlclRpbWUgICAgIFRvdGFsIGhhbmRsZXIgdHJhbnNmZXIgdGltZS4KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAkaGFuZGxlckVycm9yRGF0YSBIYW5kbGVyIGVycm9yIGRhdGEuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgJGhhbmRsZXJTdGF0cyAgICAgSGFuZGxlciBzcGVjaWZpYyBzdGF0cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICAkdHJhbnNmZXJUaW1lID0gbnVsbCwKICAgICAgICAkaGFuZGxlckVycm9yRGF0YSA9IG51bGwsCiAgICAgICAgJGhhbmRsZXJTdGF0cyA9IFtdCiAgICApIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+dHJhbnNmZXJUaW1lID0gJHRyYW5zZmVyVGltZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckVycm9yRGF0YSA9ICRoYW5kbGVyRXJyb3JEYXRhOwogICAgICAgICR0aGlzLT5oYW5kbGVyU3RhdHMgPSAkaGFuZGxlclN0YXRzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZXF1ZXN0SW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZCAoaWYgYW55KS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2UgIT09IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGhhbmRsZXIgc3BlY2lmaWMgZXJyb3IgZGF0YS4KICAgICAqCiAgICAgKiBUaGlzIG1pZ2h0IGJlIGFuIGV4Y2VwdGlvbiwgYSBpbnRlZ2VyIHJlcHJlc2VudGluZyBhbiBlcnJvciBjb2RlLCBvcgogICAgICogYW55dGhpbmcgZWxzZS4gUmVseWluZyBvbiB0aGlzIHZhbHVlIGFzc3VtZXMgdGhhdCB5b3Uga25vdyB3aGF0IGhhbmRsZXIKICAgICAqIHlvdSBhcmUgdXNpbmcuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlckVycm9yRGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyRXJyb3JEYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBlZmZlY3RpdmUgVVJJIHRoZSByZXF1ZXN0IHdhcyBzZW50IHRvLgogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVVcmkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdC0+Z2V0VXJpKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGVzdGltYXRlZCB0aW1lIHRoZSByZXF1ZXN0IHdhcyBiZWluZyB0cmFuc2ZlcnJlZCBieSB0aGUgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IFRpbWUgaW4gc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zZmVyVGltZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc2ZlclRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgaGFuZGxlciBzcGVjaWZpYyB0cmFuc2ZlciBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhhbmRsZXJTdGF0cygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzcGVjaWZpYyBoYW5kbGVyIHN0YXRpc3RpYyBmcm9tIHRoZSBoYW5kbGVyIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdCBIYW5kbGVyIHNwZWNpZmljIHRyYW5zZmVyIHN0YXQgdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyU3RhdCgkc3RhdCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmhhbmRsZXJTdGF0c1skc3RhdF0pCiAgICAgICAgICAgID8gJHRoaXMtPmhhbmRsZXJTdGF0c1skc3RhdF0KICAgICAgICAgICAgOiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/src/UriTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7CgovKioKICogRXhwYW5kcyBVUkkgdGVtcGxhdGVzLiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBQRUNMIHVyaV90ZW1wbGF0ZS4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MAogKi8KY2xhc3MgVXJpVGVtcGxhdGUKewogICAgLyoqIEB2YXIgc3RyaW5nIFVSSSB0ZW1wbGF0ZSAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqIEB2YXIgYXJyYXkgVmFyaWFibGVzIHRvIHVzZSBpbiB0aGUgdGVtcGxhdGUgZXhwYW5zaW9uICovCiAgICBwcml2YXRlICR2YXJpYWJsZXM7CgogICAgLyoqIEB2YXIgYXJyYXkgSGFzaCBmb3IgcXVpY2sgb3BlcmF0b3IgbG9va3VwcyAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJG9wZXJhdG9ySGFzaCA9IFsKICAgICAgICAnJyAgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnKycgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnIycgPT4gWydwcmVmaXgnID0+ICcjJywgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLicgPT4gWydwcmVmaXgnID0+ICcuJywgJ2pvaW5lcicgPT4gJy4nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLycgPT4gWydwcmVmaXgnID0+ICcvJywgJ2pvaW5lcicgPT4gJy8nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnOycgPT4gWydwcmVmaXgnID0+ICc7JywgJ2pvaW5lcicgPT4gJzsnLCAncXVlcnknID0+IHRydWVdLAogICAgICAgICc/JyA9PiBbJ3ByZWZpeCcgPT4gJz8nLCAnam9pbmVyJyA9PiAnJicsICdxdWVyeScgPT4gdHJ1ZV0sCiAgICAgICAgJyYnID0+IFsncHJlZml4JyA9PiAnJicsICdqb2luZXInID0+ICcmJywgJ3F1ZXJ5JyA9PiB0cnVlXQogICAgXTsKCiAgICAvKiogQHZhciBhcnJheSBEZWxpbWl0ZXJzICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVsaW1zID0gWyc6JywgJy8nLCAnPycsICcjJywgJ1snLCAnXScsICdAJywgJyEnLCAnJCcsCiAgICAgICAgJyYnLCAnXCcnLCAnKCcsICcpJywgJyonLCAnKycsICcsJywgJzsnLCAnPSddOwoKICAgIC8qKiBAdmFyIGFycmF5IFBlcmNlbnQgZW5jb2RlZCBkZWxpbWl0ZXJzICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVsaW1zUGN0ID0gWyclM0EnLCAnJTJGJywgJyUzRicsICclMjMnLCAnJTVCJywgJyU1RCcsCiAgICAgICAgJyU0MCcsICclMjEnLCAnJTI0JywgJyUyNicsICclMjcnLCAnJTI4JywgJyUyOScsICclMkEnLCAnJTJCJywgJyUyQycsCiAgICAgICAgJyUzQicsICclM0QnXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwYW5kKCR0ZW1wbGF0ZSwgYXJyYXkgJHZhcmlhYmxlcykKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IHN0cnBvcygkdGVtcGxhdGUsICd7JykpIHsKICAgICAgICAgICAgcmV0dXJuICR0ZW1wbGF0ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZTsKICAgICAgICAkdGhpcy0+dmFyaWFibGVzID0gJHZhcmlhYmxlczsKCiAgICAgICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy9ceyhbXlx9XSspXH0vJywKICAgICAgICAgICAgWyR0aGlzLCAnZXhwYW5kTWF0Y2gnXSwKICAgICAgICAgICAgJHRoaXMtPnRlbXBsYXRlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFuIGV4cHJlc3Npb24gaW50byBwYXJ0cwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBwYXJzZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJ0cwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigkZXhwcmVzc2lvbikKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CgogICAgICAgIGlmIChpc3NldChzZWxmOjokb3BlcmF0b3JIYXNoWyRleHByZXNzaW9uWzBdXSkpIHsKICAgICAgICAgICAgJHJlc3VsdFsnb3BlcmF0b3InXSA9ICRleHByZXNzaW9uWzBdOwogICAgICAgICAgICAkZXhwcmVzc2lvbiA9IHN1YnN0cigkZXhwcmVzc2lvbiwgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdFsnb3BlcmF0b3InXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnLCcsICRleHByZXNzaW9uKSBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgJHZhbHVlID0gdHJpbSgkdmFsdWUpOwogICAgICAgICAgICAkdmFyc3BlYyA9IFtdOwogICAgICAgICAgICBpZiAoJGNvbG9uUG9zID0gc3RycG9zKCR2YWx1ZSwgJzonKSkgewogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ3ZhbHVlJ10gPSBzdWJzdHIoJHZhbHVlLCAwLCAkY29sb25Qb3MpOwogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ21vZGlmaWVyJ10gPSAnOic7CiAgICAgICAgICAgICAgICAkdmFyc3BlY1sncG9zaXRpb24nXSA9IChpbnQpIHN1YnN0cigkdmFsdWUsICRjb2xvblBvcyArIDEpOwogICAgICAgICAgICB9IGVsc2VpZiAoc3Vic3RyKCR2YWx1ZSwgLTEpID09PSAnKicpIHsKICAgICAgICAgICAgICAgICR2YXJzcGVjWydtb2RpZmllciddID0gJyonOwogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ3ZhbHVlJ10gPSBzdWJzdHIoJHZhbHVlLCAwLCAtMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFyc3BlY1sndmFsdWUnXSA9IChzdHJpbmcpICR2YWx1ZTsKICAgICAgICAgICAgICAgICR2YXJzcGVjWydtb2RpZmllciddID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdFsndmFsdWVzJ11bXSA9ICR2YXJzcGVjOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzIGFuIGV4cGFuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbWF0Y2hlcyBNYXRjaGVzIG1ldCBpbiB0aGUgcHJlZ19yZXBsYWNlX2NhbGxiYWNrCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZXhwYW5kTWF0Y2goYXJyYXkgJG1hdGNoZXMpCiAgICB7CiAgICAgICAgc3RhdGljICRyZmMxNzM4dG8zOTg2ID0gWycrJyA9PiAnJTIwJywgJyU3ZScgPT4gJ34nXTsKCiAgICAgICAgJHJlcGxhY2VtZW50cyA9IFtdOwogICAgICAgICRwYXJzZWQgPSBzZWxmOjpwYXJzZUV4cHJlc3Npb24oJG1hdGNoZXNbMV0pOwogICAgICAgICRwcmVmaXggPSBzZWxmOjokb3BlcmF0b3JIYXNoWyRwYXJzZWRbJ29wZXJhdG9yJ11dWydwcmVmaXgnXTsKICAgICAgICAkam9pbmVyID0gc2VsZjo6JG9wZXJhdG9ySGFzaFskcGFyc2VkWydvcGVyYXRvciddXVsnam9pbmVyJ107CiAgICAgICAgJHVzZVF1ZXJ5ID0gc2VsZjo6JG9wZXJhdG9ySGFzaFskcGFyc2VkWydvcGVyYXRvciddXVsncXVlcnknXTsKCiAgICAgICAgZm9yZWFjaCAoJHBhcnNlZFsndmFsdWVzJ10gYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnZhcmlhYmxlc1skdmFsdWVbJ3ZhbHVlJ11dKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR2YXJpYWJsZSA9ICR0aGlzLT52YXJpYWJsZXNbJHZhbHVlWyd2YWx1ZSddXTsKICAgICAgICAgICAgJGFjdHVhbGx5VXNlUXVlcnkgPSAkdXNlUXVlcnk7CiAgICAgICAgICAgICRleHBhbmRlZCA9ICcnOwoKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICRpc0Fzc29jID0gJHRoaXMtPmlzQXNzb2MoJHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICRrdnAgPSBbXTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YXJpYWJsZSBhcyAka2V5ID0+ICR2YXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGlzQXNzb2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGtleSA9IHJhd3VybGVuY29kZSgka2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzTmVzdGVkQXJyYXkgPSBpc19hcnJheSgkdmFyKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkaXNOZXN0ZWRBcnJheSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaXNOZXN0ZWRBcnJheSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFyID0gcmF3dXJsZW5jb2RlKCR2YXIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcnNlZFsnb3BlcmF0b3InXSA9PT0gJysnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyc2VkWydvcGVyYXRvciddID09PSAnIycKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFyID0gJHRoaXMtPmRlY29kZVJlc2VydmVkKCR2YXIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWydtb2RpZmllciddID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzTmVzdGVkQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXlzIG11c3QgYWxsb3cgZm9yIGRlZXBseSBuZXN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YXIgPSBzdHJ0cigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9idWlsZF9xdWVyeShbJGtleSA9PiAkdmFyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZmMxNzM4dG8zOTg2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhciA9ICRrZXkgLiAnPScgLiAkdmFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGtleSA+IDAgJiYgJGFjdHVhbGx5VXNlUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YXIgPSAkdmFsdWVbJ3ZhbHVlJ10gLiAnPScgLiAkdmFyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAka3ZwWyRrZXldID0gJHZhcjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHZhcmlhYmxlKSkgewogICAgICAgICAgICAgICAgICAgICRhY3R1YWxseVVzZVF1ZXJ5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZhbHVlWydtb2RpZmllciddID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSBpbXBsb2RlKCRqb2luZXIsICRrdnApOwogICAgICAgICAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmVwZW5kIHRoZSB2YWx1ZSBuYW1lIHdoZW4gdXNpbmcgdGhlIGV4cGxvZGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZpZXIgd2l0aCBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICAgICAgICAgICAgICAgICAgICAgICAgJGFjdHVhbGx5VXNlUXVlcnkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGFuIGFzc29jaWF0aXZlIGFycmF5IGlzIGVuY291bnRlcmVkIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbG9kZSBtb2RpZmllciBpcyBub3Qgc2V0LCB0aGVuIHRoZSByZXN1bHQgbXVzdCBiZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGtleXMgZm9sbG93ZWQgYnkgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZSB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrdnAgYXMgJGsgPT4gJiR2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdiA9ICRrIC4gJywnIC4gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGV4cGFuZGVkID0gaW1wbG9kZSgnLCcsICRrdnApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVsnbW9kaWZpZXInXSA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhcmlhYmxlID0gc3Vic3RyKCR2YXJpYWJsZSwgMCwgJHZhbHVlWydwb3NpdGlvbiddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRleHBhbmRlZCA9IHJhd3VybGVuY29kZSgkdmFyaWFibGUpOwogICAgICAgICAgICAgICAgaWYgKCRwYXJzZWRbJ29wZXJhdG9yJ10gPT09ICcrJyB8fCAkcGFyc2VkWydvcGVyYXRvciddID09PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSAkdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJGV4cGFuZGVkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRhY3R1YWxseVVzZVF1ZXJ5KSB7CiAgICAgICAgICAgICAgICBpZiAoISRleHBhbmRlZCAmJiAkam9pbmVyICE9PSAnJicpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSAkdmFsdWVbJ3ZhbHVlJ107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRleHBhbmRlZCA9ICR2YWx1ZVsndmFsdWUnXSAuICc9JyAuICRleHBhbmRlZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcGxhY2VtZW50c1tdID0gJGV4cGFuZGVkOwogICAgICAgIH0KCiAgICAgICAgJHJldCA9IGltcGxvZGUoJGpvaW5lciwgJHJlcGxhY2VtZW50cyk7CiAgICAgICAgaWYgKCRyZXQgJiYgJHByZWZpeCkgewogICAgICAgICAgICByZXR1cm4gJHByZWZpeCAuICRyZXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgYW4gYXJyYXkgaXMgYXNzb2NpYXRpdmUuCiAgICAgKgogICAgICogVGhpcyBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IGFycmF5cyBhcmUgc2VxdWVuY2VzIG9yIGhhc2hlcy4KICAgICAqIFRoaXMgYXNzdW1wdGlvbiBpcyBhIHRyYWRlb2ZmIGZvciBhY2N1cmFjeSBpbiBmYXZvciBvZiBzcGVlZCwgYnV0IGl0CiAgICAgKiBzaG91bGQgd29yayBpbiBhbG1vc3QgZXZlcnkgY2FzZSB3aGVyZSBpbnB1dCBpcyBzdXBwbGllZCBmb3IgYSBVUkkKICAgICAqIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYXJyYXkgQXJyYXkgdG8gY2hlY2sKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0Fzc29jKGFycmF5ICRhcnJheSkKICAgIHsKICAgICAgICByZXR1cm4gJGFycmF5ICYmIGFycmF5X2tleXMoJGFycmF5KVswXSAhPT0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgcGVyY2VudCBlbmNvZGluZyBvbiByZXNlcnZlZCBjaGFyYWN0ZXJzICh1c2VkIHdpdGggKyBhbmQgIwogICAgICogbW9kaWZpZXJzKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgU3RyaW5nIHRvIGZpeAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjb2RlUmVzZXJ2ZWQoJHN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2Uoc2VsZjo6JGRlbGltc1BjdCwgc2VsZjo6JGRlbGltcywgJHN0cmluZyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/guzzle/UPGRADING.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R3V6emxlIFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT0KCjUuMCB0byA2LjAKLS0tLS0tLS0tLQoKR3V6emxlIG5vdyB1c2VzIFtQU1ItN10oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvKSBmb3IgSFRUUCBtZXNzYWdlcy4KRHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlc2UgbWVzc2FnZXMgYXJlIGltbXV0YWJsZSwgdGhpcyBwcm9tcHRlZCBhIHJlZmFjdG9yaW5nCm9mIEd1enpsZSB0byB1c2UgYSBtaWRkbGV3YXJlIGJhc2VkIHN5c3RlbSByYXRoZXIgdGhhbiBhbiBldmVudCBzeXN0ZW0uIEFueQpIVFRQIG1lc3NhZ2UgaW50ZXJhY3Rpb24gKGUuZy4sIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdGApIG5lZWQgdG8gYmUKdXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIG5ldyBpbW11dGFibGUgUFNSLTcgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cy4gQW55CmV2ZW50IGxpc3RlbmVycyBvciBzdWJzY3JpYmVycyBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gYmVjb21lIG1pZGRsZXdhcmUKZnVuY3Rpb25zIHRoYXQgd3JhcCBoYW5kbGVycyAob3IgYXJlIGluamVjdGVkIGludG8gYQpgR3V6emxlSHR0cFxIYW5kbGVyU3RhY2tgKS4KCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxCYXRjaFJlc3VsdHNgCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYAotIFJlbW92ZWQgYEd1enpsZUh0dHBcSGFzRGF0YVRyYWl0YAotIFJlbW92ZWQgYEd1enpsZUh0dHBcVG9BcnJheUludGVyZmFjZWAKLSBUaGUgYGd1enpsZWh0dHAvc3RyZWFtc2AgZGVwZW5kZW5jeSBoYXMgYmVlbiByZW1vdmVkLiBTdHJlYW0gZnVuY3Rpb25hbGl0eQogIGlzIG5vdyBwcmVzZW50IGluIHRoZSBgR3V6emxlSHR0cFxQc3I3YCBuYW1lc3BhY2UgcHJvdmlkZWQgYnkgdGhlCiAgYGd1enpsZWh0dHAvcHNyN2AgcGFja2FnZS4KLSBHdXp6bGUgbm8gbG9uZ2VyIHVzZXMgUmVhY3RQSFAgcHJvbWlzZXMgYW5kIG5vdyB1c2VzIHRoZQogIGBndXp6bGVodHRwL3Byb21pc2VzYCBsaWJyYXJ5LiBXZSB1c2UgYSBjdXN0b20gcHJvbWlzZSBsaWJyYXJ5IGZvciB0aHJlZQogIHNpZ25pZmljYW50IHJlYXNvbnM6CiAgMS4gUmVhY3QgcHJvbWlzZXMgKGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhpcykgYXJlIHJlY3Vyc2l2ZS4gUHJvbWlzZQogICAgIGNoYWluaW5nIGFuZCBwcm9taXNlIHJlc29sdXRpb24gd2lsbCBldmVudHVhbGx5IGJsb3cgdGhlIHN0YWNrLiBHdXp6bGUKICAgICBwcm9taXNlcyBhcmUgbm90IHJlY3Vyc2l2ZSBhcyB0aGV5IHVzZSBhIHNvcnQgb2YgdHJhbXBvbGluaW5nIHRlY2huaXF1ZS4KICAgICBOb3RlOiB0aGVyZSBoYXMgYmVlbiBtb3ZlbWVudCBpbiB0aGUgUmVhY3QgcHJvamVjdCB0byBtb2RpZnkgcHJvbWlzZXMgdG8KICAgICBubyBsb25nZXIgdXRpbGl6ZSByZWN1cnNpb24uCiAgMi4gR3V6emxlIG5lZWRzIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25vdXNseSBibG9jayBvbiBhIHByb21pc2UgdG8KICAgICB3YWl0IGZvciBhIHJlc3VsdC4gR3V6emxlIHByb21pc2VzIGFsbG93cyB0aGlzIGZ1bmN0aW9uYWxpdHkgKGFuZCBkb2VzCiAgICAgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiByZWN1cnNpb24pLgogIDMuIEJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHdhaXQgb24gYSByZXN1bHQsIGRvaW5nIHNvIHVzaW5nIFJlYWN0CiAgICAgcHJvbWlzZXMgcmVxdWlyZXMgd3JhcHBpbmcgcmVhY3QgcHJvbWlzZXMgd2l0aCBSaW5nUEhQIGZ1dHVyZXMuIFRoaXMKICAgICBvdmVyaGVhZCBpcyBubyBsb25nZXIgbmVlZGVkLCByZWR1Y2luZyBzdGFjayBzaXplcywgcmVkdWNpbmcgY29tcGxleGl0eSwKICAgICBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlLgotIGBHdXp6bGVIdHRwXE1pbWV0eXBlc2AgaGFzIGJlZW4gbW92ZWQgdG8gYSBmdW5jdGlvbiBpbgogIGBHdXp6bGVIdHRwXFBzcjdcbWltZXR5cGVfZnJvbV9leHRlbnNpb25gIGFuZAogIGBHdXp6bGVIdHRwXFBzcjdcbWltZXR5cGVfZnJvbV9maWxlbmFtZWAuCi0gYEd1enpsZUh0dHBcUXVlcnlgIGFuZCBgR3V6emxlSHR0cFxRdWVyeVBhcnNlcmAgaGF2ZSBiZWVuIHJlbW92ZWQuIFF1ZXJ5CiAgc3RyaW5ncyBtdXN0IG5vdyBiZSBwYXNzZWQgaW50byByZXF1ZXN0IG9iamVjdHMgYXMgc3RyaW5ncywgb3IgcHJvdmlkZWQgdG8KICB0aGUgYHF1ZXJ5YCByZXF1ZXN0IG9wdGlvbiB3aGVuIGNyZWF0aW5nIHJlcXVlc3RzIHdpdGggY2xpZW50cy4gVGhlIGBxdWVyeWAKICBvcHRpb24gdXNlcyBQSFAncyBgaHR0cF9idWlsZF9xdWVyeWAgdG8gY29udmVydCBhbiBhcnJheSB0byBhIHN0cmluZy4gSWYgeW91CiAgbmVlZCBhIGRpZmZlcmVudCBzZXJpYWxpemF0aW9uIHRlY2huaXF1ZSwgeW91IHdpbGwgbmVlZCB0byBwYXNzIHRoZSBxdWVyeQogIHN0cmluZyBpbiBhcyBhIHN0cmluZy4gVGhlcmUgYXJlIGEgY291cGxlIGhlbHBlciBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UKICB3b3JraW5nIHdpdGggcXVlcnkgc3RyaW5ncyBlYXNpZXI6IGBHdXp6bGVIdHRwXFBzcjdccGFyc2VfcXVlcnlgIGFuZAogIGBHdXp6bGVIdHRwXFBzcjdcYnVpbGRfcXVlcnlgLgotIEd1enpsZSBubyBsb25nZXIgaGFzIGEgZGVwZW5kZW5jeSBvbiBSaW5nUEhQLiBEdWUgdG8gdGhlIHVzZSBvZiBhIG1pZGRsZXdhcmUKICBzeXN0ZW0gYmFzZWQgb24gUFNSLTcsIHVzaW5nIFJpbmdQSFAgYW5kIGl0J3MgbWlkZGxld2FyZSBzeXN0ZW0gYXMgd2VsbCBhZGRzCiAgbW9yZSBjb21wbGV4aXR5IHRoYW4gdGhlIGJlbmVmaXRzIGl0IHByb3ZpZGVzLiBBbGwgSFRUUCBoYW5kbGVycyB0aGF0IHdlcmUKICBwcmVzZW50IGluIFJpbmdQSFAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHdvcmsgZGlyZWN0bHkgd2l0aCBQU1ItNyBtZXNzYWdlcwogIGFuZCBwbGFjZWQgaW4gdGhlIGBHdXp6bGVIdHRwXEhhbmRsZXJgIG5hbWVzcGFjZS4gVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMKICBjb21wbGV4aXR5IGluIEd1enpsZSwgcmVtb3ZlcyBhIGRlcGVuZGVuY3ksIGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5jZS4gUmluZ1BIUAogIHdpbGwgYmUgbWFpbnRhaW5lZCBmb3IgR3V6emxlIDUgc3VwcG9ydCwgYnV0IHdpbGwgbm8gbG9uZ2VyIGJlIGEgcGFydCBvZgogIEd1enpsZSA2LgotIEFzIEd1enpsZSBub3cgdXNlcyBhIG1pZGRsZXdhcmUgYmFzZWQgc3lzdGVtcyB0aGUgZXZlbnQgc3lzdGVtIGFuZCBSaW5nUEhQCiAgaW50ZWdyYXRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gTm90ZTogd2hpbGUgdGhlIGV2ZW50IHN5c3RlbSBoYXMgYmVlbiByZW1vdmVkLAogIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCB5b3VyIG93biB0eXBlIG9mIGV2ZW50IHN5c3RlbSB0aGF0IGlzIHBvd2VyZWQgYnkgdGhlCiAgbWlkZGxld2FyZSBzeXN0ZW0uCiAgLSBSZW1vdmVkIHRoZSBgRXZlbnRgIG5hbWVzcGFjZS4KICAtIFJlbW92ZWQgdGhlIGBTdWJzY3JpYmVyYCBuYW1lc3BhY2UuCiAgLSBSZW1vdmVkIGBUcmFuc2FjdGlvbmAgY2xhc3MKICAtIFJlbW92ZWQgYFJlcXVlc3RGc21gCiAgLSBSZW1vdmVkIGBSaW5nQnJpZGdlYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxDb29raWVgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6Y29va2llc2AKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcSHR0cEVycm9yYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXE1pZGRsZXdhcmU6Omh0dHBFcnJvcmAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcSGlzdG9yeWAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpoaXN0b3J5YAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXEhhbmRsZXJcTW9ja0hhbmRsZXJgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFByZXBhcmVgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcUHJlcGFyZUJvZHlNaWRkbGV3YXJlYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxSZWRpcmVjdGAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxSZWRpcmVjdE1pZGRsZXdhcmVgCi0gR3V6emxlIG5vdyB1c2VzIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZWAgKGltcGxlbWVudHMgaW4KICBgR3V6emxlSHR0cFxQc3I3XFVyaWApIGZvciBVUkkgc3VwcG9ydC4gYEd1enpsZUh0dHBcVXJsYCBpcyBub3cgZ29uZS4KLSBTdGF0aWMgZnVuY3Rpb25zIGluIGBHdXp6bGVIdHRwXFV0aWxzYCBoYXZlIGJlZW4gbW92ZWQgdG8gbmFtZXNwYWNlZAogIGZ1bmN0aW9ucyB1bmRlciB0aGUgYEd1enpsZUh0dHBgIG5hbWVzcGFjZS4gVGhpcyByZXF1aXJlcyBlaXRoZXIgYSBDb21wb3NlcgogIGJhc2VkIGF1dG9sb2FkZXIgb3IgeW91IHRvIGluY2x1ZGUgZnVuY3Rpb25zLnBocC4KLSBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRPcHRpb25gIGhhcyBiZWVuIHJlbmFtZWQgdG8KICBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldENvbmZpZ2AuCi0gYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXREZWZhdWx0T3B0aW9uYCBoYXMgYmVlbiByZW1vdmVkLgotIFRoZSBganNvbmAgYW5kIGB4bWxgIG1ldGhvZHMgb2YgcmVzcG9uc2Ugb2JqZWN0cyBoYXMgYmVlbiByZW1vdmVkLiBXaXRoIHRoZQogIG1pZ3JhdGlvbiB0byBzdHJpY3RseSBhZGhlcmluZyB0byBQU1ItNyBhcyB0aGUgaW50ZXJmYWNlIGZvciBHdXp6bGUgbWVzc2FnZXMsCiAgYWRkaW5nIG1ldGhvZHMgdG8gbWVzc2FnZSBpbnRlcmZhY2VzIHdvdWxkIGFjdHVhbGx5IHJlcXVpcmUgR3V6emxlIG1lc3NhZ2VzCiAgdG8gZXh0ZW5kIGZyb20gUFNSLTcgbWVzc2FnZXMgcmF0aGVyIHRoZW4gd29yayB3aXRoIHRoZW0gZGlyZWN0bHkuCgojIyBNaWdyYXRpbmcgdG8gbWlkZGxld2FyZQoKVGhlIGNoYW5nZSB0byBQU1ItNyB1bmZvcnR1bmF0ZWx5IHJlcXVpcmVkIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIHRvIEd1enpsZQpkdWUgdG8gdGhlIGZhY3QgdGhhdCBQU1ItNyBtZXNzYWdlcyBhcmUgaW1tdXRhYmxlLiBHdXp6bGUgNSByZWxpZWQgb24gYW4gZXZlbnQKc3lzdGVtIGZyb20gcGx1Z2lucy4gVGhlIGV2ZW50IHN5c3RlbSByZWxpZWQgb24gbXV0YWJpbGl0eSBvZiBIVFRQIG1lc3NhZ2VzIGFuZApzaWRlIGVmZmVjdHMgaW4gb3JkZXIgdG8gd29yay4gV2l0aCBpbW11dGFibGUgbWVzc2FnZXMsIHlvdSBoYXZlIHRvIGNoYW5nZSB5b3VyCndvcmtmbG93IHRvIGJlY29tZSBtb3JlIGFib3V0IGVpdGhlciByZXR1cm5pbmcgYSB2YWx1ZSAoZS5nLiwgZnVuY3Rpb25hbAptaWRkbGV3YXJlcykgb3Igc2V0dGluZyBhIHZhbHVlIG9uIGFuIG9iamVjdC4gR3V6emxlIHY2IGhhcyBjaG9zZW4gdGhlCmZ1bmN0aW9uYWwgbWlkZGxld2FyZSBhcHByb2FjaC4KCkluc3RlYWQgb2YgdXNpbmcgdGhlIGV2ZW50IHN5c3RlbSB0byBsaXN0ZW4gZm9yIHRoaW5ncyBsaWtlIHRoZSBgYmVmb3JlYCBldmVudCwKeW91IG5vdyBjcmVhdGUgYSBzdGFjayBiYXNlZCBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgaW50ZXJjZXB0cyBhIHJlcXVlc3Qgb24KdGhlIHdheSBpbiBhbmQgdGhlIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIG9uIHRoZSB3YXkgb3V0LiBUaGlzIGlzIGEgbXVjaApzaW1wbGVyIGFuZCBtb3JlIHByZWRpY3RhYmxlIGFwcHJvYWNoIHRoYW4gdGhlIGV2ZW50IHN5c3RlbSBhbmQgd29ya3MgbmljZWx5CndpdGggUFNSLTcgbWlkZGxld2FyZS4gRHVlIHRvIHRoZSB1c2Ugb2YgcHJvbWlzZXMsIHRoZSBtaWRkbGV3YXJlIHN5c3RlbSBpcwphbHNvIGFzeW5jaHJvbm91cy4KCnY1OgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50OwokY2xpZW50ID0gbmV3IEd1enpsZUh0dHBcQ2xpZW50KCk7Ci8vIEdldCB0aGUgZW1pdHRlciBhbmQgbGlzdGVuIHRvIHRoZSBiZWZvcmUgZXZlbnQuCiRjbGllbnQtPmdldEVtaXR0ZXIoKS0+b24oJ2JlZm9yZScsIGZ1bmN0aW9uIChCZWZvcmVFdmVudCAkZSkgewogICAgLy8gR3V6emxlIHY1IGV2ZW50cyByZWxpZWQgb24gbXV0YXRpb24KICAgICRlLT5nZXRSZXF1ZXN0KCktPnNldEhlYWRlcignWC1Gb28nLCAnQmFyJyk7Cn0pOwpgYGAKCnY2OgoKSW4gdjYsIHlvdSBjYW4gbW9kaWZ5IHRoZSByZXF1ZXN0IGJlZm9yZSBpdCBpcyBzZW50IHVzaW5nIHRoZSBgbWFwUmVxdWVzdGAKbWlkZGxld2FyZS4gVGhlIGlkaW9tYXRpYyB3YXkgaW4gdjYgdG8gbW9kaWZ5IHRoZSByZXF1ZXN0L3Jlc3BvbnNlIGxpZmVjeWNsZSBpcwp0byBzZXR1cCBhIGhhbmRsZXIgbWlkZGxld2FyZSBzdGFjayB1cCBmcm9udCBhbmQgaW5qZWN0IHRoZSBoYW5kbGVyIGludG8gYQpjbGllbnQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcTWlkZGxld2FyZTsKLy8gQ3JlYXRlIGEgaGFuZGxlciBzdGFjayB0aGF0IGhhcyBhbGwgb2YgdGhlIGRlZmF1bHQgbWlkZGxld2FyZXMgYXR0YWNoZWQKJGhhbmRsZXIgPSBHdXp6bGVIdHRwXEhhbmRsZXJTdGFjazo6Y3JlYXRlKCk7Ci8vIFB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgaGFuZGxlciBzdGFjawokaGFuZGxlci0+cHVzaChNaWRkbGV3YXJlOjptYXBSZXF1ZXN0KGZ1bmN0aW9uIChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KSB7CiAgICAvLyBOb3RpY2UgdGhhdCB3ZSBoYXZlIHRvIHJldHVybiBhIHJlcXVlc3Qgb2JqZWN0CiAgICByZXR1cm4gJHJlcXVlc3QtPndpdGhIZWFkZXIoJ1gtRm9vJywgJ0JhcicpOwp9KSk7Ci8vIEluamVjdCB0aGUgaGFuZGxlciBpbnRvIHRoZSBjbGllbnQKJGNsaWVudCA9IG5ldyBHdXp6bGVIdHRwXENsaWVudChbJ2hhbmRsZXInID0+ICRoYW5kbGVyXSk7CmBgYAoKIyMgUE9TVCBSZXF1ZXN0cwoKVGhpcyB2ZXJzaW9uIGFkZGVkIHRoZSBbYGZvcm1fcGFyYW1zYF0oaHR0cDovL2d1enpsZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3JlcXVlc3Qtb3B0aW9ucy5odG1sI2Zvcm1fcGFyYW1zKQphbmQgYG11bHRpcGFydGAgcmVxdWVzdCBvcHRpb25zLiBgZm9ybV9wYXJhbXNgIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mCnN0cmluZ3Mgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhbmQgaXMgdXNlZCB0byBzZXJpYWxpemUgYW4KYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgUE9TVCByZXF1ZXN0LiBUaGUKW2BtdWx0aXBhcnRgXShodHRwOi8vZ3V6emxlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvcmVxdWVzdC1vcHRpb25zLmh0bWwjbXVsdGlwYXJ0KQpvcHRpb24gaXMgbm93IHVzZWQgdG8gc2VuZCBhIG11bHRpcGFydC9mb3JtLWRhdGEgUE9TVCByZXF1ZXN0LgoKYEd1enpsZUh0dHBcUG9zdFxQb3N0RmlsZWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBgbXVsdGlwYXJ0YCBvcHRpb24gdG8gYWRkClBPU1QgZmlsZXMgdG8gYSBtdWx0aXBhcnQvZm9ybS1kYXRhIHJlcXVlc3QuCgpUaGUgYGJvZHlgIG9wdGlvbiBubyBsb25nZXIgYWNjZXB0cyBhbiBhcnJheSB0byBzZW5kIFBPU1QgcmVxdWVzdHMuIFBsZWFzZSB1c2UKYG11bHRpcGFydGAgb3IgYGZvcm1fcGFyYW1zYCBpbnN0ZWFkLgoKVGhlIGBiYXNlX3VybGAgb3B0aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJhc2VfdXJpYC4KCjQueCB0byA1LjAKLS0tLS0tLS0tLQoKIyMgUmV3cml0dGVuIEFkYXB0ZXIgTGF5ZXIKCkd1enpsZSBub3cgdXNlcyBbUmluZ1BIUF0oaHR0cDovL3JpbmdwaHAucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdCkgdG8gc2VuZApIVFRQIHJlcXVlc3RzLiBUaGUgYGFkYXB0ZXJgIG9wdGlvbiBpbiBhIGBHdXp6bGVIdHRwXENsaWVudGAgY29uc3RydWN0b3IKaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgaXQgaGFzIG5vdyBiZWVuIHJlbmFtZWQgdG8gYGhhbmRsZXJgLiBJbnN0ZWFkIG9mCnBhc3NpbmcgYSBgR3V6emxlSHR0cFxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2VgLCB5b3UgbXVzdCBub3cgcGFzcyBhIFBIUApgY2FsbGFibGVgIHRoYXQgZm9sbG93cyB0aGUgUmluZ1BIUCBzcGVjaWZpY2F0aW9uLgoKIyMgUmVtb3ZlZCBGbHVlbnQgSW50ZXJmYWNlcwoKW0ZsdWVudCBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZF0oaHR0cDovL29jcmFtaXVzLmdpdGh1Yi5pby9ibG9nL2ZsdWVudC1pbnRlcmZhY2VzLWFyZS1ldmlsKQpmcm9tIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKCi0gYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAKLSBgR3V6emxlSHR0cFxVcmxgCi0gYEd1enpsZUh0dHBcUXVlcnlgCi0gYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keWAKLSBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llYAoKIyMgUmVtb3ZlZCBmdW5jdGlvbnMucGhwCgpSZW1vdmVkICJmdW5jdGlvbnMucGhwIiwgc28gdGhhdCBHdXp6bGUgaXMgdHJ1bHkgUFNSLTQgY29tcGxpYW50LiBUaGUgZm9sbG93aW5nCmZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBhcyByZXBsYWNlbWVudHMuCgotIGBHdXp6bGVIdHRwXGpzb25fZGVjb2RlYCAtPiBgR3V6emxlSHR0cFxVdGlsczo6anNvbkRlY29kZWAKLSBgR3V6emxlSHR0cFxnZXRfcGF0aGAgLT4gYEd1enpsZUh0dHBcVXRpbHM6OmdldFBhdGhgCi0gYEd1enpsZUh0dHBcVXRpbHM6OnNldFBhdGhgIC0+IGBHdXp6bGVIdHRwXHNldF9wYXRoYAotIGBHdXp6bGVIdHRwXFBvb2w6OmJhdGNoYCAtPiBgR3V6emxlSHR0cFxiYXRjaGAuIFRoaXMgZnVuY3Rpb24gaXMsIGhvd2V2ZXIsCiAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBgR3V6emxlSHR0cFxQb29sOjpiYXRjaCgpYC4KClRoZSAicHJvY2VkdXJhbCIgZ2xvYmFsIGNsaWVudCBoYXMgYmVlbiByZW1vdmVkIHdpdGggbm8gcmVwbGFjZW1lbnQgKGUuZy4sCmBHdXp6bGVIdHRwXGdldCgpYCwgYEd1enpsZUh0dHBccG9zdCgpYCwgZXRjLikuIFVzZSBhIGBHdXp6bGVIdHRwXENsaWVudGAKb2JqZWN0IGFzIGEgcmVwbGFjZW1lbnQuCgojIyBgdGhyb3dJbW1lZGlhdGVseWAgaGFzIGJlZW4gcmVtb3ZlZAoKVGhlIGNvbmNlcHQgb2YgInRocm93SW1tZWRpYXRlbHkiIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBleGNlcHRpb25zIGFuZCBlcnJvcgpldmVudHMuIFRoaXMgY29udHJvbCBtZWNoYW5pc20gd2FzIHVzZWQgdG8gc3RvcCBhIHRyYW5zZmVyIG9mIGNvbmN1cnJlbnQKcmVxdWVzdHMgZnJvbSBjb21wbGV0aW5nLiBUaGlzIGNhbiBub3cgYmUgaGFuZGxlZCBieSB0aHJvd2luZyB0aGUgZXhjZXB0aW9uIG9yCmJ5IGNhbmNlbGxpbmcgYSBwb29sIG9mIHJlcXVlc3RzIG9yIGVhY2ggb3V0c3RhbmRpbmcgZnV0dXJlIHJlcXVlc3QKaW5kaXZpZHVhbGx5LgoKIyMgaGVhZGVycyBldmVudCBoYXMgYmVlbiByZW1vdmVkCgpSZW1vdmVkIHRoZSAiaGVhZGVycyIgZXZlbnQuIFRoaXMgZXZlbnQgd2FzIG9ubHkgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUKYm9keSBhIHJlc3BvbnNlIG9uY2UgdGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlIHdlcmUga25vd24uIFlvdSBjYW4gaW1wbGVtZW50CmEgc2ltaWxhciBiZWhhdmlvciBpbiBhIG51bWJlciBvZiB3YXlzLiBPbmUgZXhhbXBsZSBtaWdodCBiZSB0byB1c2UgYQpGblN0cmVhbSB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIGJlaW5nIHNlbnQuIEZvciBleGFtcGxlLCB3aGVuIHRoZQpmaXJzdCBieXRlIGlzIHdyaXR0ZW4sIHlvdSBjb3VsZCBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBtYXRjaCB5b3VyCmV4cGVjdGF0aW9ucywgYW5kIGlmIHNvLCBjaGFuZ2UgdGhlIGFjdHVhbCBzdHJlYW0gYm9keSB0aGF0IGlzIGJlaW5nCndyaXR0ZW4gdG8uCgojIyBVcGRhdGVzIHRvIEhUVFAgTWVzc2FnZXMKClJlbW92ZWQgdGhlIGBhc0FycmF5YCBwYXJhbWV0ZXIgZnJvbQpgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcmAuIElmIHlvdSB3YW50IHRvIGdldCBhIGhlYWRlcgp2YWx1ZSBhcyBhbiBhcnJheSwgdGhlbiB1c2UgdGhlIG5ld2x5IGFkZGVkIGBnZXRIZWFkZXJBc0FycmF5KClgIG1ldGhvZCBvZgpgTWVzc2FnZUludGVyZmFjZWAuIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBHdXp6bGUgaW50ZXJmYWNlcyBjb21wYXRpYmxlIHdpdGgKdGhlIFBTUi03IGludGVyZmFjZXMuCgozLnggdG8gNC4wCi0tLS0tLS0tLS0KCiMjIE92ZXJhcmNoaW5nIGNoYW5nZXM6CgotIE5vdyByZXF1aXJlcyBQSFAgNS40IG9yIGdyZWF0ZXIuCi0gTm8gbG9uZ2VyIHJlcXVpcmVzIGNVUkwgdG8gc2VuZCByZXF1ZXN0cy4KLSBHdXp6bGUgbm8gbG9uZ2VyIHdyYXBzIGV2ZXJ5IGV4Y2VwdGlvbiBpdCB0aHJvd3MuIE9ubHkgZXhjZXB0aW9ucyB0aGF0IGFyZQogIHJlY292ZXJhYmxlIGFyZSBub3cgd3JhcHBlZCBieSBHdXp6bGUuCi0gVmFyaW91cyBuYW1lc3BhY2VzIGhhdmUgYmVlbiByZW1vdmVkIG9yIHJlbmFtZWQuCi0gTm8gbG9uZ2VyIHJlcXVpcmluZyB0aGUgU3ltZm9ueSBFdmVudERpc3BhdGNoZXIuIEEgY3VzdG9tIGV2ZW50IGRpc3BhdGNoZXIKICBiYXNlZCBvbiB0aGUgU3ltZm9ueSBFdmVudERpc3BhdGNoZXIgaXMKICBub3cgdXRpbGl6ZWQgaW4gYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlckludGVyZmFjZWAgKHJlc3VsdGluZyBpbiBzaWduaWZpY2FudAogIHNwZWVkIGFuZCBmdW5jdGlvbmFsaXR5IGltcHJvdmVtZW50cykuCgpDaGFuZ2VzIHBlciBHdXp6bGUgMy54IG5hbWVzcGFjZSBhcmUgZGVzY3JpYmVkIGJlbG93LgoKIyMgQmF0Y2gKClRoZSBgR3V6emxlXEJhdGNoYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyBpcyBiZXN0IGxlZnQgdG8KdGhpcmQtcGFydGllcyB0byBpbXBsZW1lbnQgb24gdG9wIG9mIEd1enpsZSdzIGNvcmUgSFRUUCBsaWJyYXJ5LgoKIyMgQ2FjaGUKClRoZSBgR3V6emxlXENhY2hlYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gKFRvZG86IE5vIHN1aXRhYmxlIHJlcGxhY2VtZW50CmhhcyBiZWVuIGltcGxlbWVudGVkIHlldCwgYnV0IGhvcGluZyB0byB1dGlsaXplIGEgUFNSIGNhY2hlIGludGVyZmFjZSkuCgojIyBDb21tb24KCi0gUmVtb3ZlZCBhbGwgb2YgdGhlIHdyYXBwZWQgZXhjZXB0aW9ucy4gSXQncyBiZXR0ZXIgdG8gdXNlIHRoZSBzdGFuZGFyZCBQSFAKICBsaWJyYXJ5IGZvciB1bnJlY292ZXJhYmxlIGV4Y2VwdGlvbnMuCi0gYEZyb21Db25maWdJbnRlcmZhY2VgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYEd1enpsZVxDb21tb25cVmVyc2lvbmAgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIFZFUlNJT04gY29uc3RhbnQgY2FuIGJlIGZvdW5kCiAgYXQgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpWRVJTSU9OYC4KCiMjIyBDb2xsZWN0aW9uCgotIGBnZXRBbGxgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBgdG9BcnJheWAgdG8gY29udmVydCBhIGNvbGxlY3Rpb24gdG8gYW4gYXJyYXkuCi0gYGluamVjdGAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBga2V5U2VhcmNoYCBoYXMgYmVlbiByZW1vdmVkLgotIGBnZXRQYXRoYCBubyBsb25nZXIgc3VwcG9ydHMgd2lsZGNhcmQgZXhwcmVzc2lvbnMuIFVzZSBzb21ldGhpbmcgYmV0dGVyIGxpa2UKICBKTUVTUGF0aCBmb3IgdGhpcy4KLSBgc2V0UGF0aGAgbm93IHN1cHBvcnRzIGFwcGVuZGluZyB0byBhbiBleGlzdGluZyBhcnJheSB2aWEgdGhlIGBbXWAgbm90YXRpb24uCgojIyMgRXZlbnRzCgpHdXp6bGUgbm8gbG9uZ2VyIHJlcXVpcmVzIFN5bWZvbnkncyBFdmVudERpc3BhdGNoZXIgY29tcG9uZW50LiBHdXp6bGUgbm93IHVzZXMKYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlcmAuCgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVySW50ZXJmYWNlYCBpcyByZXBsYWNlZCBieQogIGBHdXp6bGVIdHRwXEV2ZW50XEVtaXR0ZXJJbnRlcmZhY2VgLgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyYCBpcyByZXBsYWNlZCBieQogIGBHdXp6bGVIdHRwXEV2ZW50XEVtaXR0ZXJgLgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnRgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRXZlbnRgLCBhbmQgR3V6emxlIG5vdyBoYXMgYW4gRXZlbnRJbnRlcmZhY2UgaW4KICBgR3V6emxlSHR0cFxFdmVudFxFdmVudEludGVyZmFjZWAuCi0gYEFic3RyYWN0SGFzRGlzcGF0Y2hlcmAgaGFzIG1vdmVkIHRvIGEgdHJhaXQsIGBIYXNFbWl0dGVyVHJhaXRgLCBhbmQKICBgSGFzRGlzcGF0Y2hlckludGVyZmFjZWAgaGFzIG1vdmVkIHRvIGBIYXNFbWl0dGVySW50ZXJmYWNlYC4gUmV0cmlldmluZyB0aGUKICBldmVudCBlbWl0dGVyIG9mIGEgcmVxdWVzdCwgY2xpZW50LCBldGMuIG5vdyB1c2VzIHRoZSBgZ2V0RW1pdHRlcmAgbWV0aG9kCiAgcmF0aGVyIHRoYW4gdGhlIGBnZXREaXNwYXRjaGVyYCBtZXRob2QuCgojIyMjIEVtaXR0ZXIKCi0gVXNlIHRoZSBgb25jZSgpYCBtZXRob2QgdG8gYWRkIGEgbGlzdGVuZXIgdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgaXRzZWxmCiAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgaW52b2tlZC4KLSBVc2UgdGhlIGBsaXN0ZW5lcnMoKWAgbWV0aG9kIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBldmVudCBsaXN0ZW5lcnMgcmF0aGVyIHRoYW4KICB0aGUgYGdldExpc3RlbmVycygpYCBtZXRob2QuCi0gVXNlIGBlbWl0KClgIGluc3RlYWQgb2YgYGRpc3BhdGNoKClgIHRvIGVtaXQgYW4gZXZlbnQgZnJvbSBhbiBlbWl0dGVyLgotIFVzZSBgYXR0YWNoKClgIGluc3RlYWQgb2YgYGFkZFN1YnNjcmliZXIoKWAgYW5kIGBkZXRhY2goKWAgaW5zdGVhZCBvZgogIGByZW1vdmVTdWJzY3JpYmVyKClgLgoKYGBgcGhwCiRtb2NrID0gbmV3IE1vY2soKTsKLy8gMy54CiRyZXF1ZXN0LT5nZXRFdmVudERpc3BhdGNoZXIoKS0+YWRkU3Vic2NyaWJlcigkbW9jayk7CiRyZXF1ZXN0LT5nZXRFdmVudERpc3BhdGNoZXIoKS0+cmVtb3ZlU3Vic2NyaWJlcigkbW9jayk7Ci8vIDQueAokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5hdHRhY2goJG1vY2spOwokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5kZXRhY2goJG1vY2spOwpgYGAKClVzZSB0aGUgYG9uKClgIG1ldGhvZCB0byBhZGQgYSBsaXN0ZW5lciByYXRoZXIgdGhhbiB0aGUgYGFkZExpc3RlbmVyKClgIG1ldGhvZC4KCmBgYHBocAovLyAzLngKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5hZGRMaXN0ZW5lcignZm9vJywgZnVuY3Rpb24gKEV2ZW50ICRldmVudCkgeyAvKiAuLi4gKi8gfSApOwovLyA0LngKJHJlcXVlc3QtPmdldEVtaXR0ZXIoKS0+b24oJ2ZvbycsIGZ1bmN0aW9uIChFdmVudCAkZXZlbnQsICRuYW1lKSB7IC8qIC4uLiAqLyB9ICk7CmBgYAoKIyMgSHR0cAoKIyMjIEdlbmVyYWwgY2hhbmdlcwoKLSBUaGUgY2FjZXJ0LnBlbSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBtb3ZlZCB0byBgc3JjL2NhY2VydC5wZW1gLgotIEFkZGVkIHRoZSBjb25jZXB0IG9mIGFkYXB0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gdHJhbnNmZXIgcmVxdWVzdHMgb3ZlciB0aGUKICB3aXJlLgotIFNpbXBsaWZpZWQgdGhlIGV2ZW50IHN5c3RlbS4KLSBTZW5kaW5nIHJlcXVlc3RzIGluIHBhcmFsbGVsIGlzIHN0aWxsIHBvc3NpYmxlLCBidXQgYmF0Y2hpbmcgaXMgbm8gbG9uZ2VyIGEKICBjb25jZXB0IG9mIHRoZSBIVFRQIGxheWVyLiBJbnN0ZWFkLCB5b3UgbXVzdCB1c2UgdGhlIGBjb21wbGV0ZWAgYW5kIGBlcnJvcmAKICBldmVudHMgdG8gYXN5bmNocm9ub3VzbHkgbWFuYWdlIHBhcmFsbGVsIHJlcXVlc3QgdHJhbnNmZXJzLgotIGBHdXp6bGVcSHR0cFxVcmxgIGhhcyBtb3ZlZCB0byBgR3V6emxlSHR0cFxVcmxgLgotIGBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZ2AgaGFzIG1vdmVkIHRvIGBHdXp6bGVIdHRwXFF1ZXJ5YC4KLSBRdWVyeUFnZ3JlZ2F0b3JzIGhhdmUgYmVlbiByZXdyaXR0ZW4gc28gdGhhdCB0aGV5IGFyZSBzaW1wbHkgY2FsbGFibGUKICBmdW5jdGlvbnMuCi0gYEd1enpsZUh0dHBcU3RhdGljQ2xpZW50YCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBpbgogIGBmdW5jdGlvbnMucGhwYCBmb3IgYW4gZWFzeSB0byB1c2Ugc3RhdGljIGNsaWVudCBpbnN0YW5jZS4KLSBFeGNlcHRpb25zIGluIGBHdXp6bGVIdHRwXEV4Y2VwdGlvbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWxsIGV4dGVuZCBmcm9tCiAgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFRyYW5zZmVyRXhjZXB0aW9uYC4KCiMjIyBDbGllbnQKCkNhbGxpbmcgbWV0aG9kcyBsaWtlIGBnZXQoKWAsIGBwb3N0KClgLCBgaGVhZCgpYCwgZXRjLiBubyBsb25nZXIgY3JlYXRlIGFuZApyZXR1cm4gYSByZXF1ZXN0LCBidXQgcmF0aGVyIGNyZWF0ZXMgYSByZXF1ZXN0LCBzZW5kcyB0aGUgcmVxdWVzdCwgYW5kIHJldHVybnMKdGhlIHJlc3BvbnNlLgoKYGBgcGhwCi8vIDMuMAokcmVxdWVzdCA9ICRjbGllbnQtPmdldCgnLycpOwokcmVzcG9uc2UgPSAkcmVxdWVzdC0+c2VuZCgpOwoKLy8gNC4wCiRyZXNwb25zZSA9ICRjbGllbnQtPmdldCgnLycpOwoKLy8gb3IsIHRvIG1pcnJvciB0aGUgcHJldmlvdXMgYmVoYXZpb3IKJHJlcXVlc3QgPSAkY2xpZW50LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAnLycpOwokcmVzcG9uc2UgPSAkY2xpZW50LT5zZW5kKCRyZXF1ZXN0KTsKYGBgCgpgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2VgIGhhcyBjaGFuZ2VkLgoKLSBUaGUgYHNlbmRgIG1ldGhvZCBubyBsb25nZXIgYWNjZXB0cyBtb3JlIHRoYW4gb25lIHJlcXVlc3QuIFVzZSBgc2VuZEFsbGAgdG8KICBzZW5kIG11bHRpcGxlIHJlcXVlc3RzIGluIHBhcmFsbGVsLgotIGBzZXRVc2VyQWdlbnQoKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgZGVmYXVsdCByZXF1ZXN0IG9wdGlvbiBpbnN0ZWFkLiBZb3UKICBjb3VsZCwgZm9yIGV4YW1wbGUsIGRvIHNvbWV0aGluZyBsaWtlOgogIGAkY2xpZW50LT5zZXRDb25maWcoJ2RlZmF1bHRzL2hlYWRlcnMvVXNlci1BZ2VudCcsICdGb28vQmFyICcgLiAkY2xpZW50OjpnZXREZWZhdWx0VXNlckFnZW50KCkpYC4KLSBgc2V0U3NsVmVyaWZpY2F0aW9uKClgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyBpbnN0ZWFkLAogIGxpa2UgYCRjbGllbnQtPnNldENvbmZpZygnZGVmYXVsdHMvdmVyaWZ5JywgdHJ1ZSlgLgoKYEd1enpsZUh0dHBcQ2xpZW50YCBoYXMgY2hhbmdlZC4KCi0gVGhlIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIG9ubHkgYW4gYXNzb2NpYXRpdmUgYXJyYXkuIFlvdSBjYW4gaW5jbHVkZSBhCiAgYGJhc2VfdXJsYCBzdHJpbmcgb3IgYXJyYXkgdG8gdXNlIGEgVVJJIHRlbXBsYXRlIGFzIHRoZSBiYXNlIFVSTCBvZiBhIGNsaWVudC4KICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIGBkZWZhdWx0c2Aga2V5IHRoYXQgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgZGVmYXVsdAogIHJlcXVlc3Qgb3B0aW9ucy4gWW91IGNhbiBwYXNzIGFuIGBhZGFwdGVyYCB0byB1c2UgYSBjdXN0b20gYWRhcHRlciwKICBgYmF0Y2hfYWRhcHRlcmAgdG8gdXNlIGEgY3VzdG9tIGFkYXB0ZXIgZm9yIHNlbmRpbmcgcmVxdWVzdHMgaW4gcGFyYWxsZWwsIG9yCiAgYSBgbWVzc2FnZV9mYWN0b3J5YCB0byBjaGFuZ2UgdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgSFRUUCByZXF1ZXN0cyBhbmQKICByZXNwb25zZXMuCi0gVGhlIGNsaWVudCBubyBsb25nZXIgZW1pdHMgYSBgY2xpZW50LmNyZWF0ZV9yZXF1ZXN0YCBldmVudC4KLSBDcmVhdGluZyByZXF1ZXN0cyB3aXRoIGEgY2xpZW50IG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IHV0aWxpemUgYSBVUkkKICB0ZW1wbGF0ZS4gWW91IG11c3QgcGFzcyBhbiBhcnJheSBpbnRvIGEgY3JlYXRpb25hbCBtZXRob2QgKGUuZy4sCiAgYGNyZWF0ZVJlcXVlc3RgLCBgZ2V0YCwgYHB1dGAsIGV0Yy4pIGluIG9yZGVyIHRvIGV4cGFuZCBhIFVSSSB0ZW1wbGF0ZS4KCiMjIyBNZXNzYWdlcwoKTWVzc2FnZXMgbm8gbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyB0byB0aGVpciBjb3VudGVycGFydHMgKGkuZS4sIGEgcmVxdWVzdCBubwpsb25nZXIgaGFzIGEgcmVmZXJlbmNlIHRvIGl0J3MgcmVzcG9uc2UsIGFuZCBhIHJlc3BvbnNlIG5vIGxvZ2VyIGhhcyBhCnJlZmVyZW5jZSB0byBpdHMgcmVxdWVzdCkuIFRoaXMgYXNzb2NpYXRpb24gaXMgbm93IG1hbmFnZWQgdGhyb3VnaCBhCmBHdXp6bGVIdHRwXEFkYXB0ZXJcVHJhbnNhY3Rpb25JbnRlcmZhY2VgIG9iamVjdC4gWW91IGNhbiBnZXQgcmVmZXJlbmNlcyB0bwp0aGVzZSB0cmFuc2FjdGlvbiBvYmplY3RzIHVzaW5nIHJlcXVlc3QgZXZlbnRzIHRoYXQgYXJlIGVtaXR0ZWQgb3ZlciB0aGUKbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdC4KCiMjIyMgUmVxdWVzdHMgd2l0aCBhIGJvZHkKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0YCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2VgIGhhdmUgYmVlbiByZW1vdmVkLiBUaGUKICBzZXBhcmF0aW9uIGJldHdlZW4gcmVxdWVzdHMgdGhhdCBjb250YWluIGEgYm9keSBhbmQgcmVxdWVzdHMgdGhhdCBkbyBub3QKICBjb250YWluIGEgYm9keSBoYXMgYmVlbiByZW1vdmVkLCBhbmQgbm93IGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAKICBoYW5kbGVzIGJvdGggdXNlIGNhc2VzLgotIEFueSBtZXRob2QgdGhhdCBwcmV2aW91c2x5IGFjY2VwdHMgYSBgR3V6emxlSHR0cFxSZXNwb25zZWAgb2JqZWN0IG5vdyBhY2NlcHQgYQogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VgLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2VgIGhhcyBiZWVuIHJlbmFtZWQgdG8KICBgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VGYWN0b3J5SW50ZXJmYWNlYC4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjcmVhdGUKICBib3RoIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgYW5kIGlzIGltcGxlbWVudGVkIGluCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlRmFjdG9yeWAuCi0gUE9TVCBmaWVsZCBhbmQgZmlsZSBtZXRob2RzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0LiBZb3UKICBtdXN0IG5vdyB1c2UgdGhlIG1ldGhvZHMgbWFkZSBhdmFpbGFibGUgdG8gYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keUludGVyZmFjZWAKICB0byBjb250cm9sIHRoZSBmb3JtYXQgb2YgYSBQT1NUIGJvZHkuIFJlcXVlc3RzIHRoYXQgYXJlIGNyZWF0ZWQgdXNpbmcgYQogIHN0YW5kYXJkIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlJbnRlcmZhY2VgIHdpbGwgYXV0b21hdGljYWxseSB1c2UKICBhIGBHdXp6bGVIdHRwXFBvc3RcUG9zdEJvZHlgIGJvZHkgaWYgdGhlIGJvZHkgd2FzIHBhc3NlZCBhcyBhbiBhcnJheSBvciBpZgogIHRoZSBtZXRob2QgaXMgUE9TVCBhbmQgbm8gYm9keSBpcyBwcm92aWRlZC4KCmBgYHBocAokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ1BPU1QnLCAnLycpOwokcmVxdWVzdC0+Z2V0Qm9keSgpLT5zZXRGaWVsZCgnZm9vJywgJ2JhcicpOwokcmVxdWVzdC0+Z2V0Qm9keSgpLT5hZGRGaWxlKG5ldyBQb3N0RmlsZSgnZmlsZV9rZXknLCBmb3BlbignL3BhdGgvdG8vY29udGVudCcsICdyJykpKTsKYGBgCgojIyMjIEhlYWRlcnMKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJgIGhhcyBiZWVuIHJlbW92ZWQuIEhlYWRlciB2YWx1ZXMgYXJlIG5vdyBzaW1wbHkKICByZXByZXNlbnRlZCBieSBhbiBhcnJheSBvZiB2YWx1ZXMgb3IgYXMgYSBzdHJpbmcuIEhlYWRlciB2YWx1ZXMgYXJlIHJldHVybmVkCiAgYXMgYSBzdHJpbmcgYnkgZGVmYXVsdCB3aGVuIHJldHJpZXZpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhIG1lc3NhZ2UuIFlvdSBjYW4KICBwYXNzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGB0cnVlYCB0byByZXRyaWV2ZSBhIGhlYWRlciB2YWx1ZSBhcyBhbiBhcnJheQogIG9mIHN0cmluZ3MgaW5zdGVhZCBvZiBhIHNpbmdsZSBjb25jYXRlbmF0ZWQgc3RyaW5nLgotIGBHdXp6bGVIdHRwXFBvc3RGaWxlYCBhbmQgYEd1enpsZUh0dHBcUG9zdEZpbGVJbnRlcmZhY2VgIGhhdmUgYmVlbiBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXFBvc3RgLiBUaGlzIGludGVyZmFjZSBoYXMgYmVlbiBzaW1wbGlmaWVkIGFuZCBub3cgYWxsb3dzIHRoZQogIGFkZGl0aW9uIG9mIGFyYml0cmFyeSBoZWFkZXJzLgotIEN1c3RvbSBoZWFkZXJzIGxpa2UgYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJcTGlua2AgaGF2ZSBiZWVuIHJlbW92ZWQuIE1vc3QKICBvZiB0aGUgY3VzdG9tIGhlYWRlcnMgYXJlIG5vdyBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gc3BlY2lmaWMKICBzdWJzY3JpYmVycy9wbHVnaW5zLCBhbmQgYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJWYWx1ZXM6OnBhcnNlUGFyYW1zKClgIGhhcwogIGJlZW4gdXBkYXRlZCB0byBwcm9wZXJseSBoYW5kbGUgaGVhZGVycyB0aGF0IGNvbnRhaW4gcGFyYW1ldGVycyAobGlrZSB0aGUKICBgTGlua2AgaGVhZGVyKS4KCiMjIyMgUmVzcG9uc2VzCgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldEluZm8oKWAgYW5kCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6c2V0SW5mbygpYCBoYXZlIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBldmVudAogIHN5c3RlbSB0byByZXRyaWV2ZSB0aGlzIHR5cGUgb2YgaW5mb3JtYXRpb24uCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmF3SGVhZGVycygpYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldE1lc3NhZ2UoKWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpjYWxjdWxhdGVBZ2UoKWAgYW5kIG90aGVyIGNhY2hlIHNwZWNpZmljCiAgbWV0aG9kcyBoYXZlIG1vdmVkIHRvIHRoZSBDYWNoZVN1YnNjcmliZXIuCi0gSGVhZGVyIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgZ2V0Q29udGVudE1kNSgpYCBoYXZlIGJlZW4gcmVtb3ZlZC4KICBKdXN0IHVzZSBgZ2V0SGVhZGVyKCdDb250ZW50LU1ENScpYCBpbnN0ZWFkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OnNldFJlcXVlc3QoKWAgYW5kCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmVxdWVzdCgpYCBoYXZlIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBldmVudAogIHN5c3RlbSB0byB3b3JrIHdpdGggcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cyBhcyBhIHRyYW5zYWN0aW9uLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldFJlZGlyZWN0Q291bnQoKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZQogIFJlZGlyZWN0IHN1YnNjcmliZXIgaW5zdGVhZC4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjppc1N1Y2Nlc3NmdWwoKWAgYW5kIG90aGVyIHJlbGF0ZWQgbWV0aG9kcyBoYXZlCiAgYmVlbiByZW1vdmVkLiBVc2UgYGdldFN0YXR1c0NvZGUoKWAgaW5zdGVhZC4KCiMjIyMgU3RyZWFtaW5nIHJlc3BvbnNlcwoKU3RyZWFtaW5nIHJlcXVlc3RzIGNhbiBub3cgYmUgY3JlYXRlZCBieSBhIGNsaWVudCBkaXJlY3RseSwgcmV0dXJuaW5nIGEKYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZWAgb2JqZWN0IHRoYXQgY29udGFpbnMgYSBib2R5IHN0cmVhbQpyZWZlcmVuY2luZyBhbiBvcGVuIFBIUCBIVFRQIHN0cmVhbS4KCmBgYHBocAovLyAzLjAKdXNlIEd1enpsZVxTdHJlYW1cUGhwU3RyZWFtUmVxdWVzdEZhY3Rvcnk7CiRyZXF1ZXN0ID0gJGNsaWVudC0+Z2V0KCcvJyk7CiRmYWN0b3J5ID0gbmV3IFBocFN0cmVhbVJlcXVlc3RGYWN0b3J5KCk7CiRzdHJlYW0gPSAkZmFjdG9yeS0+ZnJvbVJlcXVlc3QoJHJlcXVlc3QpOwokZGF0YSA9ICRzdHJlYW0tPnJlYWQoMTAyNCk7CgovLyA0LjAKJHJlc3BvbnNlID0gJGNsaWVudC0+Z2V0KCcvJywgWydzdHJlYW0nID0+IHRydWVdKTsKLy8gUmVhZCBzb21lIGRhdGEgb2ZmIG9mIHRoZSBzdHJlYW0gaW4gdGhlIHJlc3BvbnNlIGJvZHkKJGRhdGEgPSAkcmVzcG9uc2UtPmdldEJvZHkoKS0+cmVhZCgxMDI0KTsKYGBgCgojIyMjIFJlZGlyZWN0cwoKVGhlIGBjb25maWd1cmVSZWRpcmVjdHMoKWAgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YgYQpgYWxsb3dfcmVkaXJlY3RzYCByZXF1ZXN0IG9wdGlvbi4KCmBgYHBocAovLyBTdGFuZGFyZCByZWRpcmVjdHMgd2l0aCBhIGRlZmF1bHQgb2YgYSBtYXggb2YgNSByZWRpcmVjdHMKJHJlcXVlc3QgPSAkY2xpZW50LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAnLycsIFsnYWxsb3dfcmVkaXJlY3RzJyA9PiB0cnVlXSk7CgovLyBTdHJpY3QgcmVkaXJlY3RzIHdpdGggYSBjdXN0b20gbnVtYmVyIG9mIHJlZGlyZWN0cwokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJywgWwogICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gWydtYXgnID0+IDUsICdzdHJpY3QnID0+IHRydWVdCl0pOwpgYGAKCiMjIyMgRW50aXR5Qm9keQoKRW50aXR5Qm9keSBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzIGhhdmUgYmVlbiByZW1vdmVkIG9yIG1vdmVkIHRvCmBHdXp6bGVIdHRwXFN0cmVhbWAuIEFsbCBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIHRoYXQgb25jZSByZXF1aXJlZApgR3V6emxlSHR0cFxFbnRpdHlCb2R5SW50ZXJmYWNlYCBub3cgcmVxdWlyZQpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYC4gQ3JlYXRpbmcgYSBuZXcgYm9keSBmb3IgYSByZXF1ZXN0IG5vCmxvbmdlciB1c2VzIGBHdXp6bGVIdHRwXEVudGl0eUJvZHk6OmZhY3RvcnlgIGJ1dCBub3cgdXNlcwpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpmYWN0b3J5YCBvciBldmVuIGJldHRlcjoKYEd1enpsZUh0dHBcU3RyZWFtXGNyZWF0ZSgpYC4KCi0gYEd1enpsZVxIdHRwXEVudGl0eUJvZHlJbnRlcmZhY2VgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYAotIGBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5YCBpcyBub3cgYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbWAKLSBgR3V6emxlXEh0dHBcQ2FjaGluZ0VudGl0eUJvZHlgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cQ2FjaGluZ1N0cmVhbWAKLSBgR3V6emxlXEh0dHBcUmVhZExpbWl0RW50aXR5Qm9keWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxMaW1pdFN0cmVhbWAKLSBgR3V6emxlXEh0dHBcSW9FbWl0dHlpbkVudGl0eUJvZHlgIGhhcyBiZWVuIHJlbW92ZWQuCgojIyMjIFJlcXVlc3QgbGlmZWN5Y2xlIGV2ZW50cwoKUmVxdWVzdHMgcHJldmlvdXNseSBzdWJtaXR0ZWQgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdHMuIFRoZSBudW1iZXIgb2YgZXZlbnRzCmVtaXR0ZWQgb3ZlciB0aGUgbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHJlZHVjZWQgdG8gbWFrZQppdCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBob3cgdG8gZXh0ZW5kIHRoZSBiZWhhdmlvciBvZiBhIHJlcXVlc3QuIEFsbCBldmVudHMKZW1pdHRlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIHJlcXVlc3Qgbm93IGVtaXQgYSBjdXN0b20KYEd1enpsZUh0dHBcRXZlbnRcRXZlbnRJbnRlcmZhY2VgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGNvbnRleHQgcHJvdmlkaW5nCm1ldGhvZHMgYW5kIGEgd2F5IGluIHdoaWNoIHRvIG1vZGlmeSB0aGUgdHJhbnNhY3Rpb24gYXQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbgp0aW1lIChlLmcuLCBpbnRlcmNlcHQgdGhlIHJlcXVlc3QgYW5kIHNldCBhIHJlc3BvbnNlIG9uIHRoZSB0cmFuc2FjdGlvbikuCgotIGByZXF1ZXN0LmJlZm9yZV9zZW5kYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWZvcmVgIGFuZCBub3cgZW1pdHMgYQogIGBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50YAotIGByZXF1ZXN0LmNvbXBsZXRlYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb21wbGV0ZWAgYW5kIG5vdyBlbWl0cyBhCiAgYEd1enpsZUh0dHBcRXZlbnRcQ29tcGxldGVFdmVudGAuCi0gYHJlcXVlc3Quc2VudGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBjb21wbGV0ZWAuCi0gYHJlcXVlc3Quc3VjY2Vzc2AgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBjb21wbGV0ZWAuCi0gYGVycm9yYCBpcyBub3cgYW4gZXZlbnQgdGhhdCBlbWl0cyBhIGBHdXp6bGVIdHRwXEV2ZW50XEVycm9yRXZlbnRgLgotIGByZXF1ZXN0LmV4Y2VwdGlvbmAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBlcnJvcmAuCi0gYHJlcXVlc3QucmVjZWl2ZS5zdGF0dXNfbGluZWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgY3VybC5jYWxsYmFjay5wcm9ncmVzc2AgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgY3VzdG9tIGBTdHJlYW1JbnRlcmZhY2VgIHRvCiAgbWFpbnRhaW4gYSBzdGF0dXMgdXBkYXRlLgotIGBjdXJsLmNhbGxiYWNrLndyaXRlYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBjdXN0b20gYFN0cmVhbUludGVyZmFjZWAgdG8KICBpbnRlcmNlcHQgd3JpdGVzLgotIGBjdXJsLmNhbGxiYWNrLnJlYWRgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhIGN1c3RvbSBgU3RyZWFtSW50ZXJmYWNlYCB0bwogIGludGVyY2VwdCByZWFkcy4KCmBoZWFkZXJzYCBpcyBhIG5ldyBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIGhlYWRlcnMgb2YgYQpyZXF1ZXN0IGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhlIGJvZHkgb2YgdGhlIHJlc3BvbnNlIGlzIGRvd25sb2FkZWQuIFRoaXMKZXZlbnQgZW1pdHMgYSBgR3V6emxlSHR0cFxFdmVudFxIZWFkZXJzRXZlbnRgLgoKWW91IGNhbiBpbnRlcmNlcHQgYSByZXF1ZXN0IGFuZCBpbmplY3QgYSByZXNwb25zZSB1c2luZyB0aGUgYGludGVyY2VwdCgpYCBldmVudApvZiBhIGBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50YCwgYEd1enpsZUh0dHBcRXZlbnRcQ29tcGxldGVFdmVudGAsIGFuZApgR3V6emxlSHR0cFxFdmVudFxFcnJvckV2ZW50YCBldmVudC4KClNlZTogaHR0cDovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvZXZlbnRzLmh0bWwKCiMjIEluZmxlY3Rpb24KClRoZSBgR3V6emxlXEluZmxlY3Rpb25gIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIG5vdCBhIGNvcmUgY29uY2VybgpvZiBHdXp6bGUuCgojIyBJdGVyYXRvcgoKVGhlIGBHdXp6bGVcSXRlcmF0b3JgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLgoKLSBgR3V6emxlXEl0ZXJhdG9yXEFwcGVuZEl0ZXJhdG9yYCwgYEd1enpsZVxJdGVyYXRvclxDaHVua2VkSXRlcmF0b3JgLCBhbmQKICBgR3V6emxlXEl0ZXJhdG9yXE1ldGhvZFByb3h5SXRlcmF0b3JgIGFyZSBuaWNlLCBidXQgbm90IGEgY29yZSByZXF1aXJlbWVudCBvZgogIEd1enpsZSBpdHNlbGYuCi0gYEd1enpsZVxJdGVyYXRvclxGaWx0ZXJJdGVyYXRvcmAgaXMgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIGFuIGVxdWl2YWxlbnQKICBjbGFzcyBpcyBzaGlwcGVkIHdpdGggUEhQIDUuNC4KLSBgR3V6emxlXEl0ZXJhdG9yXE1hcEl0ZXJhdG9yYCBpcyBub3QgcmVhbGx5IG5lZWRlZCB3aGVuIHVzaW5nIFBIUCA1LjUgYmVjYXVzZQogIGl0J3MgZWFzaWVyIHRvIGp1c3Qgd3JhcCBhbiBpdGVyYXRvciBpbiBhIGdlbmVyYXRvciB0aGF0IG1hcHMgdmFsdWVzLgoKRm9yIGEgcmVwbGFjZW1lbnQgb2YgdGhlc2UgaXRlcmF0b3JzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pa2ljL2l0ZXIKCiMjIExvZwoKVGhlIExvZ1BsdWdpbiBoYXMgbW92ZWQgdG8gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9sb2ctc3Vic2NyaWJlci4gVGhlCmBHdXp6bGVcTG9nYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gR3V6emxlIG5vdyByZWxpZXMgb24KYFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlYCBmb3IgYWxsIGxvZ2dpbmcuIFRoZSBNZXNzYWdlRm9ybWF0dGVyIGNsYXNzIGhhcyBiZWVuCm1vdmVkIHRvIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTG9nXEZvcm1hdHRlcmAuCgojIyBQYXJzZXIKClRoZSBgR3V6emxlXFBhcnNlcmAgbmFtZXNwYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkgdXNlZCB0bwptYWtlIGl0IHBvc3NpYmxlIHRvIHBsdWcgaW4gY3VzdG9tIHBhcnNlcnMgZm9yIGNvb2tpZXMsIG1lc3NhZ2VzLCBVUkkKdGVtcGxhdGVzLCBhbmQgVVJMczsgaG93ZXZlciwgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IGlzIG5vdCBuZWVkZWQgaW4gR3V6emxlCnNvIGl0IGhhcyBiZWVuIHJlbW92ZWQuCgotIENvb2tpZTogQ29va2llIHBhcnNpbmcgbG9naWMgaGFzIGJlZW4gbW92ZWQgdG8KICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llOjpmcm9tU3RyaW5nYC4KLSBNZXNzYWdlOiBNZXNzYWdlIHBhcnNpbmcgbG9naWMgZm9yIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBoYXMgYmVlbiBtb3ZlZAogIHRvIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3Rvcnk6OmZyb21NZXNzYWdlYC4gTWVzc2FnZSBwYXJzaW5nIGlzIG9ubHkKICB1c2VkIGluIGRlYnVnZ2luZyBvciBkZXNlcmlhbGl6aW5nIG1lc3NhZ2VzLCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yCiAgR3V6emxlIGFzIGEgbGlicmFyeSB0byBhZGQgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IHRvIHBhcnNpbmcgbWVzc2FnZXMuCi0gVXJpVGVtcGxhdGU6IFVSSSB0ZW1wbGF0ZSBwYXJzaW5nIGhhcyBiZWVuIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcVXJpVGVtcGxhdGVgLiBUaGUgR3V6emxlIGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgUEVDTAogIFVSSSB0ZW1wbGF0ZSBsaWJyYXJ5IGlmIGl0IGlzIGluc3RhbGxlZC4KLSBVcmw6IFVSTCBwYXJzaW5nIGlzIG5vdyBwZXJmb3JtZWQgaW4gYEd1enpsZUh0dHBcVXJsOjpmcm9tU3RyaW5nYCAocHJldmlvdXNseQogIGl0IHdhcyBgR3V6emxlXEh0dHBcVXJsOjpmYWN0b3J5KClgKS4gSWYgY3VzdG9tIFVSTCBwYXJzaW5nIGlzIG5lY2Vzc2FyeSwKICB0aGVuIGRldmVsb3BlcnMgYXJlIGZyZWUgdG8gc3ViY2xhc3MgYEd1enpsZUh0dHBcVXJsYC4KCiMjIFBsdWdpbgoKVGhlIGBHdXp6bGVcUGx1Z2luYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVuYW1lZCB0byBgR3V6emxlSHR0cFxTdWJzY3JpYmVyYC4KU2V2ZXJhbCBwbHVnaW5zIGFyZSBzaGlwcGluZyB3aXRoIHRoZSBjb3JlIEd1enpsZSBsaWJyYXJ5IHVuZGVyIHRoaXMgbmFtZXNwYWNlLgoKLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXENvb2tpZWA6IFJlcGxhY2VzIHRoZSBvbGQgQ29va2llUGx1Z2luLiBDb29raWUgamFyCiAgY29kZSBoYXMgbW92ZWQgdG8gYEd1enpsZUh0dHBcQ29va2llYC4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEhpc3RvcnlgOiBSZXBsYWNlcyB0aGUgb2xkIEhpc3RvcnlQbHVnaW4uCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxIdHRwRXJyb3JgOiBUaHJvd3MgZXJyb3JzIHdoZW4gYSBiYWQgSFRUUCByZXNwb25zZSBpcwogIHJlY2VpdmVkLgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTW9ja2A6IFJlcGxhY2VzIHRoZSBvbGQgTW9ja1BsdWdpbi4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFByZXBhcmVgOiBQcmVwYXJlcyB0aGUgYm9keSBvZiBhIHJlcXVlc3QganVzdCBiZWZvcmUKICBzZW5kaW5nLiBUaGlzIHN1YnNjcmliZXIgaXMgYXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIGJ5IGRlZmF1bHQuCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxSZWRpcmVjdGA6IFJlcGxhY2VzIHRoZSBSZWRpcmVjdFBsdWdpbi4KClRoZSBmb2xsb3dpbmcgcGx1Z2lucyBoYXZlIGJlZW4gcmVtb3ZlZCAodGhpcmQtcGFydGllcyBhcmUgZnJlZSB0byByZS1pbXBsZW1lbnQKdGhlc2UgaWYgbmVlZGVkKToKCi0gYEd1enpsZUh0dHBcUGx1Z2luXEFzeW5jYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXFBsdWdpblxDdXJsQXV0aGAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlSHR0cFxQbHVnaW5cRXJyb3JSZXNwb25zZVxFcnJvclJlc3BvbnNlUGx1Z2luYCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzCiAgZnVuY3Rpb25hbGl0eSBzaG91bGQgaW5zdGVhZCBiZSBpbXBsZW1lbnRlZCB3aXRoIGV2ZW50IGxpc3RlbmVycyB0aGF0IG9jY3VyCiAgYWZ0ZXIgbm9ybWFsIHJlc3BvbnNlIHBhcnNpbmcgb2NjdXJzIGluIHRoZSBndXp6bGUvY29tbWFuZCBwYWNrYWdlLgoKVGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBub3QgcGFydCBvZiB0aGUgY29yZSBHdXp6bGUgcGFja2FnZSwgYnV0IGFyZSBwcm92aWRlZAppbiBzZXBhcmF0ZSByZXBvc2l0b3JpZXM6CgotIGBHdXp6bGVcSHR0cFxQbHVnaW5cQmFja29mZlBsdWdpbmAgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIG11Y2ggc2ltcGxlcgogIHRvIGJ1aWxkIGN1c3RvbSByZXRyeSBwb2xpY2llcyB1c2luZyBzaW1wbGUgZnVuY3Rpb25zIHJhdGhlciB0aGFuIHZhcmlvdXMKICBjaGFpbmVkIGNsYXNzZXMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9yZXRyeS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxDYWNoZVxDYWNoZVBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9jYWNoZS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxMb2dcTG9nUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2xvZy1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxNZDVcTWQ1UGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL21lc3NhZ2UtaW50ZWdyaXR5LXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXE1vY2tcTW9ja1BsdWdpbmAgaGFzIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrU3Vic2NyaWJlcmAuCi0gYEd1enpsZVxIdHRwXFBsdWdpblxPYXV0aFxPYXV0aFBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9vYXV0aC1zdWJzY3JpYmVyCgojIyBTZXJ2aWNlCgpUaGUgc2VydmljZSBkZXNjcmlwdGlvbiBsYXllciBvZiBHdXp6bGUgaGFzIG1vdmVkIGludG8gdHdvIHNlcGFyYXRlIHBhY2thZ2VzOgoKLSBodHRwOi8vZ2l0aHViLmNvbS9ndXp6bGUvY29tbWFuZCBQcm92aWRlcyBhIGhpZ2ggbGV2ZWwgYWJzdHJhY3Rpb24gb3ZlciB3ZWIKICBzZXJ2aWNlcyBieSByZXByZXNlbnRpbmcgd2ViIHNlcnZpY2Ugb3BlcmF0aW9ucyB1c2luZyBjb21tYW5kcy4KLSBodHRwOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLXNlcnZpY2VzIFByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mCiAgZ3V6emxlL2NvbW1hbmQgdGhhdCBwcm92aWRlcyByZXF1ZXN0IHNlcmlhbGl6YXRpb24gYW5kIHJlc3BvbnNlIHBhcnNpbmcgdXNpbmcKICBHdXp6bGUgc2VydmljZSBkZXNjcmlwdGlvbnMuCgojIyBTdHJlYW0KClN0cmVhbSBoYXZlIG1vdmVkIHRvIGEgc2VwYXJhdGUgcGFja2FnZSBhdmFpbGFibGUgYXQKaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9zdHJlYW1zLgoKYEd1enpsZVxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYCBoYXMgYmVlbiBnaXZlbiBhIGxhcmdlIHVwZGF0ZSB0byBjbGVhbmx5IHRha2UKb24gdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgYEd1enpsZVxIdHRwXEVudGl0eUJvZHlgIGFuZApgR3V6emxlXEh0dHBcRW50aXR5Qm9keUludGVyZmFjZWAgbm93IHRoYXQgdGhleSBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhlIG51bWJlcgpvZiBtZXRob2RzIGltcGxlbWVudGVkIGJ5IHRoZSBgU3RyZWFtSW50ZXJmYWNlYCBoYXMgYmVlbiBkcmFzdGljYWxseSByZWR1Y2VkIHRvCmFsbG93IGRldmVsb3BlcnMgdG8gbW9yZSBlYXNpbHkgZXh0ZW5kIGFuZCBkZWNvcmF0ZSBzdHJlYW0gYmVoYXZpb3IuCgojIyBSZW1vdmVkIG1ldGhvZHMgZnJvbSBTdHJlYW1JbnRlcmZhY2UKCi0gYGdldFN0cmVhbWAgYW5kIGBzZXRTdHJlYW1gIGhhdmUgYmVlbiByZW1vdmVkIHRvIGJldHRlciBlbmNhcHN1bGF0ZSBzdHJlYW1zLgotIGBnZXRNZXRhZGF0YWAgYW5kIGBzZXRNZXRhZGF0YWAgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YKICBgR3V6emxlSHR0cFxTdHJlYW1cTWV0YWRhdGFTdHJlYW1JbnRlcmZhY2VgLgotIGBnZXRXcmFwcGVyYCwgYGdldFdyYXBwZXJEYXRhYCwgYGdldFN0cmVhbVR5cGVgLCBhbmQgYGdldFVyaWAgaGF2ZSBhbGwgYmVlbgogIHJlbW92ZWQuIFRoaXMgZGF0YSBpcyBhY2Nlc3NpYmxlIHdoZW4KICB1c2luZyBzdHJlYW1zIHRoYXQgaW1wbGVtZW50IGBHdXp6bGVIdHRwXFN0cmVhbVxNZXRhZGF0YVN0cmVhbUludGVyZmFjZWAuCi0gYHJld2luZGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBzZWVrKDApYCBmb3IgYSBzaW1pbGFyIGJlaGF2aW9yLgoKIyMgUmVuYW1lZCBtZXRob2RzCgotIGBkZXRhY2hTdHJlYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRldGFjaGAuCi0gYGZlb2ZgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGVvZmAuCi0gYGZ0ZWxsYCBoYXMgYmVlbiByZW5hbWVkIHRvIGB0ZWxsYC4KLSBgcmVhZExpbmVgIGhhcyBtb3ZlZCBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZCB0byBhIHN0YXRpYyBjbGFzcyBtZXRob2Qgb2YKICBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtYC4KCiMjIE1ldGFkYXRhIHN0cmVhbXMKCmBHdXp6bGVIdHRwXFN0cmVhbVxNZXRhZGF0YVN0cmVhbUludGVyZmFjZWAgaGFzIGJlZW4gYWRkZWQgdG8gZGVub3RlIHN0cmVhbXMKdGhhdCBjb250YWluIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWNjZXNzaWJsZSB2aWEgYGdldE1ldGFkYXRhKClgLgpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpnZXRNZXRhZGF0YWAgYW5kCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OnNldE1ldGFkYXRhYCBoYXZlIGJlZW4gcmVtb3ZlZC4KCiMjIFN0cmVhbVJlcXVlc3RGYWN0b3J5CgpUaGUgZW50aXJlIGNvbmNlcHQgb2YgdGhlIFN0cmVhbVJlcXVlc3RGYWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQuIFRoZSB3YXkgdGhpcwp3YXMgdXNlZCBpbiBHdXp6bGUgMyBicm9rZSB0aGUgYWN0dWFsIGludGVyZmFjZSBvZiBzZW5kaW5nIHN0cmVhbWluZyByZXF1ZXN0cwooaW5zdGVhZCBvZiBnZXR0aW5nIGJhY2sgYSBSZXNwb25zZSwgeW91IGdvdCBhIFN0cmVhbUludGVyZmFjZSkuIFN0cmVhbWluZwpQSFAgcmVxdWVzdHMgYXJlIG5vdyBpbXBsZW1lbnRlZCB0aHJvdWdoIHRoZSBgR3V6emxlSHR0cFxBZGFwdGVyXFN0cmVhbUFkYXB0ZXJgLgoKMy42IHRvIDMuNwotLS0tLS0tLS0tCgojIyMgRGVwcmVjYXRpb25zCgotIFlvdSBjYW4gbm93IGVuYWJsZSBFX1VTRVJfREVQUkVDQVRFRCB3YXJuaW5ncyB0byBzZWUgaWYgeW91IGFyZSB1c2luZyBhbnkgZGVwcmVjYXRlZCBtZXRob2RzLjoKCmBgYHBocApcR3V6emxlXENvbW1vblxWZXJzaW9uOjokZW1pdFdhcm5pbmdzID0gdHJ1ZTsKYGBgCgpUaGUgZm9sbG93aW5nIEFQSXMgYW5kIG9wdGlvbnMgaGF2ZSBiZWVuIG1hcmtlZCBhcyBkZXByZWNhdGVkOgoKLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZXNwb25zZUJvZHlSZXBlYXRhYmxlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJHJlcXVlc3QtPmdldFJlc3BvbnNlQm9keSgpLT5pc1JlcGVhdGFibGUoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGBHdXp6bGVcUGx1Z2luXENhY2hlXERlZmF1bHRDYW5DYWNoZVN0cmF0ZWd5LT5jYW5DYWNoZVJlcXVlc3QoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGBHdXp6bGVcUGx1Z2luXENhY2hlXERlZmF1bHRDYW5DYWNoZVN0cmF0ZWd5LT5jYW5DYWNoZVJlcXVlc3QoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6c2V0SXNSZWRpcmVjdCgpYCBhcyBkZXByZWNhdGVkLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4gaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZWRpcmVjdCgpYCBhcyBkZXByZWNhdGVkLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4gaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxDYWNoZVxDYWNoZUFkYXB0ZXJGYWN0b3J5OjpmYWN0b3J5KClgIGFzIGRlcHJlY2F0ZWQKLSBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6ZW5hYmxlTWFnaWNNZXRob2RzKClgIGFzIGRlcHJlY2F0ZWQuIE1hZ2ljIG1ldGhvZHMgY2FuIG5vIGxvbmdlciBiZSBkaXNhYmxlZCBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudC4KLSBNYXJrZWQgYEd1enpsZVxQYXJzZXJcVXJsXFVybFBhcnNlcmAgYXMgZGVwcmVjYXRlZC4gSnVzdCB1c2UgUEhQJ3MgYHBhcnNlX3VybCgpYCBhbmQgcGVyY2VudCBlbmNvZGUgeW91ciBVVEYtOC4KLSBNYXJrZWQgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0KClgIGFzIGRlcHJlY2F0ZWQuCi0gTWFya2VkIGBHdXp6bGVcUGx1Z2luXEN1cmxBdXRoXEN1cmxBdXRoUGx1Z2luYCBhcyBkZXByZWNhdGVkLiBVc2UKICBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9hdXRoJywgYXJyYXkoJ3VzZXInLCAncGFzcycsICdCYXNpY3xEaWdlc3R8TlRMTXxBbnknKSk7YCBvcgogIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdhdXRoJywgYXJyYXkoJ3VzZXInLCAncGFzcycsICdCYXNpY3xEaWdlc3R8TlRMTXxBbnknKSk7YAoKMy43IGludHJvZHVjZXMgYHJlcXVlc3Qub3B0aW9uc2AgYXMgYSBwYXJhbWV0ZXIgZm9yIGEgY2xpZW50IGNvbmZpZ3VyYXRpb24gYW5kIGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGFsbCBjcmVhdGlvbmFsCnJlcXVlc3QgbWV0aG9kcy4gV2hlbiBwYWlyZWQgd2l0aCBhIGNsaWVudCdzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNwZWNpZnkgZGVmYXVsdCBzZXR0aW5ncwpmb3IgdmFyaW91cyBhc3BlY3RzIG9mIGEgcmVxdWVzdC4gQmVjYXVzZSB0aGVzZSBvcHRpb25zIG1ha2Ugb3RoZXIgcHJldmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlZHVuZGFudCwgc2V2ZXJhbApjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIG1ldGhvZHMgb2YgYSBjbGllbnQgYW5kIEFic3RyYWN0Q29tbWFuZCBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KCi0gTWFya2VkIGBHdXp6bGVcU2VydmljZVxDbGllbnQ6OmdldERlZmF1bHRIZWFkZXJzKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+Z2V0RGVmYXVsdE9wdGlvbignaGVhZGVycycpYC4KLSBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6c2V0RGVmYXVsdEhlYWRlcnMoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuCi0gTWFya2VkICdyZXF1ZXN0LnBhcmFtcycgZm9yIGBHdXp6bGVcSHR0cFxDbGllbnRgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbigncGFyYW1zL3twYXJhbV9uYW1lfScsICd2YWx1ZScpYAotIE1hcmtlZCAnY29tbWFuZC5oZWFkZXJzJywgJ2NvbW1hbmQucmVzcG9uc2VfYm9keScgYW5kICdjb21tYW5kLm9uX2NvbXBsZXRlJyBhcyBkZXByZWNhdGVkIGZvciBBYnN0cmFjdENvbW1hbmQuIFRoZXNlIHdpbGwgd29yayB0aHJvdWdoIEd1enpsZSA0LjAKCiAgICAgICAgJGNvbW1hbmQgPSAkY2xpZW50LT5nZXRDb21tYW5kKCdmb28nLCBhcnJheSgKICAgICAgICAgICAgJ2NvbW1hbmQuaGVhZGVycycgPT4gYXJyYXkoJ1Rlc3QnID0+ICcxMjMnKSwKICAgICAgICAgICAgJ2NvbW1hbmQucmVzcG9uc2VfYm9keScgPT4gJy9wYXRoL3RvL2ZpbGUnCiAgICAgICAgKSk7CgogICAgICAgIC8vIFNob3VsZCBiZSBjaGFuZ2VkIHRvOgoKICAgICAgICAkY29tbWFuZCA9ICRjbGllbnQtPmdldENvbW1hbmQoJ2ZvbycsIGFycmF5KAogICAgICAgICAgICAnY29tbWFuZC5yZXF1ZXN0X29wdGlvbnMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2hlYWRlcnMnID0+IGFycmF5KCdUZXN0JyA9PiAnMTIzJyksCiAgICAgICAgICAgICAgICAnc2F2ZV9hcycgPT4gJy9wYXRoL3RvL2ZpbGUnCiAgICAgICAgICAgICkKICAgICAgICApKTsKCiMjIyBJbnRlcmZhY2UgY2hhbmdlcwoKQWRkaXRpb25zIGFuZCBjaGFuZ2VzICh5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSBhbnkgaW1wbGVtZW50YXRpb25zIG9yIHN1YmNsYXNzZXMgeW91IG1heSBoYXZlIGNyZWF0ZWQpOgoKLSBBZGRlZCBhbiBgJG9wdGlvbnNgIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2VgOgogIGNyZWF0ZVJlcXVlc3QsIGhlYWQsIGRlbGV0ZSwgcHV0LCBwYXRjaCwgcG9zdCwgb3B0aW9ucywgcHJlcGFyZVJlcXVlc3QKLSBBZGRlZCBhbiBgJG9wdGlvbnNgIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdFxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTo6Y3JlYXRlUmVxdWVzdCgpYAotIEFkZGVkIGFuIGBhcHBseU9wdGlvbnMoKWAgbWV0aG9kIHRvIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2VgCi0gQ2hhbmdlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXQoJHVyaSA9IG51bGwsICRoZWFkZXJzID0gbnVsbCwgJGJvZHkgPSBudWxsKWAgdG8KICBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXQoJHVyaSA9IG51bGwsICRoZWFkZXJzID0gbnVsbCwgJG9wdGlvbnMgPSBhcnJheSgpKWAuIFlvdSBjYW4gc3RpbGwgcGFzcyBpbiBhCiAgcmVzb3VyY2UsIHN0cmluZywgb3IgRW50aXR5Qm9keSBpbnRvIHRoZSAkb3B0aW9ucyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZG93bmxvYWQgbG9jYXRpb24gb2YgdGhlIHJlc3BvbnNlLgotIENoYW5nZWQgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6X19jb25zdHJ1Y3QoJGRhdGEpYCB0byBubyBsb25nZXIgYWNjZXB0cyBhIG51bGwgdmFsdWUgZm9yIGAkZGF0YWAgYnV0IGEKICBkZWZhdWx0IGBhcnJheSgpYAotIEFkZGVkIGBHdXp6bGVcU3RyZWFtXFN0cmVhbUludGVyZmFjZTo6aXNSZXBlYXRhYmxlYAotIE1hZGUgYEd1enpsZVxIdHRwXENsaWVudDo6ZXhwYW5kVGVtcGxhdGVgIGFuZCBgZ2V0VXJpVGVtcGxhdGVgIHByb3RlY3RlZCBtZXRob2RzLgoKVGhlIGZvbGxvd2luZyBtZXRob2RzIHdlcmUgcmVtb3ZlZCBmcm9tIGludGVyZmFjZXMuIEFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gdGhlIGNvbmNyZXRlIGNsYXNzZXMKdGhhdCBpbXBsZW1lbnQgdGhlbSwgYnV0IHlvdSBzaG91bGQgdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgYWx0ZXJuYXRpdmUgbWV0aG9kczoKCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXREZWZhdWx0SGVhZGVycygpLiBVc2UKICBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuIG9yCiAgYCRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYCBvcgogIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuIG9yCiAgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ2hlYWRlcnMnLCBhcnJheSgnaGVhZGVyX25hbWUnID0+ICd2YWx1ZScpKWAuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXREZWZhdWx0SGVhZGVycygpLiBVc2UgYCRjbGllbnQtPmdldENvbmZpZygpLT5nZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycpYC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmV4cGFuZFRlbXBsYXRlKClgLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFJlcXVlc3RGYWN0b3J5KClgLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldEN1cmxNdWx0aSgpYC4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6Y2FuQ2FjaGVgLiBVc2UgdGhlIENhY2hlUGx1Z2luLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c2V0SXNSZWRpcmVjdGAuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbi4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmlzUmVkaXJlY3RgLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4uCgojIyMgQ2FjaGUgcGx1Z2luIGJyZWFraW5nIGNoYW5nZXMKCi0gQ2FjaGVLZXlQcm92aWRlckludGVyZmFjZSBhbmQgRGVmYXVsdENhY2hlS2V5UHJvdmlkZXIgYXJlIG5vIGxvbmdlciB1c2VkLiBBbGwgb2YgdGhpcyBsb2dpYyBpcyBoYW5kbGVkIGluIGEKICBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UuIFRoZXNlIHR3byBvYmplY3RzIGFuZCBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uCi0gQWx3YXlzIHNldHRpbmcgWC1jYWNoZSBoZWFkZXJzIG9uIGNhY2hlZCByZXNwb25zZXMKLSBEZWZhdWx0IGNhY2hlIFRUTHMgYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBDYWNoZVN0b3JhZ2VJbnRlcmZhY2Ugb2YgYSBDYWNoZVBsdWdpbgotIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmNhY2hlKCRrZXksIFJlc3BvbnNlICRyZXNwb25zZSwgJHR0bCA9IG51bGwpYCBoYXMgY2hhbmdlZCB0byBgY2FjaGUoUmVxdWVzdEludGVyZmFjZQogICRyZXF1ZXN0LCBSZXNwb25zZSAkcmVzcG9uc2UpO2AKLSBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpmZXRjaCgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGZldGNoKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpO2AKLSBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpkZWxldGUoJGtleSlgIGhhcyBjaGFuZ2VkIHRvIGBkZWxldGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAotIEFkZGVkIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OnB1cmdlKCR1cmwpYAotIGBEZWZhdWx0UmV2YWxpZGF0aW9uOjpfX2NvbnN0cnVjdChDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlICRjYWNoZUtleSwgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwgQ2FjaGVQbHVnaW4KICAkcGx1Z2luKWAgaGFzIGNoYW5nZWQgdG8gYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlU3RvcmFnZUludGVyZmFjZSAkY2FjaGUsCiAgQ2FuQ2FjaGVTdHJhdGVneUludGVyZmFjZSAkY2FuQ2FjaGUgPSBudWxsKWAKLSBBZGRlZCBgUmV2YWxpZGF0aW9uSW50ZXJmYWNlOjpzaG91bGRSZXZhbGlkYXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSlgCgozLjUgdG8gMy42Ci0tLS0tLS0tLS0KCiogTWl4ZWQgY2FzaW5nIG9mIGhlYWRlcnMgYXJlIG5vdyBmb3JjZWQgdG8gYmUgYSBzaW5nbGUgY29uc2lzdGVudCBjYXNpbmcgYWNyb3NzIGFsbCB2YWx1ZXMgZm9yIHRoYXQgaGVhZGVyLgoqIE1lc3NhZ2VzIGludGVybmFsbHkgdXNlIGEgSGVhZGVyQ29sbGVjdGlvbiBvYmplY3QgdG8gZGVsZWdhdGUgaGFuZGxpbmcgY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgcmVzb2x1dGlvbgoqIFJlbW92ZWQgdGhlIHdob2xlIGNoYW5nZWRIZWFkZXIoKSBmdW5jdGlvbiBzeXN0ZW0gb2YgbWVzc2FnZXMgYmVjYXVzZSBhbGwgaGVhZGVyIGNoYW5nZXMgbm93IGdvIHRocm91Z2ggYWRkSGVhZGVyKCkuCiAgRm9yIGV4YW1wbGUsIHNldEhlYWRlcigpIGZpcnN0IHJlbW92ZXMgdGhlIGhlYWRlciB1c2luZyB1bnNldCBvbiBhIEhlYWRlckNvbGxlY3Rpb24gYW5kIHRoZW4gY2FsbHMgYWRkSGVhZGVyKCkuCiAgS2VlcGluZyB0aGUgSG9zdCBoZWFkZXIgYW5kIFVSTCBob3N0IGluIHN5bmMgaXMgbm93IGhhbmRsZWQgYnkgb3ZlcnJpZGluZyB0aGUgYWRkSGVhZGVyIG1ldGhvZCBpbiBSZXF1ZXN0LgoqIFNwZWNpZmljIGhlYWRlciBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIGNyZWF0ZWQgZm9yIGNvbXBsZXggaGVhZGVycy4gV2hlbiBhIG1lc3NhZ2UgY3JlYXRlcyBhIGhlYWRlciwgaXQgdXNlcyBhCiAgSGVhZGVyRmFjdG9yeSB3aGljaCBjYW4gbWFwIHNwZWNpZmljIGhlYWRlcnMgdG8gc3BlY2lmaWMgaGVhZGVyIGNsYXNzZXMuIFRoZXJlIGlzIG5vdyBhIExpbmsgaGVhZGVyIGFuZAogIENhY2hlQ29udHJvbCBoZWFkZXIgaW1wbGVtZW50YXRpb24uCiogTW92ZWQgZ2V0TGlua3MoKSBmcm9tIFJlc3BvbnNlIHRvIGp1c3QgYmUgdXNlZCBvbiBhIExpbmsgaGVhZGVyIG9iamVjdC4KCklmIHlvdSBwcmV2aW91c2x5IHJlbGllZCBvbiBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlcjo6cmF3KCksIHRoZW4geW91IHdpbGwgbmVlZCB0byB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGUKSGVhZGVySW50ZXJmYWNlIChlLmcuIHRvQXJyYXkoKSwgZ2V0QWxsKCksIGV0Yy4pLgoKIyMjIEludGVyZmFjZSBjaGFuZ2VzCgoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0VXJpVGVtcGxhdGUKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldEN1cmxNdWx0aSgpCiogUmVtb3ZlZCBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnJlY2VpdmVkUmVxdWVzdEhlYWRlcigpIGFuZCBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4KICBHdXp6bGVcSHR0cFxDdXJsXFJlcXVlc3RNZWRpYXRvcgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICRhc1N0cmluZyBwYXJhbWV0ZXIgZnJvbSBNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXIoKS4gSnVzdCBjYXN0IHRoZSBoZWFkZXIgdG8gYSBzdHJpbmcuCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJHRyeUNodW5rZWRUcmFuc2ZlciBvcHRpb24gZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2UKKiBSZW1vdmVkIHRoZSAkYXNPYmplY3RzIGFyZ3VtZW50IGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJzKCkKCiMjIyBSZW1vdmVkIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCgoqIFJlbW92ZWQgR3V6emxlXFBhcnNlclxQYXJzZXJSZWdpc3Rlcjo6Z2V0KCkuIFVzZSBnZXRQYXJzZXIoKQoqIFJlbW92ZWQgR3V6emxlXFBhcnNlclxQYXJzZXJSZWdpc3Rlcjo6c2V0KCkuIFVzZSByZWdpc3RlclBhcnNlcigpLgoKIyMjIERlcHJlY2F0aW9ucwoKKiBUaGUgYWJpbGl0eSB0byBjYXNlLWluc2Vuc2l0aXZlbHkgc2VhcmNoIGZvciBoZWFkZXIgdmFsdWVzCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6Omhhc0V4YWN0SGVhZGVyCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdy4gVXNlIGdldEFsbCgpCiogRGVwcmVjYXRlZCBjYWNoZSBjb250cm9sIHNwZWNpZmljIG1ldGhvZHMgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2UuIFVzZSB0aGUgQ2FjaGVDb250cm9sIGhlYWRlciBvYmplY3QKICBpbnN0ZWFkLgoKIyMjIE90aGVyIGNoYW5nZXMKCiogQWxsIHJlc3BvbnNlIGhlYWRlciBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiBhIHN0cmluZyByYXRoZXIgdGhhbiBtaXhpbmcgSGVhZGVyIG9iamVjdHMgYW5kIHN0cmluZ3MgaW5jb25zaXN0ZW50bHkKKiBSZW1vdmVkIGNVUkwgYmxhY2tsaXN0IHN1cHBvcnQuIFRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBub3cgdGhhdCBFeHBlY3QsIEFjY2VwdCwgZXRjLiBhcmUgbWFuYWdlZCBieSBHdXp6bGUKICBkaXJlY3RseSB2aWEgaW50ZXJmYWNlcwoqIFJlbW92ZWQgdGhlIGluamVjdGluZyBvZiBhIHJlcXVlc3Qgb2JqZWN0IG9udG8gYSByZXNwb25zZSBvYmplY3QuIFRoZSBtZXRob2RzIHRvIGdldCBhbmQgc2V0IGEgcmVxdWVzdCBzdGlsbCBleGlzdAogIGJ1dCBhcmUgYSBuby1vcCB1bnRpbCByZW1vdmVkLgoqIE1vc3QgY2xhc3NlcyB0aGF0IHVzZWQgdG8gcmVxdWlyZSBhIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIHR5cGVoaW50IG5vdyByZXF1ZXN0IGEKICBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxBcnJheUNvbW1hbmRJbnRlcmZhY2VgLgoqIEFkZGVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OnN0YXJ0UmVzcG9uc2UoKWAgdG8gdGhlIFJlcXVlc3RJbnRlcmZhY2UgdG8gaGFuZGxlIGluamVjdGluZyBhIHJlc3BvbnNlCiAgb24gYSByZXF1ZXN0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIHN0aWxsIGJlaW5nIHRyYW5zZmVycmVkCiogYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgbm93IGV4dGVuZHMgZnJvbSBUb0FycmF5SW50ZXJmYWNlIGFuZCBBcnJheUFjY2VzcwoKMy4zIHRvIDMuNAotLS0tLS0tLS0tCgpCYXNlIFVSTHMgb2YgYSBjbGllbnQgbm93IGZvbGxvdyB0aGUgcnVsZXMgb2YgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4yIHdoZW4gbWVyZ2luZyBVUkxzLgoKMy4yIHRvIDMuMwotLS0tLS0tLS0tCgojIyMgUmVzcG9uc2U6OmdldEV0YWcoKSBxdW90ZSBzdHJpcHBpbmcgcmVtb3ZlZAoKYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldEV0YWcoKWAgbm8gbG9uZ2VyIHN0cmlwcyBxdW90ZXMgYXJvdW5kIHRoZSBFVGFnIHJlc3BvbnNlIGhlYWRlcgoKIyMjIFJlbW92ZWQgYEd1enpsZVxIdHRwXFV0aWxzYAoKVGhlIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3Mgd2FzIHJlbW92ZWQuIFRoaXMgY2xhc3Mgd2FzIG9ubHkgdXNlZCBmb3IgdGVzdGluZy4KCiMjIyBTdHJlYW0gd3JhcHBlciBhbmQgdHlwZQoKYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0cmVhbVR5cGUoKWAgYXJlIG5vIGxvbmdlciBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgoKIyMjIGN1cmwuZW1pdF9pbyBiZWNhbWUgZW1pdF9pbwoKRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nIHRoZQonZW1pdF9pbycga2V5LiBUaGlzIHdhcyBwcmV2aW91c2x5IHNldCB1bmRlciBhIHJlcXVlc3QncyBwYXJhbWV0ZXJzIHVzaW5nICdjdXJsLmVtaXRfaW8nCgozLjEgdG8gMy4yCi0tLS0tLS0tLS0KCiMjIyBDdXJsTXVsdGkgaXMgbm8gbG9uZ2VyIHJldXNlZCBnbG9iYWxseQoKQmVmb3JlIDMuMiwgdGhlIHNhbWUgQ3VybE11bHRpIG9iamVjdCB3YXMgcmV1c2VkIGdsb2JhbGx5IGZvciBlYWNoIGNsaWVudC4gVGhpcyBjYW4gY2F1c2UgaXNzdWUgd2hlcmUgcGx1Z2lucyBhZGRlZAp0byBhIHNpbmdsZSBjbGllbnQgY2FuIHBvbGx1dGUgcmVxdWVzdHMgZGlzcGF0Y2hlZCBmcm9tIG90aGVyIGNsaWVudHMuCgpJZiB5b3Ugc3RpbGwgd2lzaCB0byByZXVzZSB0aGUgc2FtZSBDdXJsTXVsdGkgb2JqZWN0IHdpdGggZWFjaCBjbGllbnQsIHRoZW4geW91IGNhbiBhZGQgYSBsaXN0ZW5lciB0byB0aGUKU2VydmljZUJ1aWxkZXIncyBgc2VydmljZV9idWlsZGVyLmNyZWF0ZV9jbGllbnRgIGV2ZW50IHRvIGluamVjdCBhIGN1c3RvbSBDdXJsTXVsdGkgb2JqZWN0IGludG8gZWFjaCBjbGllbnQgYXMgaXQgaXMKY3JlYXRlZC4KCmBgYHBocAokbXVsdGkgPSBuZXcgR3V6emxlXEh0dHBcQ3VybFxDdXJsTXVsdGkoKTsKJGJ1aWxkZXIgPSBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5KCcvcGF0aC90by9jb25maWcuanNvbicpOwokYnVpbGRlci0+YWRkTGlzdGVuZXIoJ3NlcnZpY2VfYnVpbGRlci5jcmVhdGVfY2xpZW50JywgZnVuY3Rpb24gKCRldmVudCkgdXNlICgkbXVsdGkpIHsKICAgICRldmVudFsnY2xpZW50J10tPnNldEN1cmxNdWx0aSgkbXVsdGkpOwp9Cn0pOwpgYGAKCiMjIyBObyBkZWZhdWx0IHBhdGgKClVSTHMgbm8gbG9uZ2VyIGhhdmUgYSBkZWZhdWx0IHBhdGggdmFsdWUgb2YgJy8nIGlmIG5vIHBhdGggd2FzIHNwZWNpZmllZC4KCkJlZm9yZToKCmBgYHBocAokcmVxdWVzdCA9ICRjbGllbnQtPmdldCgnaHR0cDovL3d3dy5mb28uY29tJyk7CmVjaG8gJHJlcXVlc3QtPmdldFVybCgpOwovLyA+PiBodHRwOi8vd3d3LmZvby5jb20vCmBgYAoKQWZ0ZXI6CgpgYGBwaHAKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJ2h0dHA6Ly93d3cuZm9vLmNvbScpOwplY2hvICRyZXF1ZXN0LT5nZXRVcmwoKTsKLy8gPj4gaHR0cDovL3d3dy5mb28uY29tCmBgYAoKIyMjIExlc3MgdmVyYm9zZSBCYWRSZXNwb25zZUV4Y2VwdGlvbgoKVGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGZvciBgR3V6emxlXEh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uYCBubyBsb25nZXIgY29udGFpbnMgdGhlIGZ1bGwgSFRUUCByZXF1ZXN0IGFuZApyZXNwb25zZSBpbmZvcm1hdGlvbi4gWW91IGNhbiwgaG93ZXZlciwgZ2V0IGFjY2VzcyB0byB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0IGJ5IGNhbGxpbmcgYGdldFJlcXVlc3QoKWAgb3IKYGdldFJlc3BvbnNlKClgIG9uIHRoZSBleGNlcHRpb24gb2JqZWN0LgoKIyMjIFF1ZXJ5IHBhcmFtZXRlciBhZ2dyZWdhdGlvbgoKTXVsdGktdmFsdWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5vIGxvbmdlciBhZ2dyZWdhdGVkIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24uIGBHdXp6bGVcSHR0cFxRdWVyeWAgbm93IGhhcyBhCnNldEFnZ3JlZ2F0b3IoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYEd1enpsZVxIdHRwXFF1ZXJ5QWdncmVnYXRvclxRdWVyeUFnZ3JlZ2F0b3JJbnRlcmZhY2VgIG9iamVjdC4gVGhpcyBvYmplY3QgaXMKcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBhZ2dyZWdhdGlvbiBvZiBtdWx0aS12YWx1ZWQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcyBpbnRvIGEgZmxhdHRlbmVkIGhhc2guCgoyLjggdG8gMy54Ci0tLS0tLS0tLS0KCiMjIyBHdXp6bGVcU2VydmljZVxJbnNwZWN0b3IKCkNoYW5nZSBgXEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6ZnJvbUNvbmZpZ2AgdG8gYFxHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmZyb21Db25maWdgCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxTZXJ2aWNlXEluc3BlY3RvcjsKCmNsYXNzIFlvdXJDbGllbnQgZXh0ZW5kcyBcR3V6emxlXFNlcnZpY2VcQ2xpZW50CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFjdG9yeSgkY29uZmlnID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkZGVmYXVsdCA9IGFycmF5KCk7CiAgICAgICAgJHJlcXVpcmVkID0gYXJyYXkoJ2Jhc2VfdXJsJywgJ3VzZXJuYW1lJywgJ2FwaV9rZXknKTsKICAgICAgICAkY29uZmlnID0gSW5zcGVjdG9yOjpmcm9tQ29uZmlnKCRjb25maWcsICRkZWZhdWx0LCAkcmVxdWlyZWQpOwoKICAgICAgICAkY2xpZW50ID0gbmV3IHNlbGYoCiAgICAgICAgICAgICRjb25maWctPmdldCgnYmFzZV91cmwnKSwKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCd1c2VybmFtZScpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ2FwaV9rZXknKQogICAgICAgICk7CiAgICAgICAgJGNsaWVudC0+c2V0Q29uZmlnKCRjb25maWcpOwoKICAgICAgICAkY2xpZW50LT5zZXREZXNjcmlwdGlvbihTZXJ2aWNlRGVzY3JpcHRpb246OmZhY3RvcnkoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xpZW50Lmpzb24nKSk7CgogICAgICAgIHJldHVybiAkY2xpZW50OwogICAgfQpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb247CgpjbGFzcyBZb3VyQ2xpZW50IGV4dGVuZHMgXEd1enpsZVxTZXJ2aWNlXENsaWVudAp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhY3RvcnkoJGNvbmZpZyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGRlZmF1bHQgPSBhcnJheSgpOwogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCdiYXNlX3VybCcsICd1c2VybmFtZScsICdhcGlfa2V5Jyk7CiAgICAgICAgJGNvbmZpZyA9IENvbGxlY3Rpb246OmZyb21Db25maWcoJGNvbmZpZywgJGRlZmF1bHQsICRyZXF1aXJlZCk7CgogICAgICAgICRjbGllbnQgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCdiYXNlX3VybCcpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ3VzZXJuYW1lJyksCiAgICAgICAgICAgICRjb25maWctPmdldCgnYXBpX2tleScpCiAgICAgICAgKTsKICAgICAgICAkY2xpZW50LT5zZXRDb25maWcoJGNvbmZpZyk7CgogICAgICAgICRjbGllbnQtPnNldERlc2NyaXB0aW9uKFNlcnZpY2VEZXNjcmlwdGlvbjo6ZmFjdG9yeShfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGllbnQuanNvbicpKTsKCiAgICAgICAgcmV0dXJuICRjbGllbnQ7CiAgICB9CmBgYAoKIyMjIENvbnZlcnQgWE1MIFNlcnZpY2UgRGVzY3JpcHRpb25zIHRvIEpTT04KCioqQmVmb3JlKioKCmBgYHhtbAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8Y2xpZW50PgogICAgPGNvbW1hbmRzPgogICAgICAgIDwhLS0gR3JvdXBzIC0tPgogICAgICAgIDxjb21tYW5kIG5hbWU9Imxpc3RfZ3JvdXBzIiBtZXRob2Q9IkdFVCIgdXJpPSJncm91cHMuanNvbiI+CiAgICAgICAgICAgIDxkb2M+R2V0IGEgbGlzdCBvZiBncm91cHM8L2RvYz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0ic2VhcmNoX2dyb3VwcyIgbWV0aG9kPSJHRVQiIHVyaT0nc2VhcmNoLmpzb24/cXVlcnk9Int7cXVlcnl9fSB0eXBlOmdyb3VwIic+CiAgICAgICAgICAgIDxkb2M+VXNlcyBhIHNlYXJjaCBxdWVyeSB0byBnZXQgYSBsaXN0IG9mIGdyb3VwczwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0icXVlcnkiIHR5cGU9InN0cmluZyIgcmVxdWlyZWQ9InRydWUiIC8+CiAgICAgICAgPC9jb21tYW5kPgogICAgICAgIDxjb21tYW5kIG5hbWU9ImNyZWF0ZV9ncm91cCIgbWV0aG9kPSJQT1NUIiB1cmk9Imdyb3Vwcy5qc29uIj4KICAgICAgICAgICAgPGRvYz5DcmVhdGUgYSBncm91cDwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGF0YSIgdHlwZT0iYXJyYXkiIGxvY2F0aW9uPSJib2R5IiBmaWx0ZXJzPSJqc29uX2VuY29kZSIgZG9jPSJHcm91cCBKU09OIi8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb250ZW50LVR5cGUiIGxvY2F0aW9uPSJoZWFkZXIiIHN0YXRpYz0iYXBwbGljYXRpb24vanNvbiIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJkZWxldGVfZ3JvdXAiIG1ldGhvZD0iREVMRVRFIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxkb2M+RGVsZXRlIGEgZ3JvdXAgYnkgSUQ8L2RvYz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImlkIiB0eXBlPSJpbnRlZ2VyIiByZXF1aXJlZD0idHJ1ZSIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJnZXRfZ3JvdXAiIG1ldGhvZD0iR0VUIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0idXBkYXRlX2dyb3VwIiBtZXRob2Q9IlBVVCIgdXJpPSJncm91cHMve3tpZH19Lmpzb24iPgogICAgICAgICAgICA8ZG9jPlVwZGF0ZSBhIGdyb3VwPC9kb2M+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRhdGEiIHR5cGU9ImFycmF5IiBsb2NhdGlvbj0iYm9keSIgZmlsdGVycz0ianNvbl9lbmNvZGUiIGRvYz0iR3JvdXAgSlNPTiIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udGVudC1UeXBlIiBsb2NhdGlvbj0iaGVhZGVyIiBzdGF0aWM9ImFwcGxpY2F0aW9uL2pzb24iLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICA8L2NvbW1hbmRzPgo8L2NsaWVudD4KYGBgCgoqKkFmdGVyKioKCmBgYGpzb24KewogICAgIm5hbWUiOiAgICAgICAiWmVuZGVzayBSRVNUIEFQSSB2MiIsCiAgICAiYXBpVmVyc2lvbiI6ICIyMDEyLTEyLTMxIiwKICAgICJkZXNjcmlwdGlvbiI6IlByb3ZpZGVzIGFjY2VzcyB0byBaZW5kZXNrIHZpZXdzLCBncm91cHMsIHRpY2tldHMsIHRpY2tldCBmaWVsZHMsIGFuZCB1c2VycyIsCiAgICAib3BlcmF0aW9ucyI6IHsKICAgICAgICAibGlzdF9ncm91cHMiOiAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzLmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkdldCBhIGxpc3Qgb2YgZ3JvdXBzIgogICAgICAgIH0sCiAgICAgICAgInNlYXJjaF9ncm91cHMiOnsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJHRVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgInNlYXJjaC5qc29uP3F1ZXJ5PVwie3F1ZXJ5fSB0eXBlOmdyb3VwXCIiLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVzZXMgYSBzZWFyY2ggcXVlcnkgdG8gZ2V0IGEgbGlzdCBvZiBncm91cHMiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgInF1ZXJ5Ijp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJaZW5kZXNrIFNlYXJjaCBRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNyZWF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQT1NUIiwKICAgICAgICAgICAgInVyaSI6ICAgICAgICJncm91cHMuanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiQ3JlYXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZGVsZXRlX2dyb3VwIjogewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkRFTEVURSIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiRGVsZXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImlkIjp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCB0byBkZWxldGUgYnkgSUQiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZ2V0X2dyb3VwIjogICAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiR2V0IGEgdGlja2V0IiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ewogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ICAgInVyaSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgdG8gZ2V0IGJ5IElEIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInVwZGF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQVVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy97aWR9Lmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVwZGF0ZSBhIGdyb3VwIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJ1cmkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6Ikdyb3VwIHRvIHVwZGF0ZSBieSBJRCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQp9CmBgYAoKIyMjIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbgoKQ29tbWFuZHMgYXJlIG5vdyBjYWxsZWQgT3BlcmF0aW9ucwoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcU2VydmljZVxEZXNjcmlwdGlvblxTZXJ2aWNlRGVzY3JpcHRpb247Cgokc2QgPSBuZXcgU2VydmljZURlc2NyaXB0aW9uKCk7CiRzZC0+Z2V0Q29tbWFuZHMoKTsgICAgIC8vIEByZXR1cm5zIEFwaUNvbW1hbmRJbnRlcmZhY2VbXQokc2QtPmhhc0NvbW1hbmQoJG5hbWUpOwokc2QtPmdldENvbW1hbmQoJG5hbWUpOyAvLyBAcmV0dXJucyBBcGlDb21tYW5kSW50ZXJmYWNlfG51bGwKJHNkLT5hZGRDb21tYW5kKCRjb21tYW5kKTsgLy8gQHBhcmFtIEFwaUNvbW1hbmRJbnRlcmZhY2UgJGNvbW1hbmQKYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXFNlcnZpY2VcRGVzY3JpcHRpb25cU2VydmljZURlc2NyaXB0aW9uOwoKJHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbigpOwokc2QtPmdldE9wZXJhdGlvbnMoKTsgICAgICAgICAgIC8vIEByZXR1cm5zIE9wZXJhdGlvbkludGVyZmFjZVtdCiRzZC0+aGFzT3BlcmF0aW9uKCRuYW1lKTsKJHNkLT5nZXRPcGVyYXRpb24oJG5hbWUpOyAgICAgICAvLyBAcmV0dXJucyBPcGVyYXRpb25JbnRlcmZhY2V8bnVsbAokc2QtPmFkZE9wZXJhdGlvbigkb3BlcmF0aW9uKTsgIC8vIEBwYXJhbSBPcGVyYXRpb25JbnRlcmZhY2UgJG9wZXJhdGlvbgpgYGAKCiMjIyBHdXp6bGVcQ29tbW9uXEluZmxlY3Rpb25cSW5mbGVjdG9yCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcSW5mbGVjdGlvblxJbmZsZWN0b3JgCgojIyMgR3V6emxlXEh0dHBcUGx1Z2luCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcUGx1Z2luYC4gTWFueSBvdGhlciBjaGFuZ2VzIG9jY3VyIHdpdGhpbiB0aGlzIG5hbWVzcGFjZSBhbmQgYXJlIGRldGFpbGVkIGluIHRoZWlyIG93biBzZWN0aW9ucyBiZWxvdy4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cTG9nUGx1Z2luIGFuZCBHdXp6bGVcQ29tbW9uXExvZwoKTm93IGBHdXp6bGVcUGx1Z2luXExvZ1xMb2dQbHVnaW5gIGFuZCBgR3V6emxlXExvZ2AgcmVzcGVjdGl2ZWx5LgoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXExvZ1xDbG9zdXJlTG9nQWRhcHRlcjsKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxMb2dQbHVnaW47CgovKiogQHZhciBcR3V6emxlXEh0dHBcQ2xpZW50ICovCiRjbGllbnQ7CgovLyAkdmVyYm9zaXR5IGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyBkZXNpcmVkIG1lc3NhZ2UgdmVyYm9zaXR5IGxldmVsCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJHZlcmJvc2l0eSA9IExvZ1BsdWdpbjo6TE9HX1ZFUkJPU0UpOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcTG9nXENsb3N1cmVMb2dBZGFwdGVyOwp1c2UgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyOwp1c2UgR3V6emxlXFBsdWdpblxMb2dcTG9nUGx1Z2luOwoKLyoqIEB2YXIgXEd1enpsZVxIdHRwXENsaWVudCAqLwokY2xpZW50OwoKLy8gJGZvcm1hdCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGRlc2lyZWQgbWVzc2FnZSBmb3JtYXQgLS0gQHNlZSBNZXNzYWdlRm9ybWF0dGVyCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJGZvcm1hdCA9IE1lc3NhZ2VGb3JtYXR0ZXI6OkRFQlVHX0ZPUk1BVCk7CmBgYAoKIyMjIEd1enpsZVxIdHRwXFBsdWdpblxDdXJsQXV0aFBsdWdpbgoKTm93IGBHdXp6bGVcUGx1Z2luXEN1cmxBdXRoXEN1cmxBdXRoUGx1Z2luYC4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCgpOb3cgYEd1enpsZVxQbHVnaW5cQmFja29mZlxCYWNrb2ZmUGx1Z2luYCwgYW5kIG90aGVyIGNoYW5nZXMuCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW47CgokYmFja29mZlBsdWdpbiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4oJG1heFJldHJpZXMsIGFycmF5X21lcmdlKAogICAgICAgIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbjo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKCiRjbGllbnQtPmFkZFN1YnNjcmliZXIoJGJhY2tvZmZQbHVnaW4pOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcUGx1Z2luXEJhY2tvZmZcQmFja29mZlBsdWdpbjsKdXNlIEd1enpsZVxQbHVnaW5cQmFja29mZlxIdHRwQmFja29mZlN0cmF0ZWd5OwoKLy8gVXNlIGNvbnZlbmllbnQgZmFjdG9yeSBtZXRob2QgaW5zdGVhZCAtLSBzZWUgaW1wbGVtZW50YXRpb24gZm9yIGlkZWFzIG9mIHdoYXQKLy8geW91IGNhbiBkbyB3aXRoIGNoYWluaW5nIGJhY2tvZmYgc3RyYXRlZ2llcwokYmFja29mZlBsdWdpbiA9IEJhY2tvZmZQbHVnaW46OmdldEV4cG9uZW50aWFsQmFja29mZigkbWF4UmV0cmllcywgYXJyYXlfbWVyZ2UoCiAgICAgICAgSHR0cEJhY2tvZmZTdHJhdGVneTo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKJGNsaWVudC0+YWRkU3Vic2NyaWJlcigkYmFja29mZlBsdWdpbik7CmBgYAoKIyMjIEtub3duIElzc3VlcwoKIyMjIyBbQlVHXSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIGJlaGF2aW9yIGNoYW5nZWQgdW5pbnRlbnRpb25hbGx5LgoKKFNlZSAjMjE3KSAoRml4ZWQgaW4gMDlkYWViOGM2NjZmYjQ0NDk5YTA2NDZkNjU1YThhZTM2NDU2NTc1ZSkKCkluIHZlcnNpb24gMi44IHNldHRpbmcgdGhlIGBBY2NlcHQtRW5jb2RpbmdgIGhlYWRlciB3b3VsZCBzZXQgdGhlIENVUkxPUFRfRU5DT0RJTkcgb3B0aW9uLCB3aGljaCBwZXJtaXR0ZWQgY1VSTCB0bwpwcm9wZXJseSBoYW5kbGUgZ3ppcC9kZWZsYXRlIGNvbXByZXNzZWQgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4gSW4gdmVyc2lvbnMgYWZmZWN0ZWQgYnkgdGhpcyBidWcgdGhpcyBkb2VzIG5vdCBoYXBwZW4uClNlZSBpc3N1ZSAjMjE3IGZvciBhIHdvcmthcm91bmQsIG9yIHVzZSBhIHZlcnNpb24gY29udGFpbmluZyB0aGUgZml4Lgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDSEFOR0VMT0cKCgojIyAxLjMuMSAtIDIwMTYtMTItMjAKCiMjIyBGaXhlZAoKLSBgd2FpdCgpYCBmb3JlaWduIHByb21pc2UgY29tcGF0aWJpbGl0eQoKCiMjIDEuMy4wIC0gMjAxNi0xMS0xOAoKIyMjIEFkZGVkCgotIEFkZHMgc3VwcG9ydCBmb3IgY3VzdG9tIHRhc2sgcXVldWVzLgoKIyMjIEZpeGVkCgotIEZpeGVkIGNvcm91dGluZSBwcm9taXNlIG1lbW9yeSBsZWFrLgoKCiMjIDEuMi4wIC0gMjAxNi0wNS0xOAoKIyMjIENoYW5nZWQKCi0gVXBkYXRlIHRvIG5vdyBjYXRjaCBgXFRocm93YWJsZWAgb24gUEhQIDcrCgoKIyMgMS4xLjAgLSAyMDE2LTAzLTA3CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGUgRWFjaFByb21pc2UgdG8gcHJldmVudCByZWN1cnJpbmcgb24gYSBpdGVyYXRvciB3aGVuIGFkdmFuY2luZywgYXMgdGhpcwogIGNvdWxkIHRyaWdnZXIgZmF0YWwgZ2VuZXJhdG9yIGVycm9ycy4KLSBVcGRhdGUgUHJvbWlzZSB0byBhbGxvdyByZWN1cnNpdmUgd2FpdGluZyB3aXRob3V0IHVud3JhcHBpbmcgZXhjZXB0aW9ucy4KCgojIyAxLjAuMyAtIDIwMTUtMTAtMTUKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZSBFYWNoUHJvbWlzZSB0byBpbW1lZGlhdGVseSByZXNvbHZlIHdoZW4gdGhlIHVuZGVybHlpbmcgcHJvbWlzZSBpdGVyYXRvcgogIGlzIGVtcHR5LiBQcmV2aW91c2x5LCBzdWNoIGEgcHJvbWlzZSB3b3VsZCB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBpdHMgYHdhaXRgCiAgZnVuY3Rpb24gd2FzIGNhbGxlZC4KCgojIyAxLjAuMiAtIDIwMTUtMDUtMTUKCiMjIyBDaGFuZ2VkCgotIENvbmRpdGlvbmFsbHkgcmVxdWlyZSBmdW5jdGlvbnMucGhwLgoKCiMjIDEuMC4xIC0gMjAxNS0wNi0yNAoKIyMjIENoYW5nZWQKCi0gVXBkYXRpbmcgRWFjaFByb21pc2UgdG8gY2FsbCBuZXh0IG9uIHRoZSB1bmRlcmx5aW5nIHByb21pc2UgaXRlcmF0b3IgYXMgbGF0ZQogIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aGF0IGdlbmVyYXRvcnMgdGhhdCBnZW5lcmF0ZSBuZXcgcmVxdWVzdHMgYmFzZWQgb24KICBjYWxsYmFja3MgYXJlIG5vdCBpdGVyYXRlZCB1bnRpbCBhZnRlciBjYWxsYmFja3MgYXJlIGludm9rZWQuCgoKIyMgMS4wLjAgLSAyMDE1LTA1LTEyCgotIEluaXRpYWwgcmVsZWFzZQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgImtleXdvcmRzIjogWyJwcm9taXNlIl0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49NS41LjAiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiXQogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJ0ZXN0IjogInZlbmRvci9iaW4vcGhwdW5pdCIsCiAgICAgICAgInRlc3QtY2kiOiAidmVuZG9yL2Jpbi9waHB1bml0IC0tY292ZXJhZ2UtdGV4dCIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS40LWRldiIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1LTIwMTYgTWljaGFlbCBEb3dsaW5nLCBodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/Makefile</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YWxsOiBjbGVhbiB0ZXN0Cgp0ZXN0OgoJdmVuZG9yL2Jpbi9waHB1bml0Cgpjb3ZlcmFnZToKCXZlbmRvci9iaW4vcGhwdW5pdCAtLWNvdmVyYWdlLWh0bWw9YXJ0aWZhY3RzL2NvdmVyYWdlCgp2aWV3LWNvdmVyYWdlOgoJb3BlbiBhcnRpZmFjdHMvY292ZXJhZ2UvaW5kZXguaHRtbAoKY2xlYW46CglybSAtcmYgYXJ0aWZhY3RzLyoK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBHdXp6bGUgUHJvbWlzZXMKCltQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwcm9taXNlCmNoYWluaW5nIGFuZCByZXNvbHV0aW9uIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nCndoaWxlIGtlZXBpbmcgdGhlIHN0YWNrIHNpemUgY29uc3RhbnQuIFJlYWQgW3RoaXMgYmxvZyBwb3N0XShodHRwczovL2Jsb2cuZG9tZW5pYy5tZS95b3VyZS1taXNzaW5nLXRoZS1wb2ludC1vZi1wcm9taXNlcy8pCmZvciBhIGdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIHByb21pc2VzLgoKLSBbRmVhdHVyZXNdKCNmZWF0dXJlcykKLSBbUXVpY2sgc3RhcnRdKCNxdWljay1zdGFydCkKLSBbU3luY2hyb25vdXMgd2FpdF0oI3N5bmNocm9ub3VzLXdhaXQpCi0gW0NhbmNlbGxhdGlvbl0oI2NhbmNlbGxhdGlvbikKLSBbQVBJXSgjYXBpKQogIC0gW1Byb21pc2VdKCNwcm9taXNlKQogIC0gW0Z1bGZpbGxlZFByb21pc2VdKCNmdWxmaWxsZWRwcm9taXNlKQogIC0gW1JlamVjdGVkUHJvbWlzZV0oI3JlamVjdGVkcHJvbWlzZSkKLSBbUHJvbWlzZSBpbnRlcm9wXSgjcHJvbWlzZS1pbnRlcm9wKQotIFtJbXBsZW1lbnRhdGlvbiBub3Rlc10oI2ltcGxlbWVudGF0aW9uLW5vdGVzKQoKCiMgRmVhdHVyZXMKCi0gW1Byb21pc2VzL0ErXShodHRwczovL3Byb21pc2VzYXBsdXMuY29tLykgaW1wbGVtZW50YXRpb24uCi0gUHJvbWlzZSByZXNvbHV0aW9uIGFuZCBjaGFpbmluZyBpcyBoYW5kbGVkIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IKICAiaW5maW5pdGUiIHByb21pc2UgY2hhaW5pbmcuCi0gUHJvbWlzZXMgaGF2ZSBhIHN5bmNocm9ub3VzIGB3YWl0YCBtZXRob2QuCi0gUHJvbWlzZXMgY2FuIGJlIGNhbmNlbGxlZC4KLSBXb3JrcyB3aXRoIGFueSBvYmplY3QgdGhhdCBoYXMgYSBgdGhlbmAgZnVuY3Rpb24uCi0gQyMgc3R5bGUgYXN5bmMvYXdhaXQgY29yb3V0aW5lIHByb21pc2VzIHVzaW5nCiAgYEd1enpsZUh0dHBcUHJvbWlzZVxjb3JvdXRpbmUoKWAuCgoKIyBRdWljayBzdGFydAoKQSAqcHJvbWlzZSogcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZQpwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaApyZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24Kd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCgoKIyMgQ2FsbGJhY2tzCgpDYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYHRoZW5gIG1ldGhvZCBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwgCmAkb25GdWxmaWxsZWRgIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGAkb25SZWplY3RlZGAgZnVuY3Rpb24uCgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4oCiAgICAvLyAkb25GdWxmaWxsZWQKICAgIGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICdUaGUgcHJvbWlzZSB3YXMgZnVsZmlsbGVkLic7CiAgICB9LAogICAgLy8gJG9uUmVqZWN0ZWQKICAgIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICAgICAgZWNobyAnVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLic7CiAgICB9Cik7CmBgYAoKKlJlc29sdmluZyogYSBwcm9taXNlIG1lYW5zIHRoYXQgeW91IGVpdGhlciBmdWxmaWxsIGEgcHJvbWlzZSB3aXRoIGEgKnZhbHVlKiBvcgpyZWplY3QgYSBwcm9taXNlIHdpdGggYSAqcmVhc29uKi4gUmVzb2x2aW5nIGEgcHJvbWlzZXMgdHJpZ2dlcnMgY2FsbGJhY2tzCnJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvbWlzZXMncyBgdGhlbmAgbWV0aG9kLiBUaGVzZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZApvbmx5IG9uY2UgYW5kIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCgoKIyMgUmVzb2x2aW5nIGEgcHJvbWlzZQoKUHJvbWlzZXMgYXJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgYHJlc29sdmUoJHZhbHVlKWAgbWV0aG9kLiBSZXNvbHZpbmcgYSBwcm9taXNlCndpdGggYW55IHZhbHVlIG90aGVyIHRoYW4gYSBgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZWAgd2lsbCB0cmlnZ2VyCmFsbCBvZiB0aGUgb25GdWxmaWxsZWQgY2FsbGJhY2tzIChyZXNvbHZpbmcgYSBwcm9taXNlIHdpdGggYSByZWplY3RlZCBwcm9taXNlCndpbGwgcmVqZWN0IHRoZSBwcm9taXNlIGFuZCB0cmlnZ2VyIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcykuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAvLyBSZXR1cm4gYSB2YWx1ZSBhbmQgZG9uJ3QgYnJlYWsgdGhlIGNoYWluCiAgICAgICAgcmV0dXJuICJIZWxsbywgIiAuICR2YWx1ZTsKICAgIH0pCiAgICAvLyBUaGlzIHRoZW4gaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHRoZW4gYW5kIHJlY2VpdmVzIHRoZSB2YWx1ZQogICAgLy8gcmV0dXJuZWQgZnJvbSB0aGUgZmlyc3QgdGhlbi4KICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgZWNobyAkdmFsdWU7CiAgICB9KTsKCi8vIFJlc29sdmluZyB0aGUgcHJvbWlzZSB0cmlnZ2VycyB0aGUgJG9uRnVsZmlsbGVkIGNhbGxiYWNrcyBhbmQgb3V0cHV0cwovLyAiSGVsbG8sIHJlYWRlciIuCiRwcm9taXNlLT5yZXNvbHZlKCdyZWFkZXIuJyk7CmBgYAoKCiMjIFByb21pc2UgZm9yd2FyZGluZwoKUHJvbWlzZXMgY2FuIGJlIGNoYWluZWQgb25lIGFmdGVyIHRoZSBvdGhlci4gRWFjaCB0aGVuIGluIHRoZSBjaGFpbiBpcyBhIG5ldwpwcm9taXNlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGEgcHJvbWlzZSBpcyB3aGF0J3MgZm9yd2FyZGVkIHRvIHRoZSBuZXh0CnByb21pc2UgaW4gdGhlIGNoYWluLiBSZXR1cm5pbmcgYSBwcm9taXNlIGluIGEgYHRoZW5gIGNhbGxiYWNrIHdpbGwgY2F1c2UgdGhlCnN1YnNlcXVlbnQgcHJvbWlzZXMgaW4gdGhlIGNoYWluIHRvIG9ubHkgYmUgZnVsZmlsbGVkIHdoZW4gdGhlIHJldHVybmVkIHByb21pc2UKaGFzIGJlZW4gZnVsZmlsbGVkLiBUaGUgbmV4dCBwcm9taXNlIGluIHRoZSBjaGFpbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUKcmVzb2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2UuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokbmV4dFByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwoKJHByb21pc2UKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRuZXh0UHJvbWlzZSkgewogICAgICAgIGVjaG8gJHZhbHVlOwogICAgICAgIHJldHVybiAkbmV4dFByb21pc2U7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICR2YWx1ZTsKICAgIH0pOwoKLy8gVHJpZ2dlcnMgdGhlIGZpcnN0IGNhbGxiYWNrIGFuZCBvdXRwdXRzICJBIgokcHJvbWlzZS0+cmVzb2x2ZSgnQScpOwovLyBUcmlnZ2VycyB0aGUgc2Vjb25kIGNhbGxiYWNrIGFuZCBvdXRwdXRzICJCIgokbmV4dFByb21pc2UtPnJlc29sdmUoJ0InKTsKYGBgCgojIyBQcm9taXNlIHJlamVjdGlvbgoKV2hlbiBhIHByb21pc2UgaXMgcmVqZWN0ZWQsIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIHRoZQpyZWplY3Rpb24gcmVhc29uLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIGVjaG8gJHJlYXNvbjsKfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKLy8gT3V0cHV0cyAiRXJyb3IhIgpgYGAKCiMjIFJlamVjdGlvbiBmb3J3YXJkaW5nCgpJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGFuIGAkb25SZWplY3RlZGAgY2FsbGJhY2ssIHN1YnNlcXVlbnQKYCRvblJlamVjdGVkYCBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aCB0aGUgdGhyb3duIGV4Y2VwdGlvbiBhcyB0aGUgcmVhc29uLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCRyZWFzb24pOwp9KS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgYXNzZXJ0KCRyZWFzb24tPmdldE1lc3NhZ2UoKSA9PT0gJ0Vycm9yIScpOwp9KTsKCiRwcm9taXNlLT5yZWplY3QoJ0Vycm9yIScpOwpgYGAKCllvdSBjYW4gYWxzbyBmb3J3YXJkIGEgcmVqZWN0aW9uIGRvd24gdGhlIHByb21pc2UgY2hhaW4gYnkgcmV0dXJuaW5nIGEKYEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2VgIGluIGVpdGhlciBhbiBgJG9uRnVsZmlsbGVkYCBvcgpgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKG51bGwsIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICByZXR1cm4gbmV3IFJlamVjdGVkUHJvbWlzZSgkcmVhc29uKTsKfSktPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIGFzc2VydCgkcmVhc29uID09PSAnRXJyb3IhJyk7Cn0pOwoKJHByb21pc2UtPnJlamVjdCgnRXJyb3IhJyk7CmBgYAoKSWYgYW4gZXhjZXB0aW9uIGlzIG5vdCB0aHJvd24gaW4gYSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrIGFuZCB0aGUgY2FsbGJhY2sKZG9lcyBub3QgcmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZSwgZG93bnN0cmVhbSBgJG9uRnVsZmlsbGVkYCBjYWxsYmFja3MgYXJlCmludm9rZWQgdXNpbmcgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGAkb25SZWplY3RlZGAgY2FsbGJhY2suCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UKICAgIC0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgICAgIHJldHVybiAiSXQncyBvayI7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBhc3NlcnQoJHZhbHVlID09PSAiSXQncyBvayIpOwogICAgfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKYGBgCgojIFN5bmNocm9ub3VzIHdhaXQKCllvdSBjYW4gc3luY2hyb25vdXNseSBmb3JjZSBwcm9taXNlcyB0byBjb21wbGV0ZSB1c2luZyBhIHByb21pc2UncyBgd2FpdGAKbWV0aG9kLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSwgeW91IGNhbiBwcm92aWRlIGEgd2FpdCBmdW5jdGlvbiB0aGF0IGlzIHVzZWQKdG8gc3luY2hyb25vdXNseSBmb3JjZSBhIHByb21pc2UgdG8gY29tcGxldGUuIFdoZW4gYSB3YWl0IGZ1bmN0aW9uIGlzIGludm9rZWQKaXQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIHZhbHVlIHRvIHRoZSBwcm9taXNlIG9yIHJlamVjdCB0aGUgcHJvbWlzZS4gSWYgdGhlCndhaXQgZnVuY3Rpb24gZG9lcyBub3QgZGVsaXZlciBhIHZhbHVlLCB0aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoZSB3YWl0CmZ1bmN0aW9uIHByb3ZpZGVkIHRvIGEgcHJvbWlzZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdoZW4gdGhlIGB3YWl0YCBmdW5jdGlvbgpvZiB0aGUgcHJvbWlzZSBpcyBjYWxsZWQuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwp9KTsKCi8vIENhbGxpbmcgd2FpdCB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHByb21pc2UuCmVjaG8gJHByb21pc2UtPndhaXQoKTsgLy8gb3V0cHV0cyAiZm9vIgpgYGAKCklmIGFuIGV4Y2VwdGlvbiBpcyBlbmNvdW50ZXJlZCB3aGlsZSBpbnZva2luZyB0aGUgd2FpdCBmdW5jdGlvbiBvZiBhIHByb21pc2UsCnRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24uCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ2ZvbycpOwp9KTsKCiRwcm9taXNlLT53YWl0KCk7IC8vIHRocm93cyB0aGUgZXhjZXB0aW9uLgpgYGAKCkNhbGxpbmcgYHdhaXRgIG9uIGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuIGZ1bGZpbGxlZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YWl0CmZ1bmN0aW9uLiBJdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHByZXZpb3VzbHkgcmVzb2x2ZWQgdmFsdWUuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB7IGRpZSgndGhpcyBpcyBub3QgY2FsbGVkIScpOyB9KTsKJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwplY2hvICRwcm9taXNlLT53YWl0KCk7IC8vIG91dHB1dHMgImZvbyIKYGBgCgpDYWxsaW5nIGB3YWl0YCBvbiBhIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4gSWYKdGhlIHJlamVjdGlvbiByZWFzb24gaXMgYW4gaW5zdGFuY2Ugb2YgYFxFeGNlcHRpb25gIHRoZSByZWFzb24gaXMgdGhyb3duLgpPdGhlcndpc2UsIGEgYEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3Rpb25FeGNlcHRpb25gIGlzIHRocm93biBhbmQgdGhlIHJlYXNvbgpjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgYGdldFJlYXNvbmAgbWV0aG9kIG9mIHRoZSBleGNlcHRpb24uCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+cmVqZWN0KCdmb28nKTsKJHByb21pc2UtPndhaXQoKTsKYGBgCgo+IFBIUCBGYXRhbCBlcnJvcjogIFVuY2F1Z2h0IGV4Y2VwdGlvbiAnR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGlvbkV4Y2VwdGlvbicgd2l0aCBtZXNzYWdlICdUaGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZTogZm9vJwoKCiMjIFVud3JhcHBpbmcgYSBwcm9taXNlCgpXaGVuIHN5bmNocm9ub3VzbHkgd2FpdGluZyBvbiBhIHByb21pc2UsIHlvdSBhcmUgam9pbmluZyB0aGUgc3RhdGUgb2YgdGhlCnByb21pc2UgaW50byB0aGUgY3VycmVudCBzdGF0ZSBvZiBleGVjdXRpb24gKGkuZS4sIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCnByb21pc2UgaWYgaXQgd2FzIGZ1bGZpbGxlZCBvciB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgd2FzIHJlamVjdGVkKS4gVGhpcyBpcwpjYWxsZWQgInVud3JhcHBpbmciIHRoZSBwcm9taXNlLiBXYWl0aW5nIG9uIGEgcHJvbWlzZSB3aWxsIGJ5IGRlZmF1bHQgdW53cmFwCnRoZSBwcm9taXNlIHN0YXRlLgoKWW91IGNhbiBmb3JjZSBhIHByb21pc2UgdG8gcmVzb2x2ZSBhbmQgKm5vdCogdW53cmFwIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZQpieSBwYXNzaW5nIGBmYWxzZWAgdG8gdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBgd2FpdGAgZnVuY3Rpb246CgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+cmVqZWN0KCdmb28nKTsKLy8gVGhpcyB3aWxsIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uIEl0IHNpbXBseSBlbnN1cmVzIHRoZSBwcm9taXNlIGhhcwovLyBiZWVuIHJlc29sdmVkLgokcHJvbWlzZS0+d2FpdChmYWxzZSk7CmBgYAoKV2hlbiB1bndyYXBwaW5nIGEgcHJvbWlzZSwgdGhlIHJlc29sdmVkIHZhbHVlIG9mIHRoZSBwcm9taXNlIHdpbGwgYmUgd2FpdGVkCnVwb24gdW50aWwgdGhlIHVud3JhcHBlZCB2YWx1ZSBpcyBub3QgYSBwcm9taXNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHJlc29sdmUKcHJvbWlzZSBBIHdpdGggYSBwcm9taXNlIEIgYW5kIHVud3JhcCBwcm9taXNlIEEsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUKd2FpdCBmdW5jdGlvbiB3aWxsIGJlIHRoZSB2YWx1ZSBkZWxpdmVyZWQgdG8gcHJvbWlzZSBCLgoKKipOb3RlKio6IHdoZW4geW91IGRvIG5vdCB1bndyYXAgdGhlIHByb21pc2UsIG5vIHZhbHVlIGlzIHJldHVybmVkLgoKCiMgQ2FuY2VsbGF0aW9uCgpZb3UgY2FuIGNhbmNlbCBhIHByb21pc2UgdGhhdCBoYXMgbm90IHlldCBiZWVuIGZ1bGZpbGxlZCB1c2luZyB0aGUgYGNhbmNlbCgpYAptZXRob2Qgb2YgYSBwcm9taXNlLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwKY2FuY2VsIGZ1bmN0aW9uIHRoYXQgd2hlbiBpbnZva2VkIGNhbmNlbHMgdGhlIGFjdGlvbiBvZiBjb21wdXRpbmcgYSByZXNvbHV0aW9uCm9mIHRoZSBwcm9taXNlLgoKCiMgQVBJCgoKIyMgUHJvbWlzZQoKV2hlbiBjcmVhdGluZyBhIHByb21pc2Ugb2JqZWN0LCB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgYCR3YWl0Rm5gIGFuZApgJGNhbmNlbEZuYC4gYCR3YWl0Rm5gIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIHdpdGggbm8gYXJndW1lbnRzIGFuZCBpcwpleHBlY3RlZCB0byByZXNvbHZlIHRoZSBwcm9taXNlLiBgJGNhbmNlbEZuYCBpcyBhIGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzCnRoYXQgaXMgZXhwZWN0ZWQgdG8gY2FuY2VsIHRoZSBjb21wdXRhdGlvbiBvZiBhIHByb21pc2UuIEl0IGlzIGludm9rZWQgd2hlbiB0aGUKYGNhbmNlbCgpYCBtZXRob2Qgb2YgYSBwcm9taXNlIGlzIGNhbGxlZC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKAogICAgZnVuY3Rpb24gKCkgdXNlICgmJHByb21pc2UpIHsKICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgnd2FpdGVkJyk7CiAgICB9LAogICAgZnVuY3Rpb24gKCkgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB0aGF0IHdpbGwgY2FuY2VsIHRoZSBwcm9taXNlIGNvbXB1dGF0aW9uIChlLmcuLCBjbG9zZQogICAgICAgIC8vIGEgc29ja2V0LCBjYW5jZWwgYSBkYXRhYmFzZSBxdWVyeSwgZXRjLi4uKQogICAgfQopOwoKYXNzZXJ0KCd3YWl0ZWQnID09PSAkcHJvbWlzZS0+d2FpdCgpKTsKYGBgCgpBIHByb21pc2UgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKCi0gYHRoZW4oY2FsbGFibGUgJG9uRnVsZmlsbGVkLCBjYWxsYWJsZSAkb25SZWplY3RlZCkgOiBQcm9taXNlSW50ZXJmYWNlYAogIAogIEFwcGVuZHMgZnVsZmlsbG1lbnQgYW5kIHJlamVjdGlvbiBoYW5kbGVycyB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGVkIGhhbmRsZXIuCgotIGBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpIDogUHJvbWlzZUludGVyZmFjZWAKICAKICBBcHBlbmRzIGEgcmVqZWN0aW9uIGhhbmRsZXIgY2FsbGJhY2sgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGlmIGl0IGlzIGNhbGxlZCwgb3IgdG8gaXRzIG9yaWdpbmFsIGZ1bGZpbGxtZW50IHZhbHVlIGlmIHRoZSBwcm9taXNlIGlzIGluc3RlYWQgZnVsZmlsbGVkLgoKLSBgd2FpdCgkdW53cmFwID0gdHJ1ZSkgOiBtaXhlZGAKCiAgU3luY2hyb25vdXNseSB3YWl0cyBvbiB0aGUgcHJvbWlzZSB0byBjb21wbGV0ZS4KICAKICBgJHVud3JhcGAgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mIHRoZSBwcm9taXNlIGlzIHJldHVybmVkIGZvciBhCiAgZnVsZmlsbGVkIHByb21pc2Ugb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KICBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdC4KCi0gYGNhbmNlbCgpYAoKICBBdHRlbXB0cyB0byBjYW5jZWwgdGhlIHByb21pc2UgaWYgcG9zc2libGUuIFRoZSBwcm9taXNlIGJlaW5nIGNhbmNlbGxlZCBhbmQKICB0aGUgcGFyZW50IG1vc3QgYW5jZXN0b3IgdGhhdCBoYXMgbm90IHlldCBiZWVuIHJlc29sdmVkIHdpbGwgYWxzbyBiZQogIGNhbmNlbGxlZC4gQW55IHByb21pc2VzIHdhaXRpbmcgb24gdGhlIGNhbmNlbGxlZCBwcm9taXNlIHRvIHJlc29sdmUgd2lsbCBhbHNvCiAgYmUgY2FuY2VsbGVkLgoKLSBgZ2V0U3RhdGUoKSA6IHN0cmluZ2AKCiAgUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHByb21pc2UuIE9uZSBvZiBgcGVuZGluZ2AsIGBmdWxmaWxsZWRgLCBvcgogIGByZWplY3RlZGAuCgotIGByZXNvbHZlKCR2YWx1ZSlgCgogIEZ1bGZpbGxzIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIGAkdmFsdWVgLgoKLSBgcmVqZWN0KCRyZWFzb24pYAoKICBSZWplY3RzIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIGAkcmVhc29uYC4KCgojIyBGdWxmaWxsZWRQcm9taXNlCgpBIGZ1bGZpbGxlZCBwcm9taXNlIGNhbiBiZSBjcmVhdGVkIHRvIHJlcHJlc2VudCBhIHByb21pc2UgdGhhdCBoYXMgYmVlbgpmdWxmaWxsZWQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgRnVsZmlsbGVkUHJvbWlzZSgndmFsdWUnKTsKCi8vIEZ1bGZpbGxlZCBjYWxsYmFja3MgYXJlIGltbWVkaWF0ZWx5IGludm9rZWQuCiRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgIGVjaG8gJHZhbHVlOwp9KTsKYGBgCgoKIyMgUmVqZWN0ZWRQcm9taXNlCgpBIHJlamVjdGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCnJlamVjdGVkLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUmVqZWN0ZWRQcm9taXNlKCdFcnJvcicpOwoKLy8gUmVqZWN0ZWQgY2FsbGJhY2tzIGFyZSBpbW1lZGlhdGVseSBpbnZva2VkLgokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgZWNobyAkcmVhc29uOwp9KTsKYGBgCgoKIyBQcm9taXNlIGludGVyb3AKClRoaXMgbGlicmFyeSB3b3JrcyB3aXRoIGZvcmVpZ24gcHJvbWlzZXMgdGhhdCBoYXZlIGEgYHRoZW5gIG1ldGhvZC4gVGhpcyBtZWFucwp5b3UgY2FuIHVzZSBHdXp6bGUgcHJvbWlzZXMgd2l0aCBbUmVhY3QgcHJvbWlzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHBocC9wcm9taXNlKQpmb3IgZXhhbXBsZS4gV2hlbiBhIGZvcmVpZ24gcHJvbWlzZSBpcyByZXR1cm5lZCBpbnNpZGUgb2YgYSB0aGVuIG1ldGhvZApjYWxsYmFjaywgcHJvbWlzZSByZXNvbHV0aW9uIHdpbGwgb2NjdXIgcmVjdXJzaXZlbHkuCgpgYGBwaHAKLy8gQ3JlYXRlIGEgUmVhY3QgcHJvbWlzZQokZGVmZXJyZWQgPSBuZXcgUmVhY3RcUHJvbWlzZVxEZWZlcnJlZCgpOwokcmVhY3RQcm9taXNlID0gJGRlZmVycmVkLT5wcm9taXNlKCk7CgovLyBDcmVhdGUgYSBHdXp6bGUgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUmVhY3QgcHJvbWlzZS4KJGd1enpsZVByb21pc2UgPSBuZXcgXEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlKCk7CiRndXp6bGVQcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlYWN0UHJvbWlzZSkgewogICAgLy8gRG8gc29tZXRoaW5nIHNvbWV0aGluZyB3aXRoIHRoZSB2YWx1ZS4uLgogICAgLy8gUmV0dXJuIHRoZSBSZWFjdCBwcm9taXNlCiAgICByZXR1cm4gJHJlYWN0UHJvbWlzZTsKfSk7CmBgYAoKUGxlYXNlIG5vdGUgdGhhdCB3YWl0IGFuZCBjYW5jZWwgY2hhaW5pbmcgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHdoZW4gZm9yd2FyZGluZwphIGZvcmVpZ24gcHJvbWlzZS4gWW91IHdpbGwgbmVlZCB0byB3cmFwIGEgdGhpcmQtcGFydHkgcHJvbWlzZSB3aXRoIGEgR3V6emxlCnByb21pc2UgaW4gb3JkZXIgdG8gdXRpbGl6ZSB3YWl0IGFuZCBjYW5jZWwgZnVuY3Rpb25zIHdpdGggZm9yZWlnbiBwcm9taXNlcy4KCgojIyBFdmVudCBMb29wIEludGVncmF0aW9uCgpJbiBvcmRlciB0byBrZWVwIHRoZSBzdGFjayBzaXplIGNvbnN0YW50LCBHdXp6bGUgcHJvbWlzZXMgYXJlIHJlc29sdmVkCmFzeW5jaHJvbm91c2x5IHVzaW5nIGEgdGFzayBxdWV1ZS4gV2hlbiB3YWl0aW5nIG9uIHByb21pc2VzIHN5bmNocm9ub3VzbHksIHRoZQp0YXNrIHF1ZXVlIHdpbGwgYmUgYXV0b21hdGljYWxseSBydW4gdG8gZW5zdXJlIHRoYXQgdGhlIGJsb2NraW5nIHByb21pc2UgYW5kCmFueSBmb3J3YXJkZWQgcHJvbWlzZXMgYXJlIHJlc29sdmVkLiBXaGVuIHVzaW5nIHByb21pc2VzIGFzeW5jaHJvbm91c2x5IGluIGFuCmV2ZW50IGxvb3AsIHlvdSB3aWxsIG5lZWQgdG8gcnVuIHRoZSB0YXNrIHF1ZXVlIG9uIGVhY2ggdGljayBvZiB0aGUgbG9vcC4gSWYKeW91IGRvIG5vdCBydW4gdGhlIHRhc2sgcXVldWUsIHRoZW4gcHJvbWlzZXMgd2lsbCBub3QgYmUgcmVzb2x2ZWQuCgpZb3UgY2FuIHJ1biB0aGUgdGFzayBxdWV1ZSB1c2luZyB0aGUgYHJ1bigpYCBtZXRob2Qgb2YgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlCmluc3RhbmNlLgoKYGBgcGhwCi8vIEdldCB0aGUgZ2xvYmFsIHRhc2sgcXVldWUKJHF1ZXVlID0gXEd1enpsZUh0dHBcUHJvbWlzZVxxdWV1ZSgpOwokcXVldWUtPnJ1bigpOwpgYGAKCkZvciBleGFtcGxlLCB5b3UgY291bGQgdXNlIEd1enpsZSBwcm9taXNlcyB3aXRoIFJlYWN0IHVzaW5nIGEgcGVyaW9kaWMgdGltZXI6CgpgYGBwaHAKJGxvb3AgPSBSZWFjdFxFdmVudExvb3BcRmFjdG9yeTo6Y3JlYXRlKCk7CiRsb29wLT5hZGRQZXJpb2RpY1RpbWVyKDAsIFskcXVldWUsICdydW4nXSk7CmBgYAoKKlRPRE8qOiBQZXJoYXBzIGFkZGluZyBhIGBmdXR1cmVUaWNrKClgIG9uIGVhY2ggdGljayB3b3VsZCBiZSBmYXN0ZXI/CgoKIyBJbXBsZW1lbnRhdGlvbiBub3RlcwoKCiMjIFByb21pc2UgcmVzb2x1dGlvbiBhbmQgY2hhaW5pbmcgaXMgaGFuZGxlZCBpdGVyYXRpdmVseQoKQnkgc2h1ZmZsaW5nIHBlbmRpbmcgaGFuZGxlcnMgZnJvbSBvbmUgb3duZXIgdG8gYW5vdGhlciwgcHJvbWlzZXMgYXJlCnJlc29sdmVkIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiB0aGVuIGNoYWluaW5nLgoKYGBgcGhwCjw/cGhwCnJlcXVpcmUgJ3ZlbmRvci9hdXRvbG9hZC5waHAnOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHBhcmVudCA9IG5ldyBQcm9taXNlKCk7CiRwID0gJHBhcmVudDsKCmZvciAoJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspIHsKICAgICRwID0gJHAtPnRoZW4oZnVuY3Rpb24gKCR2KSB7CiAgICAgICAgLy8gVGhlIHN0YWNrIHNpemUgcmVtYWlucyBjb25zdGFudCAoYSBnb29kIHRoaW5nKQogICAgICAgIGVjaG8geGRlYnVnX2dldF9zdGFja19kZXB0aCgpIC4gJywgJzsKICAgICAgICByZXR1cm4gJHYgKyAxOwogICAgfSk7Cn0KCiRwYXJlbnQtPnJlc29sdmUoMCk7CnZhcl9kdW1wKCRwLT53YWl0KCkpOyAvLyBpbnQoMTAwMCkKCmBgYAoKV2hlbiBhIHByb21pc2UgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkIHdpdGggYSBub24tcHJvbWlzZSB2YWx1ZSwgdGhlIHByb21pc2UKdGhlbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGhhbmRsZXJzIG9mIGVhY2ggY2hpbGQgcHJvbWlzZSBhbmQgZGVsaXZlcnMgdmFsdWVzCmRvd24gdGhlIGNoYWluIHdpdGhvdXQgdXNpbmcgcmVjdXJzaW9uLgoKV2hlbiBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBhbm90aGVyIHByb21pc2UsIHRoZSBvcmlnaW5hbCBwcm9taXNlIHRyYW5zZmVycwphbGwgb2YgaXRzIHBlbmRpbmcgaGFuZGxlcnMgdG8gdGhlIG5ldyBwcm9taXNlLiBXaGVuIHRoZSBuZXcgcHJvbWlzZSBpcwpldmVudHVhbGx5IHJlc29sdmVkLCBhbGwgb2YgdGhlIHBlbmRpbmcgaGFuZGxlcnMgYXJlIGRlbGl2ZXJlZCB0aGUgZm9yd2FyZGVkCnZhbHVlLgoKCiMjIEEgcHJvbWlzZSBpcyB0aGUgZGVmZXJyZWQuCgpTb21lIHByb21pc2UgbGlicmFyaWVzIGltcGxlbWVudCBwcm9taXNlcyB1c2luZyBhIGRlZmVycmVkIG9iamVjdCB0byByZXByZXNlbnQKYSBjb21wdXRhdGlvbiBhbmQgYSBwcm9taXNlIG9iamVjdCB0byByZXByZXNlbnQgdGhlIGRlbGl2ZXJ5IG9mIHRoZSByZXN1bHQgb2YKdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIGEgbmljZSBzZXBhcmF0aW9uIG9mIGNvbXB1dGF0aW9uIGFuZCBkZWxpdmVyeSBiZWNhdXNlCmNvbnN1bWVycyBvZiB0aGUgcHJvbWlzZSBjYW5ub3QgbW9kaWZ5IHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgZXZlbnR1YWxseQpkZWxpdmVyZWQuCgpPbmUgc2lkZSBlZmZlY3Qgb2YgYmVpbmcgYWJsZSB0byBpbXBsZW1lbnQgcHJvbWlzZSByZXNvbHV0aW9uIGFuZCBjaGFpbmluZwppdGVyYXRpdmVseSBpcyB0aGF0IHlvdSBuZWVkIHRvIGJlIGFibGUgZm9yIG9uZSBwcm9taXNlIHRvIHJlYWNoIGludG8gdGhlIHN0YXRlCm9mIGFub3RoZXIgcHJvbWlzZSB0byBzaHVmZmxlIGFyb3VuZCBvd25lcnNoaXAgb2YgaGFuZGxlcnMuIEluIG9yZGVyIHRvIGFjaGlldmUKdGhpcyB3aXRob3V0IG1ha2luZyB0aGUgaGFuZGxlcnMgb2YgYSBwcm9taXNlIHB1YmxpY2x5IG11dGFibGUsIGEgcHJvbWlzZSBpcwphbHNvIHRoZSBkZWZlcnJlZCB2YWx1ZSwgYWxsb3dpbmcgcHJvbWlzZXMgb2YgdGhlIHNhbWUgcGFyZW50IGNsYXNzIHRvIHJlYWNoCmludG8gYW5kIG1vZGlmeSB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIG9mIHByb21pc2VzIG9mIHRoZSBzYW1lIHR5cGUuIFdoaWxlIHRoaXMKZG9lcyBhbGxvdyBjb25zdW1lcnMgb2YgdGhlIHZhbHVlIHRvIG1vZGlmeSB0aGUgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gb2YgdGhlCmRlZmVycmVkLCBpdCBpcyBhIHNtYWxsIHByaWNlIHRvIHBheSBmb3Iga2VlcGluZyB0aGUgc3RhY2sgc2l6ZSBjb25zdGFudC4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsgZWNobyAkdmFsdWU7IH0pOwovLyBUaGUgcHJvbWlzZSBpcyB0aGUgZGVmZXJyZWQgdmFsdWUsIHNvIHlvdSBjYW4gZGVsaXZlciBhIHZhbHVlIHRvIGl0LgokcHJvbWlzZS0+cmVzb2x2ZSgnZm9vJyk7Ci8vIHByaW50cyAiZm9vIgpgYGAK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/AggregateException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gdG9vIG1hbnkgZXJyb3JzIG9jY3VyIGluIHRoZSBzb21lKCkgb3IgYW55KCkgbWV0aG9kcy4KICovCmNsYXNzIEFnZ3JlZ2F0ZUV4Y2VwdGlvbiBleHRlbmRzIFJlamVjdGlvbkV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZywgYXJyYXkgJHJlYXNvbnMpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgKICAgICAgICAgICAgJHJlYXNvbnMsCiAgICAgICAgICAgIHNwcmludGYoJyVzOyAlZCByZWplY3RlZCBwcm9taXNlcycsICRtc2csIGNvdW50KCRyZWFzb25zKSkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/CancellationException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhhdCBpcyBzZXQgYXMgdGhlIHJlYXNvbiBmb3IgYSBwcm9taXNlIHRoYXQgaGFzIGJlZW4gY2FuY2VsbGVkLgogKi8KY2xhc3MgQ2FuY2VsbGF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUmVqZWN0aW9uRXhjZXB0aW9uCnsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Coroutine.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCnVzZSBFeGNlcHRpb247CnVzZSBHZW5lcmF0b3I7CnVzZSBUaHJvd2FibGU7CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB1c2luZyBhIGdlbmVyYXRvciB0aGF0IHlpZWxkcyB2YWx1ZXMgb3IKICogcHJvbWlzZXMgKHNvbWV3aGF0IHNpbWlsYXIgdG8gQyMncyBhc3luYyBrZXl3b3JkKS4KICoKICogV2hlbiBjYWxsZWQsIHRoZSBjb3JvdXRpbmUgZnVuY3Rpb24gd2lsbCBzdGFydCBhbiBpbnN0YW5jZSBvZiB0aGUgZ2VuZXJhdG9yCiAqIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGl0cyBmaW5hbCB5aWVsZGVkIHZhbHVlLgogKgogKiBDb250cm9sIGlzIHJldHVybmVkIGJhY2sgdG8gdGhlIGdlbmVyYXRvciB3aGVuIHRoZSB5aWVsZGVkIHByb21pc2Ugc2V0dGxlcy4KICogVGhpcyBjYW4gbGVhZCB0byBsZXNzIHZlcmJvc2UgY29kZSB3aGVuIGRvaW5nIGxvdHMgb2Ygc2VxdWVudGlhbCBhc3luYyBjYWxscwogKiB3aXRoIG1pbmltYWwgcHJvY2Vzc2luZyBpbiBiZXR3ZWVuLgogKgogKiAgICAgdXNlIEd1enpsZUh0dHBcUHJvbWlzZTsKICoKICogICAgIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoJHZhbHVlKSB7CiAqICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlXEZ1bGZpbGxlZFByb21pc2UoJHZhbHVlKTsKICogICAgIH0KICoKICogICAgICRwcm9taXNlID0gUHJvbWlzZVxjb3JvdXRpbmUoZnVuY3Rpb24gKCkgewogKiAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCdhJykpOwogKiAgICAgICAgIHRyeSB7CiAqICAgICAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCR2YWx1ZSAuICdiJykpOwogKiAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICogICAgICAgICAgICAgLy8gVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLgogKiAgICAgICAgIH0KICogICAgICAgICB5aWVsZCAkdmFsdWUgLiAnYyc7CiAqICAgICB9KTsKICoKICogICAgIC8vIE91dHB1dHMgImFiYyIKICogICAgICRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdikgeyBlY2hvICR2OyB9KTsKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbiBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gd3JhcCBpbnRvIGEgcHJvbWlzZS4KICoKICogQHJldHVybiBQcm9taXNlCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvYmxvYi9tYXN0ZXIvQVBJLm1kI2dlbmVyYXRvcnMgaW5zcGlyYXRpb24KICovCmZpbmFsIGNsYXNzIENvcm91dGluZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIFByb21pc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjdXJyZW50UHJvbWlzZTsKCiAgICAvKioKICAgICAqIEB2YXIgR2VuZXJhdG9yCiAgICAgKi8KICAgIHByaXZhdGUgJGdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHJvbWlzZQogICAgICovCiAgICBwcml2YXRlICRyZXN1bHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRnZW5lcmF0b3JGbikKICAgIHsKICAgICAgICAkdGhpcy0+Z2VuZXJhdG9yID0gJGdlbmVyYXRvckZuKCk7CiAgICAgICAgJHRoaXMtPnJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgd2hpbGUgKGlzc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5jdXJyZW50UHJvbWlzZS0+d2FpdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPm5leHRDb3JvdXRpbmUoJHRoaXMtPmdlbmVyYXRvci0+Y3VycmVudCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQtPnRoZW4oJG9uRnVsZmlsbGVkLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+b3RoZXJ3aXNlKCRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCgkdW53cmFwID0gdHJ1ZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+d2FpdCgkdW53cmFwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZXNvbHZlKCR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKQogICAgewogICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkcmVhc29uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UtPmNhbmNlbCgpOwogICAgICAgICR0aGlzLT5yZXN1bHQtPmNhbmNlbCgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbmV4dENvcm91dGluZSgkeWllbGRlZCkKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UgPSBwcm9taXNlX2ZvcigkeWllbGRlZCkKICAgICAgICAgICAgLT50aGVuKFskdGhpcywgJ19oYW5kbGVTdWNjZXNzJ10sIFskdGhpcywgJ19oYW5kbGVGYWlsdXJlJ10pOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlU3VjY2VzcygkdmFsdWUpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkbmV4dCA9ICR0aGlzLT5nZW5lcmF0b3ItPnNlbmQoJHZhbHVlKTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5nZW5lcmF0b3ItPnZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5uZXh0Q29yb3V0aW5lKCRuZXh0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlc29sdmUoJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkZXhjZXB0aW9uKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJHRocm93YWJsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlRmFpbHVyZSgkcmVhc29uKQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5leHRZaWVsZCA9ICR0aGlzLT5nZW5lcmF0b3ItPnRocm93KGV4Y2VwdGlvbl9mb3IoJHJlYXNvbikpOwogICAgICAgICAgICAvLyBUaGUgdGhyb3cgd2FzIGNhdWdodCwgc28ga2VlcCBpdGVyYXRpbmcgb24gdGhlIGNvcm91dGluZQogICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkbmV4dFlpZWxkKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJGV4Y2VwdGlvbik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPnJlc3VsdC0+cmVqZWN0KCR0aHJvd2FibGUpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/EachPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgcHJvbWlzZSB0aGF0IGl0ZXJhdGVzIG92ZXIgbWFueSBwcm9taXNlcyBhbmQgaW52b2tlcwogKiBzaWRlLWVmZmVjdCBmdW5jdGlvbnMgaW4gdGhlIHByb2Nlc3MuCiAqLwpjbGFzcyBFYWNoUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc29ySW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHBlbmRpbmcgPSBbXTsKCiAgICAvKiogQHZhciBcSXRlcmF0b3IgKi8KICAgIHByaXZhdGUgJGl0ZXJhYmxlOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfGludCAqLwogICAgcHJpdmF0ZSAkY29uY3VycmVuY3k7CgogICAgLyoqIEB2YXIgY2FsbGFibGUgKi8KICAgIHByaXZhdGUgJG9uRnVsZmlsbGVkOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRvblJlamVjdGVkOwoKICAgIC8qKiBAdmFyIFByb21pc2UgKi8KICAgIHByaXZhdGUgJGFnZ3JlZ2F0ZTsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRtdXRleDsKCiAgICAvKioKICAgICAqIENvbmZpZ3VyYXRpb24gaGFzaCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZSBwYWlyczoKICAgICAqCiAgICAgKiAtIGZ1bGZpbGxlZDogKGNhbGxhYmxlKSBJbnZva2VkIHdoZW4gYSBwcm9taXNlIGZ1bGZpbGxzLiBUaGUgZnVuY3Rpb24KICAgICAqICAgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIGZ1bGZpbGxtZW50IHZhbHVlLCB0aGUgaW5kZXgKICAgICAqICAgcG9zaXRpb24gZnJvbSB0aGUgaXRlcmFibGUgbGlzdCBvZiB0aGUgcHJvbWlzZSwgYW5kIHRoZSBhZ2dyZWdhdGUKICAgICAqICAgcHJvbWlzZSB0aGF0IG1hbmFnZXMgYWxsIG9mIHRoZSBwcm9taXNlcy4gVGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIG1heQogICAgICogICBiZSByZXNvbHZlZCBmcm9tIHdpdGhpbiB0aGUgY2FsbGJhY2sgdG8gc2hvcnQtY2lyY3VpdCB0aGUgcHJvbWlzZS4KICAgICAqIC0gcmVqZWN0ZWQ6IChjYWxsYWJsZSkgSW52b2tlZCB3aGVuIGEgcHJvbWlzZSBpcyByZWplY3RlZC4gVGhlCiAgICAgKiAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSByZWplY3Rpb24gcmVhc29uLCB0aGUKICAgICAqICAgaW5kZXggcG9zaXRpb24gZnJvbSB0aGUgaXRlcmFibGUgbGlzdCBvZiB0aGUgcHJvbWlzZSwgYW5kIHRoZQogICAgICogICBhZ2dyZWdhdGUgcHJvbWlzZSB0aGF0IG1hbmFnZXMgYWxsIG9mIHRoZSBwcm9taXNlcy4gVGhlIGFnZ3JlZ2F0ZQogICAgICogICBwcm9taXNlIG1heSBiZSByZXNvbHZlZCBmcm9tIHdpdGhpbiB0aGUgY2FsbGJhY2sgdG8gc2hvcnQtY2lyY3VpdAogICAgICogICB0aGUgcHJvbWlzZS4KICAgICAqIC0gY29uY3VycmVuY3k6IChpbnRlZ2VyKSBQYXNzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gbGltaXQgdGhlCiAgICAgKiAgIGFsbG93ZWQgbnVtYmVyIG9mIG91dHN0YW5kaW5nIGNvbmN1cnJlbnRseSBleGVjdXRpbmcgcHJvbWlzZXMsCiAgICAgKiAgIGNyZWF0aW5nIGEgY2FwcGVkIHBvb2wgb2YgcHJvbWlzZXMuIFRoZXJlIGlzIG5vIGxpbWl0IGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICAgICRpdGVyYWJsZSBQcm9taXNlcyBvciB2YWx1ZXMgdG8gaXRlcmF0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAkY29uZmlnICAgQ29uZmlndXJhdGlvbiBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaXRlcmFibGUsIGFycmF5ICRjb25maWcgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+aXRlcmFibGUgPSBpdGVyX2ZvcigkaXRlcmFibGUpOwoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snY29uY3VycmVuY3knXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbmN1cnJlbmN5ID0gJGNvbmZpZ1snY29uY3VycmVuY3knXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydmdWxmaWxsZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJGNvbmZpZ1snZnVsZmlsbGVkJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1sncmVqZWN0ZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm9uUmVqZWN0ZWQgPSAkY29uZmlnWydyZWplY3RlZCddOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvbWlzZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5hZ2dyZWdhdGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZ2dyZWdhdGU7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+Y3JlYXRlUHJvbWlzZSgpOwogICAgICAgICAgICAkdGhpcy0+aXRlcmFibGUtPnJld2luZCgpOwogICAgICAgICAgICAkdGhpcy0+cmVmaWxsUGVuZGluZygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+cmVqZWN0KCRlKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmFnZ3JlZ2F0ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoKQogICAgewogICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICR0aGlzLT5hZ2dyZWdhdGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJlc2V0KCR0aGlzLT5wZW5kaW5nKTsKICAgICAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5wZW5kaW5nKSAmJiAhJHRoaXMtPml0ZXJhYmxlLT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZXNvbHZlKG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDb25zdW1lIGEgcG90ZW50aWFsbHkgZmx1Y3R1YXRpbmcgbGlzdCBvZiBwcm9taXNlcyB3aGlsZQogICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGluZGV4ZXMgYXJlIG1haW50YWluZWQgKHByZWNsdWRpbmcgYXJyYXlfc2hpZnQpLgogICAgICAgICAgICB3aGlsZSAoJHByb21pc2UgPSBjdXJyZW50KCR0aGlzLT5wZW5kaW5nKSkgewogICAgICAgICAgICAgICAgbmV4dCgkdGhpcy0+cGVuZGluZyk7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+d2FpdCgpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hZ2dyZWdhdGUtPmdldFN0YXRlKCkgIT09IFByb21pc2VJbnRlcmZhY2U6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIHJlZmVyZW5jZXMgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC4KICAgICAgICAkY2xlYXJGbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlID0gJHRoaXMtPmNvbmN1cnJlbmN5ID0gJHRoaXMtPnBlbmRpbmcgPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQgPSAkdGhpcy0+b25SZWplY3RlZCA9IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+dGhlbigkY2xlYXJGbiwgJGNsZWFyRm4pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVmaWxsUGVuZGluZygpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y29uY3VycmVuY3kpIHsKICAgICAgICAgICAgLy8gQWRkIGFsbCBwZW5kaW5nIHByb21pc2VzLgogICAgICAgICAgICB3aGlsZSAoJHRoaXMtPmFkZFBlbmRpbmcoKSAmJiAkdGhpcy0+YWR2YW5jZUl0ZXJhdG9yKCkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgb25seSB1cCB0byBOIHBlbmRpbmcgcHJvbWlzZXMuCiAgICAgICAgJGNvbmN1cnJlbmN5ID0gaXNfY2FsbGFibGUoJHRoaXMtPmNvbmN1cnJlbmN5KQogICAgICAgICAgICA/IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5jb25jdXJyZW5jeSwgY291bnQoJHRoaXMtPnBlbmRpbmcpKQogICAgICAgICAgICA6ICR0aGlzLT5jb25jdXJyZW5jeTsKICAgICAgICAkY29uY3VycmVuY3kgPSBtYXgoJGNvbmN1cnJlbmN5IC0gY291bnQoJHRoaXMtPnBlbmRpbmcpLCAwKTsKICAgICAgICAvLyBDb25jdXJyZW5jeSBtYXkgYmUgc2V0IHRvIDAgdG8gZGlzYWxsb3cgbmV3IHByb21pc2VzLgogICAgICAgIGlmICghJGNvbmN1cnJlbmN5KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIHRoZSBmaXJzdCBwZW5kaW5nIHByb21pc2UuCiAgICAgICAgJHRoaXMtPmFkZFBlbmRpbmcoKTsKICAgICAgICAvLyBOb3RlIHRoaXMgaXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29uY3VycmVuY3k9MSBzbyB0aGF0IHdlIGRvCiAgICAgICAgLy8gbm90IGFkdmFuY2UgdGhlIGl0ZXJhdG9yIGFmdGVyIGFkZGluZyB0aGUgZmlyc3QgcHJvbWlzZS4gVGhpcwogICAgICAgIC8vIGhlbHBzIHdvcmsgYXJvdW5kIGlzc3VlcyB3aXRoIGdlbmVyYXRvcnMgdGhhdCBtaWdodCBub3QgaGF2ZSB0aGUKICAgICAgICAvLyBuZXh0IHZhbHVlIHRvIHlpZWxkIHVudGlsIHByb21pc2UgY2FsbGJhY2tzIGFyZSBjYWxsZWQuCiAgICAgICAgd2hpbGUgKC0tJGNvbmN1cnJlbmN5CiAgICAgICAgICAgICYmICR0aGlzLT5hZHZhbmNlSXRlcmF0b3IoKQogICAgICAgICAgICAmJiAkdGhpcy0+YWRkUGVuZGluZygpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZFBlbmRpbmcoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPml0ZXJhYmxlIHx8ICEkdGhpcy0+aXRlcmFibGUtPnZhbGlkKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHByb21pc2UgPSBwcm9taXNlX2ZvcigkdGhpcy0+aXRlcmFibGUtPmN1cnJlbnQoKSk7CiAgICAgICAgJGlkeCA9ICR0aGlzLT5pdGVyYWJsZS0+a2V5KCk7CgogICAgICAgICR0aGlzLT5wZW5kaW5nWyRpZHhdID0gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGlkeCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQsICR2YWx1ZSwgJGlkeCwgJHRoaXMtPmFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RlcCgkaWR4KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGlkeCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vblJlamVjdGVkLCAkcmVhc29uLCAkaWR4LCAkdGhpcy0+YWdncmVnYXRlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5zdGVwKCRpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZHZhbmNlSXRlcmF0b3IoKQogICAgewogICAgICAgIC8vIFBsYWNlIGEgbG9jayBvbiB0aGUgaXRlcmF0b3Igc28gdGhhdCB3ZSBlbnN1cmUgdG8gbm90IHJlY3Vyc2UsCiAgICAgICAgLy8gcHJldmVudGluZyBmYXRhbCBnZW5lcmF0b3IgZXJyb3JzLgogICAgICAgIGlmICgkdGhpcy0+bXV0ZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm11dGV4ID0gdHJ1ZTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlLT5uZXh0KCk7CiAgICAgICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZWplY3QoJGUpOwogICAgICAgICAgICAkdGhpcy0+bXV0ZXggPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0ZXAoJGlkeCkKICAgIHsKICAgICAgICAvLyBJZiB0aGUgcHJvbWlzZSB3YXMgYWxyZWFkeSByZXNvbHZlZCwgdGhlbiBpZ25vcmUgdGhpcyBzdGVwLgogICAgICAgIGlmICgkdGhpcy0+YWdncmVnYXRlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHVuc2V0KCR0aGlzLT5wZW5kaW5nWyRpZHhdKTsKCiAgICAgICAgLy8gT25seSByZWZpbGwgcGVuZGluZyBwcm9taXNlcyBpZiB3ZSBhcmUgbm90IGxvY2tlZCwgcHJldmVudGluZyB0aGUKICAgICAgICAvLyBFYWNoUHJvbWlzZSB0byByZWN1cnNpdmVseSBpbnZva2UgdGhlIHByb3ZpZGVkIGl0ZXJhdG9yLCB3aGljaAogICAgICAgIC8vIGNhdXNlIGEgZmF0YWwgZXJyb3I6ICJDYW5ub3QgcmVzdW1lIGFuIGFscmVhZHkgcnVubmluZyBnZW5lcmF0b3IiCiAgICAgICAgaWYgKCR0aGlzLT5hZHZhbmNlSXRlcmF0b3IoKSAmJiAhJHRoaXMtPmNoZWNrSWZGaW5pc2hlZCgpKSB7CiAgICAgICAgICAgIC8vIEFkZCBtb3JlIHBlbmRpbmcgcHJvbWlzZXMgaWYgcG9zc2libGUuCiAgICAgICAgICAgICR0aGlzLT5yZWZpbGxQZW5kaW5nKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tJZkZpbmlzaGVkKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5wZW5kaW5nICYmICEkdGhpcy0+aXRlcmFibGUtPnZhbGlkKCkpIHsKICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkby4KICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+cmVzb2x2ZShudWxsKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/FulfilledPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiBmdWxmaWxsZWQuCiAqCiAqIFRoZW5uaW5nIG9mZiBvZiB0aGlzIHByb21pc2Ugd2lsbCBpbnZva2UgdGhlIG9uRnVsZmlsbGVkIGNhbGxiYWNrCiAqIGltbWVkaWF0ZWx5IGFuZCBpZ25vcmUgb3RoZXIgY2FsbGJhY2tzLgogKi8KY2xhc3MgRnVsZmlsbGVkUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBjcmVhdGUgYSBGdWxmaWxsZWRQcm9taXNlIHdpdGggYSBwcm9taXNlLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgY2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApIHsKICAgICAgICAvLyBSZXR1cm4gaXRzZWxmIGlmIHRoZXJlIGlzIG5vIG9uRnVsZmlsbGVkIGZ1bmN0aW9uLgogICAgICAgIGlmICghJG9uRnVsZmlsbGVkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRxdWV1ZSA9IHF1ZXVlKCk7CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcXVldWUtPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkcCwgJHZhbHVlLCAkb25GdWxmaWxsZWQpIHsKICAgICAgICAgICAgaWYgKCRwLT5nZXRTdGF0ZSgpID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvbkZ1bGZpbGxlZCgkdmFsdWUpKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gJHA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KCR1bndyYXAgPSB0cnVlLCAkZGVmYXVsdERlbGl2ZXJ5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHVud3JhcCA/ICR0aGlzLT52YWx1ZSA6IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6RlVMRklMTEVEOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlICE9PSAkdGhpcy0+dmFsdWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IHJlc29sdmUgYSBmdWxmaWxsZWQgcHJvbWlzZSIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IHJlamVjdCBhIGZ1bGZpbGxlZCBwcm9taXNlIik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgpCiAgICB7CiAgICAgICAgLy8gcGFzcwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBHZXQgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlIHVzZWQgZm9yIHByb21pc2UgcmVzb2x1dGlvbi4KICoKICogVGhpcyB0YXNrIHF1ZXVlIE1VU1QgYmUgcnVuIGluIGFuIGV2ZW50IGxvb3AgaW4gb3JkZXIgZm9yIHByb21pc2VzIHRvIGJlCiAqIHNldHRsZWQgYXN5bmNocm9ub3VzbHkuIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBydW4gd2hlbiBzeW5jaHJvbm91c2x5CiAqIHdhaXRpbmcgb24gYSBwcm9taXNlLgogKgogKiA8Y29kZT4KICogd2hpbGUgKCRldmVudExvb3AtPmlzUnVubmluZygpKSB7CiAqICAgICBHdXp6bGVIdHRwXFByb21pc2VccXVldWUoKS0+cnVuKCk7CiAqIH0KICogPC9jb2RlPgogKgogKiBAcGFyYW0gVGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gT3B0aW9uYWxseSBzcGVjaWZ5IGEgbmV3IHF1ZXVlIGluc3RhbmNlLgogKgogKiBAcmV0dXJuIFRhc2tRdWV1ZUludGVyZmFjZQogKi8KZnVuY3Rpb24gcXVldWUoVGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gPSBudWxsKQp7CiAgICBzdGF0aWMgJHF1ZXVlOwoKICAgIGlmICgkYXNzaWduKSB7CiAgICAgICAgJHF1ZXVlID0gJGFzc2lnbjsKICAgIH0gZWxzZWlmICghJHF1ZXVlKSB7CiAgICAgICAgJHF1ZXVlID0gbmV3IFRhc2tRdWV1ZSgpOwogICAgfQoKICAgIHJldHVybiAkcXVldWU7Cn0KCi8qKgogKiBBZGRzIGEgZnVuY3Rpb24gdG8gcnVuIGluIHRoZSB0YXNrIHF1ZXVlIHdoZW4gaXQgaXMgbmV4dCBgcnVuKClgIGFuZCByZXR1cm5zCiAqIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCBvciByZWplY3RlZCB3aXRoIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkdGFzayBUYXNrIGZ1bmN0aW9uIHRvIHJ1bi4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiB0YXNrKGNhbGxhYmxlICR0YXNrKQp7CiAgICAkcXVldWUgPSBxdWV1ZSgpOwogICAgJHByb21pc2UgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgJHF1ZXVlLT5hZGQoZnVuY3Rpb24gKCkgdXNlICgkdGFzaywgJHByb21pc2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkdGFzaygpKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJGUpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkZSk7CiAgICAgICAgfQogICAgfSk7CgogICAgcmV0dXJuICRwcm9taXNlOwp9CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgZm9yIGEgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIG5vdCBhIHByb21pc2UuCiAqCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgUHJvbWlzZSBvciB2YWx1ZS4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiBwcm9taXNlX2ZvcigkdmFsdWUpCnsKICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0KCiAgICAvLyBSZXR1cm4gYSBHdXp6bGUgcHJvbWlzZSB0aGF0IHNoYWRvd3MgdGhlIGdpdmVuIHByb21pc2UuCiAgICBpZiAobWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAkd2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICd3YWl0JykgPyBbJHZhbHVlLCAnd2FpdCddIDogbnVsbDsKICAgICAgICAkY2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICdjYW5jZWwnKSA/IFskdmFsdWUsICdjYW5jZWwnXSA6IG51bGw7CiAgICAgICAgJHByb21pc2UgPSBuZXcgUHJvbWlzZSgkd2ZuLCAkY2ZuKTsKICAgICAgICAkdmFsdWUtPnRoZW4oWyRwcm9taXNlLCAncmVzb2x2ZSddLCBbJHByb21pc2UsICdyZWplY3QnXSk7CiAgICAgICAgcmV0dXJuICRwcm9taXNlOwogICAgfQoKICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkdmFsdWUpOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHByb21pc2UgZm9yIGEgcmVhc29uIGlmIHRoZSByZWFzb24gaXMgbm90IGEgcHJvbWlzZS4gSWYKICogdGhlIHByb3ZpZGVkIHJlYXNvbiBpcyBhIHByb21pc2UsIHRoZW4gaXQgaXMgcmV0dXJuZWQgYXMtaXMuCiAqCiAqIEBwYXJhbSBtaXhlZCAkcmVhc29uIFByb21pc2Ugb3IgcmVhc29uLgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIHJlamVjdGlvbl9mb3IoJHJlYXNvbikKewogICAgaWYgKCRyZWFzb24gaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICRyZWFzb247CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZWplY3RlZFByb21pc2UoJHJlYXNvbik7Cn0KCi8qKgogKiBDcmVhdGUgYW4gZXhjZXB0aW9uIGZvciBhIHJlamVjdGVkIHByb21pc2UgdmFsdWUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAqCiAqIEByZXR1cm4gXEV4Y2VwdGlvbnxcVGhyb3dhYmxlCiAqLwpmdW5jdGlvbiBleGNlcHRpb25fZm9yKCRyZWFzb24pCnsKICAgIHJldHVybiAkcmVhc29uIGluc3RhbmNlb2YgXEV4Y2VwdGlvbiB8fCAkcmVhc29uIGluc3RhbmNlb2YgXFRocm93YWJsZQogICAgICAgID8gJHJlYXNvbgogICAgICAgIDogbmV3IFJlamVjdGlvbkV4Y2VwdGlvbigkcmVhc29uKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBnaXZlbiB2YWx1ZS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZQogKgogKiBAcmV0dXJuIFxJdGVyYXRvcgogKi8KZnVuY3Rpb24gaXRlcl9mb3IoJHZhbHVlKQp7CiAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBcQXJyYXlJdGVyYXRvcigkdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKFskdmFsdWVdKTsKICAgIH0KfQoKLyoqCiAqIFN5bmNocm9ub3VzbHkgd2FpdHMgb24gYSBwcm9taXNlIHRvIHJlc29sdmUgYW5kIHJldHVybnMgYW4gaW5zcGVjdGlvbiBzdGF0ZQogKiBhcnJheS4KICoKICogUmV0dXJucyBhIHN0YXRlIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgYSAic3RhdGUiIGtleSBtYXBwaW5nIHRvIGEKICogdmFsaWQgcHJvbWlzZSBzdGF0ZS4gSWYgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlIGlzICJmdWxmaWxsZWQiLCB0aGUgYXJyYXkKICogd2lsbCBjb250YWluIGEgInZhbHVlIiBrZXkgbWFwcGluZyB0byB0aGUgZnVsZmlsbGVkIHZhbHVlIG9mIHRoZSBwcm9taXNlLiBJZgogKiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCwgdGhlIGFycmF5IHdpbGwgY29udGFpbiBhICJyZWFzb24iIGtleSBtYXBwaW5nIHRvCiAqIHRoZSByZWplY3Rpb24gcmVhc29uIG9mIHRoZSBwcm9taXNlLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSBQcm9taXNlIG9yIHZhbHVlLgogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBpbnNwZWN0KFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpCnsKICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N0YXRlJyA9PiBQcm9taXNlSW50ZXJmYWNlOjpGVUxGSUxMRUQsCiAgICAgICAgICAgICd2YWx1ZScgPT4gJHByb21pc2UtPndhaXQoKQogICAgICAgIF07CiAgICB9IGNhdGNoIChSZWplY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRlLT5nZXRSZWFzb24oKV07CiAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICB9Cn0KCi8qKgogKiBXYWl0cyBvbiBhbGwgb2YgdGhlIHByb3ZpZGVkIHByb21pc2VzLCBidXQgZG9lcyBub3QgdW53cmFwIHJlamVjdGVkIHByb21pc2VzCiAqIGFzIHRocm93biBleGNlcHRpb24uCiAqCiAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheXMuCiAqCiAqIEBwYXJhbSBQcm9taXNlSW50ZXJmYWNlW10gJHByb21pc2VzIFRyYXZlcnNhYmxlIG9mIHByb21pc2VzIHRvIHdhaXQgdXBvbi4KICoKICogQHJldHVybiBhcnJheQogKiBAc2VlIEd1enpsZUh0dHBcUHJvbWlzZVxpbnNwZWN0IGZvciB0aGUgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheSBmb3JtYXQuCiAqLwpmdW5jdGlvbiBpbnNwZWN0X2FsbCgkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJGtleSA9PiAkcHJvbWlzZSkgewogICAgICAgICRyZXN1bHRzWyRrZXldID0gaW5zcGVjdCgkcHJvbWlzZSk7CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHRzOwp9CgovKioKICogV2FpdHMgb24gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBhbmQgcmV0dXJucyB0aGUgZnVsZmlsbGVkIHZhbHVlcy4KICoKICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiBlYWNoIHByb21pc2UgKGluIHRoZSBzYW1lIG9yZGVyCiAqIHRoZSBwcm9taXNlcyB3ZXJlIHByb3ZpZGVkKS4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgb2YgdGhlIHByb21pc2VzCiAqIGFyZSByZWplY3RlZC4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBJdGVyYWJsZSBvZiBQcm9taXNlSW50ZXJmYWNlIG9iamVjdHMgdG8gd2FpdCBvbi4KICoKICogQHJldHVybiBhcnJheQogKiBAdGhyb3dzIFxFeGNlcHRpb24gb24gZXJyb3IKICogQHRocm93cyBcVGhyb3dhYmxlIG9uIGVycm9yIGluIFBIUCA+PTcKICovCmZ1bmN0aW9uIHVud3JhcCgkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJGtleSA9PiAkcHJvbWlzZSkgewogICAgICAgICRyZXN1bHRzWyRrZXldID0gJHByb21pc2UtPndhaXQoKTsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdHM7Cn0KCi8qKgogKiBHaXZlbiBhbiBhcnJheSBvZiBwcm9taXNlcywgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUKICogaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBmdWxmaWxsZWQuCiAqCiAqIFRoZSBwcm9taXNlJ3MgZnVsZmlsbG1lbnQgdmFsdWUgaXMgYW4gYXJyYXkgd2l0aCBmdWxmaWxsbWVudCB2YWx1ZXMgYXQKICogcmVzcGVjdGl2ZSBwb3NpdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFycmF5LiBJZiBhbnkgcHJvbWlzZSBpbiB0aGUgYXJyYXkKICogcmVqZWN0cywgdGhlIHJldHVybmVkIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGUgcmVqZWN0aW9uIHJlYXNvbi4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gYWxsKCRwcm9taXNlcykKewogICAgJHJlc3VsdHMgPSBbXTsKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9ICR2YWx1ZTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgkcmVhc29uLCAkaWR4LCBQcm9taXNlICRhZ2dyZWdhdGUpIHsKICAgICAgICAgICAgJGFnZ3JlZ2F0ZS0+cmVqZWN0KCRyZWFzb24pOwogICAgICAgIH0KICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICBrc29ydCgkcmVzdWx0cyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfSk7Cn0KCi8qKgogKiBJbml0aWF0ZSBhIGNvbXBldGl0aXZlIHJhY2UgYmV0d2VlbiBtdWx0aXBsZSBwcm9taXNlcyBvciB2YWx1ZXMgKHZhbHVlcyB3aWxsCiAqIGJlY29tZSBpbW1lZGlhdGVseSBmdWxmaWxsZWQgcHJvbWlzZXMpLgogKgogKiBXaGVuIGNvdW50IGFtb3VudCBvZiBwcm9taXNlcyBoYXZlIGJlZW4gZnVsZmlsbGVkLCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcwogKiBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmdWxmaWxsbWVudCB2YWx1ZXMgb2YgdGhlIHdpbm5lcnMKICogaW4gb3JkZXIgb2YgcmVzb2x1dGlvbi4KICoKICogVGhpcyBwcm9tbWlzZSBpcyByZWplY3RlZCB3aXRoIGEge0BzZWUgR3V6emxlSHR0cFxQcm9taXNlXEFnZ3JlZ2F0ZUV4Y2VwdGlvbn0KICogaWYgdGhlIG51bWJlciBvZiBmdWxmaWxsZWQgcHJvbWlzZXMgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkICRjb3VudC4KICoKICogQHBhcmFtIGludCAgICRjb3VudCAgICBUb3RhbCBudW1iZXIgb2YgcHJvbWlzZXMuCiAqIEBwYXJhbSBtaXhlZCAkcHJvbWlzZXMgUHJvbWlzZXMgb3IgdmFsdWVzLgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIHNvbWUoJGNvdW50LCAkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICAkcmVqZWN0aW9ucyA9IFtdOwoKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4LCBQcm9taXNlSW50ZXJmYWNlICRwKSB1c2UgKCYkcmVzdWx0cywgJGNvdW50KSB7CiAgICAgICAgICAgIGlmICgkcC0+Z2V0U3RhdGUoKSAhPT0gUHJvbWlzZUludGVyZmFjZTo6UEVORElORykgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gJHZhbHVlOwogICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpID49ICRjb3VudCkgewogICAgICAgICAgICAgICAgJHAtPnJlc29sdmUobnVsbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCYkcmVqZWN0aW9ucykgewogICAgICAgICAgICAkcmVqZWN0aW9uc1tdID0gJHJlYXNvbjsKICAgICAgICB9CiAgICApLT50aGVuKAogICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJiRyZXN1bHRzLCAmJHJlamVjdGlvbnMsICRjb3VudCkgewogICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpICE9PSAkY291bnQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgJ05vdCBlbm91Z2ggcHJvbWlzZXMgdG8gZnVsZmlsbCBjb3VudCcsCiAgICAgICAgICAgICAgICAgICAgJHJlamVjdGlvbnMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAga3NvcnQoJHJlc3VsdHMpOwogICAgICAgICAgICByZXR1cm4gYXJyYXlfdmFsdWVzKCRyZXN1bHRzKTsKICAgICAgICB9CiAgICApOwp9CgovKioKICogTGlrZSBzb21lKCksIHdpdGggMSBhcyBjb3VudC4gSG93ZXZlciwgaWYgdGhlIHByb21pc2UgZnVsZmlsbHMsIHRoZQogKiBmdWxmaWxsbWVudCB2YWx1ZSBpcyBub3QgYW4gYXJyYXkgb2YgMSBidXQgdGhlIHZhbHVlIGRpcmVjdGx5LgogKgogKiBAcGFyYW0gbWl4ZWQgJHByb21pc2VzIFByb21pc2VzIG9yIHZhbHVlcy4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiBhbnkoJHByb21pc2VzKQp7CiAgICByZXR1cm4gc29tZSgxLCAkcHJvbWlzZXMpLT50aGVuKGZ1bmN0aW9uICgkdmFsdWVzKSB7IHJldHVybiAkdmFsdWVzWzBdOyB9KTsKfQoKLyoqCiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBoYXZlCiAqIGJlZW4gZnVsZmlsbGVkIG9yIHJlamVjdGVkLgogKgogKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBpbnNwZWN0aW9uIHN0YXRlIGFycmF5cy4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKiBAc2VlIEd1enpsZUh0dHBcUHJvbWlzZVxpbnNwZWN0IGZvciB0aGUgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheSBmb3JtYXQuCiAqLwpmdW5jdGlvbiBzZXR0bGUoJHByb21pc2VzKQp7CiAgICAkcmVzdWx0cyA9IFtdOwoKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9IFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRCwgJ3ZhbHVlJyA9PiAkdmFsdWVdOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgpIHVzZSAoJiRyZXN1bHRzKSB7CiAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRyZWFzb25dOwogICAgICAgIH0KICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICBrc29ydCgkcmVzdWx0cyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfSk7Cn0KCi8qKgogKiBHaXZlbiBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBwcm9taXNlcyBvciB2YWx1ZXMsIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMKICogZnVsZmlsbGVkIHdpdGggYSBudWxsIHZhbHVlIHdoZW4gdGhlIGl0ZXJhdG9yIGhhcyBiZWVuIGNvbnN1bWVkIG9yIHRoZQogKiBhZ2dyZWdhdGUgcHJvbWlzZSBoYXMgYmVlbiBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuCiAqCiAqICRvbkZ1bGZpbGxlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgZnVsZmlsbGVkIHZhbHVlLCBpdGVyYXRvcgogKiBpbmRleCwgYW5kIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZS4gVGhlIGNhbGxiYWNrIGNhbiBpbnZva2UgYW55IG5lY2Vzc2FyeSBzaWRlCiAqIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIHByb21pc2UgaWYgbmVlZGVkLgogKgogKiAkb25SZWplY3RlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgaXRlcmF0b3IKICogaW5kZXgsIGFuZCB0aGUgYWdncmVnYXRlIHByb21pc2UuIFRoZSBjYWxsYmFjayBjYW4gaW52b2tlIGFueSBuZWNlc3Nhcnkgc2lkZQogKiBlZmZlY3RzIGFuZCBjaG9vc2UgdG8gcmVzb2x2ZSBvciByZWplY3QgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIGlmIG5lZWRlZC4KICoKICogQHBhcmFtIG1peGVkICAgICRpdGVyYWJsZSAgICBJdGVyYXRvciBvciBhcnJheSB0byBpdGVyYXRlIG92ZXIuCiAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQKICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaCgKICAgICRpdGVyYWJsZSwKICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICBjYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKKSB7CiAgICByZXR1cm4gKG5ldyBFYWNoUHJvbWlzZSgkaXRlcmFibGUsIFsKICAgICAgICAnZnVsZmlsbGVkJyA9PiAkb25GdWxmaWxsZWQsCiAgICAgICAgJ3JlamVjdGVkJyAgPT4gJG9uUmVqZWN0ZWQKICAgIF0pKS0+cHJvbWlzZSgpOwp9CgovKioKICogTGlrZSBlYWNoLCBidXQgb25seSBhbGxvd3MgYSBjZXJ0YWluIG51bWJlciBvZiBvdXRzdGFuZGluZyBwcm9taXNlcyBhdCBhbnkKICogZ2l2ZW4gdGltZS4KICoKICogJGNvbmN1cnJlbmN5IG1heSBiZSBhbiBpbnRlZ2VyIG9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YKICogcGVuZGluZyBwcm9taXNlcyBhbmQgcmV0dXJucyBhIG51bWVyaWMgY29uY3VycmVuY3kgbGltaXQgdmFsdWUgdG8gYWxsb3cgZm9yCiAqIGR5bmFtaWMgYSBjb25jdXJyZW5jeSBzaXplLgogKgogKiBAcGFyYW0gbWl4ZWQgICAgICAgICRpdGVyYWJsZQogKiBAcGFyYW0gaW50fGNhbGxhYmxlICRjb25jdXJyZW5jeQogKiBAcGFyYW0gY2FsbGFibGUgICAgICRvbkZ1bGZpbGxlZAogKiBAcGFyYW0gY2FsbGFibGUgICAgICRvblJlamVjdGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaF9saW1pdCgKICAgICRpdGVyYWJsZSwKICAgICRjb25jdXJyZW5jeSwKICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICBjYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKKSB7CiAgICByZXR1cm4gKG5ldyBFYWNoUHJvbWlzZSgkaXRlcmFibGUsIFsKICAgICAgICAnZnVsZmlsbGVkJyAgID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAncmVqZWN0ZWQnICAgID0+ICRvblJlamVjdGVkLAogICAgICAgICdjb25jdXJyZW5jeScgPT4gJGNvbmN1cnJlbmN5CiAgICBdKSktPnByb21pc2UoKTsKfQoKLyoqCiAqIExpa2UgZWFjaF9saW1pdCwgYnV0IGVuc3VyZXMgdGhhdCBubyBwcm9taXNlIGluIHRoZSBnaXZlbiAkaXRlcmFibGUgYXJndW1lbnQKICogaXMgcmVqZWN0ZWQuIElmIGFueSBwcm9taXNlIGlzIHJlamVjdGVkLCB0aGVuIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBpcwogKiByZWplY3RlZCB3aXRoIHRoZSBlbmNvdW50ZXJlZCByZWplY3Rpb24uCiAqCiAqIEBwYXJhbSBtaXhlZCAgICAgICAgJGl0ZXJhYmxlCiAqIEBwYXJhbSBpbnR8Y2FsbGFibGUgJGNvbmN1cnJlbmN5CiAqIEBwYXJhbSBjYWxsYWJsZSAgICAgJG9uRnVsZmlsbGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaF9saW1pdF9hbGwoCiAgICAkaXRlcmFibGUsCiAgICAkY29uY3VycmVuY3ksCiAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsCikgewogICAgcmV0dXJuIGVhY2hfbGltaXQoCiAgICAgICAgJGl0ZXJhYmxlLAogICAgICAgICRjb25jdXJyZW5jeSwKICAgICAgICAkb25GdWxmaWxsZWQsCiAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgsIFByb21pc2VJbnRlcmZhY2UgJGFnZ3JlZ2F0ZSkgewogICAgICAgICAgICAkYWdncmVnYXRlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfQogICAgKTsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgZnVsZmlsbGVkLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGlzX2Z1bGZpbGxlZChQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlKQp7CiAgICByZXR1cm4gJHByb21pc2UtPmdldFN0YXRlKCkgPT09IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRDsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAqCiAqIEBwYXJhbSBQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaXNfcmVqZWN0ZWQoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSkKewogICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpSRUpFQ1RFRDsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGlzX3NldHRsZWQoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSkKewogICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HOwp9CgovKioKICogQHNlZSBDb3JvdXRpbmUKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIGNvcm91dGluZShjYWxsYWJsZSAkZ2VuZXJhdG9yRm4pCnsKICAgIHJldHVybiBuZXcgQ29yb3V0aW5lKCRnZW5lcmF0b3JGbik7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/functions_include.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXFByb21pc2VccHJvbWlzZV9mb3InKSkgewogICAgcmVxdWlyZSBfX0RJUl9fIC4gJy9mdW5jdGlvbnMucGhwJzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/Promise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBQcm9taXNlcy9BKyBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByZWN1cnNpb24gd2hlbiBwb3NzaWJsZS4KICoKICogQGxpbmsgaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8KICovCmNsYXNzIFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHN0YXRlID0gc2VsZjo6UEVORElORzsKICAgIHByaXZhdGUgJHJlc3VsdDsKICAgIHByaXZhdGUgJGNhbmNlbEZuOwogICAgcHJpdmF0ZSAkd2FpdEZuOwogICAgcHJpdmF0ZSAkd2FpdExpc3Q7CiAgICBwcml2YXRlICRoYW5kbGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YWl0Rm4gICBGbiB0aGF0IHdoZW4gaW52b2tlZCByZXNvbHZlcyB0aGUgcHJvbWlzZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FuY2VsRm4gRm4gdGhhdCB3aGVuIGludm9rZWQgY2FuY2VscyB0aGUgcHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIGNhbGxhYmxlICR3YWl0Rm4gPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRjYW5jZWxGbiA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT53YWl0Rm4gPSAkd2FpdEZuOwogICAgICAgICR0aGlzLT5jYW5jZWxGbiA9ICRjYW5jZWxGbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSA9PT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAkcCA9IG5ldyBQcm9taXNlKG51bGwsIFskdGhpcywgJ2NhbmNlbCddKTsKICAgICAgICAgICAgJHRoaXMtPmhhbmRsZXJzW10gPSBbJHAsICRvbkZ1bGZpbGxlZCwgJG9uUmVqZWN0ZWRdOwogICAgICAgICAgICAkcC0+d2FpdExpc3QgPSAkdGhpcy0+d2FpdExpc3Q7CiAgICAgICAgICAgICRwLT53YWl0TGlzdFtdID0gJHRoaXM7CiAgICAgICAgICAgIHJldHVybiAkcDsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiBhIGZ1bGZpbGxlZCBwcm9taXNlIGFuZCBpbW1lZGlhdGVseSBpbnZva2UgYW55IGNhbGxiYWNrcy4KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQpIHsKICAgICAgICAgICAgcmV0dXJuICRvbkZ1bGZpbGxlZAogICAgICAgICAgICAgICAgPyBwcm9taXNlX2ZvcigkdGhpcy0+cmVzdWx0KS0+dGhlbigkb25GdWxmaWxsZWQpCiAgICAgICAgICAgICAgICA6IHByb21pc2VfZm9yKCR0aGlzLT5yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgLy8gSXQncyBlaXRoZXIgY2FuY2VsbGVkIG9yIHJlamVjdGVkLCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlCiAgICAgICAgLy8gYW5kIGltbWVkaWF0ZWx5IGludm9rZSBhbnkgY2FsbGJhY2tzLgogICAgICAgICRyZWplY3Rpb24gPSByZWplY3Rpb25fZm9yKCR0aGlzLT5yZXN1bHQpOwogICAgICAgIHJldHVybiAkb25SZWplY3RlZCA/ICRyZWplY3Rpb24tPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpIDogJHJlamVjdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGhlbihudWxsLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgJGlubmVyID0gJHRoaXMtPnJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2VJbnRlcmZhY2UKICAgICAgICAgICAgPyAkdGhpcy0+cmVzdWx0LT53YWl0KCR1bndyYXApCiAgICAgICAgICAgIDogJHRoaXMtPnJlc3VsdDsKCiAgICAgICAgaWYgKCR1bndyYXApIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+c3RhdGUgPT09IHNlbGY6OkZVTEZJTExFRAogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaW5uZXI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBJdCdzIHJlamVjdGVkIHNvICJ1bndyYXAiIGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb25fZm9yKCRpbm5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgIT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGlmICgkdGhpcy0+Y2FuY2VsRm4pIHsKICAgICAgICAgICAgJGZuID0gJHRoaXMtPmNhbmNlbEZuOwogICAgICAgICAgICAkdGhpcy0+Y2FuY2VsRm4gPSBudWxsOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGZuKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJGUpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmVqZWN0IHRoZSBwcm9taXNlIG9ubHkgaWYgaXQgd2Fzbid0IHJlamVjdGVkIGluIGEgdGhlbiBjYWxsYmFjay4KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWplY3QobmV3IENhbmNlbGxhdGlvbkV4Y2VwdGlvbignUHJvbWlzZSBoYXMgYmVlbiBjYW5jZWxsZWQnKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0dGxlKHNlbGY6OkZVTEZJTExFRCwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pCiAgICB7CiAgICAgICAgJHRoaXMtPnNldHRsZShzZWxmOjpSRUpFQ1RFRCwgJHJlYXNvbik7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXR0bGUoJHN0YXRlLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAvLyBJZ25vcmUgY2FsbHMgd2l0aCB0aGUgc2FtZSByZXNvbHV0aW9uLgogICAgICAgICAgICBpZiAoJHN0YXRlID09PSAkdGhpcy0+c3RhdGUgJiYgJHZhbHVlID09PSAkdGhpcy0+cmVzdWx0KSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgJHRoaXMtPnN0YXRlID09PSAkc3RhdGUKICAgICAgICAgICAgICAgID8gbmV3IFxMb2dpY0V4Y2VwdGlvbigiVGhlIHByb21pc2UgaXMgYWxyZWFkeSB7JHN0YXRlfS4iKQogICAgICAgICAgICAgICAgOiBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDYW5ub3QgY2hhbmdlIGEgeyR0aGlzLT5zdGF0ZX0gcHJvbWlzZSB0byB7JHN0YXRlfSIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gJHRoaXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ2Fubm90IGZ1bGZpbGwgb3IgcmVqZWN0IGEgcHJvbWlzZSB3aXRoIGl0c2VsZicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZSBidXQgc3Rhc2ggdGhlIGhhbmRsZXJzLgogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdGF0ZTsKICAgICAgICAkdGhpcy0+cmVzdWx0ID0gJHZhbHVlOwogICAgICAgICRoYW5kbGVycyA9ICR0aGlzLT5oYW5kbGVyczsKICAgICAgICAkdGhpcy0+aGFuZGxlcnMgPSBudWxsOwogICAgICAgICR0aGlzLT53YWl0TGlzdCA9ICR0aGlzLT53YWl0Rm4gPSBudWxsOwogICAgICAgICR0aGlzLT5jYW5jZWxGbiA9IG51bGw7CgogICAgICAgIGlmICghJGhhbmRsZXJzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgbm90IGEgc2V0dGxlZCBwcm9taXNlIG9yIGEgdGhlbmFibGUsIHRoZW4gcmVzb2x2ZQogICAgICAgIC8vIGl0IGluIHRoZSB0YXNrIHF1ZXVlIHVzaW5nIHRoZSBjb3JyZWN0IElELgogICAgICAgIGlmICghbWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgJGlkID0gJHN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQgPyAxIDogMjsKICAgICAgICAgICAgLy8gSXQncyBhIHN1Y2Nlc3MsIHNvIHJlc29sdmUgdGhlIGhhbmRsZXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgICAgcXVldWUoKS0+YWRkKHN0YXRpYyBmdW5jdGlvbiAoKSB1c2UgKCRpZCwgJHZhbHVlLCAkaGFuZGxlcnMpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoYW5kbGVycyBhcyAkaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKCRpZCwgJHZhbHVlLCAkaGFuZGxlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlCiAgICAgICAgICAgICYmICR2YWx1ZS0+Z2V0U3RhdGUoKSA9PT0gc2VsZjo6UEVORElORwogICAgICAgICkgewogICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBtZXJnZSBvdXIgaGFuZGxlcnMgb250byB0aGUgbmV4dCBwcm9taXNlLgogICAgICAgICAgICAkdmFsdWUtPmhhbmRsZXJzID0gYXJyYXlfbWVyZ2UoJHZhbHVlLT5oYW5kbGVycywgJGhhbmRsZXJzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBoYW5kbGVycyB3aGVuIHRoZSBmb3J3YXJkZWQgcHJvbWlzZSBpcyByZXNvbHZlZC4KICAgICAgICAgICAgJHZhbHVlLT50aGVuKAogICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGhhbmRsZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGhhbmRsZXJzIGFzICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKDEsICR2YWx1ZSwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGhhbmRsZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGhhbmRsZXJzIGFzICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKDIsICRyZWFzb24sICRoYW5kbGVyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2FsbCBhIHN0YWNrIG9mIGhhbmRsZXJzIHVzaW5nIGEgc3BlY2lmaWMgY2FsbGJhY2sgaW5kZXggYW5kIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAkaW5kZXggICAxIChyZXNvbHZlKSBvciAyIChyZWplY3QpLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSAgIFZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLgogICAgICogQHBhcmFtIGFycmF5ICRoYW5kbGVyIEFycmF5IG9mIGhhbmRsZXIgZGF0YSAocHJvbWlzZSBhbmQgY2FsbGJhY2tzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIG5leHQgZ3JvdXAgdG8gcmVzb2x2ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2FsbEhhbmRsZXIoJGluZGV4LCAkdmFsdWUsIGFycmF5ICRoYW5kbGVyKQogICAgewogICAgICAgIC8qKiBAdmFyIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgKi8KICAgICAgICAkcHJvbWlzZSA9ICRoYW5kbGVyWzBdOwoKICAgICAgICAvLyBUaGUgcHJvbWlzZSBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBvciByZXNvbHZlZCBiZWZvcmUgcGxhY2luZwogICAgICAgIC8vIHRoaXMgdGh1bmsgaW4gdGhlIHF1ZXVlLgogICAgICAgIGlmICgkcHJvbWlzZS0+Z2V0U3RhdGUoKSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoaXNzZXQoJGhhbmRsZXJbJGluZGV4XSkpIHsKICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCRoYW5kbGVyWyRpbmRleF0oJHZhbHVlKSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkaW5kZXggPT09IDEpIHsKICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgcmVzb2x1dGlvbiB2YWx1ZXMgYXMtaXMuCiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkdmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gRm9yd2FyZCByZWplY3Rpb25zIGRvd24gdGhlIGNoYWluLgogICAgICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkcmVhc29uKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkcmVhc29uKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gd2FpdElmUGVuZGluZygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT53YWl0Rm4pIHsKICAgICAgICAgICAgJHRoaXMtPmludm9rZVdhaXRGbigpOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+d2FpdExpc3QpIHsKICAgICAgICAgICAgJHRoaXMtPmludm9rZVdhaXRMaXN0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBub3Qgd2FpdCBmdW5jdGlvbiwgdGhlbiByZWplY3QgdGhlIHByb21pc2UuCiAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJ0Nhbm5vdCB3YWl0IG9uIGEgcHJvbWlzZSB0aGF0IGhhcyAnCiAgICAgICAgICAgICAgICAuICdubyBpbnRlcm5hbCB3YWl0IGZ1bmN0aW9uLiBZb3UgbXVzdCBwcm92aWRlIGEgd2FpdCAnCiAgICAgICAgICAgICAgICAuICdmdW5jdGlvbiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgcHJvbWlzZSB0byBiZSBhYmxlIHRvICcKICAgICAgICAgICAgICAgIC4gJ3dhaXQgb24gYSBwcm9taXNlLicpOwogICAgICAgIH0KCiAgICAgICAgcXVldWUoKS0+cnVuKCk7CgogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgJHRoaXMtPnJlamVjdCgnSW52b2tpbmcgdGhlIHdhaXQgY2FsbGJhY2sgZGlkIG5vdCByZXNvbHZlIHRoZSBwcm9taXNlJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW52b2tlV2FpdEZuKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkd2ZuID0gJHRoaXMtPndhaXRGbjsKICAgICAgICAgICAgJHRoaXMtPndhaXRGbiA9IG51bGw7CiAgICAgICAgICAgICR3Zm4odHJ1ZSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkcmVhc29uKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9taXNlIGhhcyBub3QgYmVlbiByZXNvbHZlZCB5ZXQsIHNvIHJlamVjdCB0aGUgcHJvbWlzZQogICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgJHRoaXMtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9taXNlIHdhcyBhbHJlYWR5IHJlc29sdmVkLCBzbyB0aGVyZSdzIGEgcHJvYmxlbSBpbgogICAgICAgICAgICAgICAgLy8gdGhlIGFwcGxpY2F0aW9uLgogICAgICAgICAgICAgICAgdGhyb3cgJHJlYXNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVdhaXRMaXN0KCkKICAgIHsKICAgICAgICAkd2FpdExpc3QgPSAkdGhpcy0+d2FpdExpc3Q7CiAgICAgICAgJHRoaXMtPndhaXRMaXN0ID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJHdhaXRMaXN0IGFzICRyZXN1bHQpIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdC0+cmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0LT5yZXN1bHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0LT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQtPnJlc3VsdC0+d2FpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromiseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCiAqCiAqIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyB0aGVuIG1ldGhvZCwKICogd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2ZW50dWFsIHZhbHVlIG9yCiAqIHRoZSByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCiAqCiAqIEBsaW5rIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vCiAqLwppbnRlcmZhY2UgUHJvbWlzZUludGVyZmFjZQp7CiAgICBjb25zdCBQRU5ESU5HID0gJ3BlbmRpbmcnOwogICAgY29uc3QgRlVMRklMTEVEID0gJ2Z1bGZpbGxlZCc7CiAgICBjb25zdCBSRUpFQ1RFRCA9ICdyZWplY3RlZCc7CgogICAgLyoqCiAgICAgKiBBcHBlbmRzIGZ1bGZpbGxtZW50IGFuZCByZWplY3Rpb24gaGFuZGxlcnMgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zCiAgICAgKiBhIG5ldyBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsZWQgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uRnVsZmlsbGVkIEludm9rZWQgd2hlbiB0aGUgcHJvbWlzZSBmdWxmaWxscy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25SZWplY3RlZCAgSW52b2tlZCB3aGVuIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLgogICAgICoKICAgICAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTsKCiAgICAvKioKICAgICAqIEFwcGVuZHMgYSByZWplY3Rpb24gaGFuZGxlciBjYWxsYmFjayB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMgYSBuZXcKICAgICAqIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGlmIGl0IGlzIGNhbGxlZCwKICAgICAqIG9yIHRvIGl0cyBvcmlnaW5hbCBmdWxmaWxsbWVudCB2YWx1ZSBpZiB0aGUgcHJvbWlzZSBpcyBpbnN0ZWFkCiAgICAgKiBmdWxmaWxsZWQuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkIEludm9rZWQgd2hlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCk7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlICgicGVuZGluZyIsICJyZWplY3RlZCIsIG9yICJmdWxmaWxsZWQiKS4KICAgICAqCiAgICAgKiBUaGUgdGhyZWUgc3RhdGVzIGNhbiBiZSBjaGVja2VkIGFnYWluc3QgdGhlIGNvbnN0YW50cyBkZWZpbmVkIG9uCiAgICAgKiBQcm9taXNlSW50ZXJmYWNlOiBQRU5ESU5HLCBGVUxGSUxMRUQsIGFuZCBSRUpFQ1RFRC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKTsKCiAgICAvKioKICAgICAqIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmVqZWN0IHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIHJlYXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pOwoKICAgIC8qKgogICAgICogQ2FuY2VscyB0aGUgcHJvbWlzZSBpZiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vcHJvbWlzZXMtYXBsdXMvY2FuY2VsbGF0aW9uLXNwZWMvaXNzdWVzLzcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgpOwoKICAgIC8qKgogICAgICogV2FpdHMgdW50aWwgdGhlIHByb21pc2UgY29tcGxldGVzIGlmIHBvc3NpYmxlLgogICAgICoKICAgICAqIFBhc3MgJHVud3JhcCBhcyB0cnVlIHRvIHVud3JhcCB0aGUgcmVzdWx0IG9mIHRoZSBwcm9taXNlLCBlaXRoZXIKICAgICAqIHJldHVybmluZyB0aGUgcmVzb2x2ZWQgdmFsdWUgb3IgdGhyb3dpbmcgdGhlIHJlamVjdGVkIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgd2FpdGVkIG9uLCB0aGVuIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHVud3JhcAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uIGlmIHRoZSBwcm9taXNlIGhhcyBubyB3YWl0IGZ1bmN0aW9uIG9yIGlmIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSBkb2VzIG5vdCBzZXR0bGUgYWZ0ZXIgd2FpdGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoJHVud3JhcCA9IHRydWUpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/PromisorInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCB3aXRoIGNsYXNzZXMgdGhhdCByZXR1cm4gYSBwcm9taXNlLgogKi8KaW50ZXJmYWNlIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByb21pc2UuCiAgICAgKgogICAgICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9taXNlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectedPromise.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZC4KICoKICogVGhlbm5pbmcgb2ZmIG9mIHRoaXMgcHJvbWlzZSB3aWxsIGludm9rZSB0aGUgb25SZWplY3RlZCBjYWxsYmFjawogKiBpbW1lZGlhdGVseSBhbmQgaWdub3JlIG90aGVyIGNhbGxiYWNrcy4KICovCmNsYXNzIFJlamVjdGVkUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkcmVhc29uOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRyZWFzb24sICd0aGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBjcmVhdGUgYSBSZWplY3RlZFByb21pc2Ugd2l0aCBhIHByb21pc2UuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVhc29uID0gJHJlYXNvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBvblJlamVjdGVkIGNhbGxiYWNrIHRoZW4ganVzdCByZXR1cm4gc2VsZi4KICAgICAgICBpZiAoISRvblJlamVjdGVkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRxdWV1ZSA9IHF1ZXVlKCk7CiAgICAgICAgJHJlYXNvbiA9ICR0aGlzLT5yZWFzb247CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICRxdWV1ZS0+YWRkKHN0YXRpYyBmdW5jdGlvbiAoKSB1c2UgKCRwLCAkcmVhc29uLCAkb25SZWplY3RlZCkgewogICAgICAgICAgICBpZiAoJHAtPmdldFN0YXRlKCkgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSBpZiBvblJlamVjdGVkIGRvZXMgbm90IHRocm93LgogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvblJlamVjdGVkKCRyZWFzb24pKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBvblJlamVjdGVkIHRocmV3LCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlLgogICAgICAgICAgICAgICAgICAgICRwLT5yZWplY3QoJGUpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIC8vIG9uUmVqZWN0ZWQgdGhyZXcsIHNvIHJldHVybiBhIHJlamVjdGVkIHByb21pc2UuCiAgICAgICAgICAgICAgICAgICAgJHAtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICRwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aGVuKG51bGwsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCgkdW53cmFwID0gdHJ1ZSwgJGRlZmF1bHREZWxpdmVyeSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCR1bndyYXApIHsKICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uX2ZvcigkdGhpcy0+cmVhc29uKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6UkVKRUNURUQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoJHZhbHVlKQogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIkNhbm5vdCByZXNvbHZlIGEgcmVqZWN0ZWQgcHJvbWlzZSIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWplY3QoJHJlYXNvbikKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiAhPT0gJHRoaXMtPnJlYXNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDYW5ub3QgcmVqZWN0IGEgcmVqZWN0ZWQgcHJvbWlzZSIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCkKICAgIHsKICAgICAgICAvLyBwYXNzCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/RejectionException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gd2FpdGluZyBvbiBhIHJlamVjdGVkIHByb21pc2UuCiAqCiAqIFRoZSByZWFzb24gdmFsdWUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2V0UmVhc29uKCkgbWV0aG9kLgogKi8KY2xhc3MgUmVqZWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KewogICAgLyoqIEB2YXIgbWl4ZWQgUmVqZWN0aW9uIHJlYXNvbi4gKi8KICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uICAgICAgIFJlamVjdGlvbiByZWFzb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNjcmlwdGlvbiBPcHRpb25hbCBkZXNjcmlwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJlYXNvbiwgJGRlc2NyaXB0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhc29uID0gJHJlYXNvbjsKCiAgICAgICAgJG1lc3NhZ2UgPSAnVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkJzsKCiAgICAgICAgaWYgKCRkZXNjcmlwdGlvbikgewogICAgICAgICAgICAkbWVzc2FnZSAuPSAnIHdpdGggcmVhc29uOiAnIC4gJGRlc2NyaXB0aW9uOwogICAgICAgIH0gZWxzZWlmIChpc19zdHJpbmcoJHJlYXNvbikKICAgICAgICAgICAgfHwgKGlzX29iamVjdCgkcmVhc29uKSAmJiBtZXRob2RfZXhpc3RzKCRyZWFzb24sICdfX3RvU3RyaW5nJykpCiAgICAgICAgKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICcgd2l0aCByZWFzb246ICcgLiAkdGhpcy0+cmVhc29uOwogICAgICAgIH0gZWxzZWlmICgkcmVhc29uIGluc3RhbmNlb2YgXEpzb25TZXJpYWxpemFibGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJwogICAgICAgICAgICAgICAgLiBqc29uX2VuY29kZSgkdGhpcy0+cmVhc29uLCBKU09OX1BSRVRUWV9QUklOVCk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlamVjdGlvbiByZWFzb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvbjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHRhc2sgcXVldWUgdGhhdCBleGVjdXRlcyB0YXNrcyBpbiBhIEZJRk8gb3JkZXIuCiAqCiAqIFRoaXMgdGFzayBxdWV1ZSBjbGFzcyBpcyB1c2VkIHRvIHNldHRsZSBwcm9taXNlcyBhc3luY2hyb25vdXNseSBhbmQKICogbWFpbnRhaW5zIGEgY29uc3RhbnQgc3RhY2sgc2l6ZS4gWW91IGNhbiB1c2UgdGhlIHRhc2sgcXVldWUgYXN5bmNocm9ub3VzbHkKICogYnkgY2FsbGluZyB0aGUgYHJ1bigpYCBmdW5jdGlvbiBvZiB0aGUgZ2xvYmFsIHRhc2sgcXVldWUgaW4gYW4gZXZlbnQgbG9vcC4KICoKICogICAgIEd1enpsZUh0dHBcUHJvbWlzZVxxdWV1ZSgpLT5ydW4oKTsKICovCmNsYXNzIFRhc2tRdWV1ZSBpbXBsZW1lbnRzIFRhc2tRdWV1ZUludGVyZmFjZQp7CiAgICBwcml2YXRlICRlbmFibGVTaHV0ZG93biA9IHRydWU7CiAgICBwcml2YXRlICRxdWV1ZSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkd2l0aFNodXRkb3duID0gdHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJHdpdGhTaHV0ZG93bikgewogICAgICAgICAgICByZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVNodXRkb3duKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBydW4gdGhlIHRhc2tzIGlmIGFuIEVfRVJST1IgZGlkbid0IG9jY3VyLgogICAgICAgICAgICAgICAgICAgICRlcnIgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICghJGVyciB8fCAoJGVyclsndHlwZSddIF4gRV9FUlJPUikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5xdWV1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKQogICAgewogICAgICAgICR0aGlzLT5xdWV1ZVtdID0gJHRhc2s7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJ1bigpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgY2FsbGFibGUgJHRhc2sgKi8KICAgICAgICB3aGlsZSAoJHRhc2sgPSBhcnJheV9zaGlmdCgkdGhpcy0+cXVldWUpKSB7CiAgICAgICAgICAgICR0YXNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhlIHRhc2sgcXVldWUgd2lsbCBiZSBydW4gYW5kIGV4aGF1c3RlZCBieSBkZWZhdWx0IHdoZW4gdGhlIHByb2Nlc3MKICAgICAqIGV4aXRzIElGRiB0aGUgZXhpdCBpcyBub3QgdGhlIHJlc3VsdCBvZiBhIFBIUCBFX0VSUk9SIGVycm9yLgogICAgICoKICAgICAqIFlvdSBjYW4gZGlzYWJsZSBydW5uaW5nIHRoZSBhdXRvbWF0aWMgc2h1dGRvd24gb2YgdGhlIHF1ZXVlIGJ5IGNhbGxpbmcKICAgICAqIHRoaXMgZnVuY3Rpb24uIElmIHlvdSBkaXNhYmxlIHRoZSB0YXNrIHF1ZXVlIHNodXRkb3duIHByb2Nlc3MsIHRoZW4geW91CiAgICAgKiBNVVNUIGVpdGhlciBydW4gdGhlIHRhc2sgcXVldWUgKGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgeW91ciBldmVudCBsb29wCiAgICAgKiBvciBtYW51YWxseSB1c2luZyB0aGUgcnVuKCkgbWV0aG9kKSBvciB3YWl0IG9uIGVhY2ggb3V0c3RhbmRpbmcgcHJvbWlzZS4KICAgICAqCiAgICAgKiBOb3RlOiBUaGlzIHNodXRkb3duIHdpbGwgb2NjdXIgYmVmb3JlIGFueSBkZXN0cnVjdG9ycyBhcmUgdHJpZ2dlcmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZVNodXRkb3duKCkKICAgIHsKICAgICAgICAkdGhpcy0+ZW5hYmxlU2h1dGRvd24gPSBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/promises/src/TaskQueueInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmludGVyZmFjZSBUYXNrUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOwoKICAgIC8qKgogICAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHF1ZXVlIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0aGUgbmV4dCB0aW1lIHJ1biBpcwogICAgICogY2FsbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkdGFzawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYWxsIG9mIHRoZSBwZW5kaW5nIHRhc2sgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/.editorconfig</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cm9vdCA9IHRydWUKClsqXQpjaGFyc2V0ID0gdXRmLTgKZW5kX29mX2xpbmUgPSBsZgppbmRlbnRfc2l6ZSA9IDQKaW5kZW50X3N0eWxlID0gc3BhY2UKaW5zZXJ0X2ZpbmFsX25ld2xpbmUgPSB0cnVlCnRyaW1fdHJhaWxpbmdfd2hpdGVzcGFjZSA9IHRydWUK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2UgTG9nCgoKQWxsIG5vdGFibGUgY2hhbmdlcyB0byB0aGlzIHByb2plY3Qgd2lsbCBiZSBkb2N1bWVudGVkIGluIHRoaXMgZmlsZS4KClRoZSBmb3JtYXQgaXMgYmFzZWQgb24gW0tlZXAgYSBDaGFuZ2Vsb2ddKGh0dHA6Ly9rZWVwYWNoYW5nZWxvZy5jb20vZW4vMS4wLjAvKQphbmQgdGhpcyBwcm9qZWN0IGFkaGVyZXMgdG8gW1NlbWFudGljIFZlcnNpb25pbmddKGh0dHA6Ly9zZW12ZXIub3JnL3NwZWMvdjIuMC4wLmh0bWwpLgoKCiMjIFtVbnJlbGVhc2VkXQoKCiMjIFsxLjUuMl0gLSAyMDE4LTEyLTA0CgojIyMgRml4ZWQKCi0gQ2hlY2sgYm9keSBzaXplIHdoZW4gZ2V0dGluZyB0aGUgbWVzc2FnZSBzdW1tYXJ5CgoKIyMgWzEuNS4xXSAtIDIwMTgtMTItMDQKCiMjIyBGaXhlZAoKLSBHZXQgdGhlIHN1bW1hcnkgb2YgYSBib2R5IG9ubHkgaWYgaXQgaXMgcmVhZGFibGUKCgojIyBbMS41LjBdIC0gMjAxOC0xMi0wMwoKIyMjIEFkZGVkCgotIFJlc3BvbnNlIGZpcnN0LWxpbmUgdG8gcmVzcG9uc2Ugc3RyaW5nIGV4Y2VwdGlvbiAoZml4ZXMgIzE0NSkKLSBBIHRlc3QgZm9yICMxMjkgYmVoYXZpb3IKLSBgZ2V0X21lc3NhZ2VfYm9keV9zdW1tYXJ5YCBmdW5jdGlvbiBpbiBvcmRlciB0byBnZXQgdGhlIG1lc3NhZ2Ugc3VtbWFyeQotIGAzZ3BgIGFuZCBgbWt2YCBtaW1lIHR5cGVzCgojIyMgQ2hhbmdlZAoKLSBDbGFyaWZ5IGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gc3RyZWFtIGlzIGRldGFjaGVkCgojIyMgRGVwcmVjYXRlZAoKLSBEZXByZWNhdGVkIHBhcnNpbmcgZm9sZGVkIGhlYWRlciBsaW5lcyBhcyBwZXIgUkZDIDcyMzAKCiMjIyBGaXhlZAoKLSBGaXggYEFwcGVuZFN0cmVhbTo6ZGV0YWNoYCB0byBub3QgY2xvc2Ugc3RyZWFtcwotIGBJbmZsYXRlU3RyZWFtYCBwcmVzZXJ2ZXMgYGlzU2Vla2FibGVgIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSBgU2VydmVyUmVxdWVzdDo6Z2V0VXJpRnJvbUdsb2JhbHNgIHRvIHN1cHBvcnQgVVJMcyBpbiBxdWVyeSBwYXJhbWV0ZXJzCgoKU2V2ZXJhbCBvdGhlciBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLgoKCiMjIFsxLjQuMl0gLSAyMDE3LTAzLTIwCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ZWQgQkMgYnJlYWsgdG8gYFVyaTo6cmVzb2x2ZWAgYW5kIGBVcmk6OnJlbW92ZURvdFNlZ21lbnRzYCBieSByZW1vdmluZwogIGNhbGxzIHRvIGB0cmlnZ2VyX2Vycm9yYCB3aGVuIGRlcHJlY2F0ZWQgbWV0aG9kcyBhcmUgaW52b2tlZC4KCgojIyBbMS40LjFdIC0gMjAxNy0wMi0yNwoKIyMjIEFkZGVkCgotIFJyaWdnZXJpbmcgb2Ygc2lsZW5jZWQgZGVwcmVjYXRpb24gd2FybmluZ3MuCgojIyMgRml4ZWQKCi0gUmV2ZXJ0ZWQgQkMgYnJlYWsgYnkgcmVpbnRyb2R1Y2luZyBiZWhhdmlvciB0byBhdXRvbWFnaWNhbGx5IGZpeCBhIFVSSSB3aXRoIGEKICByZWxhdGl2ZSBwYXRoIGFuZCBhbiBhdXRob3JpdHkgYnkgYWRkaW5nIGEgbGVhZGluZyBzbGFzaCB0byB0aGUgcGF0aC4gSXQncyBvbmx5CiAgZGVwcmVjYXRlZCBub3cuCgoKIyMgWzEuNC4wXSAtIDIwMTctMDItMjEKCiMjIyBBZGRlZAoKLSBBZGRlZCBjb21tb24gVVJJIHV0aWxpdHkgbWV0aG9kcyBiYXNlZCBvbiBSRkMgMzk4NiAoc2VlIGRvY3VtZW50YXRpb24gaW4gdGhlIHJlYWRtZSk6CiAgLSBgVXJpOjppc0RlZmF1bHRQb3J0YAogIC0gYFVyaTo6aXNBYnNvbHV0ZWAKICAtIGBVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2VgCiAgLSBgVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZWAKICAtIGBVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlYAogIC0gYFVyaTo6aXNTYW1lRG9jdW1lbnRSZWZlcmVuY2VgCiAgLSBgVXJpOjpjb21wb3NlQ29tcG9uZW50c2AKICAtIGBVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCiAgLSBgVXJpTm9ybWFsaXplcjo6aXNFcXVpdmFsZW50YAogIC0gYFVyaVJlc29sdmVyOjpyZWxhdGl2aXplYAoKIyMjIENoYW5nZWQKCi0gRW5zdXJlIGBTZXJ2ZXJSZXF1ZXN0OjpnZXRVcmlGcm9tR2xvYmFsc2AgcmV0dXJucyBhIFVSSSBpbiBhYnNvbHV0ZSBmb3JtLgotIEFsbG93IGBwYXJzZV9yZXNwb25zZWAgdG8gcGFyc2UgYSByZXNwb25zZSB3aXRob3V0IGRlbGltaXRpbmcgc3BhY2UgYW5kIHJlYXNvbi4KLSBFbnN1cmUgZWFjaCBVUkkgbW9kaWZpY2F0aW9uIHJlc3VsdHMgaW4gYSB2YWxpZCBVUkkgYWNjb3JkaW5nIHRvIFBTUi03IGRpc2N1c3Npb25zLgogIEludmFsaWQgbW9kaWZpY2F0aW9ucyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIHdyb25nIFVSSSBvcgogIGRvaW5nIHNvbWUgbWFnaWMuCiAgLSBgKG5ldyBVcmkpLT53aXRoUGF0aCgnZm9vJyktPndpdGhIb3N0KCdleGFtcGxlLmNvbScpYCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgogICAgYmVjYXVzZSB0aGUgcGF0aCBvZiBhIFVSSSB3aXRoIGFuIGF1dGhvcml0eSBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCAiLyIgb3IgYmUgZW1wdHkKICAtIGAobmV3IFVyaSgpKS0+d2l0aFNjaGVtZSgnaHR0cCcpYCB3aWxsIHJldHVybiBgJ2h0dHA6Ly9sb2NhbGhvc3QnYAoKIyMjIERlcHJlY2F0ZWQKCi0gYFVyaTo6cmVzb2x2ZWAgaW4gZmF2b3Igb2YgYFVyaVJlc29sdmVyOjpyZXNvbHZlYAotIGBVcmk6OnJlbW92ZURvdFNlZ21lbnRzYCBpbiBmYXZvciBvZiBgVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzYAoKIyMjIEZpeGVkCgotIGBTdHJlYW06OnJlYWRgIHdoZW4gbGVuZ3RoIHBhcmFtZXRlciA8PSAwLgotIGBjb3B5X3RvX3N0cmVhbWAgcmVhZHMgYnl0ZXMgaW4gY2h1bmtzIGluc3RlYWQgb2YgYG1heExlbmAgaW50byBtZW1vcnkuCi0gYFNlcnZlclJlcXVlc3Q6OmdldFVyaUZyb21HbG9iYWxzYCB3aGVuIGBIb3N0YCBoZWFkZXIgY29udGFpbnMgcG9ydC4KLSBDb21wYXRpYmlsaXR5IG9mIFVSSXMgd2l0aCBgZmlsZWAgc2NoZW1lIGFuZCBlbXB0eSBob3N0LgoKCiMjIFsxLjMuMV0gLSAyMDE2LTA2LTI1CgojIyMgRml4ZWQKCi0gYFVyaTo6X190b1N0cmluZ2AgZm9yIG5ldHdvcmsgcGF0aCByZWZlcmVuY2VzLCBlLmcuIGAvL2V4YW1wbGUub3JnYC4KLSBNaXNzaW5nIGxvd2VyY2FzZSBub3JtYWxpemF0aW9uIGZvciBob3N0LgotIEhhbmRsaW5nIG9mIFVSSSBjb21wb25lbnRzIGluIGNhc2UgdGhleSBhcmUgYCcwJ2AgaW4gYSBsb3Qgb2YgcGxhY2VzLAogIGUuZy4gYXMgYSB1c2VyIGluZm8gcGFzc3dvcmQuCi0gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYCB0byBjb3JyZWN0bHkgbWVyZ2UgaGVhZGVycyB3aXRoIGRpZmZlcmVudCBjYXNlLgotIFRyaW1taW5nIG9mIGhlYWRlciB2YWx1ZXMgaW4gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYC4gSGVhZGVyIHZhbHVlcyBtYXkKICBiZSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYWNjb3JkaW5nIHRvIFJGQyA3MjMwCiAgU2VjdGlvbiAzLjIuNC4gVGhpcyBkb2VzIG5vdCBhcHBseSB0byBoZWFkZXIgbmFtZXMuCi0gYFVyaTo6d2l0aEFkZGVkSGVhZGVyYCB3aXRoIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMuCi0gYFVyaTo6cmVzb2x2ZWAgd2hlbiBiYXNlIHBhdGggaGFzIG5vIHNsYXNoIGFuZCBoYW5kbGluZyBvZiBmcmFnbWVudC4KLSBIYW5kbGluZyBvZiBlbmNvZGluZyBpbiBgVXJpOjp3aXRoKG91dClRdWVyeVZhbHVlYCBzbyBvbmUgY2FuIHBhc3MgdGhlCiAga2V5L3ZhbHVlIGJvdGggaW4gZW5jb2RlZCBhcyB3ZWxsIGFzIGRlY29kZWQgZm9ybSB0byB0aG9zZSBtZXRob2RzLiBUaGlzIGlzCiAgY29uc2lzdGVudCB3aXRoIHdpdGhQYXRoLCB3aXRoUXVlcnkgZXRjLgotIGBTZXJ2ZXJSZXF1ZXN0Ojp3aXRob3V0QXR0cmlidXRlYCB3aGVuIGF0dHJpYnV0ZSB2YWx1ZSBpcyBudWxsLgoKCiMjIFsxLjMuMF0gLSAyMDE2LTA0LTEzCgojIyMgQWRkZWQKCi0gUmVtYWluaW5nIGludGVyZmFjZXMgbmVlZGVkIGZvciBmdWxsIFBTUjcgY29tcGF0aWJpbGl0eQogIChTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlLCBVcGxvYWRlZEZpbGVJbnRlcmZhY2UsIGV0Yy4pLgotIFN1cHBvcnQgZm9yIHN0cmVhbV9mb3IgZnJvbSBzY2FsYXJzLgoKIyMjIENoYW5nZWQKCi0gQ2FuIG5vdyBleHRlbmQgVXJpLgoKIyMjIEZpeGVkCi0gQSBidWcgaW4gdmFsaWRhdGluZyByZXF1ZXN0IG1ldGhvZHMgYnkgbWFraW5nIGl0IG1vcmUgcGVybWlzc2l2ZS4KCgojIyBbMS4yLjNdIC0gMjAxNi0wMi0xOAoKIyMjIEZpeGVkCgotIFN1cHBvcnQgaW4gYEd1enpsZUh0dHBcUHNyN1xDYWNoaW5nU3RyZWFtYCBmb3Igc2Vla2luZyBmb3J3YXJkIG9uIHJlbW90ZQogIHN0cmVhbXMsIHdoaWNoIGNhbiBzb21ldGltZXMgcmV0dXJuIGZld2VyIGJ5dGVzIHRoYW4gcmVxdWVzdGVkIHdpdGggYGZyZWFkYC4KLSBIYW5kbGluZyBvZiBnemlwcGVkIHJlc3BvbnNlcyB3aXRoIEZOQU1FIGhlYWRlcnMuCgoKIyMgWzEuMi4yXSAtIDIwMTYtMDEtMjIKCiMjIyBBZGRlZAoKLSBTdXBwb3J0IGZvciBVUklzIHdpdGhvdXQgYW55IGF1dGhvcml0eS4KLSBTdXBwb3J0IGZvciBIVFRQIDQ1MSAnVW5hdmFpbGFibGUgRm9yIExlZ2FsIFJlYXNvbnMuJwotIFN1cHBvcnQgZm9yIHVzaW5nICcwJyBhcyBhIGZpbGVuYW1lLgotIFN1cHBvcnQgZm9yIGluY2x1ZGluZyBub24tc3RhbmRhcmQgcG9ydHMgaW4gSG9zdCBoZWFkZXJzLgoKCiMjIFsxLjIuMV0gLSAyMDE1LTExLTAyCgojIyMgQ2hhbmdlcwoKLSBOb3cgc3VwcG9ydGluZyBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gc2Vla2luZyB0byBTRUVLX0VORC4KCgojIyBbMS4yLjBdIC0gMjAxNS0wOC0xNQoKIyMjIENoYW5nZWQKCi0gQm9keSBhcyBgIjAiYCBpcyBub3cgcHJvcGVybHkgYWRkZWQgdG8gYSByZXNwb25zZS4KLSBOb3cgYWxsb3dpbmcgZm9yd2FyZCBzZWVraW5nIGluIENhY2hpbmdTdHJlYW0uCi0gTm93IHByb3Blcmx5IHBhcnNpbmcgSFRUUCByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gcHJveHkgdGFyZ2V0cyBpbgogIGBwYXJzZV9yZXF1ZXN0YC4KLSBmdW5jdGlvbnMucGhwIGlzIG5vdyBjb25kaXRpb25hbGx5IHJlcXVpcmVkLgotIHVzZXItaW5mbyBpcyBubyBsb25nZXIgZHJvcHBlZCB3aGVuIHJlc29sdmluZyBVUklzLgoKCiMjIFsxLjEuMF0gLSAyMDE1LTA2LTI0CgojIyMgQ2hhbmdlZAoKLSBVUklzIGNhbiBub3cgYmUgcmVsYXRpdmUuCi0gYG11bHRpcGFydC9mb3JtLWRhdGFgIGhlYWRlcnMgYXJlIG5vdyBvdmVycmlkZGVuIGNhc2UtaW5zZW5zaXRpdmVseS4KLSBVUkkgcGF0aHMgbm8gbG9uZ2VyIGVuY29kZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBhbGxvd2VkCiAgaW4gVVJJczogIigiLCAiKSIsICIqIiwgIiEiLCAiJyIKLSBBIHBvcnQgaXMgbm8gbG9uZ2VyIGFkZGVkIHRvIGEgVVJJIHdoZW4gdGhlIHNjaGVtZSBpcyBtaXNzaW5nIGFuZCBubyBwb3J0IGlzCiAgcHJlc2VudC4KCgojIyAxLjAuMCAtIDIwMTUtMDUtMTkKCkluaXRpYWwgcmVsZWFzZS4KCkN1cnJlbnRseSB1bnN1cHBvcnRlZDoKCi0gYFBzclxIdHRwXE1lc3NhZ2VcU2VydmVyUmVxdWVzdEludGVyZmFjZWAKLSBgUHNyXEh0dHBcTWVzc2FnZVxVcGxvYWRlZEZpbGVJbnRlcmZhY2VgCgoKCltVbnJlbGVhc2VkXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS41LjIuLi5IRUFEClsxLjUuMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNS4xLi4uMS41LjIKWzEuNS4xXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS41LjAuLi4xLjUuMQpbMS41LjBdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjQuMi4uLjEuNS4wClsxLjQuMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuNC4xLi4uMS40LjIKWzEuNC4xXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS40LjAuLi4xLjQuMQpbMS40LjBdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjMuMS4uLjEuNC4wClsxLjMuMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMy4wLi4uMS4zLjEKWzEuMy4wXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4yLjMuLi4xLjMuMApbMS4yLjNdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjIuMi4uLjEuMi4zClsxLjIuMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMi4xLi4uMS4yLjIKWzEuMi4xXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3L2NvbXBhcmUvMS4yLjAuLi4xLjIuMQpbMS4yLjBdOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcvY29tcGFyZS8xLjEuMC4uLjEuMi4wClsxLjEuMF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHNyNy9jb21wYXJlLzEuMC4wLi4uMS4xLjAK]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImRlc2NyaXB0aW9uIjogIlBTUi03IG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gdGhhdCBhbHNvIHByb3ZpZGVzIGNvbW1vbiB1dGlsaXR5IG1ldGhvZHMiLAogICAgImtleXdvcmRzIjogWyJyZXF1ZXN0IiwgInJlc3BvbnNlIiwgIm1lc3NhZ2UiLCAic3RyZWFtIiwgImh0dHAiLCAidXJpIiwgInVybCIsICJwc3ItNyJdLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjQuMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAifjEuMCIsCiAgICAgICAgInJhbG91cGhpZS9nZXRhbGxoZWFkZXJzIjogIl4yLjAuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC44LjM2IHx8IF41LjcuMjcgfHwgXjYuNS44IgogICAgfSwKICAgICJwcm92aWRlIjogewogICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiXQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcVGVzdHNcXFBzcjdcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjUtZGV2IgogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgRG93bGluZywgaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyA8bXRkb3dsaW5nQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBQU1ItNyBNZXNzYWdlIEltcGxlbWVudGF0aW9uCgpUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgYSBmdWxsIFtQU1ItN10oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvKQptZXNzYWdlIGltcGxlbWVudGF0aW9uLCBzZXZlcmFsIHN0cmVhbSBkZWNvcmF0b3JzLCBhbmQgc29tZSBoZWxwZnVsCmZ1bmN0aW9uYWxpdHkgbGlrZSBxdWVyeSBzdHJpbmcgcGFyc2luZy4KCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9ndXp6bGUvcHNyNy5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9ndXp6bGUvcHNyNykKCgojIFN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKVGhpcyBwYWNrYWdlIGNvbWVzIHdpdGggYSBudW1iZXIgb2Ygc3RyZWFtIGltcGxlbWVudGF0aW9ucyBhbmQgc3RyZWFtCmRlY29yYXRvcnMuCgoKIyMgQXBwZW5kU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEFwcGVuZFN0cmVhbWAKClJlYWRzIGZyb20gbXVsdGlwbGUgc3RyZWFtcywgb25lIGFmdGVyIHRoZSBvdGhlci4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJGEgPSBQc3I3XHN0cmVhbV9mb3IoJ2FiYywgJyk7CiRiID0gUHNyN1xzdHJlYW1fZm9yKCcxMjMuJyk7CiRjb21wb3NlZCA9IG5ldyBQc3I3XEFwcGVuZFN0cmVhbShbJGEsICRiXSk7CgokY29tcG9zZWQtPmFkZFN0cmVhbShQc3I3XHN0cmVhbV9mb3IoJyBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lJykpOwoKZWNobyAkY29tcG9zZWQ7IC8vIGFiYywgMTIzLiBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lLgpgYGAKCgojIyBCdWZmZXJTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcQnVmZmVyU3RyZWFtYAoKUHJvdmlkZXMgYSBidWZmZXIgc3RyZWFtIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gZmlsbCBhIGJ1ZmZlciwgYW5kIHJlYWQKZnJvbSB0byByZW1vdmUgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyLgoKVGhpcyBzdHJlYW0gcmV0dXJucyBhICJod20iIG1ldGFkYXRhIHZhbHVlIHRoYXQgdGVsbHMgdXBzdHJlYW0gY29uc3VtZXJzCndoYXQgdGhlIGNvbmZpZ3VyZWQgaGlnaCB3YXRlciBtYXJrIG9mIHRoZSBzdHJlYW0gaXMsIG9yIHRoZSBtYXhpbXVtCnByZWZlcnJlZCBzaXplIG9mIHRoZSBidWZmZXIuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCi8vIFdoZW4gbW9yZSB0aGFuIDEwMjQgYnl0ZXMgYXJlIGluIHRoZSBidWZmZXIsIGl0IHdpbGwgYmVnaW4gcmV0dXJuaW5nCi8vIGZhbHNlIHRvIHdyaXRlcy4gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgd3JpdGVycyBzaG91bGQgc2xvdyBkb3duLgokYnVmZmVyID0gbmV3IFBzcjdcQnVmZmVyU3RyZWFtKDEwMjQpOwpgYGAKCgojIyBDYWNoaW5nU3RyZWFtCgpUaGUgQ2FjaGluZ1N0cmVhbSBpcyB1c2VkIHRvIGFsbG93IHNlZWtpbmcgb3ZlciBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgb24Kbm9uLXNlZWthYmxlIHN0cmVhbXMuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHRyYW5zZmVycmluZyBhIG5vbi1zZWVrYWJsZQplbnRpdHkgYm9keSBmYWlscyBkdWUgdG8gbmVlZGluZyB0byByZXdpbmQgdGhlIHN0cmVhbSAoZm9yIGV4YW1wbGUsIHJlc3VsdGluZwpmcm9tIGEgcmVkaXJlY3QpLiBEYXRhIHRoYXQgaXMgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtIHdpbGwgYmUgYnVmZmVyZWQgaW4KYSBQSFAgdGVtcCBzdHJlYW0gc28gdGhhdCBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgYXJlIGNhY2hlZCBmaXJzdCBpbiBtZW1vcnksCnRoZW4gb24gZGlzay4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCdodHRwOi8vd3d3Lmdvb2dsZS5jb20nLCAncicpKTsKJHN0cmVhbSA9IG5ldyBQc3I3XENhY2hpbmdTdHJlYW0oJG9yaWdpbmFsKTsKCiRzdHJlYW0tPnJlYWQoMTAyNCk7CmVjaG8gJHN0cmVhbS0+dGVsbCgpOwovLyAxMDI0Cgokc3RyZWFtLT5zZWVrKDApOwplY2hvICRzdHJlYW0tPnRlbGwoKTsKLy8gMApgYGAKCgojIyBEcm9wcGluZ1N0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xEcm9wcGluZ1N0cmVhbWAKClN0cmVhbSBkZWNvcmF0b3IgdGhhdCBiZWdpbnMgZHJvcHBpbmcgZGF0YSBvbmNlIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nCnN0cmVhbSBiZWNvbWVzIHRvbyBmdWxsLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7CgovLyBDcmVhdGUgYW4gZW1wdHkgc3RyZWFtCiRzdHJlYW0gPSBQc3I3XHN0cmVhbV9mb3IoKTsKCi8vIFN0YXJ0IGRyb3BwaW5nIGRhdGEgd2hlbiB0aGUgc3RyZWFtIGhhcyBtb3JlIHRoYW4gMTAgYnl0ZXMKJGRyb3BwaW5nID0gbmV3IFBzcjdcRHJvcHBpbmdTdHJlYW0oJHN0cmVhbSwgMTApOwoKJGRyb3BwaW5nLT53cml0ZSgnMDEyMzQ1Njc4OTAxMjM0NTY3ODknKTsKZWNobyAkc3RyZWFtOyAvLyAwMTIzNDU2Nzg5CmBgYAoKCiMjIEZuU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEZuU3RyZWFtYAoKQ29tcG9zZSBzdHJlYW0gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIGEgaGFzaCBvZiBmdW5jdGlvbnMuCgpBbGxvd3MgZm9yIGVhc3kgdGVzdGluZyBhbmQgZXh0ZW5zaW9uIG9mIGEgcHJvdmlkZWQgc3RyZWFtIHdpdGhvdXQgbmVlZGluZwp0byBjcmVhdGUgYSBjb25jcmV0ZSBjbGFzcyBmb3IgYSBzaW1wbGUgZXh0ZW5zaW9uIHBvaW50LgoKYGBgcGhwCgp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJHN0cmVhbSA9IFBzcjdcc3RyZWFtX2ZvcignaGknKTsKJGZuU3RyZWFtID0gUHNyN1xGblN0cmVhbTo6ZGVjb3JhdGUoJHN0cmVhbSwgWwogICAgJ3Jld2luZCcgPT4gZnVuY3Rpb24gKCkgdXNlICgkc3RyZWFtKSB7CiAgICAgICAgZWNobyAnQWJvdXQgdG8gcmV3aW5kIC0gJzsKICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICBlY2hvICdyZXdvdW5kISc7CiAgICB9Cl0pOwoKJGZuU3RyZWFtLT5yZXdpbmQoKTsKLy8gT3V0cHV0czogQWJvdXQgdG8gcmV3aW5kIC0gcmV3b3VuZCEKYGBgCgoKIyMgSW5mbGF0ZVN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xJbmZsYXRlU3RyZWFtYAoKVXNlcyBQSFAncyB6bGliLmluZmxhdGUgZmlsdGVyIHRvIGluZmxhdGUgZGVmbGF0ZSBvciBnemlwcGVkIGNvbnRlbnQuCgpUaGlzIHN0cmVhbSBkZWNvcmF0b3Igc2tpcHMgdGhlIGZpcnN0IDEwIGJ5dGVzIG9mIHRoZSBnaXZlbiBzdHJlYW0gdG8gcmVtb3ZlCnRoZSBnemlwIGhlYWRlciwgY29udmVydHMgdGhlIHByb3ZpZGVkIHN0cmVhbSB0byBhIFBIUCBzdHJlYW0gcmVzb3VyY2UsCnRoZW4gYXBwZW5kcyB0aGUgemxpYi5pbmZsYXRlIGZpbHRlci4gVGhlIHN0cmVhbSBpcyB0aGVuIGNvbnZlcnRlZCBiYWNrCnRvIGEgR3V6emxlIHN0cmVhbSByZXNvdXJjZSB0byBiZSB1c2VkIGFzIGEgR3V6emxlIHN0cmVhbS4KCgojIyBMYXp5T3BlblN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xMYXp5T3BlblN0cmVhbWAKCkxhemlseSByZWFkcyBvciB3cml0ZXMgdG8gYSBmaWxlIHRoYXQgaXMgb3BlbmVkIG9ubHkgYWZ0ZXIgYW4gSU8gb3BlcmF0aW9uCnRha2UgcGxhY2Ugb24gdGhlIHN0cmVhbS4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJHN0cmVhbSA9IG5ldyBQc3I3XExhenlPcGVuU3RyZWFtKCcvcGF0aC90by9maWxlJywgJ3InKTsKLy8gVGhlIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBvcGVuZWQuLi4KCmVjaG8gJHN0cmVhbS0+cmVhZCgxMCk7Ci8vIFRoZSBmaWxlIGlzIG9wZW5lZCBhbmQgcmVhZCBmcm9tIG9ubHkgd2hlbiBuZWVkZWQuCmBgYAoKCiMjIExpbWl0U3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XExpbWl0U3RyZWFtYAoKTGltaXRTdHJlYW0gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIHN1YnNldCBvciBzbGljZSBvZiBhbiBleGlzdGluZyBzdHJlYW0gb2JqZWN0LgpUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGJyZWFraW5nIGEgbGFyZ2UgZmlsZSBpbnRvIHNtYWxsZXIgcGllY2VzIHRvIGJlIHNlbnQgaW4KY2h1bmtzIChlLmcuIEFtYXpvbiBTMydzIG11bHRpcGFydCB1cGxvYWQgQVBJKS4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCcvdG1wL3Rlc3QudHh0JywgJ3IrJykpOwplY2hvICRvcmlnaW5hbC0+Z2V0U2l6ZSgpOwovLyA+Pj4gMTA0ODU3NgoKLy8gTGltaXQgdGhlIHNpemUgb2YgdGhlIGJvZHkgdG8gMTAyNCBieXRlcyBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIGJ5dGUgMjA0OAokc3RyZWFtID0gbmV3IFBzcjdcTGltaXRTdHJlYW0oJG9yaWdpbmFsLCAxMDI0LCAyMDQ4KTsKZWNobyAkc3RyZWFtLT5nZXRTaXplKCk7Ci8vID4+PiAxMDI0CmVjaG8gJHN0cmVhbS0+dGVsbCgpOwovLyA+Pj4gMApgYGAKCgojIyBNdWx0aXBhcnRTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTXVsdGlwYXJ0U3RyZWFtYAoKU3RyZWFtIHRoYXQgd2hlbiByZWFkIHJldHVybnMgYnl0ZXMgZm9yIGEgc3RyZWFtaW5nIG11bHRpcGFydCBvcgptdWx0aXBhcnQvZm9ybS1kYXRhIHN0cmVhbS4KCgojIyBOb1NlZWtTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTm9TZWVrU3RyZWFtYAoKTm9TZWVrU3RyZWFtIHdyYXBzIGEgc3RyZWFtIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWVraW5nLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7Cgokb3JpZ2luYWwgPSBQc3I3XHN0cmVhbV9mb3IoJ2ZvbycpOwokbm9TZWVrID0gbmV3IFBzcjdcTm9TZWVrU3RyZWFtKCRvcmlnaW5hbCk7CgplY2hvICRub1NlZWstPnJlYWQoMyk7Ci8vIGZvbwp2YXJfZXhwb3J0KCRub1NlZWstPmlzU2Vla2FibGUoKSk7Ci8vIGZhbHNlCiRub1NlZWstPnNlZWsoMCk7CnZhcl9leHBvcnQoJG5vU2Vlay0+cmVhZCgzKSk7Ci8vIE5VTEwKYGBgCgoKIyMgUHVtcFN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xQdW1wU3RyZWFtYAoKUHJvdmlkZXMgYSByZWFkIG9ubHkgc3RyZWFtIHRoYXQgcHVtcHMgZGF0YSBmcm9tIGEgUEhQIGNhbGxhYmxlLgoKV2hlbiBpbnZva2luZyB0aGUgcHJvdmlkZWQgY2FsbGFibGUsIHRoZSBQdW1wU3RyZWFtIHdpbGwgcGFzcyB0aGUgYW1vdW50IG9mCmRhdGEgcmVxdWVzdGVkIHRvIHJlYWQgdG8gdGhlIGNhbGxhYmxlLiBUaGUgY2FsbGFibGUgY2FuIGNob29zZSB0byBpZ25vcmUKdGhpcyB2YWx1ZSBhbmQgcmV0dXJuIGZld2VyIG9yIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuIEFueSBleHRyYSBkYXRhCnJldHVybmVkIGJ5IHRoZSBwcm92aWRlZCBjYWxsYWJsZSBpcyBidWZmZXJlZCBpbnRlcm5hbGx5IHVudGlsIGRyYWluZWQgdXNpbmcKdGhlIHJlYWQoKSBmdW5jdGlvbiBvZiB0aGUgUHVtcFN0cmVhbS4gVGhlIHByb3ZpZGVkIGNhbGxhYmxlIE1VU1QgcmV0dXJuCmZhbHNlIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJlYWQuCgoKIyMgSW1wbGVtZW50aW5nIHN0cmVhbSBkZWNvcmF0b3JzCgpDcmVhdGluZyBhIHN0cmVhbSBkZWNvcmF0b3IgaXMgdmVyeSBlYXN5IHRoYW5rcyB0byB0aGUKYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdGAuIFRoaXMgdHJhaXQgcHJvdmlkZXMgbWV0aG9kcyB0aGF0CmltcGxlbWVudCBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgIGJ5IHByb3h5aW5nIHRvIGFuIHVuZGVybHlpbmcKc3RyZWFtLiBKdXN0IGB1c2VgIHRoZSBgU3RyZWFtRGVjb3JhdG9yVHJhaXRgIGFuZCBpbXBsZW1lbnQgeW91ciBjdXN0b20KbWV0aG9kcy4KCkZvciBleGFtcGxlLCBsZXQncyBzYXkgd2Ugd2FudGVkIHRvIGNhbGwgYSBzcGVjaWZpYyBmdW5jdGlvbiBlYWNoIHRpbWUgdGhlIGxhc3QKYnl0ZSBpcyByZWFkIGZyb20gYSBzdHJlYW0uIFRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyB0aGUKYHJlYWQoKWAgbWV0aG9kLgoKYGBgcGhwCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCmNsYXNzIEVvZkNhbGxiYWNrU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRjYWxsYmFjazsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sIGNhbGxhYmxlICRjYikKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkY2I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnN0cmVhbS0+cmVhZCgkbGVuZ3RoKTsKCiAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayB3aGVuIEVPRiBpcyBoaXQuCiAgICAgICAgaWYgKCR0aGlzLT5lb2YoKSkgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+Y2FsbGJhY2spOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KYGBgCgpUaGlzIGRlY29yYXRvciBjb3VsZCBiZSBhZGRlZCB0byBhbnkgZXhpc3Rpbmcgc3RyZWFtIGFuZCB1c2VkIGxpa2Ugc286CgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRvcmlnaW5hbCA9IFBzcjdcc3RyZWFtX2ZvcignZm9vJyk7CgokZW9mU3RyZWFtID0gbmV3IEVvZkNhbGxiYWNrU3RyZWFtKCRvcmlnaW5hbCwgZnVuY3Rpb24gKCkgewogICAgZWNobyAnRU9GISc7Cn0pOwoKJGVvZlN0cmVhbS0+cmVhZCgyKTsKJGVvZlN0cmVhbS0+cmVhZCgxKTsKLy8gZWNob2VzICJFT0YhIgokZW9mU3RyZWFtLT5zZWVrKDApOwokZW9mU3RyZWFtLT5yZWFkKDMpOwovLyBlY2hvZXMgIkVPRiEiCmBgYAoKCiMjIFBIUCBTdHJlYW1XcmFwcGVyCgpZb3UgY2FuIHVzZSB0aGUgYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1XcmFwcGVyYCBjbGFzcyBpZiB5b3UgbmVlZCB0byB1c2UgYQpQU1ItNyBzdHJlYW0gYXMgYSBQSFAgc3RyZWFtIHJlc291cmNlLgoKVXNlIHRoZSBgR3V6emxlSHR0cFxQc3I3XFN0cmVhbVdyYXBwZXI6OmdldFJlc291cmNlKClgIG1ldGhvZCB0byBjcmVhdGUgYSBQSFAKc3RyZWFtIGZyb20gYSBQU1ItNyBzdHJlYW0uCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyN1xTdHJlYW1XcmFwcGVyOwoKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKCdoZWxsbyEnKTsKJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CmVjaG8gZnJlYWQoJHJlc291cmNlLCA2KTsgLy8gb3V0cHV0cyBoZWxsbyEKYGBgCgoKIyBGdW5jdGlvbiBBUEkKClRoZXJlIGFyZSB2YXJpb3VzIGZ1bmN0aW9ucyBhdmFpbGFibGUgdW5kZXIgdGhlIGBHdXp6bGVIdHRwXFBzcjdgIG5hbWVzcGFjZS4KCgojIyBgZnVuY3Rpb24gc3RyYAoKYGZ1bmN0aW9uIHN0cihNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKWAKClJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBIVFRQIG1lc3NhZ2UuCgpgYGBwaHAKJHJlcXVlc3QgPSBuZXcgR3V6emxlSHR0cFxQc3I3XFJlcXVlc3QoJ0dFVCcsICdodHRwOi8vZXhhbXBsZS5jb20nKTsKZWNobyBHdXp6bGVIdHRwXFBzcjdcc3RyKCRyZXF1ZXN0KTsKYGBgCgoKIyMgYGZ1bmN0aW9uIHVyaV9mb3JgCgpgZnVuY3Rpb24gdXJpX2ZvcigkdXJpKWAKClRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIGFuZCByZXR1cm5zIGEKVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgYFVyaUludGVyZmFjZWAsIGl0CmlzIHJldHVybmVkIGFzLWlzLgoKYGBgcGhwCiR1cmkgPSBHdXp6bGVIdHRwXFBzcjdcdXJpX2ZvcignaHR0cDovL2V4YW1wbGUuY29tJyk7CmFzc2VydCgkdXJpID09PSBHdXp6bGVIdHRwXFBzcjdcdXJpX2ZvcigkdXJpKSk7CmBgYAoKCiMjIGBmdW5jdGlvbiBzdHJlYW1fZm9yYAoKYGZ1bmN0aW9uIHN0cmVhbV9mb3IoJHJlc291cmNlID0gJycsIGFycmF5ICRvcHRpb25zID0gW10pYAoKQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KCk9wdGlvbnMgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGtleXM6CgoqIC0gbWV0YWRhdGE6IEFycmF5IG9mIGN1c3RvbSBtZXRhZGF0YS4KKiAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbS4KClRoaXMgbWV0aG9kIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBgJHJlc291cmNlYCB0eXBlczoKCi0gYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYDogUmV0dXJucyB0aGUgdmFsdWUgYXMtaXMuCi0gYHN0cmluZ2A6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgdXNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBjb250ZW50cy4KLSBgcmVzb3VyY2VgOiBDcmVhdGVzIGEgc3RyZWFtIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBQSFAgc3RyZWFtIHJlc291cmNlLgotIGBJdGVyYXRvcmA6IElmIHRoZSBwcm92aWRlZCB2YWx1ZSBpbXBsZW1lbnRzIGBJdGVyYXRvcmAsIHRoZW4gYSByZWFkLW9ubHkKICBzdHJlYW0gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBpdGVyYWJsZS4gRWFjaCB0aW1lIHRoZQogIHN0cmVhbSBpcyByZWFkIGZyb20sIGRhdGEgZnJvbSB0aGUgaXRlcmF0b3Igd2lsbCBmaWxsIGEgYnVmZmVyIGFuZCB3aWxsIGJlCiAgY29udGludW91c2x5IGNhbGxlZCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmVhZCBzaXplLgogIFN1YnNlcXVlbnQgcmVhZCBjYWxscyB3aWxsIGZpcnN0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFuZCB0aGVuIGNhbGwgYG5leHRgCiAgb24gdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgdW50aWwgaXQgaXMgZXhoYXVzdGVkLgotIGBvYmplY3RgIHdpdGggYF9fdG9TdHJpbmcoKWA6IElmIHRoZSBvYmplY3QgaGFzIHRoZSBgX190b1N0cmluZygpYCBtZXRob2QsCiAgdGhlIG9iamVjdCB3aWxsIGJlIGNhc3QgdG8gYSBzdHJpbmcgYW5kIHRoZW4gYSBzdHJlYW0gd2lsbCBiZSByZXR1cm5lZCB0aGF0CiAgdXNlcyB0aGUgc3RyaW5nIHZhbHVlLgotIGBOVUxMYDogV2hlbiBgbnVsbGAgaXMgcGFzc2VkLCBhbiBlbXB0eSBzdHJlYW0gb2JqZWN0IGlzIHJldHVybmVkLgotIGBjYWxsYWJsZWAgV2hlbiBhIGNhbGxhYmxlIGlzIHBhc3NlZCwgYSByZWFkLW9ubHkgc3RyZWFtIG9iamVjdCB3aWxsIGJlCiAgY3JlYXRlZCB0aGF0IGludm9rZXMgdGhlIGdpdmVuIGNhbGxhYmxlLiBUaGUgY2FsbGFibGUgaXMgaW52b2tlZCB3aXRoIHRoZQogIG51bWJlciBvZiBzdWdnZXN0ZWQgYnl0ZXMgdG8gcmVhZC4gVGhlIGNhbGxhYmxlIGNhbiByZXR1cm4gYW55IG51bWJlciBvZgogIGJ5dGVzLCBidXQgTVVTVCByZXR1cm4gYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uIFRoZQogIHN0cmVhbSBvYmplY3QgdGhhdCB3cmFwcyB0aGUgY2FsbGFibGUgd2lsbCBpbnZva2UgdGhlIGNhbGxhYmxlIHVudGlsIHRoZQogIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgYXJlIGF2YWlsYWJsZS4gQW55IGFkZGl0aW9uYWwgYnl0ZXMgd2lsbCBiZQogIGJ1ZmZlcmVkIGFuZCB1c2VkIGluIHN1YnNlcXVlbnQgcmVhZHMuCgpgYGBwaHAKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKCdmb28nKTsKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCcvcGF0aC90by9maWxlJywgJ3InKSk7CgokZ2VuZXJhdG9yID0gZnVuY3Rpb24gKCRieXRlcykgewogICAgZm9yICgkaSA9IDA7ICRpIDwgJGJ5dGVzOyAkaSsrKSB7CiAgICAgICAgeWllbGQgJyAnOwogICAgfQp9Cgokc3RyZWFtID0gR3V6emxlSHR0cFxQc3I3XHN0cmVhbV9mb3IoJGdlbmVyYXRvcigxMDApKTsKYGBgCgoKIyMgYGZ1bmN0aW9uIHBhcnNlX2hlYWRlcmAKCmBmdW5jdGlvbiBwYXJzZV9oZWFkZXIoJGhlYWRlcilgCgpQYXJzZSBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIGNvbnRhaW5pbmcgIjsiIHNlcGFyYXRlZCBkYXRhIGludG8gYW4gYXJyYXkgb2YKYXNzb2NpYXRpdmUgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyIGtleSB2YWx1ZSBwYWlyIGRhdGEgb2YgdGhlIGhlYWRlci4KV2hlbiBhIHBhcmFtZXRlciBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUsIGJ1dCBqdXN0IGNvbnRhaW5zIGEga2V5LCB0aGlzCmZ1bmN0aW9uIHdpbGwgaW5qZWN0IGEga2V5IHdpdGggYSAnJyBzdHJpbmcgdmFsdWUuCgoKIyMgYGZ1bmN0aW9uIG5vcm1hbGl6ZV9oZWFkZXJgCgpgZnVuY3Rpb24gbm9ybWFsaXplX2hlYWRlcigkaGVhZGVyKWAKCkNvbnZlcnRzIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMgdGhhdCBtYXkgY29udGFpbiBjb21tYSBzZXBhcmF0ZWQgaGVhZGVycwppbnRvIGFuIGFycmF5IG9mIGhlYWRlcnMgd2l0aCBubyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLgoKCiMjIGBmdW5jdGlvbiBtb2RpZnlfcmVxdWVzdGAKCmBmdW5jdGlvbiBtb2RpZnlfcmVxdWVzdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkY2hhbmdlcylgCgpDbG9uZSBhbmQgbW9kaWZ5IGEgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBjaGFuZ2VzLiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yCnJlZHVjaW5nIHRoZSBudW1iZXIgb2YgY2xvbmVzIG5lZWRlZCB0byBtdXRhdGUgYSBtZXNzYWdlLgoKVGhlIGNoYW5nZXMgY2FuIGJlIG9uZSBvZjoKCi0gbWV0aG9kOiAoc3RyaW5nKSBDaGFuZ2VzIHRoZSBIVFRQIG1ldGhvZC4KLSBzZXRfaGVhZGVyczogKGFycmF5KSBTZXRzIHRoZSBnaXZlbiBoZWFkZXJzLgotIHJlbW92ZV9oZWFkZXJzOiAoYXJyYXkpIFJlbW92ZSB0aGUgZ2l2ZW4gaGVhZGVycy4KLSBib2R5OiAobWl4ZWQpIFNldHMgdGhlIGdpdmVuIGJvZHkuCi0gdXJpOiAoVXJpSW50ZXJmYWNlKSBTZXQgdGhlIFVSSS4KLSBxdWVyeTogKHN0cmluZykgU2V0IHRoZSBxdWVyeSBzdHJpbmcgdmFsdWUgb2YgdGhlIFVSSS4KLSB2ZXJzaW9uOiAoc3RyaW5nKSBTZXQgdGhlIHByb3RvY29sIHZlcnNpb24uCgoKIyMgYGZ1bmN0aW9uIHJld2luZF9ib2R5YAoKYGZ1bmN0aW9uIHJld2luZF9ib2R5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpYAoKQXR0ZW1wdHMgdG8gcmV3aW5kIGEgbWVzc2FnZSBib2R5IGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuIFRoZSBib2R5Cm9mIHRoZSBtZXNzYWdlIHdpbGwgb25seSBiZSByZXdvdW5kIGlmIGEgY2FsbCB0byBgdGVsbCgpYCByZXR1cm5zIGEgdmFsdWUgb3RoZXIKdGhhbiBgMGAuCgoKIyMgYGZ1bmN0aW9uIHRyeV9mb3BlbmAKCmBmdW5jdGlvbiB0cnlfZm9wZW4oJGZpbGVuYW1lLCAkbW9kZSlgCgpTYWZlbHkgb3BlbnMgYSBQSFAgc3RyZWFtIHJlc291cmNlIHVzaW5nIGEgZmlsZW5hbWUuCgpXaGVuIGZvcGVuIGZhaWxzLCBQSFAgbm9ybWFsbHkgcmFpc2VzIGEgd2FybmluZy4gVGhpcyBmdW5jdGlvbiBhZGRzIGFuIGVycm9yCmhhbmRsZXIgdGhhdCBjaGVja3MgZm9yIGVycm9ycyBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLgoKCiMjIGBmdW5jdGlvbiBjb3B5X3RvX3N0cmluZ2AKCmBmdW5jdGlvbiBjb3B5X3RvX3N0cmluZyhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJG1heExlbiA9IC0xKWAKCkNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgc3RyZWFtIGludG8gYSBzdHJpbmcgdW50aWwgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcwpoYXZlIGJlZW4gcmVhZC4KCgojIyBgZnVuY3Rpb24gY29weV90b19zdHJlYW1gCgpgZnVuY3Rpb24gY29weV90b19zdHJlYW0oU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UsIFN0cmVhbUludGVyZmFjZSAkZGVzdCwgJG1heExlbiA9IC0xKWAKCkNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgc3RyZWFtIGludG8gYW5vdGhlciBzdHJlYW0gdW50aWwgdGhlIGdpdmVuIG51bWJlciBvZgpieXRlcyBoYXZlIGJlZW4gcmVhZC4KCgojIyBgZnVuY3Rpb24gaGFzaGAKCmBmdW5jdGlvbiBoYXNoKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCAkYWxnbywgJHJhd091dHB1dCA9IGZhbHNlKWAKCkNhbGN1bGF0ZSBhIGhhc2ggb2YgYSBTdHJlYW0uIFRoaXMgbWV0aG9kIHJlYWRzIHRoZSBlbnRpcmUgc3RyZWFtIHRvIGNhbGN1bGF0ZQphIHJvbGxpbmcgaGFzaCAoYmFzZWQgb24gUEhQJ3MgaGFzaF9pbml0IGZ1bmN0aW9ucykuCgoKIyMgYGZ1bmN0aW9uIHJlYWRsaW5lYAoKYGZ1bmN0aW9uIHJlYWRsaW5lKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCAkbWF4TGVuZ3RoID0gbnVsbClgCgpSZWFkIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0gdXAgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBidWZmZXIgbGVuZ3RoLgoKCiMjIGBmdW5jdGlvbiBwYXJzZV9yZXF1ZXN0YAoKYGZ1bmN0aW9uIHBhcnNlX3JlcXVlc3QoJG1lc3NhZ2UpYAoKUGFyc2VzIGEgcmVxdWVzdCBtZXNzYWdlIHN0cmluZyBpbnRvIGEgcmVxdWVzdCBvYmplY3QuCgoKIyMgYGZ1bmN0aW9uIHBhcnNlX3Jlc3BvbnNlYAoKYGZ1bmN0aW9uIHBhcnNlX3Jlc3BvbnNlKCRtZXNzYWdlKWAKClBhcnNlcyBhIHJlc3BvbnNlIG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXNwb25zZSBvYmplY3QuCgoKIyMgYGZ1bmN0aW9uIHBhcnNlX3F1ZXJ5YAoKYGZ1bmN0aW9uIHBhcnNlX3F1ZXJ5KCRzdHIsICR1cmxFbmNvZGluZyA9IHRydWUpYAoKUGFyc2UgYSBxdWVyeSBzdHJpbmcgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KCklmIG11bHRpcGxlIHZhbHVlcyBhcmUgZm91bmQgZm9yIHRoZSBzYW1lIGtleSwgdGhlIHZhbHVlIG9mIHRoYXQga2V5IHZhbHVlIHBhaXIKd2lsbCBiZWNvbWUgYW4gYXJyYXkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgbmVzdGVkIFBIUCBzdHlsZSBhcnJheXMgaW50bwphbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgYGZvb1thXT0xJmZvb1tiXT0yYCB3aWxsIGJlIHBhcnNlZCBpbnRvCmBbJ2Zvb1thXScgPT4gJzEnLCAnZm9vW2JdJyA9PiAnMiddYCkuCgoKIyMgYGZ1bmN0aW9uIGJ1aWxkX3F1ZXJ5YAoKYGZ1bmN0aW9uIGJ1aWxkX3F1ZXJ5KGFycmF5ICRwYXJhbXMsICRlbmNvZGluZyA9IFBIUF9RVUVSWV9SRkMzOTg2KWAKCkJ1aWxkIGEgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Yga2V5IHZhbHVlIHBhaXJzLgoKVGhpcyBmdW5jdGlvbiBjYW4gdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgcGFyc2VfcXVlcnkoKSB0byBidWlsZCBhIHF1ZXJ5IHN0cmluZy4KVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgdGhlIHByb3ZpZGVkIGtleXMgd2hlbiBhbiBhcnJheSBpcyBlbmNvdW50ZXJlZAoobGlrZSBodHRwX2J1aWxkX3F1ZXJ5IHdvdWxkKS4KCgojIyBgZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9maWxlbmFtZWAKCmBmdW5jdGlvbiBtaW1ldHlwZV9mcm9tX2ZpbGVuYW1lKCRmaWxlbmFtZSlgCgpEZXRlcm1pbmVzIHRoZSBtaW1ldHlwZSBvZiBhIGZpbGUgYnkgbG9va2luZyBhdCBpdHMgZXh0ZW5zaW9uLgoKCiMjIGBmdW5jdGlvbiBtaW1ldHlwZV9mcm9tX2V4dGVuc2lvbmAKCmBmdW5jdGlvbiBtaW1ldHlwZV9mcm9tX2V4dGVuc2lvbigkZXh0ZW5zaW9uKWAKCk1hcHMgYSBmaWxlIGV4dGVuc2lvbnMgdG8gYSBtaW1ldHlwZS4KCgojIEFkZGl0aW9uYWwgVVJJIE1ldGhvZHMKCkFzaWRlIGZyb20gdGhlIHN0YW5kYXJkIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZWAgaW1wbGVtZW50YXRpb24gaW4gZm9ybSBvZiB0aGUgYEd1enpsZUh0dHBcUHNyN1xVcmlgIGNsYXNzLAp0aGlzIGxpYnJhcnkgYWxzbyBwcm92aWRlcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgd2hlbiB3b3JraW5nIHdpdGggVVJJcyBhcyBzdGF0aWMgbWV0aG9kcy4KCiMjIFVSSSBUeXBlcwoKQW4gaW5zdGFuY2Ugb2YgYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlYCBjYW4gZWl0aGVyIGJlIGFuIGFic29sdXRlIFVSSSBvciBhIHJlbGF0aXZlIHJlZmVyZW5jZS4KQW4gYWJzb2x1dGUgVVJJIGhhcyBhIHNjaGVtZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgaXMgdXNlZCB0byBleHByZXNzIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgVVJJLAp0aGUgYmFzZSBVUkkuIFJlbGF0aXZlIHJlZmVyZW5jZXMgY2FuIGJlIGRpdmlkZWQgaW50byBzZXZlcmFsIGZvcm1zIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA0LjJdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4yKToKCi0gbmV0d29yay1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gYC8vZXhhbXBsZS5jb20vcGF0aGAKLSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gYC9wYXRoYAotIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlcywgZS5nLiBgc3VicGF0aGAKClRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiB0aGUgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc0Fic29sdXRlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNBYnNvbHV0ZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYWJzb2x1dGUsIGkuZS4gaXQgaGFzIGEgc2NoZW1lLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc05ldHdvcmtQYXRoUmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNOZXR3b3JrUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzIGlzCnRlcm1lZCBhbiBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBpcyBhIGFic29sdXRlLXBhdGggcmVmZXJlbmNlLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciBpcwp0ZXJtZWQgYW4gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aCBhIHNsYXNoIGNoYXJhY3RlciBpcwp0ZXJtZWQgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNTYW1lRG9jdW1lbnRSZWZlcmVuY2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1NhbWVEb2N1bWVudFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSwgVXJpSW50ZXJmYWNlICRiYXNlID0gbnVsbCk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZS4gQSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZSByZWZlcnMgdG8gYSBVUkkgdGhhdCBpcywgYXNpZGUgZnJvbSBpdHMKZnJhZ21lbnQgY29tcG9uZW50LCBpZGVudGljYWwgdG8gdGhlIGJhc2UgVVJJLiBXaGVuIG5vIGJhc2UgVVJJIGlzIGdpdmVuLCBvbmx5IGFuIGVtcHR5IFVSSSByZWZlcmVuY2UKKGFwYXJ0IGZyb20gaXRzIGZyYWdtZW50KSBpcyBjb25zaWRlcmVkIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuCgojIyBVUkkgQ29tcG9uZW50cwoKQWRkaXRpb25hbCBtZXRob2RzIHRvIHdvcmsgd2l0aCBVUkkgY29tcG9uZW50cy4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNEZWZhdWx0UG9ydGAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRGVmYXVsdFBvcnQoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGhhcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBjdXJyZW50IHNjaGVtZS4gYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpnZXRQb3J0YCBtYXkgcmV0dXJuIG51bGwKb3IgdGhlIHN0YW5kYXJkIHBvcnQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjpjb21wb3NlQ29tcG9uZW50c2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBvc2VDb21wb25lbnRzKCRzY2hlbWUsICRhdXRob3JpdHksICRwYXRoLCAkcXVlcnksICRmcmFnbWVudCk6IHN0cmluZ2AKCkNvbXBvc2VzIGEgVVJJIHJlZmVyZW5jZSBzdHJpbmcgZnJvbSBpdHMgdmFyaW91cyBjb21wb25lbnRzIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA1LjNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNS4zKS4gVXN1YWxseSB0aGlzIG1ldGhvZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZAptYW51YWxseSBidXQgaW5zdGVhZCBpcyB1c2VkIGluZGlyZWN0bHkgdmlhIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTo6X190b1N0cmluZ2AuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmZyb21QYXJ0c2AKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21QYXJ0cyhhcnJheSAkcGFydHMpOiBVcmlJbnRlcmZhY2VgCgpDcmVhdGVzIGEgVVJJIGZyb20gYSBoYXNoIG9mIFtgcGFyc2VfdXJsYF0oaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBhcnNlLXVybC5waHApIGNvbXBvbmVudHMuCgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjp3aXRoUXVlcnlWYWx1ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhRdWVyeVZhbHVlKFVyaUludGVyZmFjZSAkdXJpLCAka2V5LCAkdmFsdWUpOiBVcmlJbnRlcmZhY2VgCgpDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlLiBBbnkgZXhpc3RpbmcgcXVlcnkgc3RyaW5nIHZhbHVlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlCnByb3ZpZGVkIGtleSBhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IHZhbHVlIHBhaXIuIEEgdmFsdWUgb2YgbnVsbCB3aWxsIHNldCB0aGUgcXVlcnkgc3RyaW5nCmtleSB3aXRob3V0IGEgdmFsdWUsIGUuZy4gImtleSIgaW5zdGVhZCBvZiAia2V5PXZhbHVlIi4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aFF1ZXJ5VmFsdWVzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWVzKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAka2V5VmFsdWVBcnJheSk6IFVyaUludGVyZmFjZWAKCkNyZWF0ZXMgYSBuZXcgVVJJIHdpdGggbXVsdGlwbGUgcXVlcnkgc3RyaW5nIHZhbHVlcy4gSXQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGB3aXRoUXVlcnlWYWx1ZSgpYCBidXQgZm9yIGFuCmFzc29jaWF0aXZlIGFycmF5IG9mIGtleSA9PiB2YWx1ZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aG91dFF1ZXJ5VmFsdWVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRob3V0UXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgJGtleSk6IFVyaUludGVyZmFjZWAKCkNyZWF0ZXMgYSBuZXcgVVJJIHdpdGggYSBzcGVjaWZpYyBxdWVyeSBzdHJpbmcgdmFsdWUgcmVtb3ZlZC4gQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZQpwcm92aWRlZCBrZXkgYXJlIHJlbW92ZWQuCgojIyBSZWZlcmVuY2UgUmVzb2x1dGlvbgoKYEd1enpsZUh0dHBcUHNyN1xVcmlSZXNvbHZlcmAgcHJvdmlkZXMgbWV0aG9kcyB0byByZXNvbHZlIGEgVVJJIHJlZmVyZW5jZSBpbiB0aGUgY29udGV4dCBvZiBhIGJhc2UgVVJJIGFjY29yZGluZwp0byBbUkZDIDM5ODYgU2VjdGlvbiA1XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUpLiBUaGlzIGlzIGZvciBleGFtcGxlIGFsc28gd2hhdCB3ZWIgYnJvd3NlcnMKZG8gd2hlbiByZXNvbHZpbmcgYSBsaW5rIGluIGEgd2Vic2l0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCByZXF1ZXN0IFVSSS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyOjpyZXNvbHZlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzb2x2ZShVcmlJbnRlcmZhY2UgJGJhc2UsIFVyaUludGVyZmFjZSAkcmVsKTogVXJpSW50ZXJmYWNlYAoKQ29udmVydHMgdGhlIHJlbGF0aXZlIFVSSSBpbnRvIGEgbmV3IFVSSSB0aGF0IGlzIHJlc29sdmVkIGFnYWluc3QgdGhlIGJhc2UgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoc3RyaW5nICRwYXRoKTogc3RyaW5nYAoKUmVtb3ZlcyBkb3Qgc2VnbWVudHMgZnJvbSBhIHBhdGggYW5kIHJldHVybnMgdGhlIG5ldyBwYXRoIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA1LjIuNF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNCkuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemUoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHRhcmdldCk6IFVyaUludGVyZmFjZWAKClJldHVybnMgdGhlIHRhcmdldCBVUkkgYXMgYSByZWxhdGl2ZSByZWZlcmVuY2UgZnJvbSB0aGUgYmFzZSBVUkkuIFRoaXMgbWV0aG9kIGlzIHRoZSBjb3VudGVycGFydCB0byByZXNvbHZlKCk6CgpgYGBwaHAKKHN0cmluZykgJHRhcmdldCA9PT0gKHN0cmluZykgVXJpUmVzb2x2ZXI6OnJlc29sdmUoJGJhc2UsIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCAkdGFyZ2V0KSkKYGBgCgpPbmUgdXNlLWNhc2UgaXMgdG8gdXNlIHRoZSBjdXJyZW50IHJlcXVlc3QgVVJJIGFzIGJhc2UgVVJJIGFuZCB0aGVuIGdlbmVyYXRlIHJlbGF0aXZlIGxpbmtzIGluIHlvdXIgZG9jdW1lbnRzCnRvIHJlZHVjZSB0aGUgZG9jdW1lbnQgc2l6ZSBvciBvZmZlciBzZWxmLWNvbnRhaW5lZCBkb3dubG9hZGFibGUgZG9jdW1lbnQgYXJjaGl2ZXMuCgpgYGBwaHAKJGJhc2UgPSBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLycpOwplY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iL2MnKSk7ICAvLyBwcmludHMgJ2MnLgplY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS94L3knKSk7ICAvLyBwcmludHMgJy4uL3gveScuCmVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvP3EnKSk7IC8vIHByaW50cyAnP3EnLgplY2hvIFVyaVJlc29sdmVyOjpyZWxhdGl2aXplKCRiYXNlLCBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5vcmcvYS9iLycpKTsgICAvLyBwcmludHMgJy8vZXhhbXBsZS5vcmcvYS9iLycuCmBgYAoKIyMgTm9ybWFsaXphdGlvbiBhbmQgQ29tcGFyaXNvbgoKYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyYCBwcm92aWRlcyBtZXRob2RzIHRvIG5vcm1hbGl6ZSBhbmQgY29tcGFyZSBVUklzIGFjY29yZGluZyB0bwpbUkZDIDM5ODYgU2VjdGlvbiA2XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYpLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpTm9ybWFsaXplcjo6bm9ybWFsaXplYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplKFVyaUludGVyZmFjZSAkdXJpLCAkZmxhZ3MgPSBzZWxmOjpQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TKTogVXJpSW50ZXJmYWNlYAoKUmV0dXJucyBhIG5vcm1hbGl6ZWQgVVJJLiBUaGUgc2NoZW1lIGFuZCBob3N0IGNvbXBvbmVudCBhcmUgYWxyZWFkeSBub3JtYWxpemVkIHRvIGxvd2VyY2FzZSBwZXIgUFNSLTcgVXJpSW50ZXJmYWNlLgpUaGlzIG1ldGhvZHMgYWRkcyBhZGRpdGlvbmFsIG5vcm1hbGl6YXRpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgYCRmbGFnc2AgcGFyYW1ldGVyIHdoaWNoIGlzIGEgYml0bWFzawpvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseS4gVGhlIGZvbGxvd2luZyBub3JtYWxpemF0aW9ucyBhcmUgYXZhaWxhYmxlOgoKLSBgVXJpTm9ybWFsaXplcjo6UFJFU0VSVklOR19OT1JNQUxJWkFUSU9OU2AKCiAgICBEZWZhdWx0IG5vcm1hbGl6YXRpb25zIHdoaWNoIG9ubHkgaW5jbHVkZSB0aGUgb25lcyB0aGF0IHByZXNlcnZlIHNlbWFudGljcy4KCi0gYFVyaU5vcm1hbGl6ZXI6OkNBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElOR2AKCiAgICBBbGwgbGV0dGVycyB3aXRoaW4gYSBwZXJjZW50LWVuY29kaW5nIHRyaXBsZXQgKGUuZy4sICIlM0EiKSBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHNob3VsZCBiZSBjYXBpdGFsaXplZC4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnL2ElYzIlYjFiYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9hJUMyJUIxYmAKCi0gYFVyaU5vcm1hbGl6ZXI6OkRFQ09ERV9VTlJFU0VSVkVEX0NIQVJBQ1RFUlNgCgogICAgRGVjb2RlcyBwZXJjZW50LWVuY29kZWQgb2N0ZXRzIG9mIHVucmVzZXJ2ZWQgY2hhcmFjdGVycy4gRm9yIGNvbnNpc3RlbmN5LCBwZXJjZW50LWVuY29kZWQgb2N0ZXRzIGluIHRoZSByYW5nZXMgb2YKICAgIEFMUEhBICglNDHigJMlNUEgYW5kICU2MeKAkyU3QSksIERJR0lUICglMzDigJMlMzkpLCBoeXBoZW4gKCUyRCksIHBlcmlvZCAoJTJFKSwgdW5kZXJzY29yZSAoJTVGKSwgb3IgdGlsZGUgKCU3RSkgc2hvdWxkCiAgICBub3QgYmUgY3JlYXRlZCBieSBVUkkgcHJvZHVjZXJzIGFuZCwgd2hlbiBmb3VuZCBpbiBhIFVSSSwgc2hvdWxkIGJlIGRlY29kZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bnJlc2VydmVkCiAgICBjaGFyYWN0ZXJzIGJ5IFVSSSBub3JtYWxpemVycy4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnLyU3RXVzZXJuJTYxbWUvYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9+dXNlcm5hbWUvYAoKLSBgVXJpTm9ybWFsaXplcjo6Q09OVkVSVF9FTVBUWV9QQVRIYAoKICAgIENvbnZlcnRzIHRoZSBlbXB0eSBwYXRoIHRvICIvIiBmb3IgaHR0cCBhbmQgaHR0cHMgVVJJcy4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9gCgotIGBVcmlOb3JtYWxpemVyOjpSRU1PVkVfREVGQVVMVF9IT1NUYAoKICAgIFJlbW92ZXMgdGhlIGRlZmF1bHQgaG9zdCBvZiB0aGUgZ2l2ZW4gVVJJIHNjaGVtZSBmcm9tIHRoZSBVUkkuIE9ubHkgdGhlICJmaWxlIiBzY2hlbWUgZGVmaW5lcyB0aGUgZGVmYXVsdCBob3N0CiAgICAibG9jYWxob3N0Ii4gQWxsIG9mIGBmaWxlOi9teWZpbGVgLCBgZmlsZTovLy9teWZpbGVgLCBhbmQgYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYCBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8KICAgIFJGQyAzOTg2LgoKICAgIEV4YW1wbGU6IGBmaWxlOi8vbG9jYWxob3N0L215ZmlsZWAg4oaSIGBmaWxlOi8vL215ZmlsZWAKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9ERUZBVUxUX1BPUlRgCgogICAgUmVtb3ZlcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnOjgwL2Ag4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvYAoKLSBgVXJpTm9ybWFsaXplcjo6UkVNT1ZFX0RPVF9TRUdNRU5UU2AKCiAgICBSZW1vdmVzIHVubmVjZXNzYXJ5IGRvdC1zZWdtZW50cy4gRG90LXNlZ21lbnRzIGluIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlcyBhcmUgbm90IHJlbW92ZWQgYXMgaXQgd291bGQKICAgIGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIHRoZSBVUkkgcmVmZXJlbmNlLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvLi4vYS9iLy4uL2MvLi9kLmh0bWxgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2EvYy9kLmh0bWxgCgotIGBVcmlOb3JtYWxpemVyOjpSRU1PVkVfRFVQTElDQVRFX1NMQVNIRVNgCgogICAgUGF0aHMgd2hpY2ggaW5jbHVkZSB0d28gb3IgbW9yZSBhZGphY2VudCBzbGFzaGVzIGFyZSBjb252ZXJ0ZWQgdG8gb25lLiBXZWJzZXJ2ZXJzIHVzdWFsbHkgaWdub3JlIGR1cGxpY2F0ZSBzbGFzaGVzCiAgICBhbmQgdHJlYXQgdGhvc2UgVVJJcyBlcXVpdmFsZW50LiBCdXQgaW4gdGhlb3J5IHRob3NlIFVSSXMgZG8gbm90IG5lZWQgdG8gYmUgZXF1aXZhbGVudC4gU28gdGhpcyBub3JtYWxpemF0aW9uCiAgICBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3MuIEVuY29kZWQgc2xhc2hlcyAoJTJGKSBhcmUgbm90IHJlbW92ZWQuCgogICAgRXhhbXBsZTogYGh0dHA6Ly9leGFtcGxlLm9yZy8vZm9vLy8vYmFyLmh0bWxgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2Zvby9iYXIuaHRtbGAKCi0gYFVyaU5vcm1hbGl6ZXI6OlNPUlRfUVVFUllfUEFSQU1FVEVSU2AKCiAgICBTb3J0IHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCB0aGVpciB2YWx1ZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBIb3dldmVyLCB0aGUgb3JkZXIgb2YgcGFyYW1ldGVycyBpbiBhIFVSSSBtYXkgYmUKICAgIHNpZ25pZmljYW50ICh0aGlzIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCkuIFNvIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBub3Qgc2FmZSBhbmQgbWF5IGNoYW5nZSB0aGUgc2VtYW50aWNzCiAgICBvZiB0aGUgVVJJLgoKICAgIEV4YW1wbGU6IGA/bGFuZz1lbiZhcnRpY2xlPWZyZWRgIOKGkiBgP2FydGljbGU9ZnJlZCZsYW5nPWVuYAoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpTm9ybWFsaXplcjo6aXNFcXVpdmFsZW50YAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNFcXVpdmFsZW50KFVyaUludGVyZmFjZSAkdXJpMSwgVXJpSW50ZXJmYWNlICR1cmkyLCAkbm9ybWFsaXphdGlvbnMgPSBzZWxmOjpQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TKTogYm9vbGAKCldoZXRoZXIgdHdvIFVSSXMgY2FuIGJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC4gQm90aCBVUklzIGFyZSBub3JtYWxpemVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGNvbXBhcmlzb24gd2l0aCB0aGUgZ2l2ZW4KYCRub3JtYWxpemF0aW9uc2AgYml0bWFzay4gVGhlIG1ldGhvZCBhbHNvIGFjY2VwdHMgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZXMgYW5kIHJldHVybnMgdHJ1ZSB3aGVuIHRoZXkgYXJlIGVxdWl2YWxlbnQuClRoaXMgb2YgY291cnNlIGFzc3VtZXMgdGhleSB3aWxsIGJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHNhbWUgYmFzZSBVUkkuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBkZXRlcm1pbmF0aW9uIG9mCmVxdWl2YWxlbmNlIG9yIGRpZmZlcmVuY2Ugb2YgcmVsYXRpdmUgcmVmZXJlbmNlcyBkb2VzIG5vdCBtZWFuIGFueXRoaW5nLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/AppendStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZWFkcyBmcm9tIG11bHRpcGxlIHN0cmVhbXMsIG9uZSBhZnRlciB0aGUgb3RoZXIuCiAqCiAqIFRoaXMgaXMgYSByZWFkLW9ubHkgc3RyZWFtIGRlY29yYXRvci4KICovCmNsYXNzIEFwcGVuZFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2VbXSBTdHJlYW1zIGJlaW5nIGRlY29yYXRlZCAqLwogICAgcHJpdmF0ZSAkc3RyZWFtcyA9IFtdOwoKICAgIHByaXZhdGUgJHNlZWthYmxlID0gdHJ1ZTsKICAgIHByaXZhdGUgJGN1cnJlbnQgPSAwOwogICAgcHJpdmF0ZSAkcG9zID0gMDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2VbXSAkc3RyZWFtcyBTdHJlYW1zIHRvIGRlY29yYXRlLiBFYWNoIHN0cmVhbSBtdXN0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc3RyZWFtcyA9IFtdKQogICAgewogICAgICAgIGZvcmVhY2ggKCRzdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHRoaXMtPmFkZFN0cmVhbSgkc3RyZWFtKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5yZXdpbmQoKTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIHN0cmVhbSB0byB0aGUgQXBwZW5kU3RyZWFtCiAgICAgKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFN0cmVhbSB0byBhcHBlbmQuIE11c3QgYmUgcmVhZGFibGUuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBzdHJlYW0gaXMgbm90IHJlYWRhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTdHJlYW0oU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0pCiAgICB7CiAgICAgICAgaWYgKCEkc3RyZWFtLT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0VhY2ggc3RyZWFtIG11c3QgYmUgcmVhZGFibGUnKTsKICAgICAgICB9CgogICAgICAgIC8vIFRoZSBzdHJlYW0gaXMgb25seSBzZWVrYWJsZSBpZiBhbGwgc3RyZWFtcyBhcmUgc2Vla2FibGUKICAgICAgICBpZiAoISRzdHJlYW0tPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAkdGhpcy0+c2Vla2FibGUgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW1zW10gPSAkc3RyZWFtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvcHlfdG9fc3RyaW5nKCR0aGlzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyBlYWNoIGF0dGFjaGVkIHN0cmVhbS4KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnBvcyA9ICR0aGlzLT5jdXJyZW50ID0gMDsKICAgICAgICAkdGhpcy0+c2Vla2FibGUgPSB0cnVlOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RyZWFtcyBhcyAkc3RyZWFtKSB7CiAgICAgICAgICAgICRzdHJlYW0tPmNsb3NlKCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c3RyZWFtcyA9IFtdOwogICAgfQoKICAgIC8qKgogICAgICogRGV0YWNoZXMgZWFjaCBhdHRhY2hlZCBzdHJlYW0uCiAgICAgKgogICAgICogUmV0dXJucyBudWxsIGFzIGl0J3Mgbm90IGNsZWFyIHdoaWNoIHVuZGVybHlpbmcgc3RyZWFtIHJlc291cmNlIHRvIHJldHVybi4KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gdHJ1ZTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAkc3RyZWFtLT5kZXRhY2goKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW1zID0gW107CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cG9zOwogICAgfQoKICAgIC8qKgogICAgICogVHJpZXMgdG8gY2FsY3VsYXRlIHRoZSBzaXplIGJ5IGFkZGluZyB0aGUgc2l6ZSBvZiBlYWNoIHN0cmVhbS4KICAgICAqCiAgICAgKiBJZiBhbnkgb2YgdGhlIHN0cmVhbXMgZG8gbm90IHJldHVybiBhIHZhbGlkIG51bWJlciwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUKICAgICAqIGFwcGVuZCBzdHJlYW0gY2Fubm90IGJlIGRldGVybWluZWQgYW5kIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgJHNpemUgPSAwOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RyZWFtcyBhcyAkc3RyZWFtKSB7CiAgICAgICAgICAgICRzID0gJHN0cmVhbS0+Z2V0U2l6ZSgpOwogICAgICAgICAgICBpZiAoJHMgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzaXplICs9ICRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzaXplOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiAhJHRoaXMtPnN0cmVhbXMgfHwKICAgICAgICAgICAgKCR0aGlzLT5jdXJyZW50ID49IGNvdW50KCR0aGlzLT5zdHJlYW1zKSAtIDEgJiYKICAgICAgICAgICAgICR0aGlzLT5zdHJlYW1zWyR0aGlzLT5jdXJyZW50XS0+ZW9mKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIC8qKgogICAgICogQXR0ZW1wdHMgdG8gc2VlayB0byB0aGUgZ2l2ZW4gcG9zaXRpb24uIE9ubHkgc3VwcG9ydHMgU0VFS19TRVQuCiAgICAgKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+c2Vla2FibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGlzIEFwcGVuZFN0cmVhbSBpcyBub3Qgc2Vla2FibGUnKTsKICAgICAgICB9IGVsc2VpZiAoJHdoZW5jZSAhPT0gU0VFS19TRVQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGUgQXBwZW5kU3RyZWFtIGNhbiBvbmx5IHNlZWsgd2l0aCBTRUVLX1NFVCcpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnBvcyA9ICR0aGlzLT5jdXJyZW50ID0gMDsKCiAgICAgICAgLy8gUmV3aW5kIGVhY2ggc3RyZWFtCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cmVhbXMgYXMgJGkgPT4gJHN0cmVhbSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHN0cmVhbS0+cmV3aW5kKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHNlZWsgc3RyZWFtICcKICAgICAgICAgICAgICAgICAgICAuICRpIC4gJyBvZiB0aGUgQXBwZW5kU3RyZWFtJywgMCwgJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZWVrIHRvIHRoZSBhY3R1YWwgcG9zaXRpb24gYnkgcmVhZGluZyBmcm9tIGVhY2ggc3RyZWFtCiAgICAgICAgd2hpbGUgKCR0aGlzLT5wb3MgPCAkb2Zmc2V0ICYmICEkdGhpcy0+ZW9mKCkpIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5yZWFkKG1pbig4MDk2LCAkb2Zmc2V0IC0gJHRoaXMtPnBvcykpOwogICAgICAgICAgICBpZiAoJHJlc3VsdCA9PT0gJycpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVhZHMgZnJvbSBhbGwgb2YgdGhlIGFwcGVuZGVkIHN0cmVhbXMgdW50aWwgdGhlIGxlbmd0aCBpcyBtZXQgb3IgRU9GLgogICAgICoKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkKICAgIHsKICAgICAgICAkYnVmZmVyID0gJyc7CiAgICAgICAgJHRvdGFsID0gY291bnQoJHRoaXMtPnN0cmVhbXMpIC0gMTsKICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aDsKICAgICAgICAkcHJvZ3Jlc3NUb05leHQgPSBmYWxzZTsKCiAgICAgICAgd2hpbGUgKCRyZW1haW5pbmcgPiAwKSB7CgogICAgICAgICAgICAvLyBQcm9ncmVzcyB0byB0aGUgbmV4dCBzdHJlYW0gaWYgbmVlZGVkLgogICAgICAgICAgICBpZiAoJHByb2dyZXNzVG9OZXh0IHx8ICR0aGlzLT5zdHJlYW1zWyR0aGlzLT5jdXJyZW50XS0+ZW9mKCkpIHsKICAgICAgICAgICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5jdXJyZW50ID09PSAkdG90YWwpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5jdXJyZW50Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c3RyZWFtc1skdGhpcy0+Y3VycmVudF0tPnJlYWQoJHJlbWFpbmluZyk7CgogICAgICAgICAgICAvLyBVc2luZyBhIGxvb3NlIGNvbXBhcmlzb24gaGVyZSB0byBtYXRjaCBvbiAnJywgZmFsc2UsIGFuZCBudWxsCiAgICAgICAgICAgIGlmICgkcmVzdWx0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IHRydWU7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGJ1ZmZlciAuPSAkcmVzdWx0OwogICAgICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aCAtIHN0cmxlbigkYnVmZmVyKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wb3MgKz0gc3RybGVuKCRidWZmZXIpOwoKICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWVrYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZykKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB3cml0ZSB0byBhbiBBcHBlbmRTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICRrZXkgPyBudWxsIDogW107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/BufferStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIGJ1ZmZlciBzdHJlYW0gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB0byBmaWxsIGEgYnVmZmVyLCBhbmQgcmVhZAogKiBmcm9tIHRvIHJlbW92ZSBieXRlcyBmcm9tIHRoZSBidWZmZXIuCiAqCiAqIFRoaXMgc3RyZWFtIHJldHVybnMgYSAiaHdtIiBtZXRhZGF0YSB2YWx1ZSB0aGF0IHRlbGxzIHVwc3RyZWFtIGNvbnN1bWVycwogKiB3aGF0IHRoZSBjb25maWd1cmVkIGhpZ2ggd2F0ZXIgbWFyayBvZiB0aGUgc3RyZWFtIGlzLCBvciB0aGUgbWF4aW11bQogKiBwcmVmZXJyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyLgogKi8KY2xhc3MgQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJGh3bTsKICAgIHByaXZhdGUgJGJ1ZmZlciA9ICcnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaHdtIEhpZ2ggd2F0ZXIgbWFyaywgcmVwcmVzZW50aW5nIHRoZSBwcmVmZXJyZWQgbWF4aW11bQogICAgICogICAgICAgICAgICAgICAgIGJ1ZmZlciBzaXplLiBJZiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGV4Y2VlZHMgdGhlIGhpZ2gKICAgICAqICAgICAgICAgICAgICAgICB3YXRlciBtYXJrLCB0aGVuIGNhbGxzIHRvIHdyaXRlIHdpbGwgY29udGludWUgdG8gc3VjY2VlZAogICAgICogICAgICAgICAgICAgICAgIGJ1dCB3aWxsIHJldHVybiBmYWxzZSB0byBpbmZvcm0gd3JpdGVycyB0byBzbG93IGRvd24KICAgICAqICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYnVmZmVyIGhhcyBiZWVuIGRyYWluZWQgYnkgcmVhZGluZyBmcm9tIGl0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGh3bSA9IDE2Mzg0KQogICAgewogICAgICAgICR0aGlzLT5od20gPSAkaHdtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbnRlbnRzKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCkKICAgIHsKICAgICAgICAkYnVmZmVyID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CgogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT5idWZmZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgc2VlayBhIEJ1ZmZlclN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiBzdHJsZW4oJHRoaXMtPmJ1ZmZlcikgPT09IDA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGRldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYSBCdWZmZXJTdHJlYW0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgICRjdXJyZW50TGVuZ3RoID0gc3RybGVuKCR0aGlzLT5idWZmZXIpOwoKICAgICAgICBpZiAoJGxlbmd0aCA+PSAkY3VycmVudExlbmd0aCkgewogICAgICAgICAgICAvLyBObyBuZWVkIHRvIHNsaWNlIHRoZSBidWZmZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhLgogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFNsaWNlIHVwIHRoZSByZXN1bHQgdG8gcHJvdmlkZSBhIHN1YnNldCBvZiB0aGUgYnVmZmVyLgogICAgICAgICAgICAkcmVzdWx0ID0gc3Vic3RyKCR0aGlzLT5idWZmZXIsIDAsICRsZW5ndGgpOwogICAgICAgICAgICAkdGhpcy0+YnVmZmVyID0gc3Vic3RyKCR0aGlzLT5idWZmZXIsICRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBXcml0ZXMgZGF0YSB0byB0aGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+YnVmZmVyIC49ICRzdHJpbmc7CgogICAgICAgIC8vIFRPRE86IFdoYXQgc2hvdWxkIGhhcHBlbiBoZXJlPwogICAgICAgIGlmIChzdHJsZW4oJHRoaXMtPmJ1ZmZlcikgPj0gJHRoaXMtPmh3bSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RybGVuKCRzdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGtleSA9PSAnaHdtJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmh3bTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5ID8gbnVsbCA6IFtdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/CachingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgY2FuIGNhY2hlIHByZXZpb3VzbHkgcmVhZCBieXRlcyBmcm9tIGEgc2VxdWVudGlhbGx5CiAqIHJlYWQgc3RyZWFtLgogKi8KY2xhc3MgQ2FjaGluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSBiZWluZyB3cmFwcGVkICovCiAgICBwcml2YXRlICRyZW1vdGVTdHJlYW07CgogICAgLyoqIEB2YXIgaW50IE51bWJlciBvZiBieXRlcyB0byBza2lwIHJlYWRpbmcgZHVlIHRvIGEgd3JpdGUgb24gdGhlIGJ1ZmZlciAqLwogICAgcHJpdmF0ZSAkc2tpcFJlYWRCeXRlcyA9IDA7CgogICAgLyoqCiAgICAgKiBXZSB3aWxsIHRyZWF0IHRoZSBidWZmZXIgb2JqZWN0IGFzIHRoZSBib2R5IG9mIHRoZSBzdHJlYW0KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIGNhY2hlCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICR0YXJnZXQgT3B0aW9uYWxseSBzcGVjaWZ5IHdoZXJlIGRhdGEgaXMgY2FjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHRhcmdldCA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT5yZW1vdGVTdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGFyZ2V0ID86IG5ldyBTdHJlYW0oZm9wZW4oJ3BocDovL3RlbXAnLCAncisnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiBtYXgoJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpLCAkdGhpcy0+cmVtb3RlU3RyZWFtLT5nZXRTaXplKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoJHdoZW5jZSA9PSBTRUVLX1NFVCkgewogICAgICAgICAgICAkYnl0ZSA9ICRvZmZzZXQ7CiAgICAgICAgfSBlbHNlaWYgKCR3aGVuY2UgPT0gU0VFS19DVVIpIHsKICAgICAgICAgICAgJGJ5dGUgPSAkb2Zmc2V0ICsgJHRoaXMtPnRlbGwoKTsKICAgICAgICB9IGVsc2VpZiAoJHdoZW5jZSA9PSBTRUVLX0VORCkgewogICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5yZW1vdGVTdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgaWYgKCRzaXplID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5jYWNoZUVudGlyZVN0cmVhbSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRieXRlID0gJHNpemUgKyAkb2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHdoZW5jZScpOwogICAgICAgIH0KCiAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRkaWZmID4gMCkgewogICAgICAgICAgICAvLyBSZWFkIHRoZSByZW1vdGVTdHJlYW0gdW50aWwgd2UgaGF2ZSByZWFkIGluIGF0IGxlYXN0IHRoZSBhbW91bnQKICAgICAgICAgICAgLy8gb2YgYnl0ZXMgcmVxdWVzdGVkLCBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaWxlLgogICAgICAgICAgICB3aGlsZSAoJGRpZmYgPiAwICYmICEkdGhpcy0+cmVtb3RlU3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJlYWQoJGRpZmYpOwogICAgICAgICAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGRvIGEgbm9ybWFsIHNlZWsgc2luY2Ugd2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgYnl0ZS4KICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2VlaygkYnl0ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgLy8gUGVyZm9ybSBhIHJlZ3VsYXIgcmVhZCBvbiBhbnkgcHJldmlvdXNseSByZWFkIGRhdGEgZnJvbSB0aGUgYnVmZmVyCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoIC0gc3RybGVuKCRkYXRhKTsKCiAgICAgICAgLy8gTW9yZSBkYXRhIHdhcyByZXF1ZXN0ZWQgc28gcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtCiAgICAgICAgaWYgKCRyZW1haW5pbmcpIHsKICAgICAgICAgICAgLy8gSWYgZGF0YSB3YXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyIGluIGEgcG9zaXRpb24gdGhhdCB3b3VsZCBoYXZlCiAgICAgICAgICAgIC8vIGJlZW4gZmlsbGVkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0sIHRoZW4gd2UgbXVzdCBza2lwIGJ5dGVzIG9uCiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgc3RyZWFtIHRvIGVtdWxhdGUgb3ZlcndyaXRpbmcgYnl0ZXMgZnJvbSB0aGF0CiAgICAgICAgICAgIC8vIHBvc2l0aW9uLiBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgUEhQIHN0cmVhbSB3cmFwcGVycy4KICAgICAgICAgICAgJHJlbW90ZURhdGEgPSAkdGhpcy0+cmVtb3RlU3RyZWFtLT5yZWFkKAogICAgICAgICAgICAgICAgJHJlbWFpbmluZyArICR0aGlzLT5za2lwUmVhZEJ5dGVzCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPnNraXBSZWFkQnl0ZXMpIHsKICAgICAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJHJlbW90ZURhdGEpOwogICAgICAgICAgICAgICAgJHJlbW90ZURhdGEgPSBzdWJzdHIoJHJlbW90ZURhdGEsICR0aGlzLT5za2lwUmVhZEJ5dGVzKTsKICAgICAgICAgICAgICAgICR0aGlzLT5za2lwUmVhZEJ5dGVzID0gbWF4KDAsICR0aGlzLT5za2lwUmVhZEJ5dGVzIC0gJGxlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRkYXRhIC49ICRyZW1vdGVEYXRhOwogICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT53cml0ZSgkcmVtb3RlRGF0YSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgLy8gV2hlbiBhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudGx5IHJlYWQgc3RyZWFtLCB5b3UnbGwgd2FudAogICAgICAgIC8vIHRvIHNraXAgYnl0ZXMgZnJvbSBiZWluZyByZWFkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0gdG8gZW11bGF0ZQogICAgICAgIC8vIG90aGVyIHN0cmVhbSB3cmFwcGVycy4gQmFzaWNhbGx5IHJlcGxhY2luZyBieXRlcyBvZiBkYXRhIG9mIGEgZml4ZWQKICAgICAgICAvLyBsZW5ndGguCiAgICAgICAgJG92ZXJmbG93ID0gKHN0cmxlbigkc3RyaW5nKSArICR0aGlzLT50ZWxsKCkpIC0gJHRoaXMtPnJlbW90ZVN0cmVhbS0+dGVsbCgpOwogICAgICAgIGlmICgkb3ZlcmZsb3cgPiAwKSB7CiAgICAgICAgICAgICR0aGlzLT5za2lwUmVhZEJ5dGVzICs9ICRvdmVyZmxvdzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZSgkc3RyaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZW9mKCkgJiYgJHRoaXMtPnJlbW90ZVN0cmVhbS0+ZW9mKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZSBib3RoIHRoZSByZW1vdGUgc3RyZWFtIGFuZCBidWZmZXIgc3RyZWFtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlbW90ZVN0cmVhbS0+Y2xvc2UoKSAmJiAkdGhpcy0+c3RyZWFtLT5jbG9zZSgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2FjaGVFbnRpcmVTdHJlYW0oKQogICAgewogICAgICAgICR0YXJnZXQgPSBuZXcgRm5TdHJlYW0oWyd3cml0ZScgPT4gJ3N0cmxlbiddKTsKICAgICAgICBjb3B5X3RvX3N0cmVhbSgkdGhpcywgJHRhcmdldCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dGVsbCgpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/DroppingStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgYmVnaW5zIGRyb3BwaW5nIGRhdGEgb25jZSB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZwogKiBzdHJlYW0gYmVjb21lcyB0b28gZnVsbC4KICovCmNsYXNzIERyb3BwaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRtYXhMZW5ndGg7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgVW5kZXJseWluZyBzdHJlYW0gdG8gZGVjb3JhdGUuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRtYXhMZW5ndGggTWF4aW11bSBzaXplIGJlZm9yZSBkcm9wcGluZyBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sICRtYXhMZW5ndGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPm1heExlbmd0aCA9ICRtYXhMZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgJGRpZmYgPSAkdGhpcy0+bWF4TGVuZ3RoIC0gJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpOwoKICAgICAgICAvLyBCZWdpbiByZXR1cm5pbmcgMCB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyB0b28gbGFyZ2UuCiAgICAgICAgaWYgKCRkaWZmIDw9IDApIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICAvLyBXcml0ZSB0aGUgc3RyZWFtIG9yIGEgc3Vic2V0IG9mIHRoZSBzdHJlYW0gaWYgbmVlZGVkLgogICAgICAgIGlmIChzdHJsZW4oJHN0cmluZykgPCAkZGlmZikgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoJHN0cmluZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoc3Vic3RyKCRzdHJpbmcsIDAsICRkaWZmKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/FnStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb21wb3NlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gYSBoYXNoIG9mIGZ1bmN0aW9ucy4KICoKICogQWxsb3dzIGZvciBlYXN5IHRlc3RpbmcgYW5kIGV4dGVuc2lvbiBvZiBhIHByb3ZpZGVkIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcKICogdG8gY3JlYXRlIGEgY29uY3JldGUgY2xhc3MgZm9yIGEgc2ltcGxlIGV4dGVuc2lvbiBwb2ludC4KICovCmNsYXNzIEZuU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRtZXRob2RzOwoKICAgIC8qKiBAdmFyIGFycmF5IE1ldGhvZHMgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbiBhcnJheSAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNsb3RzID0gWydfX3RvU3RyaW5nJywgJ2Nsb3NlJywgJ2RldGFjaCcsICdyZXdpbmQnLAogICAgICAgICdnZXRTaXplJywgJ3RlbGwnLCAnZW9mJywgJ2lzU2Vla2FibGUnLCAnc2VlaycsICdpc1dyaXRhYmxlJywgJ3dyaXRlJywKICAgICAgICAnaXNSZWFkYWJsZScsICdyZWFkJywgJ2dldENvbnRlbnRzJywgJ2dldE1ldGFkYXRhJ107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG1ldGhvZHMgSGFzaCBvZiBtZXRob2QgbmFtZSB0byBhIGNhbGxhYmxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG1ldGhvZHMpCiAgICB7CiAgICAgICAgJHRoaXMtPm1ldGhvZHMgPSAkbWV0aG9kczsKCiAgICAgICAgLy8gQ3JlYXRlIHRoZSBmdW5jdGlvbnMgb24gdGhlIGNsYXNzCiAgICAgICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG5hbWUgPT4gJGZuKSB7CiAgICAgICAgICAgICR0aGlzLT57J19mbl8nIC4gJG5hbWV9ID0gJGZuOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExhemlseSBkZXRlcm1pbmUgd2hpY2ggbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkLgogICAgICogQHRocm93cyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKHN0cl9yZXBsYWNlKCdfZm5fJywgJycsICRuYW1lKQogICAgICAgICAgICAuICcoKSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIEZuU3RyZWFtJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgY2xvc2UgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gb25seSBpZiBwb3NzaWJsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2ZuX2Nsb3NlKSkgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2Nsb3NlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbiB1bnNlcmlhbGl6ZSB3b3VsZCBhbGxvdyB0aGUgX19kZXN0cnVjdCB0byBydW4gd2hlbiB0aGUgdW5zZXJpYWxpemVkIHZhbHVlIGdvZXMgb3V0IG9mIHNjb3BlLgogICAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdGblN0cmVhbSBzaG91bGQgbmV2ZXIgYmUgdW5zZXJpYWxpemVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGN1c3RvbSBmdW5jdGlvbmFsaXR5IHRvIGFuIHVuZGVybHlpbmcgc3RyZWFtIGJ5IGludGVyY2VwdGluZwogICAgICogc3BlY2lmaWMgbWV0aG9kIGNhbGxzLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgU3RyZWFtIHRvIGRlY29yYXRlCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRtZXRob2RzIEhhc2ggb2YgbWV0aG9kIG5hbWUgdG8gYSBjbG9zdXJlCiAgICAgKgogICAgICogQHJldHVybiBGblN0cmVhbQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29yYXRlKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBhcnJheSAkbWV0aG9kcykKICAgIHsKICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIHJlcXVpcmVkIG1ldGhvZHMgd2VyZSBub3QgcHJvdmlkZWQsIHRoZW4gc2ltcGx5CiAgICAgICAgLy8gcHJveHkgdG8gdGhlIGRlY29yYXRlZCBzdHJlYW0uCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfZGlmZihzZWxmOjokc2xvdHMsIGFycmF5X2tleXMoJG1ldGhvZHMpKSBhcyAkZGlmZikgewogICAgICAgICAgICAkbWV0aG9kc1skZGlmZl0gPSBbJHN0cmVhbSwgJGRpZmZdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRtZXRob2RzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fX190b1N0cmluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9jbG9zZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZGV0YWNoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZ2V0U2l6ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX3RlbGwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2VvZik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2lzU2Vla2FibGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fcmV3aW5kKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpCiAgICB7CiAgICAgICAgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9zZWVrLCAkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5faXNXcml0YWJsZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fd3JpdGUsICRzdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9pc1JlYWRhYmxlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX3JlYWQsICRsZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZ2V0Q29udGVudHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9nZXRNZXRhZGF0YSwgJGtleSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSFRUUCBtZXNzYWdlLgogKgogKiBAcGFyYW0gTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSBNZXNzYWdlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBzdHIoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSkKewogICAgaWYgKCRtZXNzYWdlIGluc3RhbmNlb2YgUmVxdWVzdEludGVyZmFjZSkgewogICAgICAgICRtc2cgPSB0cmltKCRtZXNzYWdlLT5nZXRNZXRob2QoKSAuICcgJwogICAgICAgICAgICAgICAgLiAkbWVzc2FnZS0+Z2V0UmVxdWVzdFRhcmdldCgpKQogICAgICAgICAgICAuICcgSFRUUC8nIC4gJG1lc3NhZ2UtPmdldFByb3RvY29sVmVyc2lvbigpOwogICAgICAgIGlmICghJG1lc3NhZ2UtPmhhc0hlYWRlcignaG9zdCcpKSB7CiAgICAgICAgICAgICRtc2cgLj0gIlxyXG5Ib3N0OiAiIC4gJG1lc3NhZ2UtPmdldFVyaSgpLT5nZXRIb3N0KCk7CiAgICAgICAgfQogICAgfSBlbHNlaWYgKCRtZXNzYWdlIGluc3RhbmNlb2YgUmVzcG9uc2VJbnRlcmZhY2UpIHsKICAgICAgICAkbXNnID0gJ0hUVFAvJyAuICRtZXNzYWdlLT5nZXRQcm90b2NvbFZlcnNpb24oKSAuICcgJwogICAgICAgICAgICAuICRtZXNzYWdlLT5nZXRTdGF0dXNDb2RlKCkgLiAnICcKICAgICAgICAgICAgLiAkbWVzc2FnZS0+Z2V0UmVhc29uUGhyYXNlKCk7CiAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmtub3duIG1lc3NhZ2UgdHlwZScpOwogICAgfQoKICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiIC4gaW1wbG9kZSgnLCAnLCAkdmFsdWVzKTsKICAgIH0KCiAgICByZXR1cm4gInskbXNnfVxyXG5cclxuIiAuICRtZXNzYWdlLT5nZXRCb2R5KCk7Cn0KCi8qKgogKiBSZXR1cm5zIGEgVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciB7QHNlZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZX0gYW5kCiAqIHJldHVybnMgYSBVcmlJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYQogKiBgVXJpSW50ZXJmYWNlYCwgaXQgaXMgcmV0dXJuZWQgYXMtaXMuCiAqCiAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkKICoKICogQHJldHVybiBVcmlJbnRlcmZhY2UKICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAqLwpmdW5jdGlvbiB1cmlfZm9yKCR1cmkpCnsKICAgIGlmICgkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9IGVsc2VpZiAoaXNfc3RyaW5nKCR1cmkpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBVcmkoJHVyaSk7CiAgICB9CgogICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VSSSBtdXN0IGJlIGEgc3RyaW5nIG9yIFVyaUludGVyZmFjZScpOwp9CgovKioKICogQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KICoKICogT3B0aW9ucyBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcga2V5czoKICogLSBtZXRhZGF0YTogQXJyYXkgb2YgY3VzdG9tIG1ldGFkYXRhLgogKiAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlfHN0cmluZ3xudWxsfGludHxmbG9hdHxib29sfFN0cmVhbUludGVyZmFjZXxjYWxsYWJsZXxcSXRlcmF0b3IgJHJlc291cmNlIEVudGl0eSBib2R5IGRhdGEKICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgIEFkZGl0aW9uYWwgb3B0aW9ucwogKgogKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICRyZXNvdXJjZSBhcmcgaXMgbm90IHZhbGlkLgogKi8KZnVuY3Rpb24gc3RyZWFtX2ZvcigkcmVzb3VyY2UgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSkKewogICAgaWYgKGlzX3NjYWxhcigkcmVzb3VyY2UpKSB7CiAgICAgICAgJHN0cmVhbSA9IGZvcGVuKCdwaHA6Ly90ZW1wJywgJ3IrJyk7CiAgICAgICAgaWYgKCRyZXNvdXJjZSAhPT0gJycpIHsKICAgICAgICAgICAgZndyaXRlKCRzdHJlYW0sICRyZXNvdXJjZSk7CiAgICAgICAgICAgIGZzZWVrKCRzdHJlYW0sIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFN0cmVhbSgkc3RyZWFtLCAkb3B0aW9ucyk7CiAgICB9CgogICAgc3dpdGNoIChnZXR0eXBlKCRyZXNvdXJjZSkpIHsKICAgICAgICBjYXNlICdyZXNvdXJjZSc6CiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKCRyZXNvdXJjZSwgJG9wdGlvbnMpOwogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgIGlmICgkcmVzb3VyY2UgaW5zdGFuY2VvZiBTdHJlYW1JbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICAgICAgICAgIH0gZWxzZWlmICgkcmVzb3VyY2UgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHVtcFN0cmVhbShmdW5jdGlvbiAoKSB1c2UgKCRyZXNvdXJjZSkgewogICAgICAgICAgICAgICAgICAgIGlmICghJHJlc291cmNlLT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNvdXJjZS0+Y3VycmVudCgpOwogICAgICAgICAgICAgICAgICAgICRyZXNvdXJjZS0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgICAgICAgICAgfSwgJG9wdGlvbnMpOwogICAgICAgICAgICB9IGVsc2VpZiAobWV0aG9kX2V4aXN0cygkcmVzb3VyY2UsICdfX3RvU3RyaW5nJykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW1fZm9yKChzdHJpbmcpICRyZXNvdXJjZSwgJG9wdGlvbnMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ05VTEwnOgogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbShmb3BlbigncGhwOi8vdGVtcCcsICdyKycpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgaWYgKGlzX2NhbGxhYmxlKCRyZXNvdXJjZSkpIHsKICAgICAgICByZXR1cm4gbmV3IFB1bXBTdHJlYW0oJHJlc291cmNlLCAkb3B0aW9ucyk7CiAgICB9CgogICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgcmVzb3VyY2UgdHlwZTogJyAuIGdldHR5cGUoJHJlc291cmNlKSk7Cn0KCi8qKgogKiBQYXJzZSBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIGNvbnRhaW5pbmcgIjsiIHNlcGFyYXRlZCBkYXRhIGludG8gYW4KICogYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgaGVhZGVyIGtleSB2YWx1ZSBwYWlyCiAqIGRhdGEgb2YgdGhlIGhlYWRlci4gV2hlbiBhIHBhcmFtZXRlciBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUsIGJ1dCBqdXN0CiAqIGNvbnRhaW5zIGEga2V5LCB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5qZWN0IGEga2V5IHdpdGggYSAnJyBzdHJpbmcgdmFsdWUuCiAqCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGhlYWRlciBIZWFkZXIgdG8gcGFyc2UgaW50byBjb21wb25lbnRzLgogKgogKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIHBhcnNlZCBoZWFkZXIgdmFsdWVzLgogKi8KZnVuY3Rpb24gcGFyc2VfaGVhZGVyKCRoZWFkZXIpCnsKICAgIHN0YXRpYyAkdHJpbW1lZCA9ICJcIicgIFxuXHRcciI7CiAgICAkcGFyYW1zID0gJG1hdGNoZXMgPSBbXTsKCiAgICBmb3JlYWNoIChub3JtYWxpemVfaGVhZGVyKCRoZWFkZXIpIGFzICR2YWwpIHsKICAgICAgICAkcGFydCA9IFtdOwogICAgICAgIGZvcmVhY2ggKHByZWdfc3BsaXQoJy87KD89KFteIl0qIlteIl0qIikqW14iXSokKS8nLCAkdmFsKSBhcyAka3ZwKSB7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoX2FsbCgnLzxbXj5dKz58W149XSsvJywgJGt2cCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAkbSA9ICRtYXRjaGVzWzBdOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtWzFdKSkgewogICAgICAgICAgICAgICAgICAgICRwYXJ0W3RyaW0oJG1bMF0sICR0cmltbWVkKV0gPSB0cmltKCRtWzFdLCAkdHJpbW1lZCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRwYXJ0W10gPSB0cmltKCRtWzBdLCAkdHJpbW1lZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRwYXJ0KSB7CiAgICAgICAgICAgICRwYXJhbXNbXSA9ICRwYXJ0OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHBhcmFtczsKfQoKLyoqCiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMgdGhhdCBtYXkgY29udGFpbiBjb21tYSBzZXBhcmF0ZWQKICogaGVhZGVycyBpbnRvIGFuIGFycmF5IG9mIGhlYWRlcnMgd2l0aCBubyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLgogKgogKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRoZWFkZXIgSGVhZGVyIHRvIG5vcm1hbGl6ZS4KICoKICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBub3JtYWxpemVkIGhlYWRlciBmaWVsZCB2YWx1ZXMuCiAqLwpmdW5jdGlvbiBub3JtYWxpemVfaGVhZGVyKCRoZWFkZXIpCnsKICAgIGlmICghaXNfYXJyYXkoJGhlYWRlcikpIHsKICAgICAgICByZXR1cm4gYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnLCcsICRoZWFkZXIpKTsKICAgIH0KCiAgICAkcmVzdWx0ID0gW107CiAgICBmb3JlYWNoICgkaGVhZGVyIGFzICR2YWx1ZSkgewogICAgICAgIGZvcmVhY2ggKChhcnJheSkgJHZhbHVlIGFzICR2KSB7CiAgICAgICAgICAgIGlmIChzdHJwb3MoJHYsICcsJykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSAkdjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKHByZWdfc3BsaXQoJy8sKD89KFteIl0qIlteIl0qIikqW14iXSokKS8nLCAkdikgYXMgJHZ2KSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0W10gPSB0cmltKCR2dik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8qKgogKiBDbG9uZSBhbmQgbW9kaWZ5IGEgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiBjaGFuZ2VzLgogKgogKiBUaGUgY2hhbmdlcyBjYW4gYmUgb25lIG9mOgogKiAtIG1ldGhvZDogKHN0cmluZykgQ2hhbmdlcyB0aGUgSFRUUCBtZXRob2QuCiAqIC0gc2V0X2hlYWRlcnM6IChhcnJheSkgU2V0cyB0aGUgZ2l2ZW4gaGVhZGVycy4KICogLSByZW1vdmVfaGVhZGVyczogKGFycmF5KSBSZW1vdmUgdGhlIGdpdmVuIGhlYWRlcnMuCiAqIC0gYm9keTogKG1peGVkKSBTZXRzIHRoZSBnaXZlbiBib2R5LgogKiAtIHVyaTogKFVyaUludGVyZmFjZSkgU2V0IHRoZSBVUkkuCiAqIC0gcXVlcnk6IChzdHJpbmcpIFNldCB0aGUgcXVlcnkgc3RyaW5nIHZhbHVlIG9mIHRoZSBVUkkuCiAqIC0gdmVyc2lvbjogKHN0cmluZykgU2V0IHRoZSBwcm90b2NvbCB2ZXJzaW9uLgogKgogKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCBSZXF1ZXN0IHRvIGNsb25lIGFuZCBtb2RpZnkuCiAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRjaGFuZ2VzIENoYW5nZXMgdG8gYXBwbHkuCiAqCiAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogKi8KZnVuY3Rpb24gbW9kaWZ5X3JlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJGNoYW5nZXMpCnsKICAgIGlmICghJGNoYW5nZXMpIHsKICAgICAgICByZXR1cm4gJHJlcXVlc3Q7CiAgICB9CgogICAgJGhlYWRlcnMgPSAkcmVxdWVzdC0+Z2V0SGVhZGVycygpOwoKICAgIGlmICghaXNzZXQoJGNoYW5nZXNbJ3VyaSddKSkgewogICAgICAgICR1cmkgPSAkcmVxdWVzdC0+Z2V0VXJpKCk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFJlbW92ZSB0aGUgaG9zdCBoZWFkZXIgaWYgb25lIGlzIG9uIHRoZSBVUkkKICAgICAgICBpZiAoJGhvc3QgPSAkY2hhbmdlc1sndXJpJ10tPmdldEhvc3QoKSkgewogICAgICAgICAgICAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXVsnSG9zdCddID0gJGhvc3Q7CgogICAgICAgICAgICBpZiAoJHBvcnQgPSAkY2hhbmdlc1sndXJpJ10tPmdldFBvcnQoKSkgewogICAgICAgICAgICAgICAgJHN0YW5kYXJkUG9ydHMgPSBbJ2h0dHAnID0+IDgwLCAnaHR0cHMnID0+IDQ0M107CiAgICAgICAgICAgICAgICAkc2NoZW1lID0gJGNoYW5nZXNbJ3VyaSddLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkc3RhbmRhcmRQb3J0c1skc2NoZW1lXSkgJiYgJHBvcnQgIT0gJHN0YW5kYXJkUG9ydHNbJHNjaGVtZV0pIHsKICAgICAgICAgICAgICAgICAgICAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXVsnSG9zdCddIC49ICc6Jy4kcG9ydDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdXJpID0gJGNoYW5nZXNbJ3VyaSddOwogICAgfQoKICAgIGlmICghZW1wdHkoJGNoYW5nZXNbJ3JlbW92ZV9oZWFkZXJzJ10pKSB7CiAgICAgICAgJGhlYWRlcnMgPSBfY2FzZWxlc3NfcmVtb3ZlKCRjaGFuZ2VzWydyZW1vdmVfaGVhZGVycyddLCAkaGVhZGVycyk7CiAgICB9CgogICAgaWYgKCFlbXB0eSgkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSkpIHsKICAgICAgICAkaGVhZGVycyA9IF9jYXNlbGVzc19yZW1vdmUoYXJyYXlfa2V5cygkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSksICRoZWFkZXJzKTsKICAgICAgICAkaGVhZGVycyA9ICRjaGFuZ2VzWydzZXRfaGVhZGVycyddICsgJGhlYWRlcnM7CiAgICB9CgogICAgaWYgKGlzc2V0KCRjaGFuZ2VzWydxdWVyeSddKSkgewogICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoJGNoYW5nZXNbJ3F1ZXJ5J10pOwogICAgfQoKICAgIGlmICgkcmVxdWVzdCBpbnN0YW5jZW9mIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UpIHsKICAgICAgICByZXR1cm4gKG5ldyBTZXJ2ZXJSZXF1ZXN0KAogICAgICAgICAgICBpc3NldCgkY2hhbmdlc1snbWV0aG9kJ10pID8gJGNoYW5nZXNbJ21ldGhvZCddIDogJHJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICAkdXJpLAogICAgICAgICAgICAkaGVhZGVycywKICAgICAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ2JvZHknXSkgPyAkY2hhbmdlc1snYm9keSddIDogJHJlcXVlc3QtPmdldEJvZHkoKSwKICAgICAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ3ZlcnNpb24nXSkKICAgICAgICAgICAgICAgID8gJGNoYW5nZXNbJ3ZlcnNpb24nXQogICAgICAgICAgICAgICAgOiAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCksCiAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRTZXJ2ZXJQYXJhbXMoKQogICAgICAgICkpCiAgICAgICAgLT53aXRoUGFyc2VkQm9keSgkcmVxdWVzdC0+Z2V0UGFyc2VkQm9keSgpKQogICAgICAgIC0+d2l0aFF1ZXJ5UGFyYW1zKCRyZXF1ZXN0LT5nZXRRdWVyeVBhcmFtcygpKQogICAgICAgIC0+d2l0aENvb2tpZVBhcmFtcygkcmVxdWVzdC0+Z2V0Q29va2llUGFyYW1zKCkpCiAgICAgICAgLT53aXRoVXBsb2FkZWRGaWxlcygkcmVxdWVzdC0+Z2V0VXBsb2FkZWRGaWxlcygpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IFJlcXVlc3QoCiAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ21ldGhvZCddKSA/ICRjaGFuZ2VzWydtZXRob2QnXSA6ICRyZXF1ZXN0LT5nZXRNZXRob2QoKSwKICAgICAgICAkdXJpLAogICAgICAgICRoZWFkZXJzLAogICAgICAgIGlzc2V0KCRjaGFuZ2VzWydib2R5J10pID8gJGNoYW5nZXNbJ2JvZHknXSA6ICRyZXF1ZXN0LT5nZXRCb2R5KCksCiAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ3ZlcnNpb24nXSkKICAgICAgICAgICAgPyAkY2hhbmdlc1sndmVyc2lvbiddCiAgICAgICAgICAgIDogJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpCiAgICApOwp9CgovKioKICogQXR0ZW1wdHMgdG8gcmV3aW5kIGEgbWVzc2FnZSBib2R5IGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAqCiAqIFRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIHdpbGwgb25seSBiZSByZXdvdW5kIGlmIGEgY2FsbCB0byBgdGVsbCgpYCByZXR1cm5zIGEKICogdmFsdWUgb3RoZXIgdGhhbiBgMGAuCiAqCiAqIEBwYXJhbSBNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlIE1lc3NhZ2UgdG8gcmV3aW5kCiAqCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24KICovCmZ1bmN0aW9uIHJld2luZF9ib2R5KE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpCnsKICAgICRib2R5ID0gJG1lc3NhZ2UtPmdldEJvZHkoKTsKCiAgICBpZiAoJGJvZHktPnRlbGwoKSkgewogICAgICAgICRib2R5LT5yZXdpbmQoKTsKICAgIH0KfQoKLyoqCiAqIFNhZmVseSBvcGVucyBhIFBIUCBzdHJlYW0gcmVzb3VyY2UgdXNpbmcgYSBmaWxlbmFtZS4KICoKICogV2hlbiBmb3BlbiBmYWlscywgUEhQIG5vcm1hbGx5IHJhaXNlcyBhIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gYWRkcyBhbgogKiBlcnJvciBoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaW5zdGVhZC4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRmlsZSB0byBvcGVuCiAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgICAgIE1vZGUgdXNlZCB0byBvcGVuIHRoZSBmaWxlCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UKICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkCiAqLwpmdW5jdGlvbiB0cnlfZm9wZW4oJGZpbGVuYW1lLCAkbW9kZSkKewogICAgJGV4ID0gbnVsbDsKICAgIHNldF9lcnJvcl9oYW5kbGVyKGZ1bmN0aW9uICgpIHVzZSAoJGZpbGVuYW1lLCAkbW9kZSwgJiRleCkgewogICAgICAgICRleCA9IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAnVW5hYmxlIHRvIG9wZW4gJXMgdXNpbmcgbW9kZSAlczogJXMnLAogICAgICAgICAgICAkZmlsZW5hbWUsCiAgICAgICAgICAgICRtb2RlLAogICAgICAgICAgICBmdW5jX2dldF9hcmdzKClbMV0KICAgICAgICApKTsKICAgIH0pOwoKICAgICRoYW5kbGUgPSBmb3BlbigkZmlsZW5hbWUsICRtb2RlKTsKICAgIHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoKICAgIGlmICgkZXgpIHsKICAgICAgICAvKiogQHZhciAkZXggXFJ1bnRpbWVFeGNlcHRpb24gKi8KICAgICAgICB0aHJvdyAkZXg7CiAgICB9CgogICAgcmV0dXJuICRoYW5kbGU7Cn0KCi8qKgogKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGEgc3RyaW5nIHVudGlsIHRoZSBnaXZlbiBudW1iZXIgb2YKICogYnl0ZXMgaGF2ZSBiZWVuIHJlYWQuCiAqCiAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gcmVhZAogKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRtYXhMZW4gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4gUGFzcyAtMQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVhZCB0aGUgZW50aXJlIHN0cmVhbS4KICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGNvcHlfdG9fc3RyaW5nKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCAkbWF4TGVuID0gLTEpCnsKICAgICRidWZmZXIgPSAnJzsKCiAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICB3aGlsZSAoISRzdHJlYW0tPmVvZigpKSB7CiAgICAgICAgICAgICRidWYgPSAkc3RyZWFtLT5yZWFkKDEwNDg1NzYpOwogICAgICAgICAgICAvLyBVc2luZyBhIGxvb3NlIGVxdWFsaXR5IGhlcmUgdG8gbWF0Y2ggb24gJycgYW5kIGZhbHNlLgogICAgICAgICAgICBpZiAoJGJ1ZiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYnVmZmVyIC49ICRidWY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgICRsZW4gPSAwOwogICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSAmJiAkbGVuIDwgJG1heExlbikgewogICAgICAgICRidWYgPSAkc3RyZWFtLT5yZWFkKCRtYXhMZW4gLSAkbGVuKTsKICAgICAgICAvLyBVc2luZyBhIGxvb3NlIGVxdWFsaXR5IGhlcmUgdG8gbWF0Y2ggb24gJycgYW5kIGZhbHNlLgogICAgICAgIGlmICgkYnVmID09IG51bGwpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgICRidWZmZXIgLj0gJGJ1ZjsKICAgICAgICAkbGVuID0gc3RybGVuKCRidWZmZXIpOwogICAgfQoKICAgIHJldHVybiAkYnVmZmVyOwp9CgovKioKICogQ29weSB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gaW50byBhbm90aGVyIHN0cmVhbSB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyCiAqIG9mIGJ5dGVzIGhhdmUgYmVlbiByZWFkLgogKgogKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UgU3RyZWFtIHRvIHJlYWQgZnJvbQogKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRkZXN0ICAgU3RyZWFtIHRvIHdyaXRlIHRvCiAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgJG1heExlbiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBQYXNzIC0xCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWFkIHRoZSBlbnRpcmUgc3RyZWFtLgogKgogKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gY29weV90b19zdHJlYW0oCiAgICBTdHJlYW1JbnRlcmZhY2UgJHNvdXJjZSwKICAgIFN0cmVhbUludGVyZmFjZSAkZGVzdCwKICAgICRtYXhMZW4gPSAtMQopIHsKICAgICRidWZmZXJTaXplID0gODE5MjsKCiAgICBpZiAoJG1heExlbiA9PT0gLTEpIHsKICAgICAgICB3aGlsZSAoISRzb3VyY2UtPmVvZigpKSB7CiAgICAgICAgICAgIGlmICghJGRlc3QtPndyaXRlKCRzb3VyY2UtPnJlYWQoJGJ1ZmZlclNpemUpKSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRyZW1haW5pbmcgPSAkbWF4TGVuOwogICAgICAgIHdoaWxlICgkcmVtYWluaW5nID4gMCAmJiAhJHNvdXJjZS0+ZW9mKCkpIHsKICAgICAgICAgICAgJGJ1ZiA9ICRzb3VyY2UtPnJlYWQobWluKCRidWZmZXJTaXplLCAkcmVtYWluaW5nKSk7CiAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGJ1Zik7CiAgICAgICAgICAgIGlmICghJGxlbikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlbWFpbmluZyAtPSAkbGVuOwogICAgICAgICAgICAkZGVzdC0+d3JpdGUoJGJ1Zik7CiAgICAgICAgfQogICAgfQp9CgovKioKICogQ2FsY3VsYXRlIGEgaGFzaCBvZiBhIFN0cmVhbQogKgogKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgU3RyZWFtIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCBmb3IKICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkYWxnbyAgICAgIEhhc2ggYWxnb3JpdGhtIChlLmcuIG1kNSwgY3JjMzIsIGV0YykKICogQHBhcmFtIGJvb2wgICAgICAgICAgICAkcmF3T3V0cHV0IFdoZXRoZXIgb3Igbm90IHRvIHVzZSByYXcgb3V0cHV0CiAqCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmVhbQogKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gaGFzaCgKICAgIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLAogICAgJGFsZ28sCiAgICAkcmF3T3V0cHV0ID0gZmFsc2UKKSB7CiAgICAkcG9zID0gJHN0cmVhbS0+dGVsbCgpOwoKICAgIGlmICgkcG9zID4gMCkgewogICAgICAgICRzdHJlYW0tPnJld2luZCgpOwogICAgfQoKICAgICRjdHggPSBoYXNoX2luaXQoJGFsZ28pOwogICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgIGhhc2hfdXBkYXRlKCRjdHgsICRzdHJlYW0tPnJlYWQoMTA0ODU3NikpOwogICAgfQoKICAgICRvdXQgPSBoYXNoX2ZpbmFsKCRjdHgsIChib29sKSAkcmF3T3V0cHV0KTsKICAgICRzdHJlYW0tPnNlZWsoJHBvcyk7CgogICAgcmV0dXJuICRvdXQ7Cn0KCi8qKgogKiBSZWFkIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0gdXAgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBidWZmZXIgbGVuZ3RoCiAqCiAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgICBTdHJlYW0gdG8gcmVhZCBmcm9tCiAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgJG1heExlbmd0aCBNYXhpbXVtIGJ1ZmZlciBsZW5ndGgKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHJlYWRsaW5lKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCAkbWF4TGVuZ3RoID0gbnVsbCkKewogICAgJGJ1ZmZlciA9ICcnOwogICAgJHNpemUgPSAwOwoKICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAvLyBVc2luZyBhIGxvb3NlIGVxdWFsaXR5IGhlcmUgdG8gbWF0Y2ggb24gJycgYW5kIGZhbHNlLgogICAgICAgIGlmIChudWxsID09ICgkYnl0ZSA9ICRzdHJlYW0tPnJlYWQoMSkpKSB7CiAgICAgICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgICAgIH0KICAgICAgICAkYnVmZmVyIC49ICRieXRlOwogICAgICAgIC8vIEJyZWFrIHdoZW4gYSBuZXcgbGluZSBpcyBmb3VuZCBvciB0aGUgbWF4IGxlbmd0aCAtIDEgaXMgcmVhY2hlZAogICAgICAgIGlmICgkYnl0ZSA9PT0gIlxuIiB8fCArKyRzaXplID09PSAkbWF4TGVuZ3RoIC0gMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRidWZmZXI7Cn0KCi8qKgogKiBQYXJzZXMgYSByZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXF1ZXN0IG9iamVjdC4KICoKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nLgogKgogKiBAcmV0dXJuIFJlcXVlc3QKICovCmZ1bmN0aW9uIHBhcnNlX3JlcXVlc3QoJG1lc3NhZ2UpCnsKICAgICRkYXRhID0gX3BhcnNlX21lc3NhZ2UoJG1lc3NhZ2UpOwogICAgJG1hdGNoZXMgPSBbXTsKICAgIGlmICghcHJlZ19tYXRjaCgnL15bXFNdK1xzKyhbYS16QS1aXSs6XC9cL3xcLykuKi8nLCAkZGF0YVsnc3RhcnQtbGluZSddLCAkbWF0Y2hlcykpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXF1ZXN0IHN0cmluZycpOwogICAgfQogICAgJHBhcnRzID0gZXhwbG9kZSgnICcsICRkYXRhWydzdGFydC1saW5lJ10sIDMpOwogICAgJHZlcnNpb24gPSBpc3NldCgkcGFydHNbMl0pID8gZXhwbG9kZSgnLycsICRwYXJ0c1syXSlbMV0gOiAnMS4xJzsKCiAgICAkcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KAogICAgICAgICRwYXJ0c1swXSwKICAgICAgICAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gX3BhcnNlX3JlcXVlc3RfdXJpKCRwYXJ0c1sxXSwgJGRhdGFbJ2hlYWRlcnMnXSkgOiAkcGFydHNbMV0sCiAgICAgICAgJGRhdGFbJ2hlYWRlcnMnXSwKICAgICAgICAkZGF0YVsnYm9keSddLAogICAgICAgICR2ZXJzaW9uCiAgICApOwoKICAgIHJldHVybiAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gJHJlcXVlc3QgOiAkcmVxdWVzdC0+d2l0aFJlcXVlc3RUYXJnZXQoJHBhcnRzWzFdKTsKfQoKLyoqCiAqIFBhcnNlcyBhIHJlc3BvbnNlIG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXNwb25zZSBvYmplY3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgUmVzcG9uc2UgbWVzc2FnZSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gUmVzcG9uc2UKICovCmZ1bmN0aW9uIHBhcnNlX3Jlc3BvbnNlKCRtZXNzYWdlKQp7CiAgICAkZGF0YSA9IF9wYXJzZV9tZXNzYWdlKCRtZXNzYWdlKTsKICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yIHRoZSBzcGFjZQogICAgLy8gYmV0d2VlbiBzdGF0dXMtY29kZSBhbmQgcmVhc29uLXBocmFzZSBpcyByZXF1aXJlZC4gQnV0IGJyb3dzZXJzIGFjY2VwdAogICAgLy8gcmVzcG9uc2VzIHdpdGhvdXQgc3BhY2UgYW5kIHJlYXNvbiBhcyB3ZWxsLgogICAgaWYgKCFwcmVnX21hdGNoKCcvXkhUVFBcLy4qIFswLTldezN9KCAuKnwkKS8nLCAkZGF0YVsnc3RhcnQtbGluZSddKSkgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHJlc3BvbnNlIHN0cmluZzogJyAuICRkYXRhWydzdGFydC1saW5lJ10pOwogICAgfQogICAgJHBhcnRzID0gZXhwbG9kZSgnICcsICRkYXRhWydzdGFydC1saW5lJ10sIDMpOwoKICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgJHBhcnRzWzFdLAogICAgICAgICRkYXRhWydoZWFkZXJzJ10sCiAgICAgICAgJGRhdGFbJ2JvZHknXSwKICAgICAgICBleHBsb2RlKCcvJywgJHBhcnRzWzBdKVsxXSwKICAgICAgICBpc3NldCgkcGFydHNbMl0pID8gJHBhcnRzWzJdIDogbnVsbAogICAgKTsKfQoKLyoqCiAqIFBhcnNlIGEgcXVlcnkgc3RyaW5nIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAqCiAqIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgZm91bmQgZm9yIHRoZSBzYW1lIGtleSwgdGhlIHZhbHVlIG9mIHRoYXQga2V5CiAqIHZhbHVlIHBhaXIgd2lsbCBiZWNvbWUgYW4gYXJyYXkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgbmVzdGVkCiAqIFBIUCBzdHlsZSBhcnJheXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgZm9vW2FdPTEmZm9vW2JdPTIgd2lsbAogKiBiZSBwYXJzZWQgaW50byBbJ2Zvb1thXScgPT4gJzEnLCAnZm9vW2JdJyA9PiAnMiddKS4KICoKICogQHBhcmFtIHN0cmluZyAgICRzdHIgICAgICAgICBRdWVyeSBzdHJpbmcgdG8gcGFyc2UKICogQHBhcmFtIGludHxib29sICR1cmxFbmNvZGluZyBIb3cgdGhlIHF1ZXJ5IHN0cmluZyBpcyBlbmNvZGVkCiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHBhcnNlX3F1ZXJ5KCRzdHIsICR1cmxFbmNvZGluZyA9IHRydWUpCnsKICAgICRyZXN1bHQgPSBbXTsKCiAgICBpZiAoJHN0ciA9PT0gJycpIHsKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBpZiAoJHVybEVuY29kaW5nID09PSB0cnVlKSB7CiAgICAgICAgJGRlY29kZXIgPSBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiByYXd1cmxkZWNvZGUoc3RyX3JlcGxhY2UoJysnLCAnICcsICR2YWx1ZSkpOwogICAgICAgIH07CiAgICB9IGVsc2VpZiAoJHVybEVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMzk4NikgewogICAgICAgICRkZWNvZGVyID0gJ3Jhd3VybGRlY29kZSc7CiAgICB9IGVsc2VpZiAoJHVybEVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMTczOCkgewogICAgICAgICRkZWNvZGVyID0gJ3VybGRlY29kZSc7CiAgICB9IGVsc2UgewogICAgICAgICRkZWNvZGVyID0gZnVuY3Rpb24gKCRzdHIpIHsgcmV0dXJuICRzdHI7IH07CiAgICB9CgogICAgZm9yZWFjaCAoZXhwbG9kZSgnJicsICRzdHIpIGFzICRrdnApIHsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCc9JywgJGt2cCwgMik7CiAgICAgICAgJGtleSA9ICRkZWNvZGVyKCRwYXJ0c1swXSk7CiAgICAgICAgJHZhbHVlID0gaXNzZXQoJHBhcnRzWzFdKSA/ICRkZWNvZGVyKCRwYXJ0c1sxXSkgOiBudWxsOwogICAgICAgIGlmICghaXNzZXQoJHJlc3VsdFska2V5XSkpIHsKICAgICAgICAgICAgJHJlc3VsdFska2V5XSA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRyZXN1bHRbJGtleV0pKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0WyRrZXldID0gWyRyZXN1bHRbJGtleV1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRbJGtleV1bXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8qKgogKiBCdWlsZCBhIHF1ZXJ5IHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIGtleSB2YWx1ZSBwYWlycy4KICoKICogVGhpcyBmdW5jdGlvbiBjYW4gdXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgcGFyc2VfcXVlcnkoKSB0byBidWlsZCBhIHF1ZXJ5CiAqIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgdGhlIHByb3ZpZGVkIGtleXMgd2hlbiBhbiBhcnJheSBpcwogKiBlbmNvdW50ZXJlZCAobGlrZSBodHRwX2J1aWxkX3F1ZXJ5IHdvdWxkKS4KICoKICogQHBhcmFtIGFycmF5ICAgICAkcGFyYW1zICAgUXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuCiAqIEBwYXJhbSBpbnR8ZmFsc2UgJGVuY29kaW5nIFNldCB0byBmYWxzZSB0byBub3QgZW5jb2RlLCBQSFBfUVVFUllfUkZDMzk4NgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBlbmNvZGUgdXNpbmcgUkZDMzk4Niwgb3IgUEhQX1FVRVJZX1JGQzE3MzgKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5jb2RlIHVzaW5nIFJGQzE3MzguCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBidWlsZF9xdWVyeShhcnJheSAkcGFyYW1zLCAkZW5jb2RpbmcgPSBQSFBfUVVFUllfUkZDMzk4NikKewogICAgaWYgKCEkcGFyYW1zKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIGlmICgkZW5jb2RpbmcgPT09IGZhbHNlKSB7CiAgICAgICAgJGVuY29kZXIgPSBmdW5jdGlvbiAoJHN0cikgeyByZXR1cm4gJHN0cjsgfTsKICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgPT09IFBIUF9RVUVSWV9SRkMzOTg2KSB7CiAgICAgICAgJGVuY29kZXIgPSAncmF3dXJsZW5jb2RlJzsKICAgIH0gZWxzZWlmICgkZW5jb2RpbmcgPT09IFBIUF9RVUVSWV9SRkMxNzM4KSB7CiAgICAgICAgJGVuY29kZXIgPSAndXJsZW5jb2RlJzsKICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgdHlwZScpOwogICAgfQoKICAgICRxcyA9ICcnOwogICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkayA9PiAkdikgewogICAgICAgICRrID0gJGVuY29kZXIoJGspOwogICAgICAgIGlmICghaXNfYXJyYXkoJHYpKSB7CiAgICAgICAgICAgICRxcyAuPSAkazsKICAgICAgICAgICAgaWYgKCR2ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkcXMgLj0gJz0nIC4gJGVuY29kZXIoJHYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRxcyAuPSAnJic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHYgYXMgJHZ2KSB7CiAgICAgICAgICAgICAgICAkcXMgLj0gJGs7CiAgICAgICAgICAgICAgICBpZiAoJHZ2ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgJHFzIC49ICc9JyAuICRlbmNvZGVyKCR2dik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcXMgLj0gJyYnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcXMgPyAoc3RyaW5nKSBzdWJzdHIoJHFzLCAwLCAtMSkgOiAnJzsKfQoKLyoqCiAqIERldGVybWluZXMgdGhlIG1pbWV0eXBlIG9mIGEgZmlsZSBieSBsb29raW5nIGF0IGl0cyBleHRlbnNpb24uCiAqCiAqIEBwYXJhbSAkZmlsZW5hbWUKICoKICogQHJldHVybiBudWxsfHN0cmluZwogKi8KZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkZmlsZW5hbWUpCnsKICAgIHJldHVybiBtaW1ldHlwZV9mcm9tX2V4dGVuc2lvbihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOwp9CgovKioKICogTWFwcyBhIGZpbGUgZXh0ZW5zaW9ucyB0byBhIG1pbWV0eXBlLgogKgogKiBAcGFyYW0gJGV4dGVuc2lvbiBzdHJpbmcgVGhlIGZpbGUgZXh0ZW5zaW9uLgogKgogKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAqIEBsaW5rIGh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaHR0cGQvaHR0cGQvYnJhbmNoZXMvMS4zLngvY29uZi9taW1lLnR5cGVzCiAqLwpmdW5jdGlvbiBtaW1ldHlwZV9mcm9tX2V4dGVuc2lvbigkZXh0ZW5zaW9uKQp7CiAgICBzdGF0aWMgJG1pbWV0eXBlcyA9IFsKICAgICAgICAnM2dwJyA9PiAndmlkZW8vM2dwcCcsCiAgICAgICAgJzd6JyA9PiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJywKICAgICAgICAnYWFjJyA9PiAnYXVkaW8veC1hYWMnLAogICAgICAgICdhaScgPT4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLAogICAgICAgICdhaWYnID0+ICdhdWRpby94LWFpZmYnLAogICAgICAgICdhc2MnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnYXNmJyA9PiAndmlkZW8veC1tcy1hc2YnLAogICAgICAgICdhdG9tJyA9PiAnYXBwbGljYXRpb24vYXRvbSt4bWwnLAogICAgICAgICdhdmknID0+ICd2aWRlby94LW1zdmlkZW8nLAogICAgICAgICdibXAnID0+ICdpbWFnZS9ibXAnLAogICAgICAgICdiejInID0+ICdhcHBsaWNhdGlvbi94LWJ6aXAyJywKICAgICAgICAnY2VyJyA9PiAnYXBwbGljYXRpb24vcGtpeC1jZXJ0JywKICAgICAgICAnY3JsJyA9PiAnYXBwbGljYXRpb24vcGtpeC1jcmwnLAogICAgICAgICdjcnQnID0+ICdhcHBsaWNhdGlvbi94LXg1MDktY2EtY2VydCcsCiAgICAgICAgJ2NzcycgPT4gJ3RleHQvY3NzJywKICAgICAgICAnY3N2JyA9PiAndGV4dC9jc3YnLAogICAgICAgICdjdScgPT4gJ2FwcGxpY2F0aW9uL2N1LXNlZW1lJywKICAgICAgICAnZGViJyA9PiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsCiAgICAgICAgJ2RvYycgPT4gJ2FwcGxpY2F0aW9uL21zd29yZCcsCiAgICAgICAgJ2RvY3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsCiAgICAgICAgJ2R2aScgPT4gJ2FwcGxpY2F0aW9uL3gtZHZpJywKICAgICAgICAnZW90JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLAogICAgICAgICdlcHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnZXB1YicgPT4gJ2FwcGxpY2F0aW9uL2VwdWIremlwJywKICAgICAgICAnZXR4JyA9PiAndGV4dC94LXNldGV4dCcsCiAgICAgICAgJ2ZsYWMnID0+ICdhdWRpby9mbGFjJywKICAgICAgICAnZmx2JyA9PiAndmlkZW8veC1mbHYnLAogICAgICAgICdnaWYnID0+ICdpbWFnZS9naWYnLAogICAgICAgICdneicgPT4gJ2FwcGxpY2F0aW9uL2d6aXAnLAogICAgICAgICdodG0nID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdodG1sJyA9PiAndGV4dC9odG1sJywKICAgICAgICAnaWNvJyA9PiAnaW1hZ2UveC1pY29uJywKICAgICAgICAnaWNzJyA9PiAndGV4dC9jYWxlbmRhcicsCiAgICAgICAgJ2luaScgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICdpc28nID0+ICdhcHBsaWNhdGlvbi94LWlzbzk2NjAtaW1hZ2UnLAogICAgICAgICdqYXInID0+ICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnLAogICAgICAgICdqcGUnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBlZycgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqcGcnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanMnID0+ICd0ZXh0L2phdmFzY3JpcHQnLAogICAgICAgICdqc29uJyA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgJ2xhdGV4JyA9PiAnYXBwbGljYXRpb24veC1sYXRleCcsCiAgICAgICAgJ2xvZycgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICdtNGEnID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNHYnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdtaWQnID0+ICdhdWRpby9taWRpJywKICAgICAgICAnbWlkaScgPT4gJ2F1ZGlvL21pZGknLAogICAgICAgICdtb3YnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICdta3YnID0+ICd2aWRlby94LW1hdHJvc2thJywKICAgICAgICAnbXAzJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgJ21wNCcgPT4gJ3ZpZGVvL21wNCcsCiAgICAgICAgJ21wNGEnID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtcDR2JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXBlJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZWcnID0+ICd2aWRlby9tcGVnJywKICAgICAgICAnbXBnJyA9PiAndmlkZW8vbXBlZycsCiAgICAgICAgJ21wZzQnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdvZ2EnID0+ICdhdWRpby9vZ2cnLAogICAgICAgICdvZ2cnID0+ICdhdWRpby9vZ2cnLAogICAgICAgICdvZ3YnID0+ICd2aWRlby9vZ2cnLAogICAgICAgICdvZ3gnID0+ICdhcHBsaWNhdGlvbi9vZ2cnLAogICAgICAgICdwYm0nID0+ICdpbWFnZS94LXBvcnRhYmxlLWJpdG1hcCcsCiAgICAgICAgJ3BkZicgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCiAgICAgICAgJ3BnbScgPT4gJ2ltYWdlL3gtcG9ydGFibGUtZ3JheW1hcCcsCiAgICAgICAgJ3BuZycgPT4gJ2ltYWdlL3BuZycsCiAgICAgICAgJ3BubScgPT4gJ2ltYWdlL3gtcG9ydGFibGUtYW55bWFwJywKICAgICAgICAncHBtJyA9PiAnaW1hZ2UveC1wb3J0YWJsZS1waXhtYXAnLAogICAgICAgICdwcHQnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsCiAgICAgICAgJ3BwdHgnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJywKICAgICAgICAncHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAncXQnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICdyYXInID0+ICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJywKICAgICAgICAncmFzJyA9PiAnaW1hZ2UveC1jbXUtcmFzdGVyJywKICAgICAgICAncnNzJyA9PiAnYXBwbGljYXRpb24vcnNzK3htbCcsCiAgICAgICAgJ3J0ZicgPT4gJ2FwcGxpY2F0aW9uL3J0ZicsCiAgICAgICAgJ3NnbScgPT4gJ3RleHQvc2dtbCcsCiAgICAgICAgJ3NnbWwnID0+ICd0ZXh0L3NnbWwnLAogICAgICAgICdzdmcnID0+ICdpbWFnZS9zdmcreG1sJywKICAgICAgICAnc3dmJyA9PiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLAogICAgICAgICd0YXInID0+ICdhcHBsaWNhdGlvbi94LXRhcicsCiAgICAgICAgJ3RpZicgPT4gJ2ltYWdlL3RpZmYnLAogICAgICAgICd0aWZmJyA9PiAnaW1hZ2UvdGlmZicsCiAgICAgICAgJ3RvcnJlbnQnID0+ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLAogICAgICAgICd0dGYnID0+ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJywKICAgICAgICAndHh0JyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgJ3dhdicgPT4gJ2F1ZGlvL3gtd2F2JywKICAgICAgICAnd2VibScgPT4gJ3ZpZGVvL3dlYm0nLAogICAgICAgICd3bWEnID0+ICdhdWRpby94LW1zLXdtYScsCiAgICAgICAgJ3dtdicgPT4gJ3ZpZGVvL3gtbXMtd212JywKICAgICAgICAnd29mZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC13b2ZmJywKICAgICAgICAnd3NkbCcgPT4gJ2FwcGxpY2F0aW9uL3dzZGwreG1sJywKICAgICAgICAneGJtJyA9PiAnaW1hZ2UveC14Yml0bWFwJywKICAgICAgICAneGxzJyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJywKICAgICAgICAneGxzeCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JywKICAgICAgICAneG1sJyA9PiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAneHBtJyA9PiAnaW1hZ2UveC14cGl4bWFwJywKICAgICAgICAneHdkJyA9PiAnaW1hZ2UveC14d2luZG93ZHVtcCcsCiAgICAgICAgJ3lhbWwnID0+ICd0ZXh0L3lhbWwnLAogICAgICAgICd5bWwnID0+ICd0ZXh0L3lhbWwnLAogICAgICAgICd6aXAnID0+ICdhcHBsaWNhdGlvbi96aXAnLAogICAgXTsKCiAgICAkZXh0ZW5zaW9uID0gc3RydG9sb3dlcigkZXh0ZW5zaW9uKTsKCiAgICByZXR1cm4gaXNzZXQoJG1pbWV0eXBlc1skZXh0ZW5zaW9uXSkKICAgICAgICA/ICRtaW1ldHlwZXNbJGV4dGVuc2lvbl0KICAgICAgICA6IG51bGw7Cn0KCi8qKgogKiBQYXJzZXMgYW4gSFRUUCBtZXNzYWdlIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAqCiAqIFRoZSBhcnJheSBjb250YWlucyB0aGUgInN0YXJ0LWxpbmUiIGtleSBjb250YWluaW5nIHRoZSBzdGFydCBsaW5lIG9mCiAqIHRoZSBtZXNzYWdlLCAiaGVhZGVycyIga2V5IGNvbnRhaW5pbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaGVhZGVyCiAqIGFycmF5IHZhbHVlcywgYW5kIGEgImJvZHkiIGtleSBjb250YWluaW5nIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLgogKgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIEhUVFAgcmVxdWVzdCBvciByZXNwb25zZSB0byBwYXJzZS4KICoKICogQHJldHVybiBhcnJheQogKiBAaW50ZXJuYWwKICovCmZ1bmN0aW9uIF9wYXJzZV9tZXNzYWdlKCRtZXNzYWdlKQp7CiAgICBpZiAoISRtZXNzYWdlKSB7CiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgbWVzc2FnZScpOwogICAgfQoKICAgICRtZXNzYWdlID0gbHRyaW0oJG1lc3NhZ2UsICJcclxuIik7CgogICAgJG1lc3NhZ2VQYXJ0cyA9IHByZWdfc3BsaXQoIi9ccj9cblxyP1xuLyIsICRtZXNzYWdlLCAyKTsKCiAgICBpZiAoJG1lc3NhZ2VQYXJ0cyA9PT0gZmFsc2UgfHwgY291bnQoJG1lc3NhZ2VQYXJ0cykgIT09IDIpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtZXNzYWdlOiBNaXNzaW5nIGhlYWRlciBkZWxpbWl0ZXInKTsKICAgIH0KCiAgICBsaXN0KCRyYXdIZWFkZXJzLCAkYm9keSkgPSAkbWVzc2FnZVBhcnRzOwogICAgJHJhd0hlYWRlcnMgLj0gIlxyXG4iOyAvLyBQdXQgYmFjayB0aGUgZGVsaW1pdGVyIHdlIHNwbGl0IHByZXZpb3VzbHkKICAgICRoZWFkZXJQYXJ0cyA9IHByZWdfc3BsaXQoIi9ccj9cbi8iLCAkcmF3SGVhZGVycywgMik7CgogICAgaWYgKCRoZWFkZXJQYXJ0cyA9PT0gZmFsc2UgfHwgY291bnQoJGhlYWRlclBhcnRzKSAhPT0gMikgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIG1lc3NhZ2U6IE1pc3Npbmcgc3RhdHVzIGxpbmUnKTsKICAgIH0KCiAgICBsaXN0KCRzdGFydExpbmUsICRyYXdIZWFkZXJzKSA9ICRoZWFkZXJQYXJ0czsKCiAgICBpZiAocHJlZ19tYXRjaCgiLyg/Ol5IVFRQXC98XltBLVpdKyBcUysgSFRUUFwvKShcZCsoPzpcLlxkKyk/KS9pIiwgJHN0YXJ0TGluZSwgJG1hdGNoZXMpICYmICRtYXRjaGVzWzFdID09PSAnMS4wJykgewogICAgICAgIC8vIEhlYWRlciBmb2xkaW5nIGlzIGRlcHJlY2F0ZWQgZm9yIEhUVFAvMS4xLCBidXQgYWxsb3dlZCBpbiBIVFRQLzEuMAogICAgICAgICRyYXdIZWFkZXJzID0gcHJlZ19yZXBsYWNlKFJmYzcyMzA6OkhFQURFUl9GT0xEX1JFR0VYLCAnICcsICRyYXdIZWFkZXJzKTsKICAgIH0KCiAgICAvKiogQHZhciBhcnJheVtdICRoZWFkZXJMaW5lcyAqLwogICAgJGNvdW50ID0gcHJlZ19tYXRjaF9hbGwoUmZjNzIzMDo6SEVBREVSX1JFR0VYLCAkcmF3SGVhZGVycywgJGhlYWRlckxpbmVzLCBQUkVHX1NFVF9PUkRFUik7CgogICAgLy8gSWYgdGhlc2UgYXJlbid0IHRoZSBzYW1lLCB0aGVuIG9uZSBsaW5lIGRpZG4ndCBtYXRjaCBhbmQgdGhlcmUncyBhbiBpbnZhbGlkIGhlYWRlci4KICAgIGlmICgkY291bnQgIT09IHN1YnN0cl9jb3VudCgkcmF3SGVhZGVycywgIlxuIikpIHsKICAgICAgICAvLyBGb2xkaW5nIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi40CiAgICAgICAgaWYgKHByZWdfbWF0Y2goUmZjNzIzMDo6SEVBREVSX0ZPTERfUkVHRVgsICRyYXdIZWFkZXJzKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBoZWFkZXIgc3ludGF4OiBPYnNvbGV0ZSBsaW5lIGZvbGRpbmcnKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGhlYWRlciBzeW50YXgnKTsKICAgIH0KCiAgICAkaGVhZGVycyA9IFtdOwoKICAgIGZvcmVhY2ggKCRoZWFkZXJMaW5lcyBhcyAkaGVhZGVyTGluZSkgewogICAgICAgICRoZWFkZXJzWyRoZWFkZXJMaW5lWzFdXVtdID0gJGhlYWRlckxpbmVbMl07CiAgICB9CgogICAgcmV0dXJuIFsKICAgICAgICAnc3RhcnQtbGluZScgPT4gJHN0YXJ0TGluZSwKICAgICAgICAnaGVhZGVycycgPT4gJGhlYWRlcnMsCiAgICAgICAgJ2JvZHknID0+ICRib2R5LAogICAgXTsKfQoKLyoqCiAqIENvbnN0cnVjdHMgYSBVUkkgZm9yIGFuIEhUVFAgcmVxdWVzdCBtZXNzYWdlLgogKgogKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgIFBhdGggZnJvbSB0aGUgc3RhcnQtbGluZQogKiBAcGFyYW0gYXJyYXkgICRoZWFkZXJzIEFycmF5IG9mIGhlYWRlcnMgKGVhY2ggdmFsdWUgYW4gYXJyYXkpLgogKgogKiBAcmV0dXJuIHN0cmluZwogKiBAaW50ZXJuYWwKICovCmZ1bmN0aW9uIF9wYXJzZV9yZXF1ZXN0X3VyaSgkcGF0aCwgYXJyYXkgJGhlYWRlcnMpCnsKICAgICRob3N0S2V5ID0gYXJyYXlfZmlsdGVyKGFycmF5X2tleXMoJGhlYWRlcnMpLCBmdW5jdGlvbiAoJGspIHsKICAgICAgICByZXR1cm4gc3RydG9sb3dlcigkaykgPT09ICdob3N0JzsKICAgIH0pOwoKICAgIC8vIElmIG5vIGhvc3QgaXMgZm91bmQsIHRoZW4gYSBmdWxsIFVSSSBjYW5ub3QgYmUgY29uc3RydWN0ZWQuCiAgICBpZiAoISRob3N0S2V5KSB7CiAgICAgICAgcmV0dXJuICRwYXRoOwogICAgfQoKICAgICRob3N0ID0gJGhlYWRlcnNbcmVzZXQoJGhvc3RLZXkpXVswXTsKICAgICRzY2hlbWUgPSBzdWJzdHIoJGhvc3QsIC00KSA9PT0gJzo0NDMnID8gJ2h0dHBzJyA6ICdodHRwJzsKCiAgICByZXR1cm4gJHNjaGVtZSAuICc6Ly8nIC4gJGhvc3QgLiAnLycgLiBsdHJpbSgkcGF0aCwgJy8nKTsKfQoKLyoqCiAqIEdldCBhIHNob3J0IHN1bW1hcnkgb2YgdGhlIG1lc3NhZ2UgYm9keQogKgogKiBXaWxsIHJldHVybiBgbnVsbGAgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBwcmludGFibGUuCiAqCiAqIEBwYXJhbSBNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlICAgIFRoZSBtZXNzYWdlIHRvIGdldCB0aGUgYm9keSBzdW1tYXJ5CiAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICR0cnVuY2F0ZUF0IFRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiB0aGUgc3VtbWFyeQogKgogKiBAcmV0dXJuIG51bGx8c3RyaW5nCiAqLwpmdW5jdGlvbiBnZXRfbWVzc2FnZV9ib2R5X3N1bW1hcnkoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSwgJHRydW5jYXRlQXQgPSAxMjApCnsKICAgICRib2R5ID0gJG1lc3NhZ2UtPmdldEJvZHkoKTsKCiAgICBpZiAoISRib2R5LT5pc1NlZWthYmxlKCkgfHwgISRib2R5LT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgaWYgKCRzaXplID09PSAwKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgJHN1bW1hcnkgPSAkYm9keS0+cmVhZCgkdHJ1bmNhdGVBdCk7CiAgICAkYm9keS0+cmV3aW5kKCk7CgogICAgaWYgKCRzaXplID4gJHRydW5jYXRlQXQpIHsKICAgICAgICAkc3VtbWFyeSAuPSAnICh0cnVuY2F0ZWQuLi4pJzsKICAgIH0KCiAgICAvLyBNYXRjaGVzIGFueSBwcmludGFibGUgY2hhcmFjdGVyLCBpbmNsdWRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzOgogICAgLy8gbGV0dGVycywgbWFya3MsIG51bWJlcnMsIHB1bmN0dWF0aW9uLCBzcGFjaW5nLCBhbmQgc2VwYXJhdG9ycy4KICAgIGlmIChwcmVnX21hdGNoKCcvW15ccExccE1ccE5ccFBccFNccFpcblxyXHRdLycsICRzdW1tYXJ5KSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiAkc3VtbWFyeTsKfQoKLyoqIEBpbnRlcm5hbCAqLwpmdW5jdGlvbiBfY2FzZWxlc3NfcmVtb3ZlKCRrZXlzLCBhcnJheSAkZGF0YSkKewogICAgJHJlc3VsdCA9IFtdOwoKICAgIGZvcmVhY2ggKCRrZXlzIGFzICYka2V5KSB7CiAgICAgICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICB9CgogICAgZm9yZWFjaCAoJGRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICBpZiAoIWluX2FycmF5KHN0cnRvbG93ZXIoJGspLCAka2V5cykpIHsKICAgICAgICAgICAgJHJlc3VsdFska10gPSAkdjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/functions_include.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXFBzcjdcc3RyJykpIHsKICAgIHJlcXVpcmUgX19ESVJfXyAuICcvZnVuY3Rpb25zLnBocCc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/InflateStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBVc2VzIFBIUCdzIHpsaWIuaW5mbGF0ZSBmaWx0ZXIgdG8gaW5mbGF0ZSBkZWZsYXRlIG9yIGd6aXBwZWQgY29udGVudC4KICoKICogVGhpcyBzdHJlYW0gZGVjb3JhdG9yIHNraXBzIHRoZSBmaXJzdCAxMCBieXRlcyBvZiB0aGUgZ2l2ZW4gc3RyZWFtIHRvIHJlbW92ZQogKiB0aGUgZ3ppcCBoZWFkZXIsIGNvbnZlcnRzIHRoZSBwcm92aWRlZCBzdHJlYW0gdG8gYSBQSFAgc3RyZWFtIHJlc291cmNlLAogKiB0aGVuIGFwcGVuZHMgdGhlIHpsaWIuaW5mbGF0ZSBmaWx0ZXIuIFRoZSBzdHJlYW0gaXMgdGhlbiBjb252ZXJ0ZWQgYmFjawogKiB0byBhIEd1enpsZSBzdHJlYW0gcmVzb3VyY2UgdG8gYmUgdXNlZCBhcyBhIEd1enpsZSBzdHJlYW0uCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTIKICogQGxpbmsgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2ZpbHRlcnMuY29tcHJlc3Npb24ucGhwCiAqLwpjbGFzcyBJbmZsYXRlU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0pCiAgICB7CiAgICAgICAgLy8gcmVhZCB0aGUgZmlyc3QgMTAgYnl0ZXMsIGllLiBnemlwIGhlYWRlcgogICAgICAgICRoZWFkZXIgPSAkc3RyZWFtLT5yZWFkKDEwKTsKICAgICAgICAkZmlsZW5hbWVIZWFkZXJMZW5ndGggPSAkdGhpcy0+Z2V0TGVuZ3RoT2ZQb3NzaWJsZUZpbGVuYW1lSGVhZGVyKCRzdHJlYW0sICRoZWFkZXIpOwogICAgICAgIC8vIFNraXAgdGhlIGhlYWRlciwgdGhhdCBpcyAxMCArIGxlbmd0aCBvZiBmaWxlbmFtZSArIDEgKG5pbCkgYnl0ZXMKICAgICAgICAkc3RyZWFtID0gbmV3IExpbWl0U3RyZWFtKCRzdHJlYW0sIC0xLCAxMCArICRmaWxlbmFtZUhlYWRlckxlbmd0aCk7CiAgICAgICAgJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CiAgICAgICAgc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHJlc291cmNlLCAnemxpYi5pbmZsYXRlJywgU1RSRUFNX0ZJTFRFUl9SRUFEKTsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbS0+aXNTZWVrYWJsZSgpID8gbmV3IFN0cmVhbSgkcmVzb3VyY2UpIDogbmV3IE5vU2Vla1N0cmVhbShuZXcgU3RyZWFtKCRyZXNvdXJjZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtCiAgICAgKiBAcGFyYW0gJGhlYWRlcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRMZW5ndGhPZlBvc3NpYmxlRmlsZW5hbWVIZWFkZXIoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sICRoZWFkZXIpCiAgICB7CiAgICAgICAgJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGggPSAwOwoKICAgICAgICBpZiAoc3Vic3RyKGJpbjJoZXgoJGhlYWRlciksIDYsIDIpID09PSAnMDgnKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBmaWxlbmFtZSwgcmVhZCB1bnRpbCBuaWwKICAgICAgICAgICAgJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGggPSAxOwogICAgICAgICAgICB3aGlsZSAoJHN0cmVhbS0+cmVhZCgxKSAhPT0gY2hyKDApKSB7CiAgICAgICAgICAgICAgICAkZmlsZW5hbWVfaGVhZGVyX2xlbmd0aCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGg7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LazyOpenStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBMYXppbHkgcmVhZHMgb3Igd3JpdGVzIHRvIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBvbmx5IGFmdGVyIGFuIElPIG9wZXJhdGlvbgogKiB0YWtlIHBsYWNlIG9uIHRoZSBzdHJlYW0uCiAqLwpjbGFzcyBMYXp5T3BlblN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgc3RyaW5nIEZpbGUgdG8gb3BlbiAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqIEB2YXIgc3RyaW5nICRtb2RlICovCiAgICBwcml2YXRlICRtb2RlOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRmlsZSB0byBsYXppbHkgb3BlbgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kZSAgICAgZm9wZW4gbW9kZSB0byB1c2Ugd2hlbiBvcGVuaW5nIHRoZSBzdHJlYW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlbmFtZSwgJG1vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPmZpbGVuYW1lID0gJGZpbGVuYW1lOwogICAgICAgICR0aGlzLT5tb2RlID0gJG1vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBsYXppbHkgd2hlbiByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RyZWFtX2Zvcih0cnlfZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+bW9kZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/LimitStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCgovKioKICogRGVjb3JhdG9yIHVzZWQgdG8gcmV0dXJuIG9ubHkgYSBzdWJzZXQgb2YgYSBzdHJlYW0KICovCmNsYXNzIExpbWl0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgT2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAqLwogICAgcHJpdmF0ZSAkb2Zmc2V0OwoKICAgIC8qKiBAdmFyIGludCBMaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHJlYWQgKi8KICAgIHByaXZhdGUgJGxpbWl0OwoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFN0cmVhbSB0byB3cmFwCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRsaW1pdCAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzdHJlYW0uIFBhc3MgLTEgZm9yIG5vIGxpbWl0LgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkb2Zmc2V0IFBvc2l0aW9uIHRvIHNlZWsgdG8gYmVmb3JlIHJlYWRpbmcgKG9ubHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrcyBvbiBzZWVrYWJsZSBzdHJlYW1zKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLAogICAgICAgICRsaW1pdCA9IC0xLAogICAgICAgICRvZmZzZXQgPSAwCiAgICApIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkdGhpcy0+c2V0TGltaXQoJGxpbWl0KTsKICAgICAgICAkdGhpcy0+c2V0T2Zmc2V0KCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzdHJlYW0gaXMgRU9GCiAgICAgICAgaWYgKCR0aGlzLT5zdHJlYW0tPmVvZigpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTm8gbGltaXQgYW5kIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3QgYXQgRU9GCiAgICAgICAgaWYgKCR0aGlzLT5saW1pdCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpID49ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBsaW1pdGVkIHN1YnNldCBvZiBkYXRhCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gKCRsZW5ndGggPSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+bGltaXQgPT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuICRsZW5ndGggLSAkdGhpcy0+b2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBtaW4oJHRoaXMtPmxpbWl0LCAkbGVuZ3RoIC0gJHRoaXMtPm9mZnNldCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQWxsb3cgZm9yIGEgYm91bmRlZCBzZWVrIG9uIHRoZSByZWFkIGxpbWl0ZWQgc3RyZWFtCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoJHdoZW5jZSAhPT0gU0VFS19TRVQgfHwgJG9mZnNldCA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnQ2Fubm90IHNlZWsgdG8gb2Zmc2V0ICUgd2l0aCB3aGVuY2UgJXMnLAogICAgICAgICAgICAgICAgJG9mZnNldCwKICAgICAgICAgICAgICAgICR3aGVuY2UKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0ICs9ICR0aGlzLT5vZmZzZXQ7CgogICAgICAgIGlmICgkdGhpcy0+bGltaXQgIT09IC0xKSB7CiAgICAgICAgICAgIGlmICgkb2Zmc2V0ID4gJHRoaXMtPm9mZnNldCArICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICAgICAgJG9mZnNldCA9ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlIGEgcmVsYXRpdmUgdGVsbCgpCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpIC0gJHRoaXMtPm9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgb2Zmc2V0IHRvIHN0YXJ0IGxpbWl0aW5nIGZyb20KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgT2Zmc2V0IHRvIHNlZWsgdG8gYW5kIGJlZ2luIGJ5dGUgbGltaXRpbmcgZnJvbQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHN0cmVhbSBjYW5ub3QgYmUgc2Vla2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T2Zmc2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+c3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkY3VycmVudCAhPT0gJG9mZnNldCkgewogICAgICAgICAgICAvLyBJZiB0aGUgc3RyZWFtIGNhbm5vdCBzZWVrIHRvIHRoZSBvZmZzZXQgcG9zaXRpb24sIHRoZW4gcmVhZCB0byBpdAogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGN1cnJlbnQgPiAkb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBzZWVrIHRvIHN0cmVhbSBvZmZzZXQgJG9mZnNldCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+cmVhZCgkb2Zmc2V0IC0gJGN1cnJlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbGltaXQgb2YgYnl0ZXMgdGhhdCB0aGUgZGVjb3JhdG9yIGFsbG93cyB0byBiZSByZWFkIGZyb20gdGhlCiAgICAgKiBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGltaXQgTnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgogICAgICogICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciBubyBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpbWl0KCRsaW1pdCkKICAgIHsKICAgICAgICAkdGhpcy0+bGltaXQgPSAkbGltaXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmxpbWl0ID09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBhbGxvd2VkCiAgICAgICAgLy8gYnl0ZXMgKyBvcmlnaW5hbCBvZmZzZXQKICAgICAgICAkcmVtYWluaW5nID0gKCR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQpIC0gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgICAgIGlmICgkcmVtYWluaW5nID4gMCkgewogICAgICAgICAgICAvLyBPbmx5IHJldHVybiB0aGUgYW1vdW50IG9mIHJlcXVlc3RlZCBkYXRhLCBlbnN1cmluZyB0aGF0IHRoZSBieXRlCiAgICAgICAgICAgIC8vIGxpbWl0IGlzIG5vdCBleGNlZWRlZAogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZChtaW4oJHJlbWFpbmluZywgJGxlbmd0aCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MessageTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBUcmFpdCBpbXBsZW1lbnRpbmcgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICovCnRyYWl0IE1lc3NhZ2VUcmFpdAp7CiAgICAvKiogQHZhciBhcnJheSBNYXAgb2YgYWxsIHJlZ2lzdGVyZWQgaGVhZGVycywgYXMgb3JpZ2luYWwgbmFtZSA9PiBhcnJheSBvZiB2YWx1ZXMgKi8KICAgIHByaXZhdGUgJGhlYWRlcnMgPSBbXTsKCiAgICAvKiogQHZhciBhcnJheSBNYXAgb2YgbG93ZXJjYXNlIGhlYWRlciBuYW1lID0+IG9yaWdpbmFsIG5hbWUgYXQgcmVnaXN0cmF0aW9uICovCiAgICBwcml2YXRlICRoZWFkZXJOYW1lcyAgPSBbXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHByb3RvY29sID0gJzEuMSc7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RvY29sVmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm90b2NvbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFByb3RvY29sVmVyc2lvbigkdmVyc2lvbikKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnByb3RvY29sID09PSAkdmVyc2lvbikgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoJGhlYWRlcikKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzW3N0cnRvbG93ZXIoJGhlYWRlcildKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRoZWFkZXIpCiAgICB7CiAgICAgICAgJGhlYWRlciA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdKSkgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlckxpbmUoJGhlYWRlcikKICAgIHsKICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCAnLCAkdGhpcy0+Z2V0SGVhZGVyKCRoZWFkZXIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcigkaGVhZGVyLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IFskdmFsdWVdOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnRyaW1IZWFkZXJWYWx1ZXMoJHZhbHVlKTsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICBpZiAoaXNzZXQoJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdKSkgewogICAgICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXV0pOwogICAgICAgIH0KICAgICAgICAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICRuZXctPmhlYWRlcnNbJGhlYWRlcl0gPSAkdmFsdWU7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQWRkZWRIZWFkZXIoJGhlYWRlciwgJHZhbHVlKQogICAgewogICAgICAgIGlmICghaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkdmFsdWUgPSBbJHZhbHVlXTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT50cmltSGVhZGVyVmFsdWVzKCR2YWx1ZSk7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgaWYgKGlzc2V0KCRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CiAgICAgICAgICAgICRuZXctPmhlYWRlcnNbJGhlYWRlcl0gPSBhcnJheV9tZXJnZSgkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSwgJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICAgICAkbmV3LT5oZWFkZXJzWyRoZWFkZXJdID0gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJGhlYWRlcikKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRoZWFkZXJdLCAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+c3RyZWFtKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0gPSBzdHJlYW1fZm9yKCcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpCiAgICB7CiAgICAgICAgaWYgKCRib2R5ID09PSAkdGhpcy0+c3RyZWFtKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5zdHJlYW0gPSAkYm9keTsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzID0gJHRoaXMtPmhlYWRlcnMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IFskdmFsdWVdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dHJpbUhlYWRlclZhbHVlcygkdmFsdWUpOwogICAgICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CiAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdKSkgewogICAgICAgICAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CiAgICAgICAgICAgICAgICAkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSA9IGFycmF5X21lcmdlKCR0aGlzLT5oZWFkZXJzWyRoZWFkZXJdLCAkdmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSA9ICRoZWFkZXI7CiAgICAgICAgICAgICAgICAkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRyaW1zIHdoaXRlc3BhY2UgZnJvbSB0aGUgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBTcGFjZXMgYW5kIHRhYnMgb3VnaHQgdG8gYmUgZXhjbHVkZWQgYnkgcGFyc2VycyB3aGVuIGV4dHJhY3RpbmcgdGhlIGZpZWxkIHZhbHVlIGZyb20gYSBoZWFkZXIgZmllbGQuCiAgICAgKgogICAgICogaGVhZGVyLWZpZWxkID0gZmllbGQtbmFtZSAiOiIgT1dTIGZpZWxkLXZhbHVlIE9XUwogICAgICogT1dTICAgICAgICAgID0gKiggU1AgLyBIVEFCICkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHZhbHVlcyBIZWFkZXIgdmFsdWVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUcmltbWVkIGhlYWRlciB2YWx1ZXMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0cmltSGVhZGVyVmFsdWVzKGFycmF5ICR2YWx1ZXMpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cmltKCR2YWx1ZSwgIiBcdCIpOwogICAgICAgIH0sICR2YWx1ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/MultipartStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gdGhhdCB3aGVuIHJlYWQgcmV0dXJucyBieXRlcyBmb3IgYSBzdHJlYW1pbmcgbXVsdGlwYXJ0IG9yCiAqIG11bHRpcGFydC9mb3JtLWRhdGEgc3RyZWFtLgogKi8KY2xhc3MgTXVsdGlwYXJ0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRib3VuZGFyeTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAgJGVsZW1lbnRzIEFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cywgZWFjaCBjb250YWluaW5nIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkICJuYW1lIiBrZXkgbWFwcGluZyB0byB0aGUgZm9ybSBmaWVsZCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGEgcmVxdWlyZWQgImNvbnRlbnRzIiBrZXkgbWFwcGluZyB0byBhCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1JbnRlcmZhY2UvcmVzb3VyY2Uvc3RyaW5nLCBhbiBvcHRpb25hbAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1c3RvbSBoZWFkZXJzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFuIG9wdGlvbmFsICJmaWxlbmFtZSIga2V5IG1hcHBpbmcgdG8gYQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHRvIHNlbmQgYXMgdGhlIGZpbGVuYW1lIGluIHRoZSBwYXJ0LgogICAgICogQHBhcmFtIHN0cmluZyAkYm91bmRhcnkgWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBzcGVjaWZpYyBib3VuZGFyeQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGVsZW1lbnRzID0gW10sICRib3VuZGFyeSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmJvdW5kYXJ5ID0gJGJvdW5kYXJ5ID86IHNoYTEodW5pcWlkKCcnLCB0cnVlKSk7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICR0aGlzLT5jcmVhdGVTdHJlYW0oJGVsZW1lbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYm91bmRhcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm91bmRhcnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ym91bmRhcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaGVhZGVycyBuZWVkZWQgYmVmb3JlIHRyYW5zZmVycmluZyB0aGUgY29udGVudCBvZiBhIFBPU1QgZmlsZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpCiAgICB7CiAgICAgICAgJHN0ciA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRzdHIgLj0gInska2V5fTogeyR2YWx1ZX1cclxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiLS17JHRoaXMtPmJvdW5kYXJ5fVxyXG4iIC4gdHJpbSgkc3RyKSAuICJcclxuXHJcbiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIGFnZ3JlZ2F0ZSBzdHJlYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBsb2FkIHRoZSBQT1NUIGRhdGEKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbShhcnJheSAkZWxlbWVudHMpCiAgICB7CiAgICAgICAgJHN0cmVhbSA9IG5ldyBBcHBlbmRTdHJlYW0oKTsKCiAgICAgICAgZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRFbGVtZW50KCRzdHJlYW0sICRlbGVtZW50KTsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCB0aGUgdHJhaWxpbmcgYm91bmRhcnkgd2l0aCBDUkxGCiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKHN0cmVhbV9mb3IoIi0teyR0aGlzLT5ib3VuZGFyeX0tLVxyXG4iKSk7CgogICAgICAgIHJldHVybiAkc3RyZWFtOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRWxlbWVudChBcHBlbmRTdHJlYW0gJHN0cmVhbSwgYXJyYXkgJGVsZW1lbnQpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydjb250ZW50cycsICduYW1lJ10gYXMgJGtleSkgewogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSAneyRrZXl9JyBrZXkgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGVsZW1lbnRbJ2NvbnRlbnRzJ10gPSBzdHJlYW1fZm9yKCRlbGVtZW50Wydjb250ZW50cyddKTsKCiAgICAgICAgaWYgKGVtcHR5KCRlbGVtZW50WydmaWxlbmFtZSddKSkgewogICAgICAgICAgICAkdXJpID0gJGVsZW1lbnRbJ2NvbnRlbnRzJ10tPmdldE1ldGFkYXRhKCd1cmknKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkdXJpLCAwLCA2KSAhPT0gJ3BocDovLycpIHsKICAgICAgICAgICAgICAgICRlbGVtZW50WydmaWxlbmFtZSddID0gJHVyaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGlzdCgkYm9keSwgJGhlYWRlcnMpID0gJHRoaXMtPmNyZWF0ZUVsZW1lbnQoCiAgICAgICAgICAgICRlbGVtZW50WyduYW1lJ10sCiAgICAgICAgICAgICRlbGVtZW50Wydjb250ZW50cyddLAogICAgICAgICAgICBpc3NldCgkZWxlbWVudFsnZmlsZW5hbWUnXSkgPyAkZWxlbWVudFsnZmlsZW5hbWUnXSA6IG51bGwsCiAgICAgICAgICAgIGlzc2V0KCRlbGVtZW50WydoZWFkZXJzJ10pID8gJGVsZW1lbnRbJ2hlYWRlcnMnXSA6IFtdCiAgICAgICAgKTsKCiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKHN0cmVhbV9mb3IoJHRoaXMtPmdldEhlYWRlcnMoJGhlYWRlcnMpKSk7CiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKCRib2R5KTsKICAgICAgICAkc3RyZWFtLT5hZGRTdHJlYW0oc3RyZWFtX2ZvcigiXHJcbiIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCRuYW1lLCBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJGZpbGVuYW1lLCBhcnJheSAkaGVhZGVycykKICAgIHsKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtZGlzcG9zaXRpb24gaGVhZGVyIGlmIG9uZSB3YXMgbm8gcHJvdmlkZWQKICAgICAgICAkZGlzcG9zaXRpb24gPSAkdGhpcy0+Z2V0SGVhZGVyKCRoZWFkZXJzLCAnY29udGVudC1kaXNwb3NpdGlvbicpOwogICAgICAgIGlmICghJGRpc3Bvc2l0aW9uKSB7CiAgICAgICAgICAgICRoZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAoJGZpbGVuYW1lID09PSAnMCcgfHwgJGZpbGVuYW1lKQogICAgICAgICAgICAgICAgPyBzcHJpbnRmKCdmb3JtLWRhdGE7IG5hbWU9IiVzIjsgZmlsZW5hbWU9IiVzIicsCiAgICAgICAgICAgICAgICAgICAgJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUoJGZpbGVuYW1lKSkKICAgICAgICAgICAgICAgIDogImZvcm0tZGF0YTsgbmFtZT1cInskbmFtZX1cIiI7CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlciBpZiBvbmUgd2FzIG5vIHByb3ZpZGVkCiAgICAgICAgJGxlbmd0aCA9ICR0aGlzLT5nZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcpOwogICAgICAgIGlmICghJGxlbmd0aCkgewogICAgICAgICAgICBpZiAoJGxlbmd0aCA9ICRzdHJlYW0tPmdldFNpemUoKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAoc3RyaW5nKSAkbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IENvbnRlbnQtVHlwZSBpZiBvbmUgd2FzIG5vdCBzdXBwbGllZAogICAgICAgICR0eXBlID0gJHRoaXMtPmdldEhlYWRlcigkaGVhZGVycywgJ2NvbnRlbnQtdHlwZScpOwogICAgICAgIGlmICghJHR5cGUgJiYgKCRmaWxlbmFtZSA9PT0gJzAnIHx8ICRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgaWYgKCR0eXBlID0gbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkZmlsZW5hbWUpKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAkdHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskc3RyZWFtLCAkaGVhZGVyc107CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRIZWFkZXIoYXJyYXkgJGhlYWRlcnMsICRrZXkpCiAgICB7CiAgICAgICAgJGxvd2VyY2FzZUhlYWRlciA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJGspID09PSAkbG93ZXJjYXNlSGVhZGVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/NoSeekStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgcHJldmVudHMgYSBzdHJlYW0gZnJvbSBiZWluZyBzZWVrZWQKICovCmNsYXNzIE5vU2Vla1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKQogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHNlZWsgYSBOb1NlZWtTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/PumpStream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIHJlYWQgb25seSBzdHJlYW0gdGhhdCBwdW1wcyBkYXRhIGZyb20gYSBQSFAgY2FsbGFibGUuCiAqCiAqIFdoZW4gaW52b2tpbmcgdGhlIHByb3ZpZGVkIGNhbGxhYmxlLCB0aGUgUHVtcFN0cmVhbSB3aWxsIHBhc3MgdGhlIGFtb3VudCBvZgogKiBkYXRhIHJlcXVlc3RlZCB0byByZWFkIHRvIHRoZSBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGNhbiBjaG9vc2UgdG8gaWdub3JlCiAqIHRoaXMgdmFsdWUgYW5kIHJldHVybiBmZXdlciBvciBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiBBbnkgZXh0cmEgZGF0YQogKiByZXR1cm5lZCBieSB0aGUgcHJvdmlkZWQgY2FsbGFibGUgaXMgYnVmZmVyZWQgaW50ZXJuYWxseSB1bnRpbCBkcmFpbmVkIHVzaW5nCiAqIHRoZSByZWFkKCkgZnVuY3Rpb24gb2YgdGhlIFB1bXBTdHJlYW0uIFRoZSBwcm92aWRlZCBjYWxsYWJsZSBNVVNUIHJldHVybgogKiBmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZWFkLgogKi8KY2xhc3MgUHVtcFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZSAqLwogICAgcHJpdmF0ZSAkc291cmNlOwoKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkc2l6ZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJHRlbGxQb3MgPSAwOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRtZXRhZGF0YTsKCiAgICAvKiogQHZhciBCdWZmZXJTdHJlYW0gKi8KICAgIHByaXZhdGUgJGJ1ZmZlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc291cmNlIFNvdXJjZSBvZiB0aGUgc3RyZWFtIGRhdGEuIFRoZSBjYWxsYWJsZSBNQVkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCBhbiBpbnRlZ2VyIGFyZ3VtZW50IHVzZWQgdG8gY29udHJvbCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBkYXRhIHRvIHJldHVybi4gVGhlIGNhbGxhYmxlIE1VU1QKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIHN0cmluZyB3aGVuIGNhbGxlZCwgb3IgZmFsc2Ugb24gZXJyb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEVPRi4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyAgIFN0cmVhbSBvcHRpb25zOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBtZXRhZGF0YTogSGFzaCBvZiBtZXRhZGF0YSB0byB1c2Ugd2l0aCBzdHJlYW0uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbSwgaWYga25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChjYWxsYWJsZSAkc291cmNlLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zb3VyY2UgPSAkc291cmNlOwogICAgICAgICR0aGlzLT5zaXplID0gaXNzZXQoJG9wdGlvbnNbJ3NpemUnXSkgPyAkb3B0aW9uc1snc2l6ZSddIDogbnVsbDsKICAgICAgICAkdGhpcy0+bWV0YWRhdGEgPSBpc3NldCgkb3B0aW9uc1snbWV0YWRhdGEnXSkgPyAkb3B0aW9uc1snbWV0YWRhdGEnXSA6IFtdOwogICAgICAgICR0aGlzLT5idWZmZXIgPSBuZXcgQnVmZmVyU3RyZWFtKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBjb3B5X3RvX3N0cmluZygkdGhpcyk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmRldGFjaCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT50ZWxsUG9zID0gZmFsc2U7CiAgICAgICAgJHRoaXMtPnNvdXJjZSA9IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZWxsUG9zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiAhJHRoaXMtPnNvdXJjZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBzZWVrIGEgUHVtcFN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUgdG8gYSBQdW1wU3RyZWFtJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKQogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+YnVmZmVyLT5yZWFkKCRsZW5ndGgpOwogICAgICAgICRyZWFkTGVuID0gc3RybGVuKCRkYXRhKTsKICAgICAgICAkdGhpcy0+dGVsbFBvcyArPSAkcmVhZExlbjsKICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aCAtICRyZWFkTGVuOwoKICAgICAgICBpZiAoJHJlbWFpbmluZykgewogICAgICAgICAgICAkdGhpcy0+cHVtcCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJGRhdGEgLj0gJHRoaXMtPmJ1ZmZlci0+cmVhZCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJHRoaXMtPnRlbGxQb3MgKz0gc3RybGVuKCRkYXRhKSAtICRyZWFkTGVuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIHdoaWxlICghJHRoaXMtPmVvZigpKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJHRoaXMtPnJlYWQoMTAwMDAwMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCEka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bWV0YWRhdGE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPm1ldGFkYXRhWyRrZXldKSA/ICR0aGlzLT5tZXRhZGF0YVska2V5XSA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBwdW1wKCRsZW5ndGgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zb3VyY2UpIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJGRhdGEgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+c291cmNlLCAkbGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmICgkZGF0YSA9PT0gZmFsc2UgfHwgJGRhdGEgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c291cmNlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+YnVmZmVyLT53cml0ZSgkZGF0YSk7CiAgICAgICAgICAgICAgICAkbGVuZ3RoIC09IHN0cmxlbigkZGF0YSk7CiAgICAgICAgICAgIH0gd2hpbGUgKCRsZW5ndGggPiAwKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Request.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IHJlcXVlc3QgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICB1c2UgTWVzc2FnZVRyYWl0OwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkbWV0aG9kOwoKICAgIC8qKiBAdmFyIG51bGx8c3RyaW5nICovCiAgICBwcml2YXRlICRyZXF1ZXN0VGFyZ2V0OwoKICAgIC8qKiBAdmFyIFVyaUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAkdXJpICAgICBVUkkKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgIFJlcXVlc3QgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAkbWV0aG9kLAogICAgICAgICR1cmksCiAgICAgICAgYXJyYXkgJGhlYWRlcnMgPSBbXSwKICAgICAgICAkYm9keSA9IG51bGwsCiAgICAgICAgJHZlcnNpb24gPSAnMS4xJwogICAgKSB7CiAgICAgICAgaWYgKCEoJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkpIHsKICAgICAgICAgICAgJHVyaSA9IG5ldyBVcmkoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bWV0aG9kID0gc3RydG91cHBlcigkbWV0aG9kKTsKICAgICAgICAkdGhpcy0+dXJpID0gJHVyaTsKICAgICAgICAkdGhpcy0+c2V0SGVhZGVycygkaGVhZGVycyk7CiAgICAgICAgJHRoaXMtPnByb3RvY29sID0gJHZlcnNpb247CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGVIb3N0RnJvbVVyaSgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRib2R5ICE9PSAnJyAmJiAkYm9keSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gc3RyZWFtX2ZvcigkYm9keSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VGFyZ2V0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnJlcXVlc3RUYXJnZXQgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0VGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgJHRhcmdldCA9ICR0aGlzLT51cmktPmdldFBhdGgoKTsKICAgICAgICBpZiAoJHRhcmdldCA9PSAnJykgewogICAgICAgICAgICAkdGFyZ2V0ID0gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPnVyaS0+Z2V0UXVlcnkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0IC49ICc/JyAuICR0aGlzLT51cmktPmdldFF1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJlcXVlc3RUYXJnZXQoJHJlcXVlc3RUYXJnZXQpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJyNccyMnLCAkcmVxdWVzdFRhcmdldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIHJlcXVlc3QgdGFyZ2V0IHByb3ZpZGVkOyBjYW5ub3QgY29udGFpbiB3aGl0ZXNwYWNlJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnJlcXVlc3RUYXJnZXQgPSAkcmVxdWVzdFRhcmdldDsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGhvZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aE1ldGhvZCgkbWV0aG9kKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5tZXRob2QgPSBzdHJ0b3VwcGVyKCRtZXRob2QpOwogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcmkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXJpKFVyaUludGVyZmFjZSAkdXJpLCAkcHJlc2VydmVIb3N0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCR1cmkgPT09ICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnVyaSA9ICR1cmk7CgogICAgICAgIGlmICghJHByZXNlcnZlSG9zdCB8fCAhaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10pKSB7CiAgICAgICAgICAgICRuZXctPnVwZGF0ZUhvc3RGcm9tVXJpKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZUhvc3RGcm9tVXJpKCkKICAgIHsKICAgICAgICAkaG9zdCA9ICR0aGlzLT51cmktPmdldEhvc3QoKTsKCiAgICAgICAgaWYgKCRob3N0ID09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgoJHBvcnQgPSAkdGhpcy0+dXJpLT5nZXRQb3J0KCkpICE9PSBudWxsKSB7CiAgICAgICAgICAgICRob3N0IC49ICc6JyAuICRwb3J0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5oZWFkZXJOYW1lc1snaG9zdCddKSkgewogICAgICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGhlYWRlciA9ICdIb3N0JzsKICAgICAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzWydob3N0J10gPSAnSG9zdCc7CiAgICAgICAgfQogICAgICAgIC8vIEVuc3VyZSBIb3N0IGlzIHRoZSBmaXJzdCBoZWFkZXIuCiAgICAgICAgLy8gU2VlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tNS40CiAgICAgICAgJHRoaXMtPmhlYWRlcnMgPSBbJGhlYWRlciA9PiBbJGhvc3RdXSArICR0aGlzLT5oZWFkZXJzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Response.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUFNSLTcgcmVzcG9uc2UgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXNwb25zZSBpbXBsZW1lbnRzIFJlc3BvbnNlSW50ZXJmYWNlCnsKICAgIHVzZSBNZXNzYWdlVHJhaXQ7CgogICAgLyoqIEB2YXIgYXJyYXkgTWFwIG9mIHN0YW5kYXJkIEhUVFAgc3RhdHVzIGNvZGUvcmVhc29uIHBocmFzZXMgKi8KICAgIHByaXZhdGUgc3RhdGljICRwaHJhc2VzID0gWwogICAgICAgIDEwMCA9PiAnQ29udGludWUnLAogICAgICAgIDEwMSA9PiAnU3dpdGNoaW5nIFByb3RvY29scycsCiAgICAgICAgMTAyID0+ICdQcm9jZXNzaW5nJywKICAgICAgICAyMDAgPT4gJ09LJywKICAgICAgICAyMDEgPT4gJ0NyZWF0ZWQnLAogICAgICAgIDIwMiA9PiAnQWNjZXB0ZWQnLAogICAgICAgIDIwMyA9PiAnTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb24nLAogICAgICAgIDIwNCA9PiAnTm8gQ29udGVudCcsCiAgICAgICAgMjA1ID0+ICdSZXNldCBDb250ZW50JywKICAgICAgICAyMDYgPT4gJ1BhcnRpYWwgQ29udGVudCcsCiAgICAgICAgMjA3ID0+ICdNdWx0aS1zdGF0dXMnLAogICAgICAgIDIwOCA9PiAnQWxyZWFkeSBSZXBvcnRlZCcsCiAgICAgICAgMzAwID0+ICdNdWx0aXBsZSBDaG9pY2VzJywKICAgICAgICAzMDEgPT4gJ01vdmVkIFBlcm1hbmVudGx5JywKICAgICAgICAzMDIgPT4gJ0ZvdW5kJywKICAgICAgICAzMDMgPT4gJ1NlZSBPdGhlcicsCiAgICAgICAgMzA0ID0+ICdOb3QgTW9kaWZpZWQnLAogICAgICAgIDMwNSA9PiAnVXNlIFByb3h5JywKICAgICAgICAzMDYgPT4gJ1N3aXRjaCBQcm94eScsCiAgICAgICAgMzA3ID0+ICdUZW1wb3JhcnkgUmVkaXJlY3QnLAogICAgICAgIDQwMCA9PiAnQmFkIFJlcXVlc3QnLAogICAgICAgIDQwMSA9PiAnVW5hdXRob3JpemVkJywKICAgICAgICA0MDIgPT4gJ1BheW1lbnQgUmVxdWlyZWQnLAogICAgICAgIDQwMyA9PiAnRm9yYmlkZGVuJywKICAgICAgICA0MDQgPT4gJ05vdCBGb3VuZCcsCiAgICAgICAgNDA1ID0+ICdNZXRob2QgTm90IEFsbG93ZWQnLAogICAgICAgIDQwNiA9PiAnTm90IEFjY2VwdGFibGUnLAogICAgICAgIDQwNyA9PiAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgICAgIDQwOCA9PiAnUmVxdWVzdCBUaW1lLW91dCcsCiAgICAgICAgNDA5ID0+ICdDb25mbGljdCcsCiAgICAgICAgNDEwID0+ICdHb25lJywKICAgICAgICA0MTEgPT4gJ0xlbmd0aCBSZXF1aXJlZCcsCiAgICAgICAgNDEyID0+ICdQcmVjb25kaXRpb24gRmFpbGVkJywKICAgICAgICA0MTMgPT4gJ1JlcXVlc3QgRW50aXR5IFRvbyBMYXJnZScsCiAgICAgICAgNDE0ID0+ICdSZXF1ZXN0LVVSSSBUb28gTGFyZ2UnLAogICAgICAgIDQxNSA9PiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCiAgICAgICAgNDE2ID0+ICdSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmlhYmxlJywKICAgICAgICA0MTcgPT4gJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCiAgICAgICAgNDE4ID0+ICdJXCdtIGEgdGVhcG90JywKICAgICAgICA0MjIgPT4gJ1VucHJvY2Vzc2FibGUgRW50aXR5JywKICAgICAgICA0MjMgPT4gJ0xvY2tlZCcsCiAgICAgICAgNDI0ID0+ICdGYWlsZWQgRGVwZW5kZW5jeScsCiAgICAgICAgNDI1ID0+ICdVbm9yZGVyZWQgQ29sbGVjdGlvbicsCiAgICAgICAgNDI2ID0+ICdVcGdyYWRlIFJlcXVpcmVkJywKICAgICAgICA0MjggPT4gJ1ByZWNvbmRpdGlvbiBSZXF1aXJlZCcsCiAgICAgICAgNDI5ID0+ICdUb28gTWFueSBSZXF1ZXN0cycsCiAgICAgICAgNDMxID0+ICdSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlJywKICAgICAgICA0NTEgPT4gJ1VuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zJywKICAgICAgICA1MDAgPT4gJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCiAgICAgICAgNTAxID0+ICdOb3QgSW1wbGVtZW50ZWQnLAogICAgICAgIDUwMiA9PiAnQmFkIEdhdGV3YXknLAogICAgICAgIDUwMyA9PiAnU2VydmljZSBVbmF2YWlsYWJsZScsCiAgICAgICAgNTA0ID0+ICdHYXRld2F5IFRpbWUtb3V0JywKICAgICAgICA1MDUgPT4gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJywKICAgICAgICA1MDYgPT4gJ1ZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzJywKICAgICAgICA1MDcgPT4gJ0luc3VmZmljaWVudCBTdG9yYWdlJywKICAgICAgICA1MDggPT4gJ0xvb3AgRGV0ZWN0ZWQnLAogICAgICAgIDUxMSA9PiAnTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcsCiAgICBdOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkcmVhc29uUGhyYXNlID0gJyc7CgogICAgLyoqIEB2YXIgaW50ICovCiAgICBwcml2YXRlICRzdGF0dXNDb2RlID0gMjAwOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdHVzICBTdGF0dXMgY29kZQogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZGVycyBSZXNwb25zZSBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgIFJlc3BvbnNlIGJvZHkKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZlcnNpb24gUHJvdG9jb2wgdmVyc2lvbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVhc29uICBSZWFzb24gcGhyYXNlICh3aGVuIGVtcHR5IGEgZGVmYXVsdCB3aWxsIGJlIHVzZWQgYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgJHN0YXR1cyA9IDIwMCwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICAkdmVyc2lvbiA9ICcxLjEnLAogICAgICAgICRyZWFzb24gPSBudWxsCiAgICApIHsKICAgICAgICBpZiAoZmlsdGVyX3Zhcigkc3RhdHVzLCBGSUxURVJfVkFMSURBVEVfSU5UKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1N0YXR1cyBjb2RlIG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdGF0dXNDb2RlID0gKGludCkgJHN0YXR1czsKCiAgICAgICAgaWYgKCRib2R5ICE9PSAnJyAmJiAkYm9keSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gc3RyZWFtX2ZvcigkYm9keSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c2V0SGVhZGVycygkaGVhZGVycyk7CiAgICAgICAgaWYgKCRyZWFzb24gPT0gJycgJiYgaXNzZXQoc2VsZjo6JHBocmFzZXNbJHRoaXMtPnN0YXR1c0NvZGVdKSkgewogICAgICAgICAgICAkdGhpcy0+cmVhc29uUGhyYXNlID0gc2VsZjo6JHBocmFzZXNbJHRoaXMtPnN0YXR1c0NvZGVdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5yZWFzb25QaHJhc2UgPSAoc3RyaW5nKSAkcmVhc29uOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnByb3RvY29sID0gJHZlcnNpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c0NvZGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RhdHVzQ29kZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uUGhyYXNlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvblBocmFzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFN0YXR1cygkY29kZSwgJHJlYXNvblBocmFzZSA9ICcnKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5zdGF0dXNDb2RlID0gKGludCkgJGNvZGU7CiAgICAgICAgaWYgKCRyZWFzb25QaHJhc2UgPT0gJycgJiYgaXNzZXQoc2VsZjo6JHBocmFzZXNbJG5ldy0+c3RhdHVzQ29kZV0pKSB7CiAgICAgICAgICAgICRyZWFzb25QaHJhc2UgPSBzZWxmOjokcGhyYXNlc1skbmV3LT5zdGF0dXNDb2RlXTsKICAgICAgICB9CiAgICAgICAgJG5ldy0+cmVhc29uUGhyYXNlID0gJHJlYXNvblBocmFzZTsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Rfc7230.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXFBzcjc7CgpmaW5hbCBjbGFzcyBSZmM3MjMwCnsKICAgIC8qKgogICAgICogSGVhZGVyIHJlbGF0ZWQgcmVndWxhciBleHByZXNzaW9ucyAoY29waWVkIGZyb20gYW1waHAvaHR0cCBwYWNrYWdlKQogICAgICogKE5vdGU6IG9uY2Ugd2UgcmVxdWlyZSBQSFAgNy54IHdlIGNvdWxkIGp1c3QgZGVwZW5kIG9uIHRoZSB1cHN0cmVhbSBwYWNrYWdlKQogICAgICoKICAgICAqIE5vdGU6IGhlYWRlciBkZWxpbWl0ZXIgKFxyXG4pIGlzIG1vZGlmaWVkIHRvIFxyP1xuIHRvIGFjY2VwdCBsaW5lIGZlZWQgb25seSBkZWxpbWl0ZXJzIGZvciBCQyByZWFzb25zLgogICAgICoKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBocC9odHRwL2Jsb2IvdjEuMC4xL3NyYy9SZmM3MjMwLnBocCNMMTItTDE1CiAgICAgKiBAbGljZW5zZSBodHRwczovL2dpdGh1Yi5jb20vYW1waHAvaHR0cC9ibG9iL3YxLjAuMS9MSUNFTlNFCiAgICAgKi8KICAgIGNvbnN0IEhFQURFUl9SRUdFWCA9ICIoXihbXigpPD5ALDs6XFxcIi9bXF0/PXt9XHgwMS1ceDIwXHg3Rl0rKyk6WyBcdF0qKygoPzpbIFx0XSorW1x4MjEtXHg3RVx4ODAtXHhGRl0rKykqKylbIFx0XSorXHI/XG4pbSI7CiAgICBjb25zdCBIRUFERVJfRk9MRF9SRUdFWCA9ICIoXHI/XG5bIFx0XSsrKSI7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/ServerRequest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXFBzcjc7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwoKLyoqCiAqIFNlcnZlci1zaWRlIEhUVFAgcmVxdWVzdAogKgogKiBFeHRlbmRzIHRoZSBSZXF1ZXN0IGRlZmluaXRpb24gdG8gYWRkIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBpbmNvbWluZyBkYXRhLAogKiBzcGVjaWZpY2FsbHkgc2VydmVyIHBhcmFtZXRlcnMsIGNvb2tpZXMsIG1hdGNoZWQgcGF0aCBwYXJhbWV0ZXJzLCBxdWVyeQogKiBzdHJpbmcgYXJndW1lbnRzLCBib2R5IHBhcmFtZXRlcnMsIGFuZCB1cGxvYWQgZmlsZSBpbmZvcm1hdGlvbi4KICoKICogIkF0dHJpYnV0ZXMiIGFyZSBkaXNjb3ZlcmVkIHZpYSBkZWNvbXBvc2luZyB0aGUgcmVxdWVzdCAoYW5kIHVzdWFsbHkKICogc3BlY2lmaWNhbGx5IHRoZSBVUkkgcGF0aCksIGFuZCB0eXBpY2FsbHkgd2lsbCBiZSBpbmplY3RlZCBieSB0aGUgYXBwbGljYXRpb24uCiAqCiAqIFJlcXVlc3RzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgYXJlCiAqIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwpjbGFzcyBTZXJ2ZXJSZXF1ZXN0IGV4dGVuZHMgUmVxdWVzdCBpbXBsZW1lbnRzIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGF0dHJpYnV0ZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkY29va2llUGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIG51bGx8YXJyYXl8b2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJHBhcnNlZEJvZHk7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJHF1ZXJ5UGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJHNlcnZlclBhcmFtczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkdXBsb2FkZWRGaWxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICAgICAgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAgICAgICAgICAgICAgICAgICR1cmkgICAgICAgICAgVVJJCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzICAgICAgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgICAgICAgUmVxdWVzdCBib2R5CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uICAgICAgUHJvdG9jb2wgdmVyc2lvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmVyUGFyYW1zIFR5cGljYWxseSB0aGUgJF9TRVJWRVIgc3VwZXJnbG9iYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXRob2QsCiAgICAgICAgJHVyaSwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICAkdmVyc2lvbiA9ICcxLjEnLAogICAgICAgIGFycmF5ICRzZXJ2ZXJQYXJhbXMgPSBbXQogICAgKSB7CiAgICAgICAgJHRoaXMtPnNlcnZlclBhcmFtcyA9ICRzZXJ2ZXJQYXJhbXM7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1ldGhvZCwgJHVyaSwgJGhlYWRlcnMsICRib2R5LCAkdmVyc2lvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gVXBsb2FkZWRGaWxlIGluc3RhbmNlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZmlsZXMgQSBhcnJheSB3aGljaCByZXNwZWN0ICRfRklMRVMgc3RydWN0dXJlCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdW5yZWNvZ25pemVkIHZhbHVlcwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVzKGFycmF5ICRmaWxlcykKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgJG5vcm1hbGl6ZWRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpICYmIGlzc2V0KCR2YWx1ZVsndG1wX25hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gc2VsZjo6Y3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gc2VsZjo6bm9ybWFsaXplRmlsZXMoJHZhbHVlKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB2YWx1ZSBpbiBmaWxlcyBzcGVjaWZpY2F0aW9uJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGFuIFVwbG9hZGVkRmlsZSBpbnN0YW5jZSBmcm9tIGEgJF9GSUxFUyBzcGVjaWZpY2F0aW9uLgogICAgICoKICAgICAqIElmIHRoZSBzcGVjaWZpY2F0aW9uIHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgdmFsdWVzLCB0aGlzIG1ldGhvZCB3aWxsCiAgICAgKiBkZWxlZ2F0ZSB0byBub3JtYWxpemVOZXN0ZWRGaWxlU3BlYygpIGFuZCByZXR1cm4gdGhhdCByZXR1cm4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZSAkX0ZJTEVTIHN0cnVjdAogICAgICogQHJldHVybiBhcnJheXxVcGxvYWRlZEZpbGVJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoYXJyYXkgJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19hcnJheSgkdmFsdWVbJ3RtcF9uYW1lJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpub3JtYWxpemVOZXN0ZWRGaWxlU3BlYygkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBVcGxvYWRlZEZpbGUoCiAgICAgICAgICAgICR2YWx1ZVsndG1wX25hbWUnXSwKICAgICAgICAgICAgKGludCkgJHZhbHVlWydzaXplJ10sCiAgICAgICAgICAgIChpbnQpICR2YWx1ZVsnZXJyb3InXSwKICAgICAgICAgICAgJHZhbHVlWyduYW1lJ10sCiAgICAgICAgICAgICR2YWx1ZVsndHlwZSddCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIE5vcm1hbGl6ZSBhbiBhcnJheSBvZiBmaWxlIHNwZWNpZmljYXRpb25zLgogICAgICoKICAgICAqIExvb3BzIHRocm91Z2ggYWxsIG5lc3RlZCBmaWxlcyBhbmQgcmV0dXJucyBhIG5vcm1hbGl6ZWQgYXJyYXkgb2YKICAgICAqIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmaWxlcwogICAgICogQHJldHVybiBVcGxvYWRlZEZpbGVJbnRlcmZhY2VbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVOZXN0ZWRGaWxlU3BlYyhhcnJheSAkZmlsZXMgPSBbXSkKICAgIHsKICAgICAgICAkbm9ybWFsaXplZEZpbGVzID0gW107CgogICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJGZpbGVzWyd0bXBfbmFtZSddKSBhcyAka2V5KSB7CiAgICAgICAgICAgICRzcGVjID0gWwogICAgICAgICAgICAgICAgJ3RtcF9uYW1lJyA9PiAkZmlsZXNbJ3RtcF9uYW1lJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnc2l6ZScgICAgID0+ICRmaWxlc1snc2l6ZSddWyRrZXldLAogICAgICAgICAgICAgICAgJ2Vycm9yJyAgICA9PiAkZmlsZXNbJ2Vycm9yJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnbmFtZScgICAgID0+ICRmaWxlc1snbmFtZSddWyRrZXldLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiAkZmlsZXNbJ3R5cGUnXVska2V5XSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJG5vcm1hbGl6ZWRGaWxlc1ska2V5XSA9IHNlbGY6OmNyZWF0ZVVwbG9hZGVkRmlsZUZyb21TcGVjKCRzcGVjKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZEZpbGVzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgU2VydmVyUmVxdWVzdCBwb3B1bGF0ZWQgd2l0aCBzdXBlcmdsb2JhbHM6CiAgICAgKiAkX0dFVAogICAgICogJF9QT1NUCiAgICAgKiAkX0NPT0tJRQogICAgICogJF9GSUxFUwogICAgICogJF9TRVJWRVIKICAgICAqCiAgICAgKiBAcmV0dXJuIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tR2xvYmFscygpCiAgICB7CiAgICAgICAgJG1ldGhvZCA9IGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKSA/ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddIDogJ0dFVCc7CiAgICAgICAgJGhlYWRlcnMgPSBnZXRhbGxoZWFkZXJzKCk7CiAgICAgICAgJHVyaSA9IHNlbGY6OmdldFVyaUZyb21HbG9iYWxzKCk7CiAgICAgICAgJGJvZHkgPSBuZXcgTGF6eU9wZW5TdHJlYW0oJ3BocDovL2lucHV0JywgJ3IrJyk7CiAgICAgICAgJHByb3RvY29sID0gaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/IHN0cl9yZXBsYWNlKCdIVFRQLycsICcnLCAkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10pIDogJzEuMSc7CgogICAgICAgICRzZXJ2ZXJSZXF1ZXN0ID0gbmV3IFNlcnZlclJlcXVlc3QoJG1ldGhvZCwgJHVyaSwgJGhlYWRlcnMsICRib2R5LCAkcHJvdG9jb2wsICRfU0VSVkVSKTsKCiAgICAgICAgcmV0dXJuICRzZXJ2ZXJSZXF1ZXN0CiAgICAgICAgICAgIC0+d2l0aENvb2tpZVBhcmFtcygkX0NPT0tJRSkKICAgICAgICAgICAgLT53aXRoUXVlcnlQYXJhbXMoJF9HRVQpCiAgICAgICAgICAgIC0+d2l0aFBhcnNlZEJvZHkoJF9QT1NUKQogICAgICAgICAgICAtPndpdGhVcGxvYWRlZEZpbGVzKHNlbGY6Om5vcm1hbGl6ZUZpbGVzKCRfRklMRVMpKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBleHRyYWN0SG9zdEFuZFBvcnRGcm9tQXV0aG9yaXR5KCRhdXRob3JpdHkpCiAgICB7CiAgICAgICAgJHVyaSA9ICdodHRwOi8vJy4kYXV0aG9yaXR5OwogICAgICAgICRwYXJ0cyA9IHBhcnNlX3VybCgkdXJpKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwYXJ0cykgewogICAgICAgICAgICByZXR1cm4gW251bGwsIG51bGxdOwogICAgICAgIH0KCiAgICAgICAgJGhvc3QgPSBpc3NldCgkcGFydHNbJ2hvc3QnXSkgPyAkcGFydHNbJ2hvc3QnXSA6IG51bGw7CiAgICAgICAgJHBvcnQgPSBpc3NldCgkcGFydHNbJ3BvcnQnXSkgPyAkcGFydHNbJ3BvcnQnXSA6IG51bGw7CgogICAgICAgIHJldHVybiBbJGhvc3QsICRwb3J0XTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIFVyaSBwb3B1bGF0ZWQgd2l0aCB2YWx1ZXMgZnJvbSAkX1NFUlZFUi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVyaUZyb21HbG9iYWxzKCkKICAgIHsKICAgICAgICAkdXJpID0gbmV3IFVyaSgnJyk7CgogICAgICAgICR1cmkgPSAkdXJpLT53aXRoU2NoZW1lKCFlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gIT09ICdvZmYnID8gJ2h0dHBzJyA6ICdodHRwJyk7CgogICAgICAgICRoYXNQb3J0ID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpIHsKICAgICAgICAgICAgbGlzdCgkaG9zdCwgJHBvcnQpID0gc2VsZjo6ZXh0cmFjdEhvc3RBbmRQb3J0RnJvbUF1dGhvcml0eSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pOwogICAgICAgICAgICBpZiAoJGhvc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkaG9zdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkcG9ydCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGhhc1BvcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KCRwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhIb3N0KCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRoYXNQb3J0ICYmIGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfUE9SVCddKSkgewogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFBvcnQoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pOwogICAgICAgIH0KCiAgICAgICAgJGhhc1F1ZXJ5ID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgewogICAgICAgICAgICAkcmVxdWVzdFVyaVBhcnRzID0gZXhwbG9kZSgnPycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAyKTsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKCRyZXF1ZXN0VXJpUGFydHNbMF0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJHJlcXVlc3RVcmlQYXJ0c1sxXSkpIHsKICAgICAgICAgICAgICAgICRoYXNRdWVyeSA9IHRydWU7CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KCRyZXF1ZXN0VXJpUGFydHNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISRoYXNRdWVyeSAmJiBpc3NldCgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlclBhcmFtcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXJ2ZXJQYXJhbXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGxvYWRlZEZpbGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwbG9hZGVkRmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXBsb2FkZWRGaWxlcyhhcnJheSAkdXBsb2FkZWRGaWxlcykKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+dXBsb2FkZWRGaWxlcyA9ICR1cGxvYWRlZEZpbGVzOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZVBhcmFtcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb29raWVQYXJhbXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQ29va2llUGFyYW1zKGFycmF5ICRjb29raWVzKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5jb29raWVQYXJhbXMgPSAkY29va2llczsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5xdWVyeVBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeVBhcmFtcyhhcnJheSAkcXVlcnkpCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnF1ZXJ5UGFyYW1zID0gJHF1ZXJ5OwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZEJvZHkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VkQm9keTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXJzZWRCb2R5KCRkYXRhKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5wYXJzZWRCb2R5ID0gJGRhdGE7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRyaWJ1dGVzOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCRhdHRyaWJ1dGUsICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IGFycmF5X2tleV9leGlzdHMoJGF0dHJpYnV0ZSwgJHRoaXMtPmF0dHJpYnV0ZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+YXR0cmlidXRlc1skYXR0cmlidXRlXTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhBdHRyaWJ1dGUoJGF0dHJpYnV0ZSwgJHZhbHVlKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5hdHRyaWJ1dGVzWyRhdHRyaWJ1dGVdID0gJHZhbHVlOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSkKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IGFycmF5X2tleV9leGlzdHMoJGF0dHJpYnV0ZSwgJHRoaXMtPmF0dHJpYnV0ZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5hdHRyaWJ1dGVzWyRhdHRyaWJ1dGVdKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Stream.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQSFAgc3RyZWFtIGltcGxlbWVudGF0aW9uLgogKgogKiBAdmFyICRzdHJlYW0KICovCmNsYXNzIFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICBwcml2YXRlICRzdHJlYW07CiAgICBwcml2YXRlICRzaXplOwogICAgcHJpdmF0ZSAkc2Vla2FibGU7CiAgICBwcml2YXRlICRyZWFkYWJsZTsKICAgIHByaXZhdGUgJHdyaXRhYmxlOwogICAgcHJpdmF0ZSAkdXJpOwogICAgcHJpdmF0ZSAkY3VzdG9tTWV0YWRhdGE7CgogICAgLyoqIEB2YXIgYXJyYXkgSGFzaCBvZiByZWFkYWJsZSBhbmQgd3JpdGFibGUgc3RyZWFtIHR5cGVzICovCiAgICBwcml2YXRlIHN0YXRpYyAkcmVhZFdyaXRlSGFzaCA9IFsKICAgICAgICAncmVhZCcgPT4gWwogICAgICAgICAgICAncicgPT4gdHJ1ZSwgJ3crJyA9PiB0cnVlLCAncisnID0+IHRydWUsICd4KycgPT4gdHJ1ZSwgJ2MrJyA9PiB0cnVlLAogICAgICAgICAgICAncmInID0+IHRydWUsICd3K2InID0+IHRydWUsICdyK2InID0+IHRydWUsICd4K2InID0+IHRydWUsCiAgICAgICAgICAgICdjK2InID0+IHRydWUsICdydCcgPT4gdHJ1ZSwgJ3crdCcgPT4gdHJ1ZSwgJ3IrdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3grdCcgPT4gdHJ1ZSwgJ2MrdCcgPT4gdHJ1ZSwgJ2ErJyA9PiB0cnVlLCAncmIrJyA9PiB0cnVlLAogICAgICAgIF0sCiAgICAgICAgJ3dyaXRlJyA9PiBbCiAgICAgICAgICAgICd3JyA9PiB0cnVlLCAndysnID0+IHRydWUsICdydycgPT4gdHJ1ZSwgJ3IrJyA9PiB0cnVlLCAneCsnID0+IHRydWUsCiAgICAgICAgICAgICdjKycgPT4gdHJ1ZSwgJ3diJyA9PiB0cnVlLCAndytiJyA9PiB0cnVlLCAncitiJyA9PiB0cnVlLCAncmIrJyA9PiB0cnVlLAogICAgICAgICAgICAneCtiJyA9PiB0cnVlLCAnYytiJyA9PiB0cnVlLCAndyt0JyA9PiB0cnVlLCAncit0JyA9PiB0cnVlLAogICAgICAgICAgICAneCt0JyA9PiB0cnVlLCAnYyt0JyA9PiB0cnVlLCAnYScgPT4gdHJ1ZSwgJ2ErJyA9PiB0cnVlCiAgICAgICAgXQogICAgXTsKCiAgICAvKioKICAgICAqIFRoaXMgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zLgogICAgICoKICAgICAqIC0gc2l6ZTogKGludCkgSWYgYSByZWFkIHN0cmVhbSB3b3VsZCBvdGhlcndpc2UgaGF2ZSBhbiBpbmRldGVybWluYXRlCiAgICAgKiAgIHNpemUsIGJ1dCB0aGUgc2l6ZSBpcyBrbm93biBkdWUgdG8gZm9yZWtub3dsZWRnZSwgdGhlbiB5b3UgY2FuCiAgICAgKiAgIHByb3ZpZGUgdGhhdCBzaXplLCBpbiBieXRlcy4KICAgICAqIC0gbWV0YWRhdGE6IChhcnJheSkgQW55IGFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gcmV0dXJuIHdoZW4gdGhlIG1ldGFkYXRhCiAgICAgKiAgIG9mIHRoZSBzdHJlYW0gaXMgYWNjZXNzZWQuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRzdHJlYW0gIFN0cmVhbSByZXNvdXJjZSB0byB3cmFwLgogICAgICogQHBhcmFtIGFycmF5ICAgICRvcHRpb25zIEFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMuCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBzdHJlYW0gaXMgbm90IGEgc3RyZWFtIHJlc291cmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyZWFtLCAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJHN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1N0cmVhbSBtdXN0IGJlIGEgcmVzb3VyY2UnKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2l6ZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2l6ZSA9ICRvcHRpb25zWydzaXplJ107CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y3VzdG9tTWV0YWRhdGEgPSBpc3NldCgkb3B0aW9uc1snbWV0YWRhdGEnXSkKICAgICAgICAgICAgPyAkb3B0aW9uc1snbWV0YWRhdGEnXQogICAgICAgICAgICA6IFtdOwoKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkbWV0YSA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zdHJlYW0pOwogICAgICAgICR0aGlzLT5zZWVrYWJsZSA9ICRtZXRhWydzZWVrYWJsZSddOwogICAgICAgICR0aGlzLT5yZWFkYWJsZSA9IGlzc2V0KHNlbGY6OiRyZWFkV3JpdGVIYXNoWydyZWFkJ11bJG1ldGFbJ21vZGUnXV0pOwogICAgICAgICR0aGlzLT53cml0YWJsZSA9IGlzc2V0KHNlbGY6OiRyZWFkV3JpdGVIYXNoWyd3cml0ZSddWyRtZXRhWydtb2RlJ11dKTsKICAgICAgICAkdGhpcy0+dXJpID0gJHRoaXMtPmdldE1ldGFkYXRhKCd1cmknKTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIHdoZW4gdGhlIGRlc3RydWN0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRlbnRzID0gc3RyZWFtX2dldF9jb250ZW50cygkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgaWYgKCRjb250ZW50cyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBzdHJlYW0gY29udGVudHMnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29udGVudHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgICAgICBmY2xvc2UoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmRldGFjaCgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5zdHJlYW07CiAgICAgICAgdW5zZXQoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgJHRoaXMtPnNpemUgPSAkdGhpcy0+dXJpID0gbnVsbDsKICAgICAgICAkdGhpcy0+cmVhZGFibGUgPSAkdGhpcy0+d3JpdGFibGUgPSAkdGhpcy0+c2Vla2FibGUgPSBmYWxzZTsKCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+c2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNpemU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYXIgdGhlIHN0YXQgY2FjaGUgaWYgdGhlIHN0cmVhbSBoYXMgYSBVUkkKICAgICAgICBpZiAoJHRoaXMtPnVyaSkgewogICAgICAgICAgICBjbGVhcnN0YXRjYWNoZSh0cnVlLCAkdGhpcy0+dXJpKTsKICAgICAgICB9CgogICAgICAgICRzdGF0cyA9IGZzdGF0KCR0aGlzLT5zdHJlYW0pOwogICAgICAgIGlmIChpc3NldCgkc3RhdHNbJ3NpemUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNpemUgPSAkc3RhdHNbJ3NpemUnXTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVhZGFibGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+d3JpdGFibGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2Vla2FibGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZlb2YoJHRoaXMtPnN0cmVhbSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CgogICAgICAgICRyZXN1bHQgPSBmdGVsbCgkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGRldGVybWluZSBzdHJlYW0gcG9zaXRpb24nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5zdHJlYW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQogICAgICAgIGlmICghJHRoaXMtPnNlZWthYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIG5vdCBzZWVrYWJsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoZnNlZWsoJHRoaXMtPnN0cmVhbSwgJG9mZnNldCwgJHdoZW5jZSkgPT09IC0xKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHNlZWsgdG8gc3RyZWFtIHBvc2l0aW9uICcKICAgICAgICAgICAgICAgIC4gJG9mZnNldCAuICcgd2l0aCB3aGVuY2UgJyAuIHZhcl9leHBvcnQoJHdoZW5jZSwgdHJ1ZSkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTdHJlYW0gaXMgZGV0YWNoZWQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkdGhpcy0+cmVhZGFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmVhZCBmcm9tIG5vbi1yZWFkYWJsZSBzdHJlYW0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRsZW5ndGggPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTGVuZ3RoIHBhcmFtZXRlciBjYW5ub3QgYmUgbmVnYXRpdmUnKTsKICAgICAgICB9CgogICAgICAgIGlmICgwID09PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRzdHJpbmcgPSBmcmVhZCgkdGhpcy0+c3RyZWFtLCAkbGVuZ3RoKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRzdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBmcm9tIHN0cmVhbScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1N0cmVhbSBpcyBkZXRhY2hlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT53cml0YWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB3cml0ZSB0byBhIG5vbi13cml0YWJsZSBzdHJlYW0nKTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIGNhbid0IGtub3cgdGhlIHNpemUgYWZ0ZXIgd3JpdGluZyBhbnl0aGluZwogICAgICAgICR0aGlzLT5zaXplID0gbnVsbDsKICAgICAgICAkcmVzdWx0ID0gZndyaXRlKCR0aGlzLT5zdHJlYW0sICRzdHJpbmcpOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gd3JpdGUgdG8gc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICByZXR1cm4gJGtleSA/IG51bGwgOiBbXTsKICAgICAgICB9IGVsc2VpZiAoISRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jdXN0b21NZXRhZGF0YSArIHN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zdHJlYW0pOwogICAgICAgIH0gZWxzZWlmIChpc3NldCgkdGhpcy0+Y3VzdG9tTWV0YWRhdGFbJGtleV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3VzdG9tTWV0YWRhdGFbJGtleV07CiAgICAgICAgfQoKICAgICAgICAkbWV0YSA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zdHJlYW0pOwoKICAgICAgICByZXR1cm4gaXNzZXQoJG1ldGFbJGtleV0pID8gJG1ldGFbJGtleV0gOiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRyYWl0CiAqIEBwcm9wZXJ0eSBTdHJlYW1JbnRlcmZhY2Ugc3RyZWFtCiAqLwp0cmFpdCBTdHJlYW1EZWNvcmF0b3JUcmFpdAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gZGVjb3JhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgfQoKICAgIC8qKgogICAgICogTWFnaWMgbWV0aG9kIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHN0cmVhbSBpZiBzdHJlYW1zIGFyZSBub3QgYWRkZWQgaW4KICAgICAqIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlY29yYXRvciAoZS5nLiwgTGF6eU9wZW5TdHJlYW0pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgKGFsbG93cyAic3RyZWFtIiBvbmx5KS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKCRuYW1lID09ICdzdHJlYW0nKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGhpcy0+Y3JlYXRlU3RyZWFtKCk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oIiRuYW1lIG5vdCBmb3VuZCBvbiBjbGFzcyIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoJHRoaXMtPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gUmVhbGx5LCBQSFA/IGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NTM2NDgKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignU3RyZWFtRGVjb3JhdG9yOjpfX3RvU3RyaW5nIGV4Y2VwdGlvbjogJwogICAgICAgICAgICAgICAgLiAoc3RyaW5nKSAkZSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKQogICAgewogICAgICAgIHJldHVybiBjb3B5X3RvX3N0cmluZygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBbGxvdyBkZWNvcmF0b3JzIHRvIGltcGxlbWVudCBjdXN0b20gbWV0aG9kcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBNaXNzaW5nIG1ldGhvZCBuYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhcmdzICAgTWV0aG9kIGFyZ3VtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kLCBhcnJheSAkYXJncykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5zdHJlYW0sICRtZXRob2RdLCAkYXJncyk7CgogICAgICAgIC8vIEFsd2F5cyByZXR1cm4gdGhlIHdyYXBwZWQgb2JqZWN0IGlmIHRoZSByZXN1bHQgaXMgYSByZXR1cm4gJHRoaXMKICAgICAgICByZXR1cm4gJHJlc3VsdCA9PT0gJHRoaXMtPnN0cmVhbSA/ICR0aGlzIDogJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0tPmNsb3NlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRNZXRhZGF0YSgka2V5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZGV0YWNoKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNSZWFkYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNXcml0YWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQsICR3aGVuY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnJlYWQoJGxlbmd0aCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPndyaXRlKCRzdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogSW1wbGVtZW50IGluIHN1YmNsYXNzZXMgdG8gZHluYW1pY2FsbHkgY3JlYXRlIHN0cmVhbXMgd2hlbiByZXF1ZXN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSgpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdOb3QgaW1wbGVtZW50ZWQnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/StreamWrapper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb252ZXJ0cyBHdXp6bGUgc3RyZWFtcyBpbnRvIFBIUCBzdHJlYW0gcmVzb3VyY2VzLgogKi8KY2xhc3MgU3RyZWFtV3JhcHBlcgp7CiAgICAvKiogQHZhciByZXNvdXJjZSAqLwogICAgcHVibGljICRjb250ZXh0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKiBAdmFyIHN0cmluZyByLCByKywgb3IgdyAqLwogICAgcHJpdmF0ZSAkbW9kZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gVGhlIHN0cmVhbSB0byBnZXQgYSByZXNvdXJjZSBmb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgc3RyZWFtIGlzIG5vdCByZWFkYWJsZSBvciB3cml0YWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlc291cmNlKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgIHNlbGY6OnJlZ2lzdGVyKCk7CgogICAgICAgIGlmICgkc3RyZWFtLT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGUgPSAkc3RyZWFtLT5pc1dyaXRhYmxlKCkgPyAncisnIDogJ3InOwogICAgICAgIH0gZWxzZWlmICgkc3RyZWFtLT5pc1dyaXRhYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGUgPSAndyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBzdHJlYW0gbXVzdCBiZSByZWFkYWJsZSwgJwogICAgICAgICAgICAgICAgLiAnd3JpdGFibGUsIG9yIGJvdGguJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZm9wZW4oJ2d1enpsZTovL3N0cmVhbScsICRtb2RlLCBudWxsLCBzZWxmOjpjcmVhdGVTdHJlYW1Db250ZXh0KCRzdHJlYW0pKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBzdHJlYW0gY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9wZW4gYSBzdHJlYW0gYXMgYSBwaHAgc3RyZWFtIHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbQogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTdHJlYW1Db250ZXh0KFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgIHJldHVybiBzdHJlYW1fY29udGV4dF9jcmVhdGUoWwogICAgICAgICAgICAnZ3V6emxlJyA9PiBbJ3N0cmVhbScgPT4gJHN0cmVhbV0KICAgICAgICBdKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGUgc3RyZWFtIHdyYXBwZXIgaWYgbmVlZGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVnaXN0ZXIoKQogICAgewogICAgICAgIGlmICghaW5fYXJyYXkoJ2d1enpsZScsIHN0cmVhbV9nZXRfd3JhcHBlcnMoKSkpIHsKICAgICAgICAgICAgc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIoJ2d1enpsZScsIF9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fb3BlbigkcGF0aCwgJG1vZGUsICRvcHRpb25zLCAmJG9wZW5lZF9wYXRoKQogICAgewogICAgICAgICRvcHRpb25zID0gc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMoJHRoaXMtPmNvbnRleHQpOwoKICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydndXp6bGUnXVsnc3RyZWFtJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5tb2RlID0gJG1vZGU7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRvcHRpb25zWydndXp6bGUnXVsnc3RyZWFtJ107CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fcmVhZCgkY291bnQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnJlYWQoJGNvdW50KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3dyaXRlKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiAoaW50KSAkdGhpcy0+c3RyZWFtLT53cml0ZSgkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV90ZWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fZW9mKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZW9mKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9zZWVrKCRvZmZzZXQsICR3aGVuY2UpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2Vlaygkb2Zmc2V0LCAkd2hlbmNlKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV9jYXN0KCRjYXN0X2FzKQogICAgewogICAgICAgICRzdHJlYW0gPSBjbG9uZSgkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgcmV0dXJuICRzdHJlYW0tPmRldGFjaCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fc3RhdCgpCiAgICB7CiAgICAgICAgc3RhdGljICRtb2RlTWFwID0gWwogICAgICAgICAgICAncicgID0+IDMzMDYwLAogICAgICAgICAgICAncmInID0+IDMzMDYwLAogICAgICAgICAgICAncisnID0+IDMzMjA2LAogICAgICAgICAgICAndycgID0+IDMzMTg4LAogICAgICAgICAgICAnd2InID0+IDMzMTg4CiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2RldicgICAgID0+IDAsCiAgICAgICAgICAgICdpbm8nICAgICA9PiAwLAogICAgICAgICAgICAnbW9kZScgICAgPT4gJG1vZGVNYXBbJHRoaXMtPm1vZGVdLAogICAgICAgICAgICAnbmxpbmsnICAgPT4gMCwKICAgICAgICAgICAgJ3VpZCcgICAgID0+IDAsCiAgICAgICAgICAgICdnaWQnICAgICA9PiAwLAogICAgICAgICAgICAncmRldicgICAgPT4gMCwKICAgICAgICAgICAgJ3NpemUnICAgID0+ICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKSA/OiAwLAogICAgICAgICAgICAnYXRpbWUnICAgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyAgID0+IDAsCiAgICAgICAgICAgICdjdGltZScgICA9PiAwLAogICAgICAgICAgICAnYmxrc2l6ZScgPT4gMCwKICAgICAgICAgICAgJ2Jsb2NrcycgID0+IDAKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cmxfc3RhdCgkcGF0aCwgJGZsYWdzKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdkZXYnICAgICA9PiAwLAogICAgICAgICAgICAnaW5vJyAgICAgPT4gMCwKICAgICAgICAgICAgJ21vZGUnICAgID0+IDAsCiAgICAgICAgICAgICdubGluaycgICA9PiAwLAogICAgICAgICAgICAndWlkJyAgICAgPT4gMCwKICAgICAgICAgICAgJ2dpZCcgICAgID0+IDAsCiAgICAgICAgICAgICdyZGV2JyAgICA9PiAwLAogICAgICAgICAgICAnc2l6ZScgICAgPT4gMCwKICAgICAgICAgICAgJ2F0aW1lJyAgID0+IDAsCiAgICAgICAgICAgICdtdGltZScgICA9PiAwLAogICAgICAgICAgICAnY3RpbWUnICAgPT4gMCwKICAgICAgICAgICAgJ2Jsa3NpemUnID0+IDAsCiAgICAgICAgICAgICdibG9ja3MnICA9PiAwCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UploadedFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmNsYXNzIFVwbG9hZGVkRmlsZSBpbXBsZW1lbnRzIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50W10KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGVycm9ycyA9IFsKICAgICAgICBVUExPQURfRVJSX09LLAogICAgICAgIFVQTE9BRF9FUlJfSU5JX1NJWkUsCiAgICAgICAgVVBMT0FEX0VSUl9GT1JNX1NJWkUsCiAgICAgICAgVVBMT0FEX0VSUl9QQVJUSUFMLAogICAgICAgIFVQTE9BRF9FUlJfTk9fRklMRSwKICAgICAgICBVUExPQURfRVJSX05PX1RNUF9ESVIsCiAgICAgICAgVVBMT0FEX0VSUl9DQU5UX1dSSVRFLAogICAgICAgIFVQTE9BRF9FUlJfRVhURU5TSU9OLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNsaWVudEZpbGVuYW1lOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50TWVkaWFUeXBlOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkZXJyb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIG51bGx8c3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGZpbGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkbW92ZWQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqIEBwYXJhbSBpbnQgJHNpemUKICAgICAqIEBwYXJhbSBpbnQgJGVycm9yU3RhdHVzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudEZpbGVuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgJHN0cmVhbU9yRmlsZSwKICAgICAgICAkc2l6ZSwKICAgICAgICAkZXJyb3JTdGF0dXMsCiAgICAgICAgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICAkY2xpZW50TWVkaWFUeXBlID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPnNldEVycm9yKCRlcnJvclN0YXR1cyk7CiAgICAgICAgJHRoaXMtPnNldFNpemUoJHNpemUpOwogICAgICAgICR0aGlzLT5zZXRDbGllbnRGaWxlbmFtZSgkY2xpZW50RmlsZW5hbWUpOwogICAgICAgICR0aGlzLT5zZXRDbGllbnRNZWRpYVR5cGUoJGNsaWVudE1lZGlhVHlwZSk7CgogICAgICAgIGlmICgkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRTdHJlYW1PckZpbGUoJHN0cmVhbU9yRmlsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBzZXQgZmlsZSBvciBzdHJlYW0gdmFyaWFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cmVhbU9yRmlsZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRTdHJlYW1PckZpbGUoJHN0cmVhbU9yRmlsZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRzdHJlYW1PckZpbGUpKSB7CiAgICAgICAgICAgICR0aGlzLT5maWxlID0gJHN0cmVhbU9yRmlsZTsKICAgICAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJHN0cmVhbU9yRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IG5ldyBTdHJlYW0oJHN0cmVhbU9yRmlsZSk7CiAgICAgICAgfSBlbHNlaWYgKCRzdHJlYW1PckZpbGUgaW5zdGFuY2VvZiBTdHJlYW1JbnRlcmZhY2UpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW1PckZpbGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIHN0cmVhbSBvciBmaWxlIHByb3ZpZGVkIGZvciBVcGxvYWRlZEZpbGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZXJyb3IKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RXJyb3IoJGVycm9yKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfaW50KCRlcnJvcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVcGxvYWQgZmlsZSBlcnJvciBzdGF0dXMgbXVzdCBiZSBhbiBpbnRlZ2VyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSBpbl9hcnJheSgkZXJyb3IsIFVwbG9hZGVkRmlsZTo6JGVycm9ycykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIGVycm9yIHN0YXR1cyBmb3IgVXBsb2FkZWRGaWxlJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmVycm9yID0gJGVycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRTaXplKCRzaXplKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfaW50KCRzaXplKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIHNpemUgbXVzdCBiZSBhbiBpbnRlZ2VyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNpemUgPSAkc2l6ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcGFyYW0KICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzU3RyaW5nT3JOdWxsKCRwYXJhbSkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoZ2V0dHlwZSgkcGFyYW0pLCBbJ3N0cmluZycsICdOVUxMJ10pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRwYXJhbQogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNTdHJpbmdOb3RFbXB0eSgkcGFyYW0pCiAgICB7CiAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkcGFyYW0pICYmIGZhbHNlID09PSBlbXB0eSgkcGFyYW0pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjbGllbnRGaWxlbmFtZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRDbGllbnRGaWxlbmFtZSgkY2xpZW50RmlsZW5hbWUpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNTdHJpbmdPck51bGwoJGNsaWVudEZpbGVuYW1lKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIGNsaWVudCBmaWxlbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2xpZW50RmlsZW5hbWUgPSAkY2xpZW50RmlsZW5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRDbGllbnRNZWRpYVR5cGUoJGNsaWVudE1lZGlhVHlwZSkKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09ICR0aGlzLT5pc1N0cmluZ09yTnVsbCgkY2xpZW50TWVkaWFUeXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIGNsaWVudCBtZWRpYSB0eXBlIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jbGllbnRNZWRpYVR5cGUgPSAkY2xpZW50TWVkaWFUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gdXBsb2FkIGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNPaygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvciA9PT0gVVBMT0FEX0VSUl9PSzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNNb3ZlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb3ZlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBpcyBtb3ZlZCBvciBub3Qgb2sKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2ZSgpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGR1ZSB0byB1cGxvYWQgZXJyb3InKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+aXNNb3ZlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gbW92ZWQnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHVwbG9hZCB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKQogICAgewogICAgICAgICR0aGlzLT52YWxpZGF0ZUFjdGl2ZSgpOwoKICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbSBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgTGF6eU9wZW5TdHJlYW0oJHRoaXMtPmZpbGUsICdyKycpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvaXNfdXBsb2FkZWRfZmlsZQogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tb3ZlX3VwbG9hZGVkX2ZpbGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldFBhdGggUGF0aCB0byB3aGljaCB0byBtb3ZlIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSB1cGxvYWQgd2FzIG5vdCBzdWNjZXNzZnVsLgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICRwYXRoIHNwZWNpZmllZCBpcyBpbnZhbGlkLgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIG9uIGFueSBlcnJvciBkdXJpbmcgdGhlIG1vdmUgb3BlcmF0aW9uLCBvciBvbgogICAgICogICAgIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBjYWxsIHRvIHRoZSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG8oJHRhcmdldFBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlQWN0aXZlKCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJHRoaXMtPmlzU3RyaW5nTm90RW1wdHkoJHRhcmdldFBhdGgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnSW52YWxpZCBwYXRoIHByb3ZpZGVkIGZvciBtb3ZlIG9wZXJhdGlvbjsgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmZpbGUpIHsKICAgICAgICAgICAgJHRoaXMtPm1vdmVkID0gcGhwX3NhcGlfbmFtZSgpID09ICdjbGknCiAgICAgICAgICAgICAgICA/IHJlbmFtZSgkdGhpcy0+ZmlsZSwgJHRhcmdldFBhdGgpCiAgICAgICAgICAgICAgICA6IG1vdmVfdXBsb2FkZWRfZmlsZSgkdGhpcy0+ZmlsZSwgJHRhcmdldFBhdGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlfdG9fc3RyZWFtKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldFN0cmVhbSgpLAogICAgICAgICAgICAgICAgbmV3IExhenlPcGVuU3RyZWFtKCR0YXJnZXRQYXRoLCAndycpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkdGhpcy0+bW92ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+bW92ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdVcGxvYWRlZCBmaWxlIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byAlcycsICR0YXJnZXRQYXRoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgb3IgbnVsbCBpZiB1bmtub3duLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2ZlYXR1cmVzLmZpbGUtdXBsb2FkLmVycm9ycy5waHAKICAgICAqIEByZXR1cm4gaW50IE9uZSBvZiBQSFAncyBVUExPQURfRVJSX1hYWCBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvcjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBmaWxlbmFtZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50RmlsZW5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xpZW50RmlsZW5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRNZWRpYVR5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xpZW50TWVkaWFUeXBlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/Uri.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQU1ItNyBVUkkgaW1wbGVtZW50YXRpb24uCiAqCiAqIEBhdXRob3IgTWljaGFlbCBEb3dsaW5nCiAqIEBhdXRob3IgVG9iaWFzIFNjaHVsdHplCiAqIEBhdXRob3IgTWF0dGhldyBXZWllciBPJ1BoaW5uZXkKICovCmNsYXNzIFVyaSBpbXBsZW1lbnRzIFVyaUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEFic29sdXRlIGh0dHAgYW5kIGh0dHBzIFVSSXMgcmVxdWlyZSBhIGhvc3QgcGVyIFJGQyA3MjMwIFNlY3Rpb24gMi43CiAgICAgKiBidXQgaW4gZ2VuZXJpYyBVUklzIHRoZSBob3N0IGNhbiBiZSBlbXB0eS4gU28gZm9yIGh0dHAocykgVVJJcwogICAgICogd2UgYXBwbHkgdGhpcyBkZWZhdWx0IGhvc3Qgd2hlbiBubyBob3N0IGlzIGdpdmVuIHlldCB0byBmb3JtIGEKICAgICAqIHZhbGlkIFVSSS4KICAgICAqLwogICAgY29uc3QgSFRUUF9ERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JzsKCiAgICBwcml2YXRlIHN0YXRpYyAkZGVmYXVsdFBvcnRzID0gWwogICAgICAgICdodHRwJyAgPT4gODAsCiAgICAgICAgJ2h0dHBzJyA9PiA0NDMsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ25udHAnID0+IDExOSwKICAgICAgICAnbmV3cycgPT4gMTE5LAogICAgICAgICd0ZWxuZXQnID0+IDIzLAogICAgICAgICd0bjMyNzAnID0+IDIzLAogICAgICAgICdpbWFwJyA9PiAxNDMsCiAgICAgICAgJ3BvcCcgPT4gMTEwLAogICAgICAgICdsZGFwJyA9PiAzODksCiAgICBdOwoKICAgIHByaXZhdGUgc3RhdGljICRjaGFyVW5yZXNlcnZlZCA9ICdhLXpBLVowLTlfXC1cLn4nOwogICAgcHJpdmF0ZSBzdGF0aWMgJGNoYXJTdWJEZWxpbXMgPSAnIVwkJlwnXChcKVwqXCssOz0nOwogICAgcHJpdmF0ZSBzdGF0aWMgJHJlcGxhY2VRdWVyeSA9IFsnPScgPT4gJyUzRCcsICcmJyA9PiAnJTI2J107CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBzY2hlbWUuICovCiAgICBwcml2YXRlICRzY2hlbWUgPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHVzZXIgaW5mby4gKi8KICAgIHByaXZhdGUgJHVzZXJJbmZvID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBob3N0LiAqLwogICAgcHJpdmF0ZSAkaG9zdCA9ICcnOwoKICAgIC8qKiBAdmFyIGludHxudWxsIFVyaSBwb3J0LiAqLwogICAgcHJpdmF0ZSAkcG9ydDsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHBhdGguICovCiAgICBwcml2YXRlICRwYXRoID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBxdWVyeSBzdHJpbmcuICovCiAgICBwcml2YXRlICRxdWVyeSA9ICcnOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgZnJhZ21lbnQuICovCiAgICBwcml2YXRlICRmcmFnbWVudCA9ICcnOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJpIFVSSSB0byBwYXJzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHVyaSA9ICcnKQogICAgewogICAgICAgIC8vIHdlYWsgdHlwZSBjaGVjayB0byBhbHNvIGFjY2VwdCBudWxsIHVudGlsIHdlIGNhbiBhZGQgc2NhbGFyIHR5cGUgaGludHMKICAgICAgICBpZiAoJHVyaSAhPSAnJykgewogICAgICAgICAgICAkcGFydHMgPSBwYXJzZV91cmwoJHVyaSk7CiAgICAgICAgICAgIGlmICgkcGFydHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiVW5hYmxlIHRvIHBhcnNlIFVSSTogJHVyaSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5hcHBseVBhcnRzKCRwYXJ0cyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y29tcG9zZUNvbXBvbmVudHMoCiAgICAgICAgICAgICR0aGlzLT5zY2hlbWUsCiAgICAgICAgICAgICR0aGlzLT5nZXRBdXRob3JpdHkoKSwKICAgICAgICAgICAgJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSwKICAgICAgICAgICAgJHRoaXMtPmZyYWdtZW50CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2VzIGEgVVJJIHJlZmVyZW5jZSBzdHJpbmcgZnJvbSBpdHMgdmFyaW91cyBjb21wb25lbnRzLgogICAgICoKICAgICAqIFVzdWFsbHkgdGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgbWFudWFsbHkgYnV0IGluc3RlYWQgaXMgdXNlZCBpbmRpcmVjdGx5IHZpYQogICAgICogYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpfX3RvU3RyaW5nYC4KICAgICAqCiAgICAgKiBQU1ItNyBVcmlJbnRlcmZhY2UgdHJlYXRzIGFuIGVtcHR5IGNvbXBvbmVudCB0aGUgc2FtZSBhcyBhIG1pc3NpbmcgY29tcG9uZW50IGFzCiAgICAgKiBnZXRRdWVyeSgpLCBnZXRGcmFnbWVudCgpIGV0Yy4gYWx3YXlzIHJldHVybiBhIHN0cmluZy4gVGhpcyBleHBsYWlucyB0aGUgc2xpZ2h0CiAgICAgKiBkaWZmZXJlbmNlIHRvIFJGQyAzOTg2IFNlY3Rpb24gNS4zLgogICAgICoKICAgICAqIEFub3RoZXIgYWRqdXN0bWVudCBpcyB0aGF0IHRoZSBhdXRob3JpdHkgc2VwYXJhdG9yIGlzIGFkZGVkIGV2ZW4gd2hlbiB0aGUgYXV0aG9yaXR5IGlzIG1pc3NpbmcvZW1wdHkKICAgICAqIGZvciB0aGUgImZpbGUiIHNjaGVtZS4gVGhpcyBpcyBiZWNhdXNlIFBIUCBzdHJlYW0gZnVuY3Rpb25zIGxpa2UgYGZpbGVfZ2V0X2NvbnRlbnRzYCBvbmx5IHdvcmsgd2l0aAogICAgICogYGZpbGU6Ly8vbXlmaWxlYCBidXQgbm90IHdpdGggYGZpbGU6L215ZmlsZWAgYWx0aG91Z2ggdGhleSBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuIEJ1dAogICAgICogYGZpbGU6Ly8vYCBpcyB0aGUgbW9yZSBjb21tb24gc3ludGF4IGZvciB0aGUgZmlsZSBzY2hlbWUgYW55d2F5IChDaHJvbWUgZm9yIGV4YW1wbGUgcmVkaXJlY3RzIHRvCiAgICAgKiB0aGF0IGZvcm1hdCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhdXRob3JpdHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmcmFnbWVudAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wb3NlQ29tcG9uZW50cygkc2NoZW1lLCAkYXV0aG9yaXR5LCAkcGF0aCwgJHF1ZXJ5LCAkZnJhZ21lbnQpCiAgICB7CiAgICAgICAgJHVyaSA9ICcnOwoKICAgICAgICAvLyB3ZWFrIHR5cGUgY2hlY2tzIHRvIGFsc28gYWNjZXB0IG51bGwgdW50aWwgd2UgY2FuIGFkZCBzY2FsYXIgdHlwZSBoaW50cwogICAgICAgIGlmICgkc2NoZW1lICE9ICcnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJHNjaGVtZSAuICc6JzsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG9yaXR5ICE9ICcnfHwgJHNjaGVtZSA9PT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJy8vJyAuICRhdXRob3JpdHk7CiAgICAgICAgfQoKICAgICAgICAkdXJpIC49ICRwYXRoOwoKICAgICAgICBpZiAoJHF1ZXJ5ICE9ICcnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJz8nIC4gJHF1ZXJ5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmcmFnbWVudCAhPSAnJykgewogICAgICAgICAgICAkdXJpIC49ICcjJyAuICRmcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGhhcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBjdXJyZW50IHNjaGVtZS4KICAgICAqCiAgICAgKiBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6OmdldFBvcnRgIG1heSByZXR1cm4gbnVsbCBvciB0aGUgc3RhbmRhcmQgcG9ydC4gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQKICAgICAqIGluZGVwZW5kZW50bHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRGVmYXVsdFBvcnQoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFBvcnQoKSA9PT0gbnVsbAogICAgICAgICAgICB8fCAoaXNzZXQoc2VsZjo6JGRlZmF1bHRQb3J0c1skdXJpLT5nZXRTY2hlbWUoKV0pICYmICR1cmktPmdldFBvcnQoKSA9PT0gc2VsZjo6JGRlZmF1bHRQb3J0c1skdXJpLT5nZXRTY2hlbWUoKV0pOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLCBpLmUuIGl0IGhhcyBhIHNjaGVtZS4KICAgICAqCiAgICAgKiBBbiBpbnN0YW5jZSBvZiBVcmlJbnRlcmZhY2UgY2FuIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBVUkkgb3IgYSByZWxhdGl2ZSByZWZlcmVuY2UuIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZQogICAgICogaWYgaXQgaXMgdGhlIGZvcm1lci4gQW4gYWJzb2x1dGUgVVJJIGhhcyBhIHNjaGVtZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgaXMgdXNlZCB0byBleHByZXNzIGEgVVJJIHJlbGF0aXZlCiAgICAgKiB0byBhbm90aGVyIFVSSSwgdGhlIGJhc2UgVVJJLiBSZWxhdGl2ZSByZWZlcmVuY2VzIGNhbiBiZSBkaXZpZGVkIGludG8gc2V2ZXJhbCBmb3JtczoKICAgICAqIC0gbmV0d29yay1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gJy8vZXhhbXBsZS5jb20vcGF0aCcKICAgICAqIC0gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICcvcGF0aCcKICAgICAqIC0gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICdzdWJwYXRoJwogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNlZSBVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2UKICAgICAqIEBzZWUgVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZQogICAgICogQHNlZSBVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSAhPT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLgogICAgICoKICAgICAqIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVnaW5zIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgaXMgdGVybWVkIGFuIG5ldHdvcmstcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRBdXRob3JpdHkoKSAhPT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciBpcyB0ZXJtZWQgYW4gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnCiAgICAgICAgICAgICYmIGlzc2V0KCR1cmktPmdldFBhdGgoKVswXSkKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0UGF0aCgpWzBdID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIgaXMgdGVybWVkIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnCiAgICAgICAgICAgICYmICghaXNzZXQoJHVyaS0+Z2V0UGF0aCgpWzBdKSB8fCAkdXJpLT5nZXRQYXRoKClbMF0gIT09ICcvJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlIHJlZmVycyB0byBhIFVSSSB0aGF0IGlzLCBhc2lkZSBmcm9tIGl0cyBmcmFnbWVudAogICAgICogY29tcG9uZW50LCBpZGVudGljYWwgdG8gdGhlIGJhc2UgVVJJLiBXaGVuIG5vIGJhc2UgVVJJIGlzIGdpdmVuLCBvbmx5IGFuIGVtcHR5CiAgICAgKiBVUkkgcmVmZXJlbmNlIChhcGFydCBmcm9tIGl0cyBmcmFnbWVudCkgaXMgY29uc2lkZXJlZCBhIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgICAgICAkdXJpICBUaGUgVVJJIHRvIGNoZWNrCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlfG51bGwgJGJhc2UgQW4gb3B0aW9uYWwgYmFzZSBVUkkgdG8gY29tcGFyZSBhZ2FpbnN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50UmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpLCBVcmlJbnRlcmZhY2UgJGJhc2UgPSBudWxsKQogICAgewogICAgICAgIGlmICgkYmFzZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdXJpID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJGJhc2UsICR1cmkpOwoKICAgICAgICAgICAgcmV0dXJuICgkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJGJhc2UtPmdldFNjaGVtZSgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldEF1dGhvcml0eSgpID09PSAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkpCiAgICAgICAgICAgICAgICAmJiAoJHVyaS0+Z2V0UGF0aCgpID09PSAkYmFzZS0+Z2V0UGF0aCgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldFF1ZXJ5KCkgPT09ICRiYXNlLT5nZXRRdWVyeSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnICYmICR1cmktPmdldFBhdGgoKSA9PT0gJycgJiYgJHVyaS0+Z2V0UXVlcnkoKSA9PT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGRvdCBzZWdtZW50cyBmcm9tIGEgcGF0aCBhbmQgcmV0dXJucyB0aGUgbmV3IHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjQuIFVzZSBVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHMgaW5zdGVhZC4KICAgICAqIEBzZWUgVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoJHBhdGgpCiAgICB7CiAgICAgICAgcmV0dXJuIFVyaVJlc29sdmVyOjpyZW1vdmVEb3RTZWdtZW50cygkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAgICAgICAgJGJhc2UgQmFzZSBVUkkKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICRyZWwgIFJlbGF0aXZlIFVSSQogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjQuIFVzZSBVcmlSZXNvbHZlcjo6cmVzb2x2ZSBpbnN0ZWFkLgogICAgICogQHNlZSBVcmlSZXNvbHZlcjo6cmVzb2x2ZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmUoVXJpSW50ZXJmYWNlICRiYXNlLCAkcmVsKQogICAgewogICAgICAgIGlmICghKCRyZWwgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICRyZWwgPSBuZXcgc2VsZigkcmVsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgkYmFzZSwgJHJlbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlIHJlbW92ZWQuCiAgICAgKgogICAgICogQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBwcm92aWRlZCBrZXkgYXJlCiAgICAgKiByZW1vdmVkLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaSBVUkkgdG8gdXNlIGFzIGEgYmFzZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGtleSBRdWVyeSBzdHJpbmcga2V5IHRvIHJlbW92ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhvdXRRdWVyeVZhbHVlKFVyaUludGVyZmFjZSAkdXJpLCAka2V5KQogICAgewogICAgICAgICRyZXN1bHQgPSBzZWxmOjpnZXRGaWx0ZXJlZFF1ZXJ5U3RyaW5nKCR1cmksIFska2V5XSk7CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgVVJJIHdpdGggYSBzcGVjaWZpYyBxdWVyeSBzdHJpbmcgdmFsdWUuCiAgICAgKgogICAgICogQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBwcm92aWRlZCBrZXkgYXJlCiAgICAgKiByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBnaXZlbiBrZXkgdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBBIHZhbHVlIG9mIG51bGwgd2lsbCBzZXQgdGhlIHF1ZXJ5IHN0cmluZyBrZXkgd2l0aG91dCBhIHZhbHVlLCBlLmcuICJrZXkiCiAgICAgKiBpbnN0ZWFkIG9mICJrZXk9dmFsdWUiLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaSAgIFVSSSB0byB1c2UgYXMgYSBiYXNlLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAka2V5ICAgS2V5IHRvIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgJHZhbHVlIFZhbHVlIHRvIHNldAogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWUoVXJpSW50ZXJmYWNlICR1cmksICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gc2VsZjo6Z2V0RmlsdGVyZWRRdWVyeVN0cmluZygkdXJpLCBbJGtleV0pOwoKICAgICAgICAkcmVzdWx0W10gPSBzZWxmOjpnZW5lcmF0ZVF1ZXJ5U3RyaW5nKCRrZXksICR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgVVJJIHdpdGggbXVsdGlwbGUgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlcy4KICAgICAqCiAgICAgKiBJdCBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgd2l0aFF1ZXJ5VmFsdWUoKSBidXQgZm9yIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGtleSA9PiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkgICAgICAgICAgIFVSSSB0byB1c2UgYXMgYSBiYXNlLgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAka2V5VmFsdWVBcnJheSBBc3NvY2lhdGl2ZSBhcnJheSBvZiBrZXkgYW5kIHZhbHVlcwogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWVzKFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAka2V5VmFsdWVBcnJheSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gc2VsZjo6Z2V0RmlsdGVyZWRRdWVyeVN0cmluZygkdXJpLCBhcnJheV9rZXlzKCRrZXlWYWx1ZUFycmF5KSk7CgogICAgICAgIGZvcmVhY2ggKCRrZXlWYWx1ZUFycmF5IGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRyZXN1bHRbXSA9IHNlbGY6OmdlbmVyYXRlUXVlcnlTdHJpbmcoJGtleSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVUkkgZnJvbSBhIGhhc2ggb2YgYHBhcnNlX3VybGAgY29tcG9uZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcnRzCiAgICAgKgogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wYXJzZS11cmwucGhwCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBjb21wb25lbnRzIGRvIG5vdCBmb3JtIGEgdmFsaWQgVVJJLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21QYXJ0cyhhcnJheSAkcGFydHMpCiAgICB7CiAgICAgICAgJHVyaSA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHVyaS0+YXBwbHlQYXJ0cygkcGFydHMpOwogICAgICAgICR1cmktPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zY2hlbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpCiAgICB7CiAgICAgICAgJGF1dGhvcml0eSA9ICR0aGlzLT5ob3N0OwogICAgICAgIGlmICgkdGhpcy0+dXNlckluZm8gIT09ICcnKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgPSAkdGhpcy0+dXNlckluZm8gLiAnQCcgLiAkYXV0aG9yaXR5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgLj0gJzonIC4gJHRoaXMtPnBvcnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGF1dGhvcml0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlckluZm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aG9zdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9ydCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3J0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFnbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mcmFnbWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNjaGVtZSgkc2NoZW1lKQogICAgewogICAgICAgICRzY2hlbWUgPSAkdGhpcy0+ZmlsdGVyU2NoZW1lKCRzY2hlbWUpOwoKICAgICAgICBpZiAoJHRoaXMtPnNjaGVtZSA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c2NoZW1lID0gJHNjaGVtZTsKICAgICAgICAkbmV3LT5yZW1vdmVEZWZhdWx0UG9ydCgpOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR1c2VyOwogICAgICAgIGlmICgkcGFzc3dvcmQgIT0gJycpIHsKICAgICAgICAgICAgJGluZm8gLj0gJzonIC4gJHBhc3N3b3JkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT51c2VySW5mbyA9PT0gJGluZm8pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnVzZXJJbmZvID0gJGluZm87CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+ZmlsdGVySG9zdCgkaG9zdCk7CgogICAgICAgIGlmICgkdGhpcy0+aG9zdCA9PT0gJGhvc3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmhvc3QgPSAkaG9zdDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCgkcG9ydCkKICAgIHsKICAgICAgICAkcG9ydCA9ICR0aGlzLT5maWx0ZXJQb3J0KCRwb3J0KTsKCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ID09PSAkcG9ydCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cG9ydCA9ICRwb3J0OwogICAgICAgICRuZXctPnJlbW92ZURlZmF1bHRQb3J0KCk7CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgJHBhdGggPSAkdGhpcy0+ZmlsdGVyUGF0aCgkcGF0aCk7CgogICAgICAgIGlmICgkdGhpcy0+cGF0aCA9PT0gJHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnBhdGggPSAkcGF0aDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUXVlcnkoJHF1ZXJ5KQogICAgewogICAgICAgICRxdWVyeSA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRxdWVyeSk7CgogICAgICAgIGlmICgkdGhpcy0+cXVlcnkgPT09ICRxdWVyeSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cXVlcnkgPSAkcXVlcnk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoJGZyYWdtZW50KQogICAgewogICAgICAgICRmcmFnbWVudCA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgICAgIGlmICgkdGhpcy0+ZnJhZ21lbnQgPT09ICRmcmFnbWVudCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+ZnJhZ21lbnQgPSAkZnJhZ21lbnQ7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQXBwbHkgcGFyc2VfdXJsIHBhcnRzIHRvIGEgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFydHMgQXJyYXkgb2YgcGFyc2VfdXJsIHBhcnRzIHRvIGFwcGx5LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5UGFydHMoYXJyYXkgJHBhcnRzKQogICAgewogICAgICAgICR0aGlzLT5zY2hlbWUgPSBpc3NldCgkcGFydHNbJ3NjaGVtZSddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJTY2hlbWUoJHBhcnRzWydzY2hlbWUnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+dXNlckluZm8gPSBpc3NldCgkcGFydHNbJ3VzZXInXSkgPyAkcGFydHNbJ3VzZXInXSA6ICcnOwogICAgICAgICR0aGlzLT5ob3N0ID0gaXNzZXQoJHBhcnRzWydob3N0J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlckhvc3QoJHBhcnRzWydob3N0J10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPnBvcnQgPSBpc3NldCgkcGFydHNbJ3BvcnQnXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyUG9ydCgkcGFydHNbJ3BvcnQnXSkKICAgICAgICAgICAgOiBudWxsOwogICAgICAgICR0aGlzLT5wYXRoID0gaXNzZXQoJHBhcnRzWydwYXRoJ10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclBhdGgoJHBhcnRzWydwYXRoJ10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPnF1ZXJ5ID0gaXNzZXQoJHBhcnRzWydxdWVyeSddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRwYXJ0c1sncXVlcnknXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+ZnJhZ21lbnQgPSBpc3NldCgkcGFydHNbJ2ZyYWdtZW50J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclF1ZXJ5QW5kRnJhZ21lbnQoJHBhcnRzWydmcmFnbWVudCddKQogICAgICAgICAgICA6ICcnOwogICAgICAgIGlmIChpc3NldCgkcGFydHNbJ3Bhc3MnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnVzZXJJbmZvIC49ICc6JyAuICRwYXJ0c1sncGFzcyddOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnJlbW92ZURlZmF1bHRQb3J0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzY2hlbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgc2NoZW1lIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyU2NoZW1lKCRzY2hlbWUpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHNjaGVtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NjaGVtZSBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RydG9sb3dlcigkc2NoZW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgaG9zdCBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlckhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGhvc3QpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdIb3N0IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKCRob3N0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkcG9ydAogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHBvcnQgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJQb3J0KCRwb3J0KQogICAgewogICAgICAgIGlmICgkcG9ydCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRwb3J0ID0gKGludCkgJHBvcnQ7CiAgICAgICAgaWYgKDEgPiAkcG9ydCB8fCAweGZmZmYgPCAkcG9ydCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgIHNwcmludGYoJ0ludmFsaWQgcG9ydDogJWQuIE11c3QgYmUgYmV0d2VlbiAxIGFuZCA2NTUzNScsICRwb3J0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwb3J0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICRrZXlzCiAgICAgKiAKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsdGVyZWRRdWVyeVN0cmluZyhVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJGtleXMpCiAgICB7CiAgICAgICAgJGN1cnJlbnQgPSAkdXJpLT5nZXRRdWVyeSgpOwoKICAgICAgICBpZiAoJGN1cnJlbnQgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgICRkZWNvZGVkS2V5cyA9IGFycmF5X21hcCgncmF3dXJsZGVjb2RlJywgJGtleXMpOwoKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKGV4cGxvZGUoJyYnLCAkY3VycmVudCksIGZ1bmN0aW9uICgkcGFydCkgdXNlICgkZGVjb2RlZEtleXMpIHsKICAgICAgICAgICAgcmV0dXJuICFpbl9hcnJheShyYXd1cmxkZWNvZGUoZXhwbG9kZSgnPScsICRwYXJ0KVswXSksICRkZWNvZGVkS2V5cywgdHJ1ZSk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGtleQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICR2YWx1ZQogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZVF1ZXJ5U3RyaW5nKCRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICAvLyBRdWVyeSBzdHJpbmcgc2VwYXJhdG9ycyAoIj0iLCAiJiIpIHdpdGhpbiB0aGUga2V5IG9yIHZhbHVlIG5lZWQgdG8gYmUgZW5jb2RlZAogICAgICAgIC8vICh3aGlsZSBwcmV2ZW50aW5nIGRvdWJsZS1lbmNvZGluZykgYmVmb3JlIHNldHRpbmcgdGhlIHF1ZXJ5IHN0cmluZy4gQWxsIG90aGVyCiAgICAgICAgLy8gY2hhcnMgdGhhdCBuZWVkIHBlcmNlbnQtZW5jb2Rpbmcgd2lsbCBiZSBlbmNvZGVkIGJ5IHdpdGhRdWVyeSgpLgogICAgICAgICRxdWVyeVN0cmluZyA9IHN0cnRyKCRrZXksIHNlbGY6OiRyZXBsYWNlUXVlcnkpOwoKICAgICAgICBpZiAoJHZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgICRxdWVyeVN0cmluZyAuPSAnPScgLiBzdHJ0cigkdmFsdWUsIHNlbGY6OiRyZXBsYWNlUXVlcnkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRxdWVyeVN0cmluZzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlbW92ZURlZmF1bHRQb3J0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnBvcnQgIT09IG51bGwgJiYgc2VsZjo6aXNEZWZhdWx0UG9ydCgkdGhpcykpIHsKICAgICAgICAgICAgJHRoaXMtPnBvcnQgPSBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlcnMgdGhlIHBhdGggb2YgYSBVUkkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHBhdGggaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJQYXRoKCRwYXRoKQogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRwYXRoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUGF0aCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnLyg/OlteJyAuIHNlbGY6OiRjaGFyVW5yZXNlcnZlZCAuIHNlbGY6OiRjaGFyU3ViRGVsaW1zIC4gJyU6QFwvXSsrfCUoPyFbQS1GYS1mMC05XXsyfSkpLycsCiAgICAgICAgICAgIFskdGhpcywgJ3Jhd3VybGVuY29kZU1hdGNoWmVybyddLAogICAgICAgICAgICAkcGF0aAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXJzIHRoZSBxdWVyeSBzdHJpbmcgb3IgZnJhZ21lbnQgb2YgYSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHF1ZXJ5IG9yIGZyYWdtZW50IGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyUXVlcnlBbmRGcmFnbWVudCgkc3RyKQogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRzdHIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdRdWVyeSBhbmQgZnJhZ21lbnQgbXVzdCBiZSBhIHN0cmluZycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy8oPzpbXicgLiBzZWxmOjokY2hhclVucmVzZXJ2ZWQgLiBzZWxmOjokY2hhclN1YkRlbGltcyAuICclOkBcL1w/XSsrfCUoPyFbQS1GYS1mMC05XXsyfSkpLycsCiAgICAgICAgICAgIFskdGhpcywgJ3Jhd3VybGVuY29kZU1hdGNoWmVybyddLAogICAgICAgICAgICAkc3RyCiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJhd3VybGVuY29kZU1hdGNoWmVybyhhcnJheSAkbWF0Y2gpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhd3VybGVuY29kZSgkbWF0Y2hbMF0pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5ob3N0ID09PSAnJyAmJiAoJHRoaXMtPnNjaGVtZSA9PT0gJ2h0dHAnIHx8ICR0aGlzLT5zY2hlbWUgPT09ICdodHRwcycpKSB7CiAgICAgICAgICAgICR0aGlzLT5ob3N0ID0gc2VsZjo6SFRUUF9ERUZBVUxUX0hPU1Q7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmdldEF1dGhvcml0eSgpID09PSAnJykgewogICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCR0aGlzLT5wYXRoLCAnLy8nKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBwYXRoIG9mIGEgVVJJIHdpdGhvdXQgYW4gYXV0aG9yaXR5IG11c3Qgbm90IHN0YXJ0IHdpdGggdHdvIHNsYXNoZXMgIi8vIicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkdGhpcy0+c2NoZW1lID09PSAnJyAmJiBmYWxzZSAhPT0gc3RycG9zKGV4cGxvZGUoJy8nLCAkdGhpcy0+cGF0aCwgMilbMF0sICc6JykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdBIHJlbGF0aXZlIFVSSSBtdXN0IG5vdCBoYXZlIGEgcGF0aCBiZWdpbm5pbmcgd2l0aCBhIHNlZ21lbnQgY29udGFpbmluZyBhIGNvbG9uJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPnBhdGhbMF0pICYmICR0aGlzLT5wYXRoWzBdICE9PSAnLycpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoCiAgICAgICAgICAgICAgICAnVGhlIHBhdGggb2YgYSBVUkkgd2l0aCBhbiBhdXRob3JpdHkgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2ggIi8iIG9yIGJlIGVtcHR5LiBBdXRvbWFnaWNhbGx5IGZpeGluZyB0aGUgVVJJICcgLgogICAgICAgICAgICAgICAgJ2J5IGFkZGluZyBhIGxlYWRpbmcgc2xhc2ggdG8gdGhlIHBhdGggaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuNCBhbmQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4nLAogICAgICAgICAgICAgICAgRV9VU0VSX0RFUFJFQ0FURUQKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHRoaXMtPnBhdGggPSAnLycuICR0aGlzLT5wYXRoOwogICAgICAgICAgICAvL3Rocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgcGF0aCBvZiBhIFVSSSB3aXRoIGFuIGF1dGhvcml0eSBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCAiLyIgb3IgYmUgZW1wdHknKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriNormalizer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIG5vcm1hbGl6ZSBhbmQgY29tcGFyZSBVUklzLgogKgogKiBAYXV0aG9yIFRvYmlhcyBTY2h1bHR6ZQogKgogKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYKICovCmZpbmFsIGNsYXNzIFVyaU5vcm1hbGl6ZXIKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IG5vcm1hbGl6YXRpb25zIHdoaWNoIG9ubHkgaW5jbHVkZSB0aGUgb25lcyB0aGF0IHByZXNlcnZlIHNlbWFudGljcy4KICAgICAqCiAgICAgKiBzZWxmOjpDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcgfCBzZWxmOjpERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTIHwgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIIHwKICAgICAqIHNlbGY6OlJFTU9WRV9ERUZBVUxUX0hPU1QgfCBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUIHwgc2VsZjo6UkVNT1ZFX0RPVF9TRUdNRU5UUwogICAgICovCiAgICBjb25zdCBQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TID0gNjM7CgogICAgLyoqCiAgICAgKiBBbGwgbGV0dGVycyB3aXRoaW4gYSBwZXJjZW50LWVuY29kaW5nIHRyaXBsZXQgKGUuZy4sICIlM0EiKSBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHNob3VsZCBiZSBjYXBpdGFsaXplZC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvYSVjMiViMWIg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9hJUMyJUIxYgogICAgICovCiAgICBjb25zdCBDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcgPSAxOwoKICAgIC8qKgogICAgICogRGVjb2RlcyBwZXJjZW50LWVuY29kZWQgb2N0ZXRzIG9mIHVucmVzZXJ2ZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBGb3IgY29uc2lzdGVuY3ksIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgaW4gdGhlIHJhbmdlcyBvZiBBTFBIQSAoJTQx4oCTJTVBIGFuZCAlNjHigJMlN0EpLCBESUdJVCAoJTMw4oCTJTM5KSwKICAgICAqIGh5cGhlbiAoJTJEKSwgcGVyaW9kICglMkUpLCB1bmRlcnNjb3JlICglNUYpLCBvciB0aWxkZSAoJTdFKSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgYnkgVVJJIHByb2R1Y2VycyBhbmQsCiAgICAgKiB3aGVuIGZvdW5kIGluIGEgVVJJLCBzaG91bGQgYmUgZGVjb2RlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBieSBVUkkgbm9ybWFsaXplcnMuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLyU3RXVzZXJuJTYxbWUvIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvfnVzZXJuYW1lLwogICAgICovCiAgICBjb25zdCBERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTID0gMjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBlbXB0eSBwYXRoIHRvICIvIiBmb3IgaHR0cCBhbmQgaHR0cHMgVVJJcy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy8KICAgICAqLwogICAgY29uc3QgQ09OVkVSVF9FTVBUWV9QQVRIID0gNDsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGRlZmF1bHQgaG9zdCBvZiB0aGUgZ2l2ZW4gVVJJIHNjaGVtZSBmcm9tIHRoZSBVUkkuCiAgICAgKgogICAgICogT25seSB0aGUgImZpbGUiIHNjaGVtZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGhvc3QgImxvY2FsaG9zdCIuCiAgICAgKiBBbGwgb2YgYGZpbGU6L215ZmlsZWAsIGBmaWxlOi8vL215ZmlsZWAsIGFuZCBgZmlsZTovL2xvY2FsaG9zdC9teWZpbGVgCiAgICAgKiBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuIFRoZSBmaXJzdCBmb3JtYXQgaXMgbm90IGFjY2VwdGVkCiAgICAgKiBieSBQSFBzIHN0cmVhbSBmdW5jdGlvbnMgYW5kIHRodXMgYWxyZWFkeSBub3JtYWxpemVkIGltcGxpY2l0bHkgdG8gdGhlCiAgICAgKiBzZWNvbmQgZm9ybWF0IGluIHRoZSBVcmkgY2xhc3MuIFNlZSBgR3V6emxlSHR0cFxQc3I3XFVyaTo6Y29tcG9zZUNvbXBvbmVudHNgLgogICAgICoKICAgICAqIEV4YW1wbGU6IGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlIOKGkiBmaWxlOi8vL215ZmlsZQogICAgICovCiAgICBjb25zdCBSRU1PVkVfREVGQVVMVF9IT1NUID0gODsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgZ2l2ZW4gVVJJIHNjaGVtZSBmcm9tIHRoZSBVUkkuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnOjgwLyDihpIgaHR0cDovL2V4YW1wbGUub3JnLwogICAgICovCiAgICBjb25zdCBSRU1PVkVfREVGQVVMVF9QT1JUID0gMTY7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHVubmVjZXNzYXJ5IGRvdC1zZWdtZW50cy4KICAgICAqCiAgICAgKiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgICogY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLy4uL2EvYi8uLi9jLy4vZC5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbAogICAgICovCiAgICBjb25zdCBSRU1PVkVfRE9UX1NFR01FTlRTID0gMzI7CgogICAgLyoqCiAgICAgKiBQYXRocyB3aGljaCBpbmNsdWRlIHR3byBvciBtb3JlIGFkamFjZW50IHNsYXNoZXMgYXJlIGNvbnZlcnRlZCB0byBvbmUuCiAgICAgKgogICAgICogV2Vic2VydmVycyB1c3VhbGx5IGlnbm9yZSBkdXBsaWNhdGUgc2xhc2hlcyBhbmQgdHJlYXQgdGhvc2UgVVJJcyBlcXVpdmFsZW50LgogICAgICogQnV0IGluIHRoZW9yeSB0aG9zZSBVUklzIGRvIG5vdCBuZWVkIHRvIGJlIGVxdWl2YWxlbnQuIFNvIHRoaXMgbm9ybWFsaXphdGlvbgogICAgICogbWF5IGNoYW5nZSB0aGUgc2VtYW50aWNzLiBFbmNvZGVkIHNsYXNoZXMgKCUyRikgYXJlIG5vdCByZW1vdmVkLgogICAgICoKICAgICAqIEV4YW1wbGU6IGh0dHA6Ly9leGFtcGxlLm9yZy8vZm9vLy8vYmFyLmh0bWwg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9mb28vYmFyLmh0bWwKICAgICAqLwogICAgY29uc3QgUkVNT1ZFX0RVUExJQ0FURV9TTEFTSEVTID0gNjQ7CgogICAgLyoqCiAgICAgKiBTb3J0IHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCB0aGVpciB2YWx1ZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgogICAgICoKICAgICAqIEhvd2V2ZXIsIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIGEgVVJJIG1heSBiZSBzaWduaWZpY2FudCAodGhpcyBpcyBub3QgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpLgogICAgICogU28gdGhpcyBub3JtYWxpemF0aW9uIGlzIG5vdCBzYWZlIGFuZCBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiA/bGFuZz1lbiZhcnRpY2xlPWZyZWQg4oaSID9hcnRpY2xlPWZyZWQmbGFuZz1lbgogICAgICoKICAgICAqIE5vdGU6IFRoZSBzb3J0aW5nIGlzIG5laXRoZXIgbG9jYWxlIG5vciBVbmljb2RlIGF3YXJlICh0aGUgVVJJIHF1ZXJ5IGRvZXMgbm90IGdldCBkZWNvZGVkIGF0IGFsbCkgYXMgdGhlCiAgICAgKiBwdXJwb3NlIGlzIHRvIGJlIGFibGUgdG8gY29tcGFyZSBVUklzIGluIGEgcmVwcm9kdWNpYmxlIHdheSwgbm90IHRvIGhhdmUgdGhlIHBhcmFtcyBzb3J0ZWQgcGVyZmVjdGx5LgogICAgICovCiAgICBjb25zdCBTT1JUX1FVRVJZX1BBUkFNRVRFUlMgPSAxMjg7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuCiAgICAgKgogICAgICogVGhlIHNjaGVtZSBhbmQgaG9zdCBjb21wb25lbnQgYXJlIGFscmVhZHkgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UgcGVyIFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqIFRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAkZmxhZ3MgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFBTUi03IFVyaUludGVyZmFjZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSBjb21wb25lbnQgYW5kIGEgbWlzc2luZyBjb21wb25lbnQgYXMKICAgICAqIGdldFF1ZXJ5KCksIGdldEZyYWdtZW50KCkgZXRjLiBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLiBUaGlzIG1lYW5zIHRoZSBVUklzICIvPyMiIGFuZCAiLyIgYXJlCiAgICAgKiB0cmVhdGVkIGVxdWl2YWxlbnQgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBCdXQgdGhhdCBkaWZmZXJlbmNlCiAgICAgKiBpcyBoaWdobHkgdW5jb21tb24gaW4gcmVhbGl0eS4gU28gdGhpcyBwb3RlbnRpYWwgbm9ybWFsaXphdGlvbiBpcyBpbXBsaWVkIGluIFBTUi03IGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpICAgVGhlIFVSSSB0byBub3JtYWxpemUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGZsYWdzIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlIFRoZSBub3JtYWxpemVkIFVSSQogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi02LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoVXJpSW50ZXJmYWNlICR1cmksICRmbGFncyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpCiAgICB7CiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OkNBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORykgewogICAgICAgICAgICAkdXJpID0gc2VsZjo6Y2FwaXRhbGl6ZVBlcmNlbnRFbmNvZGluZygkdXJpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTKSB7CiAgICAgICAgICAgICR1cmkgPSBzZWxmOjpkZWNvZGVVbnJlc2VydmVkQ2hhcmFjdGVycygkdXJpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpDT05WRVJUX0VNUFRZX1BBVEggJiYgJHVyaS0+Z2V0UGF0aCgpID09PSAnJyAmJgogICAgICAgICAgICAoJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdodHRwJyB8fCAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJ2h0dHBzJykKICAgICAgICApIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKCcvJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RFRkFVTFRfSE9TVCAmJiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJ2ZpbGUnICYmICR1cmktPmdldEhvc3QoKSA9PT0gJ2xvY2FsaG9zdCcpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhIb3N0KCcnKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUICYmICR1cmktPmdldFBvcnQoKSAhPT0gbnVsbCAmJiBVcmk6OmlzRGVmYXVsdFBvcnQoJHVyaSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KG51bGwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OlJFTU9WRV9ET1RfU0VHTUVOVFMgJiYgIVVyaTo6aXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UoJHVyaSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKFVyaVJlc29sdmVyOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfRFVQTElDQVRFX1NMQVNIRVMpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKHByZWdfcmVwbGFjZSgnIy8vKysjJywgJy8nLCAkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpTT1JUX1FVRVJZX1BBUkFNRVRFUlMgJiYgJHVyaS0+Z2V0UXVlcnkoKSAhPT0gJycpIHsKICAgICAgICAgICAgJHF1ZXJ5S2V5VmFsdWVzID0gZXhwbG9kZSgnJicsICR1cmktPmdldFF1ZXJ5KCkpOwogICAgICAgICAgICBzb3J0KCRxdWVyeUtleVZhbHVlcyk7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRxdWVyeUtleVZhbHVlcykpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHR3byBVUklzIGNhbiBiZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuCiAgICAgKgogICAgICogQm90aCBVUklzIGFyZSBub3JtYWxpemVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGNvbXBhcmlzb24gd2l0aCB0aGUgZ2l2ZW4gJG5vcm1hbGl6YXRpb25zIGJpdG1hc2suIFRoZSBtZXRob2QgYWxzbwogICAgICogYWNjZXB0cyByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyB0cnVlIHdoZW4gdGhleSBhcmUgZXF1aXZhbGVudC4gVGhpcyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGV5IHdpbGwgYmUKICAgICAqIHJlc29sdmVkIGFnYWluc3QgdGhlIHNhbWUgYmFzZSBVUkkuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBkZXRlcm1pbmF0aW9uIG9mIGVxdWl2YWxlbmNlIG9yIGRpZmZlcmVuY2Ugb2YKICAgICAqIHJlbGF0aXZlIHJlZmVyZW5jZXMgZG9lcyBub3QgbWVhbiBhbnl0aGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkxICAgICAgICAgICBBbiBVUkkgdG8gY29tcGFyZQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpMiAgICAgICAgICAgQW4gVVJJIHRvIGNvbXBhcmUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJG5vcm1hbGl6YXRpb25zIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi02LjEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnQoVXJpSW50ZXJmYWNlICR1cmkxLCBVcmlJbnRlcmZhY2UgJHVyaTIsICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6Om5vcm1hbGl6ZSgkdXJpMSwgJG5vcm1hbGl6YXRpb25zKSA9PT0gKHN0cmluZykgc2VsZjo6bm9ybWFsaXplKCR1cmkyLCAkbm9ybWFsaXphdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgJHJlZ2V4ID0gJy8oPzolW0EtRmEtZjAtOV17Mn0pKysvJzsKCiAgICAgICAgJGNhbGxiYWNrID0gZnVuY3Rpb24gKGFycmF5ICRtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gc3RydG91cHBlcigkbWF0Y2hbMF0pOwogICAgICAgIH07CgogICAgICAgIHJldHVybgogICAgICAgICAgICAkdXJpLT53aXRoUGF0aCgKICAgICAgICAgICAgICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXgsICRjYWxsYmFjaywgJHVyaS0+Z2V0UGF0aCgpKQogICAgICAgICAgICApLT53aXRoUXVlcnkoCiAgICAgICAgICAgICAgICBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4LCAkY2FsbGJhY2ssICR1cmktPmdldFF1ZXJ5KCkpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZENoYXJhY3RlcnMoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgJHJlZ2V4ID0gJy8lKD86MkR8MkV8NUZ8N0V8M1swLTldfFs0Nl1bMS05QS1GXXxbNTddWzAtOUFdKS9pJzsKCiAgICAgICAgJGNhbGxiYWNrID0gZnVuY3Rpb24gKGFycmF5ICRtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gcmF3dXJsZGVjb2RlKCRtYXRjaFswXSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICR1cmktPndpdGhQYXRoKAogICAgICAgICAgICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleCwgJGNhbGxiYWNrLCAkdXJpLT5nZXRQYXRoKCkpCiAgICAgICAgICAgICktPndpdGhRdWVyeSgKICAgICAgICAgICAgICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXgsICRjYWxsYmFjaywgJHVyaS0+Z2V0UXVlcnkoKSkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAvLyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/guzzlehttp/psr7/src/UriResolver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXNvbHZlcyBhIFVSSSByZWZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBiYXNlIFVSSSBhbmQgdGhlIG9wcG9zaXRlIHdheS4KICoKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICoKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01CiAqLwpmaW5hbCBjbGFzcyBVcmlSZXNvbHZlcgp7CiAgICAvKioKICAgICAqIFJlbW92ZXMgZG90IHNlZ21lbnRzIGZyb20gYSBwYXRoIGFuZCByZXR1cm5zIHRoZSBuZXcgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKCRwYXRoKQogICAgewogICAgICAgIGlmICgkcGF0aCA9PT0gJycgfHwgJHBhdGggPT09ICcvJykgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0cyA9IFtdOwogICAgICAgICRzZWdtZW50cyA9IGV4cGxvZGUoJy8nLCAkcGF0aCk7CiAgICAgICAgZm9yZWFjaCAoJHNlZ21lbnRzIGFzICRzZWdtZW50KSB7CiAgICAgICAgICAgIGlmICgkc2VnbWVudCA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRyZXN1bHRzKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRzZWdtZW50ICE9PSAnLicpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRzW10gPSAkc2VnbWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJG5ld1BhdGggPSBpbXBsb2RlKCcvJywgJHJlc3VsdHMpOwoKICAgICAgICBpZiAoJHBhdGhbMF0gPT09ICcvJyAmJiAoIWlzc2V0KCRuZXdQYXRoWzBdKSB8fCAkbmV3UGF0aFswXSAhPT0gJy8nKSkgewogICAgICAgICAgICAvLyBSZS1hZGQgdGhlIGxlYWRpbmcgc2xhc2ggaWYgbmVjZXNzYXJ5IGZvciBjYXNlcyBsaWtlICIvLi4iCiAgICAgICAgICAgICRuZXdQYXRoID0gJy8nIC4gJG5ld1BhdGg7CiAgICAgICAgfSBlbHNlaWYgKCRuZXdQYXRoICE9PSAnJyAmJiAoJHNlZ21lbnQgPT09ICcuJyB8fCAkc2VnbWVudCA9PT0gJy4uJykpIHsKICAgICAgICAgICAgLy8gQWRkIHRoZSB0cmFpbGluZyBzbGFzaCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgLy8gSWYgbmV3UGF0aCBpcyBub3QgZW1wdHksIHRoZW4gJHNlZ21lbnQgbXVzdCBiZSBzZXQgYW5kIGlzIHRoZSBsYXN0IHNlZ21lbnQgZnJvbSB0aGUgZm9yZWFjaAogICAgICAgICAgICAkbmV3UGF0aCAuPSAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld1BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkYmFzZSBCYXNlIFVSSQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkcmVsICBSZWxhdGl2ZSBVUkkKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmUoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHJlbCkKICAgIHsKICAgICAgICBpZiAoKHN0cmluZykgJHJlbCA9PT0gJycpIHsKICAgICAgICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYmFzZSBVUkkgaW5zdGFuY2UgZm9yIHRoaXMgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UKICAgICAgICAgICAgcmV0dXJuICRiYXNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZWwtPmdldFNjaGVtZSgpICE9ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVsLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkcmVsLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVsLT5nZXRBdXRob3JpdHkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJHJlbC0+Z2V0QXV0aG9yaXR5KCk7CiAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc2VsZjo6cmVtb3ZlRG90U2VnbWVudHMoJHJlbC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJGJhc2UtPmdldEF1dGhvcml0eSgpOwogICAgICAgICAgICBpZiAoJHJlbC0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSAkYmFzZS0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKSAhPSAnJyA/ICRyZWwtPmdldFF1ZXJ5KCkgOiAkYmFzZS0+Z2V0UXVlcnkoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkcmVsLT5nZXRQYXRoKClbMF0gPT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldEF1dGhvcml0eSAhPSAnJyAmJiAkYmFzZS0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICcvJyAuICRyZWwtPmdldFBhdGgoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdFNsYXNoUG9zID0gc3RycnBvcygkYmFzZS0+Z2V0UGF0aCgpLCAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGxhc3RTbGFzaFBvcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSBzdWJzdHIoJGJhc2UtPmdldFBhdGgoKSwgMCwgJGxhc3RTbGFzaFBvcyArIDEpIC4gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSBzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdGFyZ2V0UGF0aCk7CiAgICAgICAgICAgICAgICAkdGFyZ2V0UXVlcnkgPSAkcmVsLT5nZXRRdWVyeSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFVyaShVcmk6OmNvbXBvc2VDb21wb25lbnRzKAogICAgICAgICAgICAkYmFzZS0+Z2V0U2NoZW1lKCksCiAgICAgICAgICAgICR0YXJnZXRBdXRob3JpdHksCiAgICAgICAgICAgICR0YXJnZXRQYXRoLAogICAgICAgICAgICAkdGFyZ2V0UXVlcnksCiAgICAgICAgICAgICRyZWwtPmdldEZyYWdtZW50KCkKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBVUkkgYXMgYSByZWxhdGl2ZSByZWZlcmVuY2UgZnJvbSB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIHJlc29sdmUoKToKICAgICAqCiAgICAgKiAgICAoc3RyaW5nKSAkdGFyZ2V0ID09PSAoc3RyaW5nKSBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgkYmFzZSwgVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsICR0YXJnZXQpKQogICAgICoKICAgICAqIE9uZSB1c2UtY2FzZSBpcyB0byB1c2UgdGhlIGN1cnJlbnQgcmVxdWVzdCBVUkkgYXMgYmFzZSBVUkkgYW5kIHRoZW4gZ2VuZXJhdGUgcmVsYXRpdmUgbGlua3MgaW4geW91ciBkb2N1bWVudHMKICAgICAqIHRvIHJlZHVjZSB0aGUgZG9jdW1lbnQgc2l6ZSBvciBvZmZlciBzZWxmLWNvbnRhaW5lZCBkb3dubG9hZGFibGUgZG9jdW1lbnQgYXJjaGl2ZXMuCiAgICAgKgogICAgICogICAgJGJhc2UgPSBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLycpOwogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi9jJykpOyAgLy8gcHJpbnRzICdjJy4KICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL3gveScpKTsgIC8vIHByaW50cyAnLi4veC95Jy4KICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvP3EnKSk7IC8vIHByaW50cyAnP3EnLgogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUub3JnL2EvYi8nKSk7ICAgLy8gcHJpbnRzICcvL2V4YW1wbGUub3JnL2EvYi8nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsc28gYWNjZXB0cyBhIHRhcmdldCB0aGF0IGlzIGFscmVhZHkgcmVsYXRpdmUgYW5kIHdpbGwgdHJ5IHRvIHJlbGF0aXZpemUgaXQgZnVydGhlci4gT25seSBhCiAgICAgKiByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZSB3aWxsIGJlIHJldHVybmVkIGFzLWlzLgogICAgICoKICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJy9hL2IvYycpKTsgIC8vIHByaW50cyAnYycgYXMgd2VsbAogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJGJhc2UgICBCYXNlIFVSSQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdGFyZ2V0IFRhcmdldCBVUkkKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZSBUaGUgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemUoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHRhcmdldCkKICAgIHsKICAgICAgICBpZiAoJHRhcmdldC0+Z2V0U2NoZW1lKCkgIT09ICcnICYmCiAgICAgICAgICAgICgkYmFzZS0+Z2V0U2NoZW1lKCkgIT09ICR0YXJnZXQtPmdldFNjaGVtZSgpIHx8ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpID09PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICcnKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgICAgICB9CgogICAgICAgIGlmIChVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgIC8vIEFzIHRoZSB0YXJnZXQgaXMgYWxyZWFkeSBoaWdobHkgcmVsYXRpdmUgd2UgcmV0dXJuIGl0IGFzLWlzLiBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byByZXNvbHZlCiAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgd2l0aCBgJHRhcmdldCA9IHNlbGY6OnJlc29sdmUoJGJhc2UsICR0YXJnZXQpO2AgYW5kIHRoZW4gdHJ5IG1ha2UgaXQgbW9yZSByZWxhdGl2ZQogICAgICAgICAgICAvLyBieSByZW1vdmluZyBhIGR1cGxpY2F0ZSBxdWVyeS4gQnV0IGxldCdzIG5vdCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0YXJnZXQtPmdldEF1dGhvcml0eSgpICE9PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5IGJlY2F1c2UgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggdHdvIHNsYXNoZXMsIHRoZSBVUkkKICAgICAgICAvLyB3b3VsZCB0dXJuIGludmFsaWQuIEFuZCB3ZSBhbHNvIGNhbm5vdCBzZXQgYSByZWxhdGl2ZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5LCBhcyB0aGF0IGlzIGFsc28KICAgICAgICAvLyBpbnZhbGlkLgogICAgICAgICRlbXB0eVBhdGhVcmkgPSAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKS0+d2l0aFBhdGgoJycpLT53aXRoVXNlckluZm8oJycpLT53aXRoUG9ydChudWxsKS0+d2l0aEhvc3QoJycpOwoKICAgICAgICBpZiAoJGJhc2UtPmdldFBhdGgoKSAhPT0gJHRhcmdldC0+Z2V0UGF0aCgpKSB7CiAgICAgICAgICAgIHJldHVybiAkZW1wdHlQYXRoVXJpLT53aXRoUGF0aChzZWxmOjpnZXRSZWxhdGl2ZVBhdGgoJGJhc2UsICR0YXJnZXQpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmFzZS0+Z2V0UXVlcnkoKSA9PT0gJHRhcmdldC0+Z2V0UXVlcnkoKSkgewogICAgICAgICAgICAvLyBPbmx5IHRoZSB0YXJnZXQgZnJhZ21lbnQgaXMgbGVmdC4gQW5kIGl0IG11c3QgYmUgcmV0dXJuZWQgZXZlbiBpZiBiYXNlIGFuZCB0YXJnZXQgZnJhZ21lbnQgYXJlIHRoZSBzYW1lLgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFF1ZXJ5KCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBiYXNlIFVSSSBoYXMgYSBxdWVyeSBidXQgdGhlIHRhcmdldCBoYXMgbm9uZSwgd2UgY2Fubm90IHJldHVybiBhbiBlbXB0eSBwYXRoIHJlZmVyZW5jZSBhcyBpdCB3b3VsZAogICAgICAgIC8vIGluaGVyaXQgdGhlIGJhc2UgcXVlcnkgY29tcG9uZW50IHdoZW4gcmVzb2x2aW5nLgogICAgICAgIGlmICgkdGFyZ2V0LT5nZXRRdWVyeSgpID09PSAnJykgewogICAgICAgICAgICAkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJHRhcmdldC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgJGxhc3RTZWdtZW50ID0gZW5kKCRzZWdtZW50cyk7CgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFBhdGgoJGxhc3RTZWdtZW50ID09PSAnJyA/ICcuLycgOiAkbGFzdFNlZ21lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbXB0eVBhdGhVcmk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpCiAgICB7CiAgICAgICAgJHNvdXJjZVNlZ21lbnRzID0gZXhwbG9kZSgnLycsICRiYXNlLT5nZXRQYXRoKCkpOwogICAgICAgICR0YXJnZXRTZWdtZW50cyA9IGV4cGxvZGUoJy8nLCAkdGFyZ2V0LT5nZXRQYXRoKCkpOwogICAgICAgIGFycmF5X3BvcCgkc291cmNlU2VnbWVudHMpOwogICAgICAgICR0YXJnZXRMYXN0U2VnbWVudCA9IGFycmF5X3BvcCgkdGFyZ2V0U2VnbWVudHMpOwogICAgICAgIGZvcmVhY2ggKCRzb3VyY2VTZWdtZW50cyBhcyAkaSA9PiAkc2VnbWVudCkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRhcmdldFNlZ21lbnRzWyRpXSkgJiYgJHNlZ21lbnQgPT09ICR0YXJnZXRTZWdtZW50c1skaV0pIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRzb3VyY2VTZWdtZW50c1skaV0sICR0YXJnZXRTZWdtZW50c1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRhcmdldFNlZ21lbnRzW10gPSAkdGFyZ2V0TGFzdFNlZ21lbnQ7CiAgICAgICAgJHJlbGF0aXZlUGF0aCA9IHN0cl9yZXBlYXQoJy4uLycsIGNvdW50KCRzb3VyY2VTZWdtZW50cykpIC4gaW1wbG9kZSgnLycsICR0YXJnZXRTZWdtZW50cyk7CgogICAgICAgIC8vIEEgcmVmZXJlbmNlIHRvIGFtIGVtcHR5IGxhc3Qgc2VnbWVudCBvciBhbiBlbXB0eSBmaXJzdCBzdWItc2VnbWVudCBtdXN0IGJlIHByZWZpeGVkIHdpdGggIi4vIi4KICAgICAgICAvLyBUaGlzIGFsc28gYXBwbGllcyB0byBhIHNlZ21lbnQgd2l0aCBhIGNvbG9uIGNoYXJhY3RlciAoZS5nLiwgImZpbGU6Y29sb24iKSB0aGF0IGNhbm5vdCBiZSB1c2VkCiAgICAgICAgLy8gYXMgdGhlIGZpcnN0IHNlZ21lbnQgb2YgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZSwgYXMgaXQgd291bGQgYmUgbWlzdGFrZW4gZm9yIGEgc2NoZW1lIG5hbWUuCiAgICAgICAgaWYgKCcnID09PSAkcmVsYXRpdmVQYXRoIHx8IGZhbHNlICE9PSBzdHJwb3MoZXhwbG9kZSgnLycsICRyZWxhdGl2ZVBhdGgsIDIpWzBdLCAnOicpKSB7CiAgICAgICAgICAgICRyZWxhdGl2ZVBhdGggPSAiLi8kcmVsYXRpdmVQYXRoIjsKICAgICAgICB9IGVsc2VpZiAoJy8nID09PSAkcmVsYXRpdmVQYXRoWzBdKSB7CiAgICAgICAgICAgIGlmICgkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT0gJycgJiYgJGJhc2UtPmdldFBhdGgoKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBhbiBleHRyYSBzbGFzaCBpcyBhZGRlZCBieSByZXNvbHZlKCkgYXV0b21hdGljYWxseS4gU28gd2UgbXVzdCBub3QgYWRkIG9uZSBoZXJlLgogICAgICAgICAgICAgICAgJHJlbGF0aXZlUGF0aCA9ICIuJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVsYXRpdmVQYXRoID0gIi4vJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVsYXRpdmVQYXRoOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIC8vIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogIm1pbmlzaGxpbmsvd2ViLXB1c2giLAogICJ0eXBlIjogImxpYnJhcnkiLAogICJkZXNjcmlwdGlvbiI6ICJXZWIgUHVzaCBsaWJyYXJ5IGZvciBQSFAiLAogICJrZXl3b3JkcyI6IFsicHVzaCIsICJub3RpZmljYXRpb25zIiwgIndlYiIsICJXZWJQdXNoIiwgIlB1c2ggQVBJIl0sCiAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcHVzaC1saWJzL3dlYi1wdXNoLXBocCIsCiAgImxpY2Vuc2UiOiAiTUlUIiwKICAiYXV0aG9ycyI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiTG91aXMgTGFncmFuZ2UiLAogICAgICAiZW1haWwiOiAibGFncmFuZ2UubG91aXNAZ21haWwuY29tIiwKICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9NaW5pc2hsaW5rIgogICAgfQogIF0sCiAgInNjcmlwdHMiOiB7CiAgICAidGVzdDp1bml0IjogIi4vdmVuZG9yL2Jpbi9waHB1bml0IC0tY29sb3IiLAogICAgInRlc3Q6dHlwaW5nIjogIi4vdmVuZG9yL2Jpbi9waHBzdGFuIGFuYWx5c2UgLS1sZXZlbCBtYXggc3JjIiwKICAgICJ0ZXN0OnN5bnRheCI6ICIuL3ZlbmRvci9iaW4vcGhwLWNzLWZpeGVyIGZpeCAuL3NyYyAtLWRyeS1ydW4gLS1zdG9wLW9uLXZpb2xhdGlvbiAtLXVzaW5nLWNhY2hlPW5vIgogIH0sCiAgInJlcXVpcmUiOiB7CiAgICAicGhwIjogIl43LjEiLAogICAgImV4dC1qc29uIjogIioiLAogICAgImV4dC1nbXAiOiAiKiIsCiAgICAibGliLW9wZW5zc2wiOiAiKiIsCiAgICAiZ3V6emxlaHR0cC9ndXp6bGUiOiAiXjYuMiIsCiAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMCIsCiAgICAid2ViLXRva2VuL2p3dC1rZXktbWdtdCI6ICJeMS4wIgogIH0sCiAgInJlcXVpcmUtZGV2IjogewogICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy4wIiwKICAgICJwaHBzdGFuL3BocHN0YW4iOiAiXjAuMTEiLAogICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAiXjIuMTQiCiAgfSwKICAiYXV0b2xvYWQiOiB7CiAgICAicHNyLTQiIDogewogICAgICAiTWluaXNobGlua1xcV2ViUHVzaFxcIiA6ICJzcmMiCiAgICB9CiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE1IExvdWlzIExhZ3JhbmdlCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/Encryption.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2NcTmlzdEN1cnZlOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxVdGlsXEVjY1xQb2ludDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2NcUHJpdmF0ZUtleTsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2NcUHVibGljS2V5OwoKY2xhc3MgRW5jcnlwdGlvbgp7CiAgICBwdWJsaWMgY29uc3QgTUFYX1BBWUxPQURfTEVOR1RIID0gNDA3ODsKICAgIHB1YmxpYyBjb25zdCBNQVhfQ09NUEFUSUJJTElUWV9QQVlMT0FEX0xFTkdUSCA9IDMwNTI7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXlsb2FkCiAgICAgKiBAcGFyYW0gaW50ICRtYXhMZW5ndGhUb1BhZAogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudEVuY29kaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZyBwYWRkZWQgcGF5bG9hZCAocGxhaW50ZXh0KQogICAgICogQHRocm93cyBcRXJyb3JFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYWRQYXlsb2FkKHN0cmluZyAkcGF5bG9hZCwgaW50ICRtYXhMZW5ndGhUb1BhZCwgc3RyaW5nICRjb250ZW50RW5jb2RpbmcpOiBzdHJpbmcKICAgIHsKICAgICAgICAkcGF5bG9hZExlbiA9IFV0aWxzOjpzYWZlU3RybGVuKCRwYXlsb2FkKTsKICAgICAgICAkcGFkTGVuID0gJG1heExlbmd0aFRvUGFkID8gJG1heExlbmd0aFRvUGFkIC0gJHBheWxvYWRMZW4gOiAwOwoKICAgICAgICBpZiAoJGNvbnRlbnRFbmNvZGluZyA9PT0gImFlc2djbSIpIHsKICAgICAgICAgICAgcmV0dXJuIHBhY2soJ24qJywgJHBhZExlbikuc3RyX3BhZCgkcGF5bG9hZCwgJHBhZExlbiArICRwYXlsb2FkTGVuLCBjaHIoMCksIFNUUl9QQURfTEVGVCk7CiAgICAgICAgfSBlbHNlaWYgKCRjb250ZW50RW5jb2RpbmcgPT09ICJhZXMxMjhnY20iKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJfcGFkKCRwYXlsb2FkLmNocigyKSwgJHBhZExlbiArICRwYXlsb2FkTGVuLCBjaHIoMCksIFNUUl9QQURfUklHSFQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oIlRoaXMgY29udGVudCBlbmNvZGluZyBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF5bG9hZCBXaXRoIHBhZGRpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVzZXJQdWJsaWNLZXkgQmFzZSA2NCBlbmNvZGVkIChNSU1FIG9yIFVSTC1zYWZlKQogICAgICogQHBhcmFtIHN0cmluZyAkdXNlckF1dGhUb2tlbiBCYXNlIDY0IGVuY29kZWQgKE1JTUUgb3IgVVJMLXNhZmUpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50RW5jb2RpbmcKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY3J5cHQoc3RyaW5nICRwYXlsb2FkLCBzdHJpbmcgJHVzZXJQdWJsaWNLZXksIHN0cmluZyAkdXNlckF1dGhUb2tlbiwgc3RyaW5nICRjb250ZW50RW5jb2RpbmcpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpkZXRlcm1pbmlzdGljRW5jcnlwdCgKICAgICAgICAgICAgJHBheWxvYWQsCiAgICAgICAgICAgICR1c2VyUHVibGljS2V5LAogICAgICAgICAgICAkdXNlckF1dGhUb2tlbiwKICAgICAgICAgICAgJGNvbnRlbnRFbmNvZGluZywKICAgICAgICAgICAgc2VsZjo6Y3JlYXRlTG9jYWxLZXlPYmplY3QoKSwKICAgICAgICAgICAgcmFuZG9tX2J5dGVzKDE2KQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXlsb2FkCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyUHVibGljS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyQXV0aFRva2VuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50RW5jb2RpbmcKICAgICAqIEBwYXJhbSBhcnJheSAkbG9jYWxLZXlPYmplY3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbHQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRldGVybWluaXN0aWNFbmNyeXB0KHN0cmluZyAkcGF5bG9hZCwgc3RyaW5nICR1c2VyUHVibGljS2V5LCBzdHJpbmcgJHVzZXJBdXRoVG9rZW4sIHN0cmluZyAkY29udGVudEVuY29kaW5nLCBhcnJheSAkbG9jYWxLZXlPYmplY3QsIHN0cmluZyAkc2FsdCk6IGFycmF5CiAgICB7CiAgICAgICAgJHVzZXJQdWJsaWNLZXkgPSBCYXNlNjRVcmw6OmRlY29kZSgkdXNlclB1YmxpY0tleSk7CiAgICAgICAgJHVzZXJBdXRoVG9rZW4gPSBCYXNlNjRVcmw6OmRlY29kZSgkdXNlckF1dGhUb2tlbik7CgogICAgICAgICRjdXJ2ZSA9IE5pc3RDdXJ2ZTo6Y3VydmUyNTYoKTsKCiAgICAgICAgLy8gZ2V0IGxvY2FsIGtleSBwYWlyCiAgICAgICAgbGlzdCgkbG9jYWxQdWJsaWNLZXlPYmplY3QsICRsb2NhbFByaXZhdGVLZXlPYmplY3QpID0gJGxvY2FsS2V5T2JqZWN0OwogICAgICAgICRsb2NhbFB1YmxpY0tleSA9IGhleDJiaW4oVXRpbHM6OnNlcmlhbGl6ZVB1YmxpY0tleSgkbG9jYWxQdWJsaWNLZXlPYmplY3QpKTsKICAgICAgICBpZiAoISRsb2NhbFB1YmxpY0tleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdGYWlsZWQgdG8gY29udmVydCBsb2NhbCBwdWJsaWMga2V5IGZyb20gaGV4YWRlY2ltYWwgdG8gYmluYXJ5Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBnZXQgdXNlciBwdWJsaWMga2V5IG9iamVjdAogICAgICAgIFskdXNlclB1YmxpY0tleU9iamVjdFgsICR1c2VyUHVibGljS2V5T2JqZWN0WV0gPSBVdGlsczo6dW5zZXJpYWxpemVQdWJsaWNLZXkoJHVzZXJQdWJsaWNLZXkpOwogICAgICAgICR1c2VyUHVibGljS2V5T2JqZWN0ID0gJGN1cnZlLT5nZXRQdWJsaWNLZXlGcm9tKAogICAgICAgICAgICBnbXBfaW5pdChiaW4yaGV4KCR1c2VyUHVibGljS2V5T2JqZWN0WCksIDE2KSwKICAgICAgICAgICAgZ21wX2luaXQoYmluMmhleCgkdXNlclB1YmxpY0tleU9iamVjdFkpLCAxNikKICAgICAgICApOwoKICAgICAgICAvLyBnZXQgc2hhcmVkIHNlY3JldCBmcm9tIHVzZXIgcHVibGljIGtleSBhbmQgbG9jYWwgcHJpdmF0ZSBrZXkKICAgICAgICAkc2hhcmVkU2VjcmV0ID0gJGN1cnZlLT5tdWwoJHVzZXJQdWJsaWNLZXlPYmplY3QtPmdldFBvaW50KCksICRsb2NhbFByaXZhdGVLZXlPYmplY3QtPmdldFNlY3JldCgpKS0+Z2V0WCgpOwogICAgICAgICRzaGFyZWRTZWNyZXQgPSBoZXgyYmluKHN0cl9wYWQoZ21wX3N0cnZhbCgkc2hhcmVkU2VjcmV0LCAxNiksIDY0LCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgIGlmICghJHNoYXJlZFNlY3JldCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdGYWlsZWQgdG8gY29udmVydCBzaGFyZWQgc2VjcmV0IGZyb20gaGV4YWRlY2ltYWwgdG8gYmluYXJ5Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBzZWN0aW9uIDQuMwogICAgICAgICRpa20gPSBzZWxmOjpnZXRJS00oJHVzZXJBdXRoVG9rZW4sICR1c2VyUHVibGljS2V5LCAkbG9jYWxQdWJsaWNLZXksICRzaGFyZWRTZWNyZXQsICRjb250ZW50RW5jb2RpbmcpOwoKICAgICAgICAvLyBzZWN0aW9uIDQuMgogICAgICAgICRjb250ZXh0ID0gc2VsZjo6Y3JlYXRlQ29udGV4dCgkdXNlclB1YmxpY0tleSwgJGxvY2FsUHVibGljS2V5LCAkY29udGVudEVuY29kaW5nKTsKCiAgICAgICAgLy8gZGVyaXZlIHRoZSBDb250ZW50IEVuY3J5cHRpb24gS2V5CiAgICAgICAgJGNvbnRlbnRFbmNyeXB0aW9uS2V5SW5mbyA9IHNlbGY6OmNyZWF0ZUluZm8oJGNvbnRlbnRFbmNvZGluZywgJGNvbnRleHQsICRjb250ZW50RW5jb2RpbmcpOwogICAgICAgICRjb250ZW50RW5jcnlwdGlvbktleSA9IHNlbGY6OmhrZGYoJHNhbHQsICRpa20sICRjb250ZW50RW5jcnlwdGlvbktleUluZm8sIDE2KTsKCiAgICAgICAgLy8gc2VjdGlvbiAzLjMsIGRlcml2ZSB0aGUgbm9uY2UKICAgICAgICAkbm9uY2VJbmZvID0gc2VsZjo6Y3JlYXRlSW5mbygnbm9uY2UnLCAkY29udGV4dCwgJGNvbnRlbnRFbmNvZGluZyk7CiAgICAgICAgJG5vbmNlID0gc2VsZjo6aGtkZigkc2FsdCwgJGlrbSwgJG5vbmNlSW5mbywgMTIpOwoKICAgICAgICAvLyBlbmNyeXB0CiAgICAgICAgLy8gIlRoZSBhZGRpdGlvbmFsIGRhdGEgcGFzc2VkIHRvIGVhY2ggaW52b2NhdGlvbiBvZiBBRUFEX0FFU18xMjhfR0NNIGlzIGEgemVyby1sZW5ndGggb2N0ZXQgc2VxdWVuY2UuIgogICAgICAgICR0YWcgPSAnJzsKICAgICAgICAkZW5jcnlwdGVkVGV4dCA9IG9wZW5zc2xfZW5jcnlwdCgkcGF5bG9hZCwgJ2Flcy0xMjgtZ2NtJywgJGNvbnRlbnRFbmNyeXB0aW9uS2V5LCBPUEVOU1NMX1JBV19EQVRBLCAkbm9uY2UsICR0YWcpOwoKICAgICAgICAvLyByZXR1cm4gdmFsdWVzIGluIHVybCBzYWZlIGJhc2U2NAogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdsb2NhbFB1YmxpY0tleScgPT4gJGxvY2FsUHVibGljS2V5LAogICAgICAgICAgICAnc2FsdCcgPT4gJHNhbHQsCiAgICAgICAgICAgICdjaXBoZXJUZXh0JyA9PiAkZW5jcnlwdGVkVGV4dC4kdGFnLAogICAgICAgIF07CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb250ZW50Q29kaW5nSGVhZGVyKCRzYWx0LCAkbG9jYWxQdWJsaWNLZXksICRjb250ZW50RW5jb2RpbmcpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoJGNvbnRlbnRFbmNvZGluZyA9PT0gImFlczEyOGdjbSIpIHsKICAgICAgICAgICAgcmV0dXJuICRzYWx0CiAgICAgICAgICAgICAgICAucGFjaygnTionLCA0MDk2KQogICAgICAgICAgICAgICAgLnBhY2soJ0MqJywgVXRpbHM6OnNhZmVTdHJsZW4oJGxvY2FsUHVibGljS2V5KSkKICAgICAgICAgICAgICAgIC4kbG9jYWxQdWJsaWNLZXk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBITUFDLWJhc2VkIEV4dHJhY3QtYW5kLUV4cGFuZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAoSEtERikuCiAgICAgKgogICAgICogVGhpcyBpcyB1c2VkIHRvIGRlcml2ZSBhIHNlY3VyZSBlbmNyeXB0aW9uIGtleSBmcm9tIGEgbW9zdGx5LXNlY3VyZSBzaGFyZWQKICAgICAqIHNlY3JldC4KICAgICAqCiAgICAgKiBUaGlzIGlzIGEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBIS0RGIHRhaWxvcmVkIHRvIG91ciBzcGVjaWZpYyBwdXJwb3Nlcy4KICAgICAqIEluIHBhcnRpY3VsYXIsIGZvciB1cyB0aGUgdmFsdWUgb2YgTiB3aWxsIGFsd2F5cyBiZSAxLCBhbmQgdGh1cyBUIGFsd2F5cwogICAgICogZXF1YWxzIEhNQUMtSGFzaChQUkssIGluZm8gfCAweDAxKS4KICAgICAqCiAgICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1ODY5LnR4dH0KICAgICAqIEZyb20ge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvcHVzaC1lbmNyeXB0aW9uLW5vZGUvYmxvYi9tYXN0ZXIvc3JjL2VuY3J5cHQuanN9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2FsdCAgIEEgbm9uLXNlY3JldCByYW5kb20gdmFsdWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlrbSAgICBJbnB1dCBrZXlpbmcgbWF0ZXJpYWwKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluZm8gICBBcHBsaWNhdGlvbi1zcGVjaWZpYyBjb250ZXh0CiAgICAgKiBAcGFyYW0gaW50ICAgICRsZW5ndGggVGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSByZXF1aXJlZCBvdXRwdXQga2V5CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaGtkZihzdHJpbmcgJHNhbHQsIHN0cmluZyAkaWttLCBzdHJpbmcgJGluZm8sIGludCAkbGVuZ3RoKTogc3RyaW5nCiAgICB7CiAgICAgICAgLy8gZXh0cmFjdAogICAgICAgICRwcmsgPSBoYXNoX2htYWMoJ3NoYTI1NicsICRpa20sICRzYWx0LCB0cnVlKTsKCiAgICAgICAgLy8gZXhwYW5kCiAgICAgICAgcmV0dXJuIG1iX3N1YnN0cihoYXNoX2htYWMoJ3NoYTI1NicsICRpbmZvLmNocigxKSwgJHByaywgdHJ1ZSksIDAsICRsZW5ndGgsICc4Yml0Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgY29udGV4dCBmb3IgZGVyaXZpbmcgZW5jcnlwdGlvbiBwYXJhbWV0ZXJzLgogICAgICogU2VlIHNlY3Rpb24gNC4yIG9mCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1lbmNyeXB0aW9uLWVuY29kaW5nLTAwfQogICAgICogRnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS9wdXNoLWVuY3J5cHRpb24tbm9kZS9ibG9iL21hc3Rlci9zcmMvZW5jcnlwdC5qc30uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xpZW50UHVibGljS2V5IFRoZSBjbGllbnQncyBwdWJsaWMga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJQdWJsaWNLZXkgT3VyIHB1YmxpYyBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nCiAgICAgKgogICAgICogQHRocm93cyBcRXJyb3JFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChzdHJpbmcgJGNsaWVudFB1YmxpY0tleSwgc3RyaW5nICRzZXJ2ZXJQdWJsaWNLZXksICRjb250ZW50RW5jb2RpbmcpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCRjb250ZW50RW5jb2RpbmcgPT09ICJhZXMxMjhnY20iKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKFV0aWxzOjpzYWZlU3RybGVuKCRjbGllbnRQdWJsaWNLZXkpICE9PSA2NSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdJbnZhbGlkIGNsaWVudCBwdWJsaWMga2V5IGxlbmd0aCcpOwogICAgICAgIH0KCiAgICAgICAgLy8gVGhpcyBvbmUgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYmVjYXVzZSBpdCdzIG91ciBjb2RlIHRoYXQgZ2VuZXJhdGVzIHRoZSBrZXkKICAgICAgICBpZiAoVXRpbHM6OnNhZmVTdHJsZW4oJHNlcnZlclB1YmxpY0tleSkgIT09IDY1KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ0ludmFsaWQgc2VydmVyIHB1YmxpYyBrZXkgbGVuZ3RoJyk7CiAgICAgICAgfQoKICAgICAgICAkbGVuID0gY2hyKDApLidBJzsgLy8gNjUgYXMgVWludDE2QkUKCiAgICAgICAgcmV0dXJuIGNocigwKS4kbGVuLiRjbGllbnRQdWJsaWNLZXkuJGxlbi4kc2VydmVyUHVibGljS2V5OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbmZvIHJlY29yZC4gU2VlIHNlY3Rpb25zIDMuMiBhbmQgMy4zIG9mCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1lbmNyeXB0aW9uLWVuY29kaW5nLTAwfQogICAgICogRnJvbSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS9wdXNoLWVuY3J5cHRpb24tbm9kZS9ibG9iL21hc3Rlci9zcmMvZW5jcnlwdC5qc30uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSBUaGUgdHlwZSBvZiB0aGUgaW5mbyByZWNvcmQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY29udGV4dCBUaGUgY29udGV4dCBmb3IgdGhlIHJlY29yZAogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudEVuY29kaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUluZm8oc3RyaW5nICR0eXBlLCA/c3RyaW5nICRjb250ZXh0LCBzdHJpbmcgJGNvbnRlbnRFbmNvZGluZyk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkY29udGVudEVuY29kaW5nID09PSAiYWVzZ2NtIikgewogICAgICAgICAgICBpZiAoISRjb250ZXh0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdDb250ZXh0IG11c3QgZXhpc3QnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKFV0aWxzOjpzYWZlU3RybGVuKCRjb250ZXh0KSAhPT0gMTM1KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdDb250ZXh0IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHNpemUnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICdDb250ZW50LUVuY29kaW5nOiAnLiR0eXBlLmNocigwKS4nUC0yNTYnLiRjb250ZXh0OwogICAgICAgIH0gZWxzZWlmICgkY29udGVudEVuY29kaW5nID09PSAiYWVzMTI4Z2NtIikgewogICAgICAgICAgICByZXR1cm4gJ0NvbnRlbnQtRW5jb2Rpbmc6ICcuJHR5cGUuY2hyKDApOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbignVGhpcyBjb250ZW50IGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQuJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsS2V5T2JqZWN0KCk6IGFycmF5CiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUxvY2FsS2V5T2JqZWN0VXNpbmdPcGVuU1NMKCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlTG9jYWxLZXlPYmplY3RVc2luZ1B1cmVQaHBNZXRob2QoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsS2V5T2JqZWN0VXNpbmdQdXJlUGhwTWV0aG9kKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGN1cnZlID0gTmlzdEN1cnZlOjpjdXJ2ZTI1NigpOwogICAgICAgICRwcml2YXRlS2V5ID0gJGN1cnZlLT5jcmVhdGVQcml2YXRlS2V5KCk7CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICRjdXJ2ZS0+Y3JlYXRlUHVibGljS2V5KCRwcml2YXRlS2V5KSwKICAgICAgICAgICAgJHByaXZhdGVLZXksCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlTG9jYWxLZXlPYmplY3RVc2luZ09wZW5TU0woKTogYXJyYXkKICAgIHsKICAgICAgICAka2V5UmVzb3VyY2UgPSBvcGVuc3NsX3BrZXlfbmV3KFsKICAgICAgICAgICAgJ2N1cnZlX25hbWUnICAgICAgID0+ICdwcmltZTI1NnYxJywKICAgICAgICAgICAgJ3ByaXZhdGVfa2V5X3R5cGUnID0+IE9QRU5TU0xfS0VZVFlQRV9FQywKICAgICAgICBdKTsKCiAgICAgICAgaWYgKCEka2V5UmVzb3VyY2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gY3JlYXRlIHRoZSBrZXknKTsKICAgICAgICB9CgogICAgICAgICRkZXRhaWxzID0gb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRrZXlSZXNvdXJjZSk7CiAgICAgICAgb3BlbnNzbF9wa2V5X2ZyZWUoJGtleVJlc291cmNlKTsKCiAgICAgICAgaWYgKCEkZGV0YWlscykgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQgdGhlIGtleSBkZXRhaWxzJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBQdWJsaWNLZXk6OmNyZWF0ZShQb2ludDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgZ21wX2luaXQoYmluMmhleCgkZGV0YWlsc1snZWMnXVsneCddKSwgMTYpLAogICAgICAgICAgICAgICAgZ21wX2luaXQoYmluMmhleCgkZGV0YWlsc1snZWMnXVsneSddKSwgMTYpCiAgICAgICAgICAgICkpLAogICAgICAgICAgICBQcml2YXRlS2V5OjpjcmVhdGUoZ21wX2luaXQoYmluMmhleCgkZGV0YWlsc1snZWMnXVsnZCddKSwgMTYpKQogICAgICAgIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyQXV0aFRva2VuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyUHVibGljS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbFB1YmxpY0tleQogICAgICogQHBhcmFtIHN0cmluZyAkc2hhcmVkU2VjcmV0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50RW5jb2RpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRJS00oc3RyaW5nICR1c2VyQXV0aFRva2VuLCBzdHJpbmcgJHVzZXJQdWJsaWNLZXksIHN0cmluZyAkbG9jYWxQdWJsaWNLZXksIHN0cmluZyAkc2hhcmVkU2VjcmV0LCBzdHJpbmcgJGNvbnRlbnRFbmNvZGluZyk6IHN0cmluZwogICAgewogICAgICAgIGlmICghZW1wdHkoJHVzZXJBdXRoVG9rZW4pKSB7CiAgICAgICAgICAgIGlmICgkY29udGVudEVuY29kaW5nID09PSAiYWVzZ2NtIikgewogICAgICAgICAgICAgICAgJGluZm8gPSAnQ29udGVudC1FbmNvZGluZzogYXV0aCcuY2hyKDApOwogICAgICAgICAgICB9IGVsc2VpZiAoJGNvbnRlbnRFbmNvZGluZyA9PT0gImFlczEyOGdjbSIpIHsKICAgICAgICAgICAgICAgICRpbmZvID0gIldlYlB1c2g6IGluZm8iLmNocigwKS4kdXNlclB1YmxpY0tleS4kbG9jYWxQdWJsaWNLZXk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCJUaGlzIGNvbnRlbnQgZW5jb2RpbmcgaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc2VsZjo6aGtkZigkdXNlckF1dGhUb2tlbiwgJHNoYXJlZFNlY3JldCwgJGluZm8sIDMyKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc2hhcmVkU2VjcmV0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/MessageSentReport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEBhdXRob3IgSWdvciBUaW1vc2hlbmtvdiBbaXRAY2FtcG9pbnQubmV0XQogKiBAc3RhcnRlZDogMDMuMDkuMjAxOCA5OjIxCiAqLwoKbmFtZXNwYWNlIE1pbmlzaGxpbmtcV2ViUHVzaDsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIFN0YW5kYXJkaXplZCByZXNwb25zZSBmcm9tIHNlbmRpbmcgYSBtZXNzYWdlCiAqLwpjbGFzcyBNZXNzYWdlU2VudFJlcG9ydCBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlCnsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwcm90ZWN0ZWQgJHN1Y2Nlc3M7CgogICAgLyoqCiAgICAgKiBAdmFyIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXF1ZXN0OwoKICAgIC8qKgogICAgICogQHZhciBSZXNwb25zZUludGVyZmFjZSB8IG51bGwKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcmVhc29uOwoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAgICAgJHN1Y2Nlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAkcmVhc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCA/UmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwgYm9vbCAkc3VjY2VzcyA9IHRydWUsICRyZWFzb24gPSAnT0snKQogICAgewogICAgICAgICR0aGlzLT5yZXF1ZXN0ICA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+c3VjY2VzcyAgPSAkc3VjY2VzczsKICAgICAgICAkdGhpcy0+cmVhc29uICAgPSAkcmVhc29uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N1Y2Nlc3MoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3VjY2VzczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRzdWNjZXNzCiAgICAgKgogICAgICogQHJldHVybiBNZXNzYWdlU2VudFJlcG9ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3VjY2Vzcyhib29sICRzdWNjZXNzKTogTWVzc2FnZVNlbnRSZXBvcnQKICAgIHsKICAgICAgICAkdGhpcy0+c3VjY2VzcyA9ICRzdWNjZXNzOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpOiBSZXF1ZXN0SW50ZXJmYWNlCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIE1lc3NhZ2VTZW50UmVwb3J0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpOiBNZXNzYWdlU2VudFJlcG9ydAogICAgewogICAgICAgICR0aGlzLT5yZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZSB8IG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCk6ID9SZXNwb25zZUludGVyZmFjZQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBNZXNzYWdlU2VudFJlcG9ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVzcG9uc2UoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKTogTWVzc2FnZVNlbnRSZXBvcnQKICAgIHsKICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSAkcmVzcG9uc2U7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVuZHBvaW50KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdC0+Z2V0VXJpKCktPl9fdG9TdHJpbmcoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdWJzY3JpcHRpb25FeHBpcmVkKCk6IGJvb2wKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5yZXNwb25zZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXGluX2FycmF5KCR0aGlzLT5yZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCBbNDA0LCA0MTBdLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZWFzb24oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWFzb247CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFzb24KICAgICAqCiAgICAgKiBAcmV0dXJuIE1lc3NhZ2VTZW50UmVwb3J0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZWFzb24oc3RyaW5nICRyZWFzb24pOiBNZXNzYWdlU2VudFJlcG9ydAogICAgewogICAgICAgICR0aGlzLT5yZWFzb24gPSAkcmVhc29uOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0UGF5bG9hZCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3QtPmdldEJvZHkoKS0+Z2V0Q29udGVudHMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nIHwgbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VDb250ZW50KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5yZXNwb25zZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2UtPmdldEJvZHkoKS0+Z2V0Q29udGVudHMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl8bWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdzdWNjZXNzJyAgPT4gJHRoaXMtPmlzU3VjY2VzcygpLAogICAgICAgICAgICAnZXhwaXJlZCcgID0+ICR0aGlzLT5pc1N1YnNjcmlwdGlvbkV4cGlyZWQoKSwKICAgICAgICAgICAgJ3JlYXNvbicgICA9PiAkdGhpcy0+cmVhc29uLAogICAgICAgICAgICAnZW5kcG9pbnQnID0+ICR0aGlzLT5nZXRFbmRwb2ludCgpLAogICAgICAgICAgICAncGF5bG9hZCcgID0+ICR0aGlzLT5yZXF1ZXN0LT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCksCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/Notification.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7CgpjbGFzcyBOb3RpZmljYXRpb24KewogICAgLyoqIEB2YXIgU3Vic2NyaXB0aW9uICovCiAgICBwcml2YXRlICRzdWJzY3JpcHRpb247CgogICAgLyoqIEB2YXIgbnVsbHxzdHJpbmcgKi8KICAgIHByaXZhdGUgJHBheWxvYWQ7CgogICAgLyoqIEB2YXIgYXJyYXkgT3B0aW9ucyA6IFRUTCwgdXJnZW5jeSwgdG9waWMgKi8KICAgIHByaXZhdGUgJG9wdGlvbnM7CgogICAgLyoqIEB2YXIgYXJyYXkgQXV0aCBkZXRhaWxzIDogR0NNLCBWQVBJRCAqLwogICAgcHJpdmF0ZSAkYXV0aDsKCiAgICAvKioKICAgICAqIE5vdGlmaWNhdGlvbiBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gU3Vic2NyaXB0aW9uICRzdWJzY3JpcHRpb24KICAgICAqIEBwYXJhbSBudWxsfHN0cmluZyAkcGF5bG9hZAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcGFyYW0gYXJyYXkgJGF1dGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFN1YnNjcmlwdGlvbiAkc3Vic2NyaXB0aW9uLCA/c3RyaW5nICRwYXlsb2FkLCBhcnJheSAkb3B0aW9ucywgYXJyYXkgJGF1dGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN1YnNjcmlwdGlvbiA9ICRzdWJzY3JpcHRpb247CiAgICAgICAgJHRoaXMtPnBheWxvYWQgPSAkcGF5bG9hZDsKICAgICAgICAkdGhpcy0+b3B0aW9ucyA9ICRvcHRpb25zOwogICAgICAgICR0aGlzLT5hdXRoID0gJGF1dGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFN1YnNjcmlwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3Vic2NyaXB0aW9uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYXlsb2FkOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRkZWZhdWx0T3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbnMoYXJyYXkgJGRlZmF1bHRPcHRpb25zID0gW10pOiBhcnJheQogICAgewogICAgICAgICRvcHRpb25zID0gJHRoaXMtPm9wdGlvbnM7CiAgICAgICAgJG9wdGlvbnNbJ1RUTCddID0gYXJyYXlfa2V5X2V4aXN0cygnVFRMJywgJG9wdGlvbnMpID8gJG9wdGlvbnNbJ1RUTCddIDogJGRlZmF1bHRPcHRpb25zWydUVEwnXTsKICAgICAgICAkb3B0aW9uc1sndXJnZW5jeSddID0gYXJyYXlfa2V5X2V4aXN0cygndXJnZW5jeScsICRvcHRpb25zKSA/ICRvcHRpb25zWyd1cmdlbmN5J10gOiAkZGVmYXVsdE9wdGlvbnNbJ3VyZ2VuY3knXTsKICAgICAgICAkb3B0aW9uc1sndG9waWMnXSA9IGFycmF5X2tleV9leGlzdHMoJ3RvcGljJywgJG9wdGlvbnMpID8gJG9wdGlvbnNbJ3RvcGljJ10gOiAkZGVmYXVsdE9wdGlvbnNbJ3RvcGljJ107CgogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkZGVmYXVsdEF1dGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoKGFycmF5ICRkZWZhdWx0QXV0aCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5hdXRoKSA+IDAgPyAkdGhpcy0+YXV0aCA6ICRkZWZhdWx0QXV0aDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/Subscription.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7CgpjbGFzcyBTdWJzY3JpcHRpb24KewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRlbmRwb2ludDsKCiAgICAvKiogQHZhciBudWxsfHN0cmluZyAqLwogICAgcHJpdmF0ZSAkcHVibGljS2V5OwoKICAgIC8qKiBAdmFyIG51bGx8c3RyaW5nICovCiAgICBwcml2YXRlICRhdXRoVG9rZW47CgogICAgLyoqIEB2YXIgbnVsbHxzdHJpbmcgKi8KICAgIHByaXZhdGUgJGNvbnRlbnRFbmNvZGluZzsKCiAgICAvKioKICAgICAqIFN1YnNjcmlwdGlvbiBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmRwb2ludAogICAgICogQHBhcmFtIG51bGx8c3RyaW5nICRwdWJsaWNLZXkKICAgICAqIEBwYXJhbSBudWxsfHN0cmluZyAkYXV0aFRva2VuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50RW5jb2RpbmcgKE9wdGlvbmFsKSBNdXN0IGJlICJhZXNnY20iCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRlbmRwb2ludCwKICAgICAgICA/c3RyaW5nICRwdWJsaWNLZXkgPSBudWxsLAogICAgICAgID9zdHJpbmcgJGF1dGhUb2tlbiA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkY29udGVudEVuY29kaW5nID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPmVuZHBvaW50ID0gJGVuZHBvaW50OwoKICAgICAgICBpZiAoJHB1YmxpY0tleSB8fCAkYXV0aFRva2VuIHx8ICRjb250ZW50RW5jb2RpbmcpIHsKICAgICAgICAgICAgJHN1cHBvcnRlZENvbnRlbnRFbmNvZGluZ3MgPSBbJ2Flc2djbScsICdhZXMxMjhnY20nXTsKICAgICAgICAgICAgaWYgKCRjb250ZW50RW5jb2RpbmcgJiYgIWluX2FycmF5KCRjb250ZW50RW5jb2RpbmcsICRzdXBwb3J0ZWRDb250ZW50RW5jb2RpbmdzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbignVGhpcyBjb250ZW50IGVuY29kaW5nICgnLiRjb250ZW50RW5jb2RpbmcuJykgaXMgbm90IHN1cHBvcnRlZC4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPnB1YmxpY0tleSA9ICRwdWJsaWNLZXk7CiAgICAgICAgICAgICR0aGlzLT5hdXRoVG9rZW4gPSAkYXV0aFRva2VuOwogICAgICAgICAgICAkdGhpcy0+Y29udGVudEVuY29kaW5nID0gJGNvbnRlbnRFbmNvZGluZyA/OiAiYWVzZ2NtIjsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJzY3JpcHRpb24gZmFjdG9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFzc29jaWF0aXZlQXJyYXkgKHdpdGgga2V5cyBlbmRwb2ludCwgcHVibGljS2V5LCBhdXRoVG9rZW4sIGNvbnRlbnRFbmNvZGluZykKICAgICAqIEByZXR1cm4gU3Vic2NyaXB0aW9uCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkYXNzb2NpYXRpdmVBcnJheSk6IFN1YnNjcmlwdGlvbgogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdrZXlzJywgJGFzc29jaWF0aXZlQXJyYXkpICYmIGlzX2FycmF5KCRhc3NvY2lhdGl2ZUFycmF5WydrZXlzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZigKICAgICAgICAgICAgICAgICRhc3NvY2lhdGl2ZUFycmF5WydlbmRwb2ludCddLAogICAgICAgICAgICAgICAgJGFzc29jaWF0aXZlQXJyYXlbJ2tleXMnXVsncDI1NmRoJ10gPz8gbnVsbCwKICAgICAgICAgICAgICAgICRhc3NvY2lhdGl2ZUFycmF5WydrZXlzJ11bJ2F1dGgnXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJGFzc29jaWF0aXZlQXJyYXlbJ2NvbnRlbnRFbmNvZGluZyddID8/ICJhZXNnY20iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncHVibGljS2V5JywgJGFzc29jaWF0aXZlQXJyYXkpIHx8IGFycmF5X2tleV9leGlzdHMoJ2F1dGhUb2tlbicsICRhc3NvY2lhdGl2ZUFycmF5KSB8fCBhcnJheV9rZXlfZXhpc3RzKCdjb250ZW50RW5jb2RpbmcnLCAkYXNzb2NpYXRpdmVBcnJheSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKAogICAgICAgICAgICAgICAgJGFzc29jaWF0aXZlQXJyYXlbJ2VuZHBvaW50J10sCiAgICAgICAgICAgICAgICAkYXNzb2NpYXRpdmVBcnJheVsncHVibGljS2V5J10gPz8gbnVsbCwKICAgICAgICAgICAgICAgICRhc3NvY2lhdGl2ZUFycmF5WydhdXRoVG9rZW4nXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJGFzc29jaWF0aXZlQXJyYXlbJ2NvbnRlbnRFbmNvZGluZyddID8/ICJhZXNnY20iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICRhc3NvY2lhdGl2ZUFycmF5WydlbmRwb2ludCddCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbmRwb2ludCgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVuZHBvaW50OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5KCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnB1YmxpY0tleTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbnVsbHxzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhUb2tlbigpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRoVG9rZW47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG51bGx8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50RW5jb2RpbmcoKTogP3N0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29udGVudEVuY29kaW5nOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/Utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxVdGlsXEVjY1xQdWJsaWNLZXk7CgpjbGFzcyBVdGlscwp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYWZlU3RybGVuKHN0cmluZyAkdmFsdWUpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gbWJfc3RybGVuKCR2YWx1ZSwgJzhiaXQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQdWJsaWNLZXkgJHB1YmxpY0tleQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VyaWFsaXplUHVibGljS2V5KFB1YmxpY0tleSAkcHVibGljS2V5KTogc3RyaW5nCiAgICB7CiAgICAgICAgJGhleFN0cmluZyA9ICcwNCc7CiAgICAgICAgJGhleFN0cmluZyAuPSBzdHJfcGFkKGdtcF9zdHJ2YWwoJHB1YmxpY0tleS0+Z2V0UG9pbnQoKS0+Z2V0WCgpLCAxNiksIDY0LCAnMCcsIFNUUl9QQURfTEVGVCk7CiAgICAgICAgJGhleFN0cmluZyAuPSBzdHJfcGFkKGdtcF9zdHJ2YWwoJHB1YmxpY0tleS0+Z2V0UG9pbnQoKS0+Z2V0WSgpLCAxNiksIDY0LCAnMCcsIFNUUl9QQURfTEVGVCk7CgogICAgICAgIHJldHVybiAkaGV4U3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZVB1YmxpY0tleShzdHJpbmcgJGRhdGEpOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gYmluMmhleCgkZGF0YSk7CiAgICAgICAgaWYgKG1iX3N1YnN0cigkZGF0YSwgMCwgMiwgJzhiaXQnKSAhPT0gJzA0JykgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhOiBvbmx5IHVuY29tcHJlc3NlZCBrZXlzIGFyZSBzdXBwb3J0ZWQuJyk7CiAgICAgICAgfQogICAgICAgICRkYXRhID0gbWJfc3Vic3RyKCRkYXRhLCAyLCBudWxsLCAnOGJpdCcpOwogICAgICAgICRkYXRhTGVuZ3RoID0gc2VsZjo6c2FmZVN0cmxlbigkZGF0YSk7CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIGhleDJiaW4obWJfc3Vic3RyKCRkYXRhLCAwLCAkZGF0YUxlbmd0aCAvIDIsICc4Yml0JykpLAogICAgICAgICAgICBoZXgyYmluKG1iX3N1YnN0cigkZGF0YSwgJGRhdGFMZW5ndGggLyAyLCBudWxsLCAnOGJpdCcpKSwKICAgICAgICBdOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/VAPID.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQWxnb3JpdGhtTWFuYWdlcjsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXFN0YW5kYXJkQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcRWNjXE5pc3RDdXJ2ZTsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2NcUG9pbnQ7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcRWNjXFB1YmxpY0tleTsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVMyNTY7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyXENvbXBhY3RTZXJpYWxpemVyOwoKY2xhc3MgVkFQSUQKewogICAgcHJpdmF0ZSBjb25zdCBQVUJMSUNfS0VZX0xFTkdUSCA9IDY1OwogICAgcHJpdmF0ZSBjb25zdCBQUklWQVRFX0tFWV9MRU5HVEggPSAzMjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkdmFwaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHRocm93cyBcRXJyb3JFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZShhcnJheSAkdmFwaWQpOiBhcnJheQogICAgewogICAgICAgIGlmICghaXNzZXQoJHZhcGlkWydzdWJqZWN0J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ1tWQVBJRF0gWW91IG11c3QgcHJvdmlkZSBhIHN1YmplY3QgdGhhdCBpcyBlaXRoZXIgYSBtYWlsdG86IG9yIGEgVVJMLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCR2YXBpZFsncGVtRmlsZSddKSkgewogICAgICAgICAgICAkdmFwaWRbJ3BlbSddID0gZmlsZV9nZXRfY29udGVudHMoJHZhcGlkWydwZW1GaWxlJ10pOwoKICAgICAgICAgICAgaWYgKCEkdmFwaWRbJ3BlbSddKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdFcnJvciBsb2FkaW5nIFBFTSBmaWxlLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHZhcGlkWydwZW0nXSkpIHsKICAgICAgICAgICAgJGp3ayA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21LZXkoJHZhcGlkWydwZW0nXSk7CiAgICAgICAgICAgIGlmICgkandrLT5nZXQoJ2t0eScpICE9PSAnRUMnIHx8ICEkandrLT5oYXMoJ2QnKSB8fCAhJGp3ay0+aGFzKCd4JykgfHwgISRqd2stPmhhcygneScpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdJbnZhbGlkIFBFTSBkYXRhLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwdWJsaWNLZXkgPSBQdWJsaWNLZXk6OmNyZWF0ZShQb2ludDo6Y3JlYXRlKAogICAgICAgICAgICAgICAgZ21wX2luaXQoYmluMmhleChCYXNlNjRVcmw6OmRlY29kZSgkandrLT5nZXQoJ3gnKSkpLCAxNiksCiAgICAgICAgICAgICAgICBnbXBfaW5pdChiaW4yaGV4KEJhc2U2NFVybDo6ZGVjb2RlKCRqd2stPmdldCgneScpKSksIDE2KQogICAgICAgICAgICApKTsKCiAgICAgICAgICAgICRiaW5hcnlQdWJsaWNLZXkgPSBoZXgyYmluKFV0aWxzOjpzZXJpYWxpemVQdWJsaWNLZXkoJHB1YmxpY0tleSkpOwogICAgICAgICAgICBpZiAoISRiaW5hcnlQdWJsaWNLZXkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ0ZhaWxlZCB0byBjb252ZXJ0IFZBUElEIHB1YmxpYyBrZXkgZnJvbSBoZXhhZGVjaW1hbCB0byBiaW5hcnknKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdmFwaWRbJ3B1YmxpY0tleSddID0gYmFzZTY0X2VuY29kZSgkYmluYXJ5UHVibGljS2V5KTsKICAgICAgICAgICAgJHZhcGlkWydwcml2YXRlS2V5J10gPSBiYXNlNjRfZW5jb2RlKHN0cl9wYWQoQmFzZTY0VXJsOjpkZWNvZGUoJGp3ay0+Z2V0KCdkJykpLCAyICogc2VsZjo6UFJJVkFURV9LRVlfTEVOR1RILCAnMCcsIFNUUl9QQURfTEVGVCkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkdmFwaWRbJ3B1YmxpY0tleSddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdbVkFQSURdIFlvdSBtdXN0IHByb3ZpZGUgYSBwdWJsaWMga2V5LicpOwogICAgICAgIH0KCiAgICAgICAgJHB1YmxpY0tleSA9IEJhc2U2NFVybDo6ZGVjb2RlKCR2YXBpZFsncHVibGljS2V5J10pOwoKICAgICAgICBpZiAoVXRpbHM6OnNhZmVTdHJsZW4oJHB1YmxpY0tleSkgIT09IHNlbGY6OlBVQkxJQ19LRVlfTEVOR1RIKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ1tWQVBJRF0gUHVibGljIGtleSBzaG91bGQgYmUgNjUgYnl0ZXMgbG9uZyB3aGVuIGRlY29kZWQuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzc2V0KCR2YXBpZFsncHJpdmF0ZUtleSddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdbVkFQSURdIFlvdSBtdXN0IHByb3ZpZGUgYSBwcml2YXRlIGtleS4nKTsKICAgICAgICB9CgogICAgICAgICRwcml2YXRlS2V5ID0gQmFzZTY0VXJsOjpkZWNvZGUoJHZhcGlkWydwcml2YXRlS2V5J10pOwoKICAgICAgICBpZiAoVXRpbHM6OnNhZmVTdHJsZW4oJHByaXZhdGVLZXkpICE9PSBzZWxmOjpQUklWQVRFX0tFWV9MRU5HVEgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbignW1ZBUElEXSBQcml2YXRlIGtleSBzaG91bGQgYmUgMzIgYnl0ZXMgbG9uZyB3aGVuIGRlY29kZWQuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnc3ViamVjdCcgPT4gJHZhcGlkWydzdWJqZWN0J10sCiAgICAgICAgICAgICdwdWJsaWNLZXknID0+ICRwdWJsaWNLZXksCiAgICAgICAgICAgICdwcml2YXRlS2V5JyA9PiAkcHJpdmF0ZUtleSwKICAgICAgICBdOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgdGFrZXMgdGhlIHJlcXVpcmVkIFZBUElEIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgdGhlIHJlcXVpcmVkCiAgICAgKiBoZWFkZXIgdG8gYmUgYWRkZWQgdG8gYSBXZWIgUHVzaCBQcm90b2NvbCBSZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGF1ZGllbmNlIFRoaXMgbXVzdCBiZSB0aGUgb3JpZ2luIG9mIHRoZSBwdXNoIHNlcnZpY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgVGhpcyBzaG91bGQgYmUgYSBVUkwgb3IgYSAnbWFpbHRvOicgZW1haWwgYWRkcmVzcwogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5IFRoZSBkZWNvZGVkIFZBUElEIHB1YmxpYyBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByaXZhdGVLZXkgVGhlIGRlY29kZWQgVkFQSUQgcHJpdmF0ZSBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRFbmNvZGluZwogICAgICogQHBhcmFtIG51bGx8aW50ICRleHBpcmF0aW9uIFRoZSBleHBpcmF0aW9uIG9mIHRoZSBWQVBJRCBKV1QuIChVTklYIHRpbWVzdGFtcCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgJ0F1dGhvcml6YXRpb24nIGFuZCAnQ3J5cHRvLUtleScgdmFsdWVzIHRvIGJlIHVzZWQgYXMgaGVhZGVycwogICAgICogQHRocm93cyBcRXJyb3JFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRWYXBpZEhlYWRlcnMoc3RyaW5nICRhdWRpZW5jZSwgc3RyaW5nICRzdWJqZWN0LCBzdHJpbmcgJHB1YmxpY0tleSwgc3RyaW5nICRwcml2YXRlS2V5LCBzdHJpbmcgJGNvbnRlbnRFbmNvZGluZywgP2ludCAkZXhwaXJhdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJGV4cGlyYXRpb25MaW1pdCA9IHRpbWUoKSArIDQzMjAwOyAvLyBlcXVhbCBtYXJnaW4gb2YgZXJyb3IgYmV0d2VlbiAwIGFuZCAyNGgKICAgICAgICBpZiAobnVsbCA9PT0gJGV4cGlyYXRpb24gfHwgJGV4cGlyYXRpb24gPiAkZXhwaXJhdGlvbkxpbWl0KSB7CiAgICAgICAgICAgICRleHBpcmF0aW9uID0gJGV4cGlyYXRpb25MaW1pdDsKICAgICAgICB9CgogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnLAogICAgICAgICAgICAnYWxnJyA9PiAnRVMyNTYnLAogICAgICAgIF07CgogICAgICAgICRqd3RQYXlsb2FkID0ganNvbl9lbmNvZGUoWwogICAgICAgICAgICAnYXVkJyA9PiAkYXVkaWVuY2UsCiAgICAgICAgICAgICdleHAnID0+ICRleHBpcmF0aW9uLAogICAgICAgICAgICAnc3ViJyA9PiAkc3ViamVjdCwKICAgICAgICBdLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9OVU1FUklDX0NIRUNLKTsKICAgICAgICBpZiAoISRqd3RQYXlsb2FkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ0ZhaWxlZCB0byBlbmNvZGUgSldUIHBheWxvYWQgaW4gSlNPTicpOwogICAgICAgIH0KCiAgICAgICAgbGlzdCgkeCwgJHkpID0gVXRpbHM6OnVuc2VyaWFsaXplUHVibGljS2V5KCRwdWJsaWNLZXkpOwogICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkeCksCiAgICAgICAgICAgICd5JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkeSksCiAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkcHJpdmF0ZUtleSksCiAgICAgICAgXSk7CgogICAgICAgICRqc29uQ29udmVydGVyID0gbmV3IFN0YW5kYXJkQ29udmVydGVyKCk7CiAgICAgICAgJGp3c0NvbXBhY3RTZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKCRqc29uQ29udmVydGVyKTsKICAgICAgICAkandzQnVpbGRlciA9IG5ldyBKV1NCdWlsZGVyKCRqc29uQ29udmVydGVyLCBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBFUzI1NigpXSkpOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpCiAgICAgICAgICAgIC0+d2l0aFBheWxvYWQoJGp3dFBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRqd2ssICRoZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGp3dCA9ICRqd3NDb21wYWN0U2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApOwogICAgICAgICRlbmNvZGVkUHVibGljS2V5ID0gQmFzZTY0VXJsOjplbmNvZGUoJHB1YmxpY0tleSk7CgogICAgICAgIGlmICgkY29udGVudEVuY29kaW5nID09PSAiYWVzZ2NtIikgewogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdXZWJQdXNoICcuJGp3dCwKICAgICAgICAgICAgICAgICdDcnlwdG8tS2V5JyA9PiAncDI1NmVjZHNhPScuJGVuY29kZWRQdWJsaWNLZXksCiAgICAgICAgICAgIF07CiAgICAgICAgfSBlbHNlaWYgKCRjb250ZW50RW5jb2RpbmcgPT09ICdhZXMxMjhnY20nKSB7CiAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbicgPT4gJ3ZhcGlkIHQ9Jy4kand0LicsIGs9Jy4kZW5jb2RlZFB1YmxpY0tleSwKICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ1RoaXMgY29udGVudCBlbmNvZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIFZBUElEIGtleXMgaW4gY2FzZSB5b3Ugd291bGQgbm90IGJlIGFibGUgdG8gaGF2ZSBhIExpbnV4IGJhc2guCiAgICAgKiBETyBOT1QgY3JlYXRlIGtleXMgYXQgZWFjaCBpbml0aWFsaXphdGlvbiEgU2F2ZSB0aG9zZSBrZXlzIGFuZCByZXVzZSB0aGVtLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlVmFwaWRLZXlzKCk6IGFycmF5CiAgICB7CiAgICAgICAgJGN1cnZlID0gTmlzdEN1cnZlOjpjdXJ2ZTI1NigpOwogICAgICAgICRwcml2YXRlS2V5ID0gJGN1cnZlLT5jcmVhdGVQcml2YXRlS2V5KCk7CiAgICAgICAgJHB1YmxpY0tleSA9ICRjdXJ2ZS0+Y3JlYXRlUHVibGljS2V5KCRwcml2YXRlS2V5KTsKCiAgICAgICAgJGJpbmFyeVB1YmxpY0tleSA9IGhleDJiaW4oVXRpbHM6OnNlcmlhbGl6ZVB1YmxpY0tleSgkcHVibGljS2V5KSk7CiAgICAgICAgaWYgKCEkYmluYXJ5UHVibGljS2V5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ0ZhaWxlZCB0byBjb252ZXJ0IFZBUElEIHB1YmxpYyBrZXkgZnJvbSBoZXhhZGVjaW1hbCB0byBiaW5hcnknKTsKICAgICAgICB9CgogICAgICAgICRiaW5hcnlQcml2YXRlS2V5ID0gaGV4MmJpbihzdHJfcGFkKGdtcF9zdHJ2YWwoJHByaXZhdGVLZXktPmdldFNlY3JldCgpLCAxNiksIDIgKiBzZWxmOjpQUklWQVRFX0tFWV9MRU5HVEgsICcwJywgU1RSX1BBRF9MRUZUKSk7CiAgICAgICAgaWYgKCEkYmluYXJ5UHJpdmF0ZUtleSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdGYWlsZWQgdG8gY29udmVydCBWQVBJRCBwcml2YXRlIGtleSBmcm9tIGhleGFkZWNpbWFsIHRvIGJpbmFyeScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3B1YmxpY0tleScgPT4gYmFzZTY0X2VuY29kZSgkYmluYXJ5UHVibGljS2V5KSwKICAgICAgICAgICAgJ3ByaXZhdGVLZXknID0+IGJhc2U2NF9lbmNvZGUoJGJpbmFyeVByaXZhdGVLZXkpCiAgICAgICAgXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/minishlink/web-push/src/WebPush.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYlB1c2ggbGlicmFyeS4KICoKICogKGMpIExvdWlzIExhZ3JhbmdlIDxsYWdyYW5nZS5sb3Vpc0BnbWFpbC5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBNaW5pc2hsaW5rXFdlYlB1c2g7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEd1enpsZUh0dHBcQ2xpZW50Owp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHNyN1xSZXF1ZXN0Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCmNsYXNzIFdlYlB1c2gKewogICAgcHVibGljIGNvbnN0IEdDTV9VUkwgPSAnaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZWFwaXMuY29tL2djbS9zZW5kJzsKICAgIHB1YmxpYyBjb25zdCBGQ01fQkFTRV9VUkwgPSAnaHR0cHM6Ly9mY20uZ29vZ2xlYXBpcy5jb20nOwoKICAgIC8qKgogICAgICogQHZhciBDbGllbnQKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRhdXRoOwoKICAgIC8qKgogICAgICogQHZhciBudWxsfGFycmF5IEFycmF5IG9mIGFycmF5IG9mIE5vdGlmaWNhdGlvbnMKICAgICAqLwogICAgcHJpdmF0ZSAkbm90aWZpY2F0aW9uczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgRGVmYXVsdCBvcHRpb25zIDogVFRMLCB1cmdlbmN5LCB0b3BpYywgYmF0Y2hTaXplCiAgICAgKi8KICAgIHByaXZhdGUgJGRlZmF1bHRPcHRpb25zOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgQXV0b21hdGljIHBhZGRpbmcgb2YgcGF5bG9hZHMsIGlmIGRpc2FibGVkLCB0cmFkZSBzZWN1cml0eSBmb3IgYmFuZHdpZHRoCiAgICAgKi8KICAgIHByaXZhdGUgJGF1dG9tYXRpY1BhZGRpbmcgPSBFbmNyeXB0aW9uOjpNQVhfQ09NUEFUSUJJTElUWV9QQVlMT0FEX0xFTkdUSDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbCBSZXVzZSBWQVBJRCBoZWFkZXJzIGluIHRoZSBzYW1lIGZsdXNoIHNlc3Npb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZQogICAgICovCiAgICBwcml2YXRlICRyZXVzZVZBUElESGVhZGVycyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheSBEaWN0aW9uYXJ5IGZvciBWQVBJRCBoZWFkZXJzIGNhY2hlCiAgICAgKi8KICAgIHByaXZhdGUgJHZhcGlkSGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogV2ViUHVzaCBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJGF1dGggICAgICAgICAgIFNvbWUgc2VydmVycyBuZWVkcyBhdXRoZW50aWNhdGlvbgogICAgICogQHBhcmFtIGFycmF5ICAgICRkZWZhdWx0T3B0aW9ucyBUVEwsIHVyZ2VuY3ksIHRvcGljLCBiYXRjaFNpemUKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkdGltZW91dCAgICAgICAgVGltZW91dCBvZiBQT1NUIHJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAkY2xpZW50T3B0aW9ucwogICAgICoKICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkYXV0aCA9IFtdLCBhcnJheSAkZGVmYXVsdE9wdGlvbnMgPSBbXSwgP2ludCAkdGltZW91dCA9IDMwLCBhcnJheSAkY2xpZW50T3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRleHRlbnNpb25zID0gWwogICAgICAgICAgICAnY3VybCcgPT4gJ1tXZWJQdXNoXSBjdXJsIGV4dGVuc2lvbiBpcyBub3QgbG9hZGVkIGJ1dCBpcyByZXF1aXJlZC4gWW91IGNhbiBmaXggdGhpcyBpbiB5b3VyIHBocC5pbmkuJywKICAgICAgICAgICAgJ2dtcCcgPT4gJ1tXZWJQdXNoXSBnbXAgZXh0ZW5zaW9uIGlzIG5vdCBsb2FkZWQgYnV0IGlzIHJlcXVpcmVkIGZvciBzZW5kaW5nIHB1c2ggbm90aWZpY2F0aW9ucyB3aXRoIHBheWxvYWQgb3IgZm9yIFZBUElEIGF1dGhlbnRpY2F0aW9uLiBZb3UgY2FuIGZpeCB0aGlzIGluIHlvdXIgcGhwLmluaS4nLAogICAgICAgICAgICAnbWJzdHJpbmcnID0+ICdbV2ViUHVzaF0gbWJzdHJpbmcgZXh0ZW5zaW9uIGlzIG5vdCBsb2FkZWQgYnV0IGlzIHJlcXVpcmVkIGZvciBzZW5kaW5nIHB1c2ggbm90aWZpY2F0aW9ucyB3aXRoIHBheWxvYWQgb3IgZm9yIFZBUElEIGF1dGhlbnRpY2F0aW9uLiBZb3UgY2FuIGZpeCB0aGlzIGluIHlvdXIgcGhwLmluaS4nLAogICAgICAgICAgICAnb3BlbnNzbCcgPT4gJ1tXZWJQdXNoXSBvcGVuc3NsIGV4dGVuc2lvbiBpcyBub3QgbG9hZGVkIGJ1dCBpcyByZXF1aXJlZCBmb3Igc2VuZGluZyBwdXNoIG5vdGlmaWNhdGlvbnMgd2l0aCBwYXlsb2FkIG9yIGZvciBWQVBJRCBhdXRoZW50aWNhdGlvbi4gWW91IGNhbiBmaXggdGhpcyBpbiB5b3VyIHBocC5pbmkuJywKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCRleHRlbnNpb25zIGFzICRleHRlbnNpb24gPT4gJG1lc3NhZ2UpIHsKICAgICAgICAgICAgaWYgKCFleHRlbnNpb25fbG9hZGVkKCRleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCRtZXNzYWdlLCBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgPj0gMikgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJbV2ViUHVzaF0gbWJzdHJpbmcuZnVuY19vdmVybG9hZCBpcyBlbmFibGVkIGZvciBzdHIqIGZ1bmN0aW9ucy4gWW91IG11c3QgZGlzYWJsZSBpdCBpZiB5b3Ugd2FudCB0byBzZW5kIHB1c2ggbm90aWZpY2F0aW9ucyB3aXRoIHBheWxvYWQgb3IgdXNlIFZBUElELiBZb3UgY2FuIGZpeCB0aGlzIGluIHlvdXIgcGhwLmluaS4iLCBFX1VTRVJfTk9USUNFKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkYXV0aFsnVkFQSUQnXSkpIHsKICAgICAgICAgICAgJGF1dGhbJ1ZBUElEJ10gPSBWQVBJRDo6dmFsaWRhdGUoJGF1dGhbJ1ZBUElEJ10pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmF1dGggPSAkYXV0aDsKCiAgICAgICAgJHRoaXMtPnNldERlZmF1bHRPcHRpb25zKCRkZWZhdWx0T3B0aW9ucyk7CgogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygndGltZW91dCcsICRjbGllbnRPcHRpb25zKSAmJiBpc3NldCgkdGltZW91dCkpIHsKICAgICAgICAgICAgJGNsaWVudE9wdGlvbnNbJ3RpbWVvdXQnXSA9ICR0aW1lb3V0OwogICAgICAgIH0KICAgICAgICAkdGhpcy0+Y2xpZW50ID0gbmV3IENsaWVudCgkY2xpZW50T3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kIGEgbm90aWZpY2F0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBTdWJzY3JpcHRpb24gJHN1YnNjcmlwdGlvbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXlsb2FkIElmIHlvdSB3YW50IHRvIHNlbmQgYW4gYXJyYXksIGpzb25fZW5jb2RlIGl0CiAgICAgKiBAcGFyYW0gYm9vbCAkZmx1c2ggSWYgeW91IHdhbnQgdG8gZmx1c2ggZGlyZWN0bHkgKHVzdWFsbHkgd2hlbiB5b3Ugc2VuZCBvbmx5IG9uZSBub3RpZmljYXRpb24pCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgQXJyYXkgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGllZCB0byB0aGlzIG5vdGlmaWNhdGlvbi4gSWYgbm90IHNldCwgd2lsbCB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucyB0aGF0IHlvdSBjYW4gc2V0IGluIHRoZSBXZWJQdXNoIG9iamVjdAogICAgICogQHBhcmFtIGFycmF5ICRhdXRoIFVzZSB0aGlzIGF1dGggZGV0YWlscyBpbnN0ZWFkIG9mIHdoYXQgeW91IHByb3ZpZGVkIHdoZW4gY3JlYXRpbmcgV2ViUHVzaAogICAgICoKICAgICAqIEByZXR1cm4gXEdlbmVyYXRvcnxNZXNzYWdlU2VudFJlcG9ydFtdfHRydWUgUmV0dXJuIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uIGlmICRmbHVzaCBpcyBzZXQgdG8gdHJ1ZSBhbmQgdGhlIHF1ZXVlZCByZXF1ZXN0cyBoYXMgZmFpbGVkLgogICAgICogICAgICAgICAgICAgICAgICAgIEVsc2UgcmV0dXJuIHRydWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFcnJvckV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZE5vdGlmaWNhdGlvbihTdWJzY3JpcHRpb24gJHN1YnNjcmlwdGlvbiwgP3N0cmluZyAkcGF5bG9hZCA9IG51bGwsIGJvb2wgJGZsdXNoID0gZmFsc2UsIGFycmF5ICRvcHRpb25zID0gW10sIGFycmF5ICRhdXRoID0gW10pCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRwYXlsb2FkKSkgewogICAgICAgICAgICBpZiAoVXRpbHM6OnNhZmVTdHJsZW4oJHBheWxvYWQpID4gRW5jcnlwdGlvbjo6TUFYX1BBWUxPQURfTEVOR1RIKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdTaXplIG9mIHBheWxvYWQgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICcuRW5jcnlwdGlvbjo6TUFYX1BBWUxPQURfTEVOR1RILicgb2N0ZXRzLicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY29udGVudEVuY29kaW5nID0gJHN1YnNjcmlwdGlvbi0+Z2V0Q29udGVudEVuY29kaW5nKCk7CiAgICAgICAgICAgIGlmICghJGNvbnRlbnRFbmNvZGluZykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbignU3Vic2NyaXB0aW9uIHNob3VsZCBoYXZlIGEgY29udGVudCBlbmNvZGluZycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcGF5bG9hZCA9IEVuY3J5cHRpb246OnBhZFBheWxvYWQoJHBheWxvYWQsICR0aGlzLT5hdXRvbWF0aWNQYWRkaW5nLCAkY29udGVudEVuY29kaW5nKTsKICAgICAgICB9CgogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdWQVBJRCcsICRhdXRoKSkgewogICAgICAgICAgICAkYXV0aFsnVkFQSUQnXSA9IFZBUElEOjp2YWxpZGF0ZSgkYXV0aFsnVkFQSUQnXSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bm90aWZpY2F0aW9uc1tdID0gbmV3IE5vdGlmaWNhdGlvbigkc3Vic2NyaXB0aW9uLCAkcGF5bG9hZCwgJG9wdGlvbnMsICRhdXRoKTsKCiAgICAgICAgaWYoICRmbHVzaCApIHJldHVybiAkdGhpcy0+Zmx1c2goKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZsdXNoIG5vdGlmaWNhdGlvbnMuIFRyaWdnZXJzIHRoZSByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxpbnQgJGJhdGNoU2l6ZSBEZWZhdWx0cyB0aGUgdmFsdWUgZGVmaW5lZCBpbiBkZWZhdWx0T3B0aW9ucyBkdXJpbmcgaW5zdGFudGlhdGlvbiAod2hpY2ggZGVmYXVsdHMgdG8gMTAwMCkuCiAgICAgKgogICAgICogQHJldHVybiBcR2VuZXJhdG9yfE1lc3NhZ2VTZW50UmVwb3J0W10KICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaCg/aW50ICRiYXRjaFNpemUgPSBudWxsKTogXEdlbmVyYXRvcgogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+bm90aWZpY2F0aW9ucyB8fCBlbXB0eSgkdGhpcy0+bm90aWZpY2F0aW9ucykpIHsKICAgICAgICAgICAgeWllbGQgZnJvbSBbXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICRiYXRjaFNpemUpIHsKICAgICAgICAgICAgJGJhdGNoU2l6ZSA9ICR0aGlzLT5kZWZhdWx0T3B0aW9uc1snYmF0Y2hTaXplJ107CiAgICAgICAgfQoKICAgICAgICAkYmF0Y2hlcyA9IGFycmF5X2NodW5rKCR0aGlzLT5ub3RpZmljYXRpb25zLCAkYmF0Y2hTaXplKTsKCiAgICAgICAgLy8gcmVzZXQgcXVldWUKICAgICAgICAkdGhpcy0+bm90aWZpY2F0aW9ucyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkYmF0Y2hlcyBhcyAkYmF0Y2gpIHsKICAgICAgICAgICAgLy8gZm9yIGVhY2ggZW5kcG9pbnQgc2VydmVyIHR5cGUKICAgICAgICAgICAgJHJlcXVlc3RzID0gJHRoaXMtPnByZXBhcmUoJGJhdGNoKTsKCiAgICAgICAgICAgICRwcm9taXNlcyA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3RzIGFzICRyZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICAkcHJvbWlzZXNbXSA9ICR0aGlzLT5jbGllbnQtPnNlbmRBc3luYygkcmVxdWVzdCkKICAgICAgICAgICAgICAgICAgICAtPnRoZW4oZnVuY3Rpb24gKCRyZXNwb25zZSkgdXNlICgkcmVxdWVzdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKiogQHZhciBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgKiAqLwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VTZW50UmVwb3J0KCRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLT5vdGhlcndpc2UoZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLyoqIEB2YXIgUmVxdWVzdEV4Y2VwdGlvbiAkcmVhc29uICoqLwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VTZW50UmVwb3J0KCRyZWFzb24tPmdldFJlcXVlc3QoKSwgJHJlYXNvbi0+Z2V0UmVzcG9uc2UoKSwgZmFsc2UsICRyZWFzb24tPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRwcm9taXNlcyBhcyAkcHJvbWlzZSkgewogICAgICAgICAgICAgICAgeWllbGQgJHByb21pc2UtPndhaXQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZXVzZVZBUElESGVhZGVycykgewogICAgICAgICAgICAkdGhpcy0+dmFwaWRIZWFkZXJzID0gW107CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRub3RpZmljYXRpb25zCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZShhcnJheSAkbm90aWZpY2F0aW9ucyk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlcXVlc3RzID0gW107CiAgICAgICAgLyoqIEB2YXIgTm90aWZpY2F0aW9uICRub3RpZmljYXRpb24gKi8KICAgICAgICBmb3JlYWNoICgkbm90aWZpY2F0aW9ucyBhcyAkbm90aWZpY2F0aW9uKSB7CiAgICAgICAgICAgICRzdWJzY3JpcHRpb24gPSAkbm90aWZpY2F0aW9uLT5nZXRTdWJzY3JpcHRpb24oKTsKICAgICAgICAgICAgJGVuZHBvaW50ID0gJHN1YnNjcmlwdGlvbi0+Z2V0RW5kcG9pbnQoKTsKICAgICAgICAgICAgJHVzZXJQdWJsaWNLZXkgPSAkc3Vic2NyaXB0aW9uLT5nZXRQdWJsaWNLZXkoKTsKICAgICAgICAgICAgJHVzZXJBdXRoVG9rZW4gPSAkc3Vic2NyaXB0aW9uLT5nZXRBdXRoVG9rZW4oKTsKICAgICAgICAgICAgJGNvbnRlbnRFbmNvZGluZyA9ICRzdWJzY3JpcHRpb24tPmdldENvbnRlbnRFbmNvZGluZygpOwogICAgICAgICAgICAkcGF5bG9hZCA9ICRub3RpZmljYXRpb24tPmdldFBheWxvYWQoKTsKICAgICAgICAgICAgJG9wdGlvbnMgPSAkbm90aWZpY2F0aW9uLT5nZXRPcHRpb25zKCR0aGlzLT5nZXREZWZhdWx0T3B0aW9ucygpKTsKICAgICAgICAgICAgJGF1dGggPSAkbm90aWZpY2F0aW9uLT5nZXRBdXRoKCR0aGlzLT5hdXRoKTsKCiAgICAgICAgICAgIGlmICghZW1wdHkoJHBheWxvYWQpICYmICFlbXB0eSgkdXNlclB1YmxpY0tleSkgJiYgIWVtcHR5KCR1c2VyQXV0aFRva2VuKSkgewogICAgICAgICAgICAgICAgaWYgKCEkY29udGVudEVuY29kaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbignU3Vic2NyaXB0aW9uIHNob3VsZCBoYXZlIGEgY29udGVudCBlbmNvZGluZycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRlbmNyeXB0ZWQgPSBFbmNyeXB0aW9uOjplbmNyeXB0KCRwYXlsb2FkLCAkdXNlclB1YmxpY0tleSwgJHVzZXJBdXRoVG9rZW4sICRjb250ZW50RW5jb2RpbmcpOwogICAgICAgICAgICAgICAgJGNpcGhlclRleHQgPSAkZW5jcnlwdGVkWydjaXBoZXJUZXh0J107CiAgICAgICAgICAgICAgICAkc2FsdCA9ICRlbmNyeXB0ZWRbJ3NhbHQnXTsKICAgICAgICAgICAgICAgICRsb2NhbFB1YmxpY0tleSA9ICRlbmNyeXB0ZWRbJ2xvY2FsUHVibGljS2V5J107CgogICAgICAgICAgICAgICAgJGhlYWRlcnMgPSBbCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtRW5jb2RpbmcnID0+ICRjb250ZW50RW5jb2RpbmcsCiAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgIGlmICgkY29udGVudEVuY29kaW5nID09PSAiYWVzZ2NtIikgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWydFbmNyeXB0aW9uJ10gPSAnc2FsdD0nLkJhc2U2NFVybDo6ZW5jb2RlKCRzYWx0KTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1snQ3J5cHRvLUtleSddID0gJ2RoPScuQmFzZTY0VXJsOjplbmNvZGUoJGxvY2FsUHVibGljS2V5KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZW5jcnlwdGlvbkNvbnRlbnRDb2RpbmdIZWFkZXIgPSBFbmNyeXB0aW9uOjpnZXRDb250ZW50Q29kaW5nSGVhZGVyKCRzYWx0LCAkbG9jYWxQdWJsaWNLZXksICRjb250ZW50RW5jb2RpbmcpOwogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkZW5jcnlwdGlvbkNvbnRlbnRDb2RpbmdIZWFkZXIuJGNpcGhlclRleHQ7CgogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBVdGlsczo6c2FmZVN0cmxlbigkY29udGVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaGVhZGVycyA9IFsKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnID0+IDAsCiAgICAgICAgICAgICAgICBdOwoKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRoZWFkZXJzWydUVEwnXSA9ICRvcHRpb25zWydUVEwnXTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndXJnZW5jeSddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ1VyZ2VuY3knXSA9ICRvcHRpb25zWyd1cmdlbmN5J107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sndG9waWMnXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWydUb3BpYyddID0gJG9wdGlvbnNbJ3RvcGljJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIEdDTQogICAgICAgICAgICBpZiAoc3Vic3RyKCRlbmRwb2ludCwgMCwgc3RybGVuKHNlbGY6OkdDTV9VUkwpKSA9PT0gc2VsZjo6R0NNX1VSTCkgewogICAgICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ0dDTScsICRhdXRoKSkgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAna2V5PScuJGF1dGhbJ0dDTSddOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEVycm9yRXhjZXB0aW9uKCdObyBHQ00gQVBJIEtleSBzcGVjaWZpZWQuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gaWYgVkFQSUQgKEdDTSBkb2Vzbid0IHN1cHBvcnQgaXQgYnV0IEZDTSBkb2VzKQogICAgICAgICAgICBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJ1ZBUElEJywgJGF1dGgpICYmICRjb250ZW50RW5jb2RpbmcpIHsKICAgICAgICAgICAgICAgICRhdWRpZW5jZSA9IHBhcnNlX3VybCgkZW5kcG9pbnQsIFBIUF9VUkxfU0NIRU1FKS4nOi8vJy5wYXJzZV91cmwoJGVuZHBvaW50LCBQSFBfVVJMX0hPU1QpOwogICAgICAgICAgICAgICAgaWYgKCFwYXJzZV91cmwoJGF1ZGllbmNlKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJ0F1ZGllbmNlICInLiRhdWRpZW5jZS4nIiIgY291bGQgbm90IGJlIGdlbmVyYXRlZC4nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdmFwaWRIZWFkZXJzID0gJHRoaXMtPmdldFZBUElESGVhZGVycygkYXVkaWVuY2UsICRjb250ZW50RW5jb2RpbmcsICRhdXRoWydWQVBJRCddKTsKCiAgICAgICAgICAgICAgICAkaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gJHZhcGlkSGVhZGVyc1snQXV0aG9yaXphdGlvbiddOwoKICAgICAgICAgICAgICAgIGlmICgkY29udGVudEVuY29kaW5nID09PSAnYWVzZ2NtJykgewogICAgICAgICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdDcnlwdG8tS2V5JywgJGhlYWRlcnMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWydDcnlwdG8tS2V5J10gLj0gJzsnLiR2YXBpZEhlYWRlcnNbJ0NyeXB0by1LZXknXTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1snQ3J5cHRvLUtleSddID0gJHZhcGlkSGVhZGVyc1snQ3J5cHRvLUtleSddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcXVlc3RzW10gPSBuZXcgUmVxdWVzdCgnUE9TVCcsICRlbmRwb2ludCwgJGhlYWRlcnMsICRjb250ZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVxdWVzdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQXV0b21hdGljUGFkZGluZygpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdXRvbWF0aWNQYWRkaW5nICE9PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dG9tYXRpY1BhZGRpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXV0b21hdGljUGFkZGluZzsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8Ym9vbCAkYXV0b21hdGljUGFkZGluZyBNYXggcGFkZGluZyBsZW5ndGgKICAgICAqCiAgICAgKiBAcmV0dXJuIFdlYlB1c2gKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEF1dG9tYXRpY1BhZGRpbmcoJGF1dG9tYXRpY1BhZGRpbmcpOiBXZWJQdXNoCiAgICB7CiAgICAgICAgaWYgKCRhdXRvbWF0aWNQYWRkaW5nID4gRW5jcnlwdGlvbjo6TUFYX1BBWUxPQURfTEVOR1RIKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdBdXRvbWF0aWMgcGFkZGluZyBpcyB0b28gbGFyZ2UuIE1heCBpcyAnLkVuY3J5cHRpb246Ok1BWF9QQVlMT0FEX0xFTkdUSC4nLiBSZWNvbW1lbmRlZCBtYXggaXMgJy5FbmNyeXB0aW9uOjpNQVhfQ09NUEFUSUJJTElUWV9QQVlMT0FEX0xFTkdUSC4nIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgKHNlZSBSRUFETUUpLicpOwogICAgICAgIH0gZWxzZWlmICgkYXV0b21hdGljUGFkZGluZyA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ1BhZGRpbmcgbGVuZ3RoIHNob3VsZCBiZSBwb3NpdGl2ZSBvciB6ZXJvLicpOwogICAgICAgIH0gZWxzZWlmICgkYXV0b21hdGljUGFkZGluZyA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkdGhpcy0+YXV0b21hdGljUGFkZGluZyA9IEVuY3J5cHRpb246Ok1BWF9DT01QQVRJQklMSVRZX1BBWUxPQURfTEVOR1RIOwogICAgICAgIH0gZWxzZWlmICgkYXV0b21hdGljUGFkZGluZyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJHRoaXMtPmF1dG9tYXRpY1BhZGRpbmcgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5hdXRvbWF0aWNQYWRkaW5nID0gJGF1dG9tYXRpY1BhZGRpbmc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJldXNlVkFQSURIZWFkZXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJldXNlVkFQSURIZWFkZXJzOwogICAgfQoKICAgIC8qKgogICAgICogUmV1c2UgVkFQSUQgaGVhZGVycyBpbiB0aGUgc2FtZSBmbHVzaCBzZXNzaW9uIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKICAgICAqIEBwYXJhbSBib29sICRlbmFibGVkCiAgICAgKgogICAgICogQHJldHVybiBXZWJQdXNoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXVzZVZBUElESGVhZGVycyhib29sICRlbmFibGVkKQogICAgewogICAgICAgICR0aGlzLT5yZXVzZVZBUElESGVhZGVycyA9ICRlbmFibGVkOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGVmYXVsdE9wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRlZmF1bHRPcHRpb25zIEtleXMgJ1RUTCcgKFRpbWUgVG8gTGl2ZSwgZGVmYXVsdHMgNCB3ZWVrcyksICd1cmdlbmN5JywgJ3RvcGljJywgJ2JhdGNoU2l6ZScKICAgICAqCiAgICAgKiBAcmV0dXJuIFdlYlB1c2gKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKGFycmF5ICRkZWZhdWx0T3B0aW9ucykKICAgIHsKICAgICAgICAkdGhpcy0+ZGVmYXVsdE9wdGlvbnNbJ1RUTCddID0gaXNzZXQoJGRlZmF1bHRPcHRpb25zWydUVEwnXSkgPyAkZGVmYXVsdE9wdGlvbnNbJ1RUTCddIDogMjQxOTIwMDsKICAgICAgICAkdGhpcy0+ZGVmYXVsdE9wdGlvbnNbJ3VyZ2VuY3knXSA9IGlzc2V0KCRkZWZhdWx0T3B0aW9uc1sndXJnZW5jeSddKSA/ICRkZWZhdWx0T3B0aW9uc1sndXJnZW5jeSddIDogbnVsbDsKICAgICAgICAkdGhpcy0+ZGVmYXVsdE9wdGlvbnNbJ3RvcGljJ10gPSBpc3NldCgkZGVmYXVsdE9wdGlvbnNbJ3RvcGljJ10pID8gJGRlZmF1bHRPcHRpb25zWyd0b3BpYyddIDogbnVsbDsKICAgICAgICAkdGhpcy0+ZGVmYXVsdE9wdGlvbnNbJ2JhdGNoU2l6ZSddID0gaXNzZXQoJGRlZmF1bHRPcHRpb25zWydiYXRjaFNpemUnXSkgPyAkZGVmYXVsdE9wdGlvbnNbJ2JhdGNoU2l6ZSddIDogMTAwMDsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50UGVuZGluZ05vdGlmaWNhdGlvbnMoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgIT09ICR0aGlzLT5ub3RpZmljYXRpb25zID8gY291bnQoJHRoaXMtPm5vdGlmaWNhdGlvbnMpIDogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGF1ZGllbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50RW5jb2RpbmcKICAgICAqIEBwYXJhbSBhcnJheSAkdmFwaWQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEB0aHJvd3MgXEVycm9yRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0VkFQSURIZWFkZXJzKHN0cmluZyAkYXVkaWVuY2UsIHN0cmluZyAkY29udGVudEVuY29kaW5nLCBhcnJheSAkdmFwaWQpCiAgICB7CiAgICAgICAgJHZhcGlkSGVhZGVycyA9IG51bGw7CgogICAgICAgICRjYWNoZV9rZXkgPSBudWxsOwogICAgICAgIGlmICgkdGhpcy0+cmV1c2VWQVBJREhlYWRlcnMpIHsKICAgICAgICAgICAgJGNhY2hlX2tleSA9IGltcGxvZGUoJyMnLCBbJGF1ZGllbmNlLCAkY29udGVudEVuY29kaW5nLCBjcmMzMihzZXJpYWxpemUoJHZhcGlkKSldKTsKICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGNhY2hlX2tleSwgJHRoaXMtPnZhcGlkSGVhZGVycykpIHsKICAgICAgICAgICAgICAgICR2YXBpZEhlYWRlcnMgPSAkdGhpcy0+dmFwaWRIZWFkZXJzWyRjYWNoZV9rZXldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISR2YXBpZEhlYWRlcnMpIHsKICAgICAgICAgICAgJHZhcGlkSGVhZGVycyA9IFZBUElEOjpnZXRWYXBpZEhlYWRlcnMoJGF1ZGllbmNlLCAkdmFwaWRbJ3N1YmplY3QnXSwgJHZhcGlkWydwdWJsaWNLZXknXSwgJHZhcGlkWydwcml2YXRlS2V5J10sICRjb250ZW50RW5jb2RpbmcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5yZXVzZVZBUElESGVhZGVycykgewogICAgICAgICAgICAkdGhpcy0+dmFwaWRIZWFkZXJzWyRjYWNoZV9rZXldID0gJHZhcGlkSGVhZGVyczsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFwaWRIZWFkZXJzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/build-phar.sh</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgYmFzaAoKYmFzZWRpcj0kKCBkaXJuYW1lICQoIHJlYWRsaW5rIC1mICR7QkFTSF9TT1VSQ0VbMF19ICkgKQoKcGhwIC1kcGhhci5yZWFkb25seT0wICIkYmFzZWRpci9vdGhlci9idWlsZF9waGFyLnBocCIgJCo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogICAgICAgICAicGFyYWdvbmllL3JhbmRvbV9jb21wYXQiLAogICJkZXNjcmlwdGlvbiI6ICAiUEhQIDUueCBwb2x5ZmlsbCBmb3IgcmFuZG9tX2J5dGVzKCkgYW5kIHJhbmRvbV9pbnQoKSBmcm9tIFBIUCA3IiwKICAia2V5d29yZHMiOiBbCiAgICAiY3Nwcm5nIiwKICAgICJyYW5kb20iLAogICAgInBvbHlmaWxsIiwKICAgICJwc2V1ZG9yYW5kb20iCiAgXSwKICAibGljZW5zZSI6ICAgICAgIk1JVCIsCiAgInR5cGUiOiAgICAgICAgICJsaWJyYXJ5IiwKICAiYXV0aG9ycyI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAgICAgIlBhcmFnb24gSW5pdGlhdGl2ZSBFbnRlcnByaXNlcyIsCiAgICAgICJlbWFpbCI6ICAgICJzZWN1cml0eUBwYXJhZ29uaWUuY29tIiwKICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vcGFyYWdvbmllLmNvbSIKICAgIH0KICBdLAogICJzdXBwb3J0IjogewogICAgImlzc3VlcyI6ICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3BhcmFnb25pZS9yYW5kb21fY29tcGF0L2lzc3VlcyIsCiAgICAiZW1haWwiOiAgICAgICJpbmZvQHBhcmFnb25pZS5jb20iLAogICAgInNvdXJjZSI6ICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3BhcmFnb25pZS9yYW5kb21fY29tcGF0IgogIH0sCiAgInJlcXVpcmUiOiB7CiAgICAicGhwIjogIl43IgogIH0sCiAgInJlcXVpcmUtZGV2IjogewogICAgInZpbWVvL3BzYWxtIjogIl4xIiwKICAgICJwaHB1bml0L3BocHVuaXQiOiAiNC4qfDUuKiIKICB9LAogICJzdWdnZXN0IjogewogICAgImV4dC1saWJzb2RpdW0iOiAiUHJvdmlkZXMgYSBtb2Rlcm4gY3J5cHRvIEFQSSB0aGF0IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBieXRlcy4iCiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/dist/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVFZCt3Q3FKRHJ4NUI0T2xkTTBkUUUwWk1YK2x4MVpXbQpwdWkwU1VxRDRHMjlMM05Hc3o5VWhKLzBIakJkYm5raElLNXh2aVQwWDV2dGphY0Y2YWpnY0NBcmJUQitkcytwCitoN1EwODROdVN1SXBOYjZZUGZvVUZnQy9DTDlrQW9jCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251UEcgdjIuMC4yMiAoTWluZ1czMikKCmlRRWNCQUFCQWdBR0JRSld0VzFoQUFvSkVHdVhvY0tDWkFUYUpmMEgrd2JaR2dza0sxZGNSVHN1VkpsOUlXaXAKUXdHdy9xSUtJMjgwU0Q2L2Nrb1VNeEtEQ0ppRnVQUjE0em1xblMzNms3TjVVTlBucGRUSlRTOFQxMWp0dFNwZwoxTENtZ3BiRUlwZ2FUYWgrY0VMRHFGQ2F2OTlmUytiRWlBTDVsV0RBSEJURS9YUGpHVkNxZWVoeVBZcmVmNElXCk5EQklFc3ZuSFBIUExzbjZYNWpxNCtZajVvVWl4Z3hhTVBpUitiY080U2grUnpPVkI2aTJEMHVwV2ZSWEJGWEEKTk5uc2c5L3pqdm9DN1pXNzN5OXVTSCtkUEpUdC9WZ2ZlaXY1Mi92NDFYbGl5emJVeUxhbGYwMkdOUFkrOWdvVgpKSEcxdWxFRUJKT0NpVUQ5Y0UxUFVJSndIQS9IcXloSEl2VjM1MFlvRUZpSGw4aVN3bTdTaVp1NWtQamFxNzQ9Cj1CNis4Ci0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/lib/random.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFJhbmRvbV8qIENvbXBhdGliaWxpdHkgTGlicmFyeQogKiBmb3IgdXNpbmcgdGhlIG5ldyBQSFAgNyByYW5kb21fKiBBUEkgaW4gUEhQIDUgcHJvamVjdHMKICoKICogQHZlcnNpb24gMi45OS45OQogKiBAcmVsZWFzZWQgMjAxOC0wNi0wNgogKgogKiBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKICoKICogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxOCBQYXJhZ29uIEluaXRpYXRpdmUgRW50ZXJwcmlzZXMKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICogU09GVFdBUkUuCiAqLwoKLy8gTk9QCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTUgUGFyYWdvbiBJbml0aWF0aXZlIEVudGVycHJpc2VzCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbApjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFClNPRlRXQVJFLgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/other/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/other/build_phar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGRpc3QgPSBkaXJuYW1lKF9fRElSX18pLicvZGlzdCc7CmlmICghaXNfZGlyKCRkaXN0KSkgewogICAgbWtkaXIoJGRpc3QsIDA3NTUpOwp9CmlmIChmaWxlX2V4aXN0cygkZGlzdC4nL3JhbmRvbV9jb21wYXQucGhhcicpKSB7CiAgICB1bmxpbmsoJGRpc3QuJy9yYW5kb21fY29tcGF0LnBoYXInKTsKfQokcGhhciA9IG5ldyBQaGFyKAogICAgJGRpc3QuJy9yYW5kb21fY29tcGF0LnBoYXInLAogICAgRmlsZXN5c3RlbUl0ZXJhdG9yOjpDVVJSRU5UX0FTX0ZJTEVJTkZPIHwgXEZpbGVzeXN0ZW1JdGVyYXRvcjo6S0VZX0FTX0ZJTEVOQU1FLAogICAgJ3JhbmRvbV9jb21wYXQucGhhcicKKTsKcmVuYW1lKAogICAgZGlybmFtZShfX0RJUl9fKS4nL2xpYi9yYW5kb20ucGhwJywgCiAgICBkaXJuYW1lKF9fRElSX18pLicvbGliL2luZGV4LnBocCcKKTsKJHBoYXItPmJ1aWxkRnJvbURpcmVjdG9yeShkaXJuYW1lKF9fRElSX18pLicvbGliJyk7CnJlbmFtZSgKICAgIGRpcm5hbWUoX19ESVJfXykuJy9saWIvaW5kZXgucGhwJywgCiAgICBkaXJuYW1lKF9fRElSX18pLicvbGliL3JhbmRvbS5waHAnCik7CgovKioKICogSWYgd2UgcGFzcyBhbiAob3B0aW9uYWwpIHBhdGggdG8gYSBwcml2YXRlIGtleSBhcyBhIHNlY29uZCBhcmd1bWVudCwgd2Ugd2lsbAogKiBzaWduIHRoZSBQaGFyIHdpdGggT3BlblNTTC4KICogCiAqIElmIHlvdSBsZWF2ZSB0aGlzIG91dCwgaXQgd2lsbCBwcm9kdWNlIGFuIHVuc2lnbmVkIC5waGFyIQogKi8KaWYgKCRhcmdjID4gMSkgewogICAgaWYgKCFAaXNfcmVhZGFibGUoJGFyZ3ZbMV0pKSB7CiAgICAgICAgZWNobyAnQ291bGQgbm90IHJlYWQgdGhlIHByaXZhdGUga2V5IGZpbGU6JywgJGFyZ3ZbMV0sICJcbiI7CiAgICAgICAgZXhpdCgyNTUpOwogICAgfQogICAgJHBrZXlGaWxlID0gZmlsZV9nZXRfY29udGVudHMoJGFyZ3ZbMV0pOwogICAgCiAgICAkcHJpdmF0ZSA9IG9wZW5zc2xfZ2V0X3ByaXZhdGVrZXkoJHBrZXlGaWxlKTsKICAgIGlmICgkcHJpdmF0ZSAhPT0gZmFsc2UpIHsKICAgICAgICAkcGtleSA9ICcnOwogICAgICAgIG9wZW5zc2xfcGtleV9leHBvcnQoJHByaXZhdGUsICRwa2V5KTsKICAgICAgICAkcGhhci0+c2V0U2lnbmF0dXJlQWxnb3JpdGhtKFBoYXI6Ok9QRU5TU0wsICRwa2V5KTsKICAgICAgICAKICAgICAgICAvKioKICAgICAgICAgKiBTYXZlIHRoZSBjb3JyZXNwb25kaW5nIHB1YmxpYyBrZXkgdG8gdGhlIGZpbGUKICAgICAgICAgKi8KICAgICAgICBpZiAoIUBpc19yZWFkYWJsZSgkZGlzdC4nL3JhbmRvbV9jb21wYXQucGhhci5wdWJrZXknKSkgewogICAgICAgICAgICAkZGV0YWlscyA9IG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscygkcHJpdmF0ZSk7CiAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKAogICAgICAgICAgICAgICAgJGRpc3QuJy9yYW5kb21fY29tcGF0LnBoYXIucHVia2V5JywKICAgICAgICAgICAgICAgICRkZXRhaWxzWydrZXknXQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAnQW4gZXJyb3Igb2NjdXJyZWQgcmVhZGluZyB0aGUgcHJpdmF0ZSBrZXkgZnJvbSBPcGVuU1NMLicsICJcbiI7CiAgICAgICAgZXhpdCgyNTUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/psalm-autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSAnbGliL2J5dGVfc2FmZV9zdHJpbmdzLnBocCc7CnJlcXVpcmVfb25jZSAnbGliL2Nhc3RfdG9faW50LnBocCc7CnJlcXVpcmVfb25jZSAnbGliL2Vycm9yX3BvbHlmaWxsLnBocCc7CnJlcXVpcmVfb25jZSAnb3RoZXIvaWRlX3N0dWJzL2xpYnNvZGl1bS5waHAnOwpyZXF1aXJlX29uY2UgJ2xpYi9yYW5kb20ucGhwJzsKCiRpbnQgPSByYW5kb21faW50KDAsIDY1NTM2KTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/random_compat/psalm.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxwc2FsbQogICAgYXV0b2xvYWRlcj0icHNhbG0tYXV0b2xvYWQucGhwIgogICAgc3RvcE9uRmlyc3RFcnJvcj0iZmFsc2UiCiAgICB1c2VEb2NibG9ja1R5cGVzPSJ0cnVlIgo+CiAgICA8cHJvamVjdEZpbGVzPgogICAgICAgIDxkaXJlY3RvcnkgbmFtZT0ibGliIiAvPgogICAgPC9wcm9qZWN0RmlsZXM+CiAgICA8aXNzdWVIYW5kbGVycz4KICAgICAgICA8UmVkdW5kYW50Q29uZGl0aW9uR2l2ZW5Eb2NibG9ja1R5cGUgZXJyb3JMZXZlbD0iaW5mbyIgLz4KICAgICAgICA8VW5yZXNvbHZhYmxlSW5jbHVkZSBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgICAgIDxEdXBsaWNhdGVDbGFzcyBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgICAgIDxJbnZhbGlkT3BlcmFuZCBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgICAgIDxVbmRlZmluZWRDb25zdGFudCBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgICAgIDxNaXNzaW5nUmV0dXJuVHlwZSBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgICAgIDxJbnZhbGlkUmV0dXJuVHlwZSBlcnJvckxldmVsPSJpbmZvIiAvPgogICAgPC9pc3N1ZUhhbmRsZXJzPgo8L3BzYWxtPgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/appveyor.yml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YnVpbGQ6IGZhbHNlCnNoYWxsb3dfY2xvbmU6IGZhbHNlCnBsYXRmb3JtOgogIC0geDg2CiAgLSB4NjQKY2xvbmVfZm9sZGVyOiBDOlxwcm9qZWN0c1xzb2RpdW1fY29tcGF0CmltYWdlOiBWaXN1YWwgU3R1ZGlvIDIwMTcKCmluc3RhbGw6CiAgLSBjaW5zdCAteSBPcGVuU1NMLkxpZ2h0CiAgLSBTRVQgUEFUSD1DOlxQcm9ncmFtIEZpbGVzXE9wZW5TU0w7JVBBVEglCiAgLSBzYyBjb25maWcgd3VhdXNlcnYgc3RhcnQ9IGF1dG8KICAtIG5ldCBzdGFydCB3dWF1c2VydgogIC0gY2luc3QgLXkgcGhwIC0tdmVyc2lvbiA1LjYuMzAKICAtIGNkIGM6XHRvb2xzXHBocDU2CiAgLSBjb3B5IHBocC5pbmktcHJvZHVjdGlvbiBwaHAuaW5pCiAgLSBlY2hvIGRhdGUudGltZXpvbmU9IlVUQyIgPj4gcGhwLmluaQogIC0gZWNobyBleHRlbnNpb25fZGlyPWV4dCA+PiBwaHAuaW5pCiAgLSBlY2hvIGV4dGVuc2lvbj1waHBfb3BlbnNzbC5kbGwgPj4gcGhwLmluaQogIC0gY2QgQzpccHJvamVjdHNcc29kaXVtX2NvbXBhdAogIC0gU0VUIFBBVEg9QzpcdG9vbHNccGhwNTY7JVBBVEglCiAgLSBwaHAuZXhlIC1yICJyZWFkZmlsZSgnaHR0cDovL2dldGNvbXBvc2VyLm9yZy9pbnN0YWxsZXInKTsiIHwgcGhwLmV4ZQogIC0gcGhwLmV4ZSBjb21wb3Nlci5waGFyIGluc3RhbGwgLS1wcmVmZXItc291cmNlIC0tbm8taW50ZXJhY3Rpb24KCnRlc3Rfc2NyaXB0OgogIC0gY2QgQzpccHJvamVjdHNcc29kaXVtX2NvbXBhdAogIC0gdmVuZG9yXGJpblxwaHB1bml0LmJhdCB0ZXN0cy9XaW5kb3dzMzJUZXN0LnBocAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/autoload-fast.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSAnYXV0b2xvYWQucGhwJzsKUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCA9IHRydWU7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/autoload-pedantic.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSAnYXV0b2xvYWQucGhwJzsKZGVmaW5lKCdET19QRURBTlRJQ19URVNUJywgdHJ1ZSk7CgpQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0ID0gdHJ1ZTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bUNvbXBhdEF1dG9sb2FkZXInKSkgewogICAgLyoqCiAgICAgKiBTb2RpdW1fQ29tcGF0IGF1dG9sb2FkZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3MgQ2xhc3MgbmFtZSB0byBiZSBhdXRvbG9hZGVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCAgICAgICAgIFN0b3AgYXV0b2xvYWRpbmc/CiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bUNvbXBhdEF1dG9sb2FkZXIoJGNsYXNzKQogICAgewogICAgICAgICRuYW1lc3BhY2UgPSAnUGFyYWdvbklFX1NvZGl1bV8nOwogICAgICAgIC8vIERvZXMgdGhlIGNsYXNzIHVzZSB0aGUgbmFtZXNwYWNlIHByZWZpeD8KICAgICAgICAkbGVuID0gc3RybGVuKCRuYW1lc3BhY2UpOwogICAgICAgIGlmIChzdHJuY21wKCRuYW1lc3BhY2UsICRjbGFzcywgJGxlbikgIT09IDApIHsKICAgICAgICAgICAgLy8gbm8sIG1vdmUgdG8gdGhlIG5leHQgcmVnaXN0ZXJlZCBhdXRvbG9hZGVyCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEdldCB0aGUgcmVsYXRpdmUgY2xhc3MgbmFtZQogICAgICAgICRyZWxhdGl2ZV9jbGFzcyA9IHN1YnN0cigkY2xhc3MsICRsZW4pOwoKICAgICAgICAvLyBSZXBsYWNlIHRoZSBuYW1lc3BhY2UgcHJlZml4IHdpdGggdGhlIGJhc2UgZGlyZWN0b3J5LCByZXBsYWNlIG5hbWVzcGFjZQogICAgICAgIC8vIHNlcGFyYXRvcnMgd2l0aCBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBpbiB0aGUgcmVsYXRpdmUgY2xhc3MgbmFtZSwgYXBwZW5kCiAgICAgICAgLy8gd2l0aCAucGhwCiAgICAgICAgJGZpbGUgPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvc3JjLycgLiBzdHJfcmVwbGFjZSgnXycsICcvJywgJHJlbGF0aXZlX2NsYXNzKSAuICcucGhwJzsKICAgICAgICAvLyBpZiB0aGUgZmlsZSBleGlzdHMsIHJlcXVpcmUgaXQKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7CiAgICAgICAgICAgIHJlcXVpcmVfb25jZSAkZmlsZTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuIGF1dG9sb2FkZXIsIGxldCdzIHJlZ2lzdGVyIGl0IQogICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKCdzb2RpdW1Db21wYXRBdXRvbG9hZGVyJyk7Cn0KCnJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvc3JjL1NvZGl1bUV4Y2VwdGlvbi5waHAnOwppZiAoUEhQX1ZFUlNJT05fSUQgPj0gNTAzMDApIHsKICAgIC8vIE5hbWVzcGFjZXMgZGlkbid0IGV4aXN0IGJlZm9yZSA1LjMuMCwgc28gZG9uJ3QgZXZlbiB0cnkgdG8gdXNlIHRoaXMKICAgIC8vIHVubGVzcyBQSFAgPj0gNS4zLjAKICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL25hbWVzcGFjZWQucGhwJzsKICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL3NvZGl1bV9jb21wYXQucGhwJzsKfQppZiAoUEhQX1ZFUlNJT05fSUQgPCA3MDIwMCB8fCAhZXh0ZW5zaW9uX2xvYWRlZCgnc29kaXVtJykpIHsKICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL3BocDcyY29tcGF0LnBocCc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/build-phar.sh</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgYmFzaAoKY3VybCAtTFNzIGh0dHBzOi8vYm94LXByb2plY3QuZ2l0aHViLmlvL2JveDIvaW5zdGFsbGVyLnBocCB8IHBocApta2RpciB+L2JveAptdiBib3gucGhhciB+L2JveC9ib3gKUEFUSD0kUEFUSDp+L2JveC8gbWFrZSAtQyBkaXN0LyBidWlsZC1waGFyCiMgUEFUSD0kUEFUSDp+L2JveC8gbWFrZSAtQyBkaXN0LyBzaWduLXBoYXIKCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICJuYW1lIjogInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IiwKICAiZGVzY3JpcHRpb24iOiAiUHVyZSBQSFAgaW1wbGVtZW50YXRpb24gb2YgbGlic29kaXVtOyB1c2VzIHRoZSBQSFAgZXh0ZW5zaW9uIGlmIGl0IGV4aXN0cyIsCiAgImtleXdvcmRzIjogWwogICAgIlBIUCIsCiAgICAiY3J5cHRvZ3JhcGh5IiwKICAgICJlbGxpcHRpYyBjdXJ2ZSIsCiAgICAiZWxsaXB0aWMgY3VydmUgY3J5cHRvZ3JhcGh5IiwKICAgICJQdXJlLVBIUCBjcnlwdG9ncmFwaHkiLAogICAgInNpZGUtY2hhbm5lbCByZXNpc3RhbnQiLAogICAgIkN1cnZlMjU1MTkiLAogICAgIlgyNTUxOSIsCiAgICAiRUNESCIsCiAgICAiRWxsaXB0aWMgQ3VydmUgRGlmZmllLUhlbGxtYW4iLAogICAgIkVkMjU1MTkiLAogICAgIlJGQyA3NzQ4IiwKICAgICJSRkMgODAzMiIsCiAgICAiRWREU0EiLAogICAgIkVkd2FyZHMtY3VydmUgRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIiwKICAgICJDaGFDaGEyMCIsCiAgICAiU2Fsc2EyMCIsCiAgICAiWGNoYWNoYTIwIiwKICAgICJYc2Fsc2EyMCIsCiAgICAiUG9seTEzMDUiLAogICAgIkJMQUtFMmIiLAogICAgInB1YmxpYy1rZXkgY3J5cHRvZ3JhcGh5IiwKICAgICJzZWNyZXQta2V5IGNyeXB0b2dyYXBoeSIsCiAgICAiQUVBRCIsCiAgICAiQ2hhcG9seSIsCiAgICAiU2FscG9seSIsCiAgICAiQ2hhQ2hhMjAtUG9seTEzMDUiLAogICAgIlhTYWxzYTIwLVBvbHkxMzA1IiwKICAgICJYQ2hhQ2hhMjAtUG9seTEzMDUiLAogICAgImVuY3J5cHRpb24iLAogICAgImF1dGhlbnRpY2F0aW9uIiwKICAgICJsaWJzb2RpdW0iCiAgXSwKICAibGljZW5zZSI6ICJJU0MiLAogICJhdXRob3JzIjogWwogICAgewogICAgICAibmFtZSI6ICJQYXJhZ29uIEluaXRpYXRpdmUgRW50ZXJwcmlzZXMiLAogICAgICAiZW1haWwiOiAic2VjdXJpdHlAcGFyYWdvbmllLmNvbSIKICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIkZyYW5rIERlbmlzIiwKICAgICAgImVtYWlsIjogImplZGlzY3QxQHB1cmVmdHBkLm9yZyIKICAgIH0KICBdLAogICJhdXRvbG9hZCI6IHsKICAgICJmaWxlcyI6IFsiYXV0b2xvYWQucGhwIl0KICB9LAogICJyZXF1aXJlIjogewogICAgInBocCI6ICJeNS4yLjR8XjUuM3xeNS40fF41LjV8XjUuNnxeN3xeOCIsCiAgICAicGFyYWdvbmllL3JhbmRvbV9jb21wYXQiOiAiPj0xIgogIH0sCiAgInJlcXVpcmUtZGV2IjogewogICAgInBocHVuaXQvcGhwdW5pdCI6ICJeM3xeNHxeNSIKICB9LAogICJzdWdnZXN0IjogewogICAgImV4dC1saWJzb2RpdW0iOiAiUEhQIDwgNy4wOiBCZXR0ZXIgcGVyZm9ybWFuY2UsIHBhc3N3b3JkIGhhc2hpbmcgKEFyZ29uMmkpLCBzZWN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXplcm8pLCBhbmQgYmV0dGVyIHNlY3VyaXR5LiIsCiAgICAiZXh0LXNvZGl1bSI6ICJQSFAgPj0gNy4wOiBCZXR0ZXIgcGVyZm9ybWFuY2UsIHBhc3N3b3JkIGhhc2hpbmcgKEFyZ29uMmkpLCBzZWN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1lbXplcm8pLCBhbmQgYmV0dGVyIHNlY3VyaXR5LiIKICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/dist/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/dist/box.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgImNobW9kIjogIjA3NTUiLAogICAgImZpbmRlciI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJpbiI6ICIiLAogICAgICAgICAgICAibmFtZSI6ICJhdXRvbG9hZC5waHAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJpbiI6ICJzcmMiLAogICAgICAgICAgICAibmFtZSI6ICIqLnBocCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImluIjogImxpYiIsCiAgICAgICAgICAgICJuYW1lIjogIioucGhwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAiaW4iOiAidmVuZG9yL2NvbXBvc2VyIiwKICAgICAgICAgICAgIm5hbWUiOiAiKi5waHAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJpbiI6ICJ2ZW5kb3IvcGFyYWdvbmllIiwKICAgICAgICAgICAgIm5hbWUiOiAiKi5waHAiCiAgICAgICAgfQogICAgXSwKICAgICJjb21wYWN0b3JzIjogWwogICAgICAgICJIZXJyZXJhXFxCb3hcXENvbXBhY3RvclxcUGhwIgogICAgXSwKICAgICJtYWluIjogInZlbmRvci9hdXRvbG9hZC5waHAiLAogICAgIm91dHB1dCI6ICJzb2RpdW0tY29tcGF0LnBoYXIiLAogICAgInNoZWJhbmciOiBmYWxzZSwKICAgICJzdHViIjogdHJ1ZQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/dist/Makefile</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBUaGlzIGJ1aWxkcyBzb2RpdW0tY29tcGF0LnBoYXIuIFRvIHJ1biB0aGlzIE1ha2VmaWxlLCBgYm94YCBhbmQgYGNvbXBvc2VyYAojIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBpbiB5b3VyICRQQVRILiBSdW4gaXQgZnJvbSBpbnNpZGUgdGhlIGRpc3QvIGRpcmVjdG9yeS4KCmJveCA6PSAkKHNoZWxsIHdoaWNoIGJveCkKY29tcG9zZXIgOj0gImNvbXBvc2VyIgpnaXRjb21taXQgOj0gJChzaGVsbCBnaXQgcmV2LXBhcnNlIEhFQUQpCgouUEhPTlk6IGFsbAphbGw6IGJ1aWxkLXBoYXIKCi5QSE9OWTogc2lnbi1waGFyCnNpZ24tcGhhcjoKCWdwZyAtdSA3RjUyRDVDNjFEMTI1NUM3MzEzNjJFODI2Qjk3QTFDMjgyNjQwNERBIC0tYXJtb3IgLS1vdXRwdXQgc29kaXVtLWNvbXBhdC5waGFyLnNpZyAtLWRldGFjaC1zaWcgc29kaXVtLWNvbXBhdC5waGFyCgojIGVuc3VyZSB3ZSBydW4gaW4gY2xlYW4gdHJlZS4gZXhwb3J0IGdpdCB0cmVlIGFuZCBydW4gdGhlcmUuCi5QSE9OWTogYnVpbGQtcGhhcgpidWlsZC1waGFyOgoJQGVjaG8gIkNyZWF0aW5nIC5waGFyIGZyb20gcmV2aXNpb24gJChzaGVsbCBnaXQgcmV2LXBhcnNlIEhFQUQpLiIKCXJtIC1yZiB3b3JrdHJlZQoJaW5zdGFsbCAtZCB3b3JrdHJlZQoJKGNkICQoQ1VSRElSKS8uLjsgZ2l0IGFyY2hpdmUgSEVBRCkgfCB0YXIgLXggLUMgd29ya3RyZWUKCSQoTUFLRSkgLWYgJChDVVJESVIpL01ha2VmaWxlIC1DIHdvcmt0cmVlIHNvZGl1bS1jb21wYXQucGhhcgoJbXYgd29ya3RyZWUvKi5waGFyIC4KCXJtIC1yZiB3b3JrdHJlZQoKLlBIT05ZOiBjbGVhbgpjbGVhbjoKCXJtIC12ZiBzb2RpdW0tY29tcGF0LnBoYXIgc29kaXVtLWNvbXBhdC5waGFyLnNpZwoKIyBJbnNpZGUgd29ya2Rpci86Cgpzb2RpdW0tY29tcGF0LnBoYXI6IGRpc3QvYm94Lmpzb24gY29tcG9zZXIubG9jawoJY3AgZGlzdC9ib3guanNvbiAuCglwaHAgLWQgcGhhci5yZWFkb25seT0wICQoYm94KSBidWlsZCAtYyBib3guanNvbiAtdgoKY29tcG9zZXIubG9jazoKCSQoY29tcG9zZXIpIGNvbmZpZyBhdXRvbG9hZGVyLXN1ZmZpeCAkKGdpdGNvbW1pdCkKCSQoY29tcG9zZXIpIGluc3RhbGwgLS1uby1kZXYKCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/lib/constants.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNvZGl1bTsKCnVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDsKCmNvbnN0IENSWVBUT19BRUFEX0FFUzI1NkdDTV9LRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQUVBRF9BRVMyNTZHQ01fS0VZQllURVM7CmNvbnN0IENSWVBUT19BRUFEX0FFUzI1NkdDTV9OU0VDQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0FFQURfQUVTMjU2R0NNX05TRUNCWVRFUzsKY29uc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05QVUJCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQUVBRF9BRVMyNTZHQ01fTlBVQkJZVEVTOwpjb25zdCBDUllQVE9fQUVBRF9BRVMyNTZHQ01fQUJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19BRUFEX0FFUzI1NkdDTV9BQllURVM7CmNvbnN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9LRVlCWVRFUzsKY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OU0VDQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OU0VDQllURVM7CmNvbnN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfTlBVQkJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfTlBVQkJZVEVTOwpjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUzsKY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9LRVlCWVRFUzsKY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05TRUNCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlNFQ0JZVEVTOwpjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9OUFVCQllURVM7CmNvbnN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9BQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0FCWVRFUzsKY29uc3QgQ1JZUFRPX0FVVEhfQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0FVVEhfQllURVM7CmNvbnN0IENSWVBUT19BVVRIX0tFWUJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19BVVRIX0tFWUJZVEVTOwpjb25zdCBDUllQVE9fQk9YX1NFQUxCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX1NFQUxCWVRFUzsKY29uc3QgQ1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTOwpjb25zdCBDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfUFVCTElDS0VZQllURVM7CmNvbnN0IENSWVBUT19CT1hfS0VZUEFJUkJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfS0VZUEFJUkJZVEVTOwpjb25zdCBDUllQVE9fQk9YX01BQ0JZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfTUFDQllURVM7CmNvbnN0IENSWVBUT19CT1hfTk9OQ0VCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX05PTkNFQllURVM7CmNvbnN0IENSWVBUT19CT1hfU0VFREJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfU0VFREJZVEVTOwpjb25zdCBDUllQVE9fS1hfQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0tYX0JZVEVTOwpjb25zdCBDUllQVE9fS1hfU0VFREJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19LWF9TRUVEQllURVM7CmNvbnN0IENSWVBUT19LWF9QVUJMSUNLRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fS1hfUFVCTElDS0VZQllURVM7CmNvbnN0IENSWVBUT19LWF9TRUNSRVRLRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fS1hfU0VDUkVUS0VZQllURVM7CmNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9CWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fR0VORVJJQ0hBU0hfQllURVM7CmNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9CWVRFU19NSU4gPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01JTjsKY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01BWCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYOwpjb25zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTOwpjb25zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NSU47CmNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NQVggPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01BWDsKY29uc3QgQ1JZUFRPX1NDQUxBUk1VTFRfQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NDQUxBUk1VTFRfQllURVM7CmNvbnN0IENSWVBUT19TQ0FMQVJNVUxUX1NDQUxBUkJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TQ0FMQVJNVUxUX1NDQUxBUkJZVEVTOwpjb25zdCBDUllQVE9fU0hPUlRIQVNIX0JZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TSE9SVEhBU0hfQllURVM7CmNvbnN0IENSWVBUT19TSE9SVEhBU0hfS0VZQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NIT1JUSEFTSF9LRVlCWVRFUzsKY29uc3QgQ1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTOwpjb25zdCBDUllQVE9fU0VDUkVUQk9YX01BQ0JZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TRUNSRVRCT1hfTUFDQllURVM7CmNvbnN0IENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVM7CmNvbnN0IENSWVBUT19TSUdOX0JZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TSUdOX0JZVEVTOwpjb25zdCBDUllQVE9fU0lHTl9TRUVEQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NJR05fU0VFREJZVEVTOwpjb25zdCBDUllQVE9fU0lHTl9QVUJMSUNLRVlCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0lHTl9QVUJMSUNLRVlCWVRFUzsKY29uc3QgQ1JZUFRPX1NJR05fU0VDUkVUS0VZQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NJR05fU0VDUkVUS0VZQllURVM7CmNvbnN0IENSWVBUT19TSUdOX0tFWVBBSVJCWVRFUyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0lHTl9LRVlQQUlSQllURVM7CmNvbnN0IENSWVBUT19TVFJFQU1fS0VZQllURVMgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NUUkVBTV9LRVlCWVRFUzsKY29uc3QgQ1JZUFRPX1NUUkVBTV9OT05DRUJZVEVTID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TVFJFQU1fTk9OQ0VCWVRFUzsK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/lib/namespaced.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChQSFBfVkVSU0lPTl9JRCA8IDUwMzAwKSB7CiAgICByZXR1cm47Cn0KCi8qCiAqIFRoaXMgZmlsZSBpcyBqdXN0IGZvciBjb252ZW5pZW5jZSwgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byByZWR1Y2UgdmVyYm9zaXR5IHdoZW4KICogdGhleSBhZGQgdGhpcyBwcm9qZWN0IHRvIHRoZWlyIGxpYnJhcmllcy4KICoKICogUmVwbGFjZSB0aGlzOgogKgogKiAkeCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KC4uLiRhcmdzKTsKICoKICogd2l0aCB0aGlzOgogKgogKiB1c2UgUGFyYWdvbklFXFNvZGl1bVxDb21wYXQ7CiAqCiAqICR4ID0gQ29tcGF0OjpjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KC4uLiRhcmdzKTsKICovCnNwbF9hdXRvbG9hZF9yZWdpc3RlcihmdW5jdGlvbiAoJGNsYXNzKSB7CiAgICBpZiAoJGNsYXNzWzBdID09PSAnXFwnKSB7CiAgICAgICAgJGNsYXNzID0gc3Vic3RyKCRjbGFzcywgMSk7CiAgICB9CiAgICAkbmFtZXNwYWNlID0gJ1BhcmFnb25JRVxcU29kaXVtJzsKICAgIC8vIERvZXMgdGhlIGNsYXNzIHVzZSB0aGUgbmFtZXNwYWNlIHByZWZpeD8KICAgICRsZW4gPSBzdHJsZW4oJG5hbWVzcGFjZSk7CiAgICBpZiAoc3RybmNtcCgkbmFtZXNwYWNlLCAkY2xhc3MsICRsZW4pICE9PSAwKSB7CiAgICAgICAgLy8gbm8sIG1vdmUgdG8gdGhlIG5leHQgcmVnaXN0ZXJlZCBhdXRvbG9hZGVyCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIEdldCB0aGUgcmVsYXRpdmUgY2xhc3MgbmFtZQogICAgJHJlbGF0aXZlX2NsYXNzID0gc3Vic3RyKCRjbGFzcywgJGxlbik7CgogICAgLy8gUmVwbGFjZSB0aGUgbmFtZXNwYWNlIHByZWZpeCB3aXRoIHRoZSBiYXNlIGRpcmVjdG9yeSwgcmVwbGFjZSBuYW1lc3BhY2UKICAgIC8vIHNlcGFyYXRvcnMgd2l0aCBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBpbiB0aGUgcmVsYXRpdmUgY2xhc3MgbmFtZSwgYXBwZW5kCiAgICAvLyB3aXRoIC5waHAKICAgICRmaWxlID0gZGlybmFtZShfX0RJUl9fKSAuICcvbmFtZXNwYWNlZC8nIC4gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcmVsYXRpdmVfY2xhc3MpIC4gJy5waHAnOwogICAgLy8gaWYgdGhlIGZpbGUgZXhpc3RzLCByZXF1aXJlIGl0CiAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7CiAgICAgICAgcmVxdWlyZV9vbmNlICRmaWxlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9KTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/lib/php72compat.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBUaGlzIGZpbGUgd2lsbCBtb25rZXkgcGF0Y2ggdGhlIHB1cmUtUEhQIGltcGxlbWVudGF0aW9uIGluIHBsYWNlIG9mIHRoZQogKiBQRUNMIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLCBidXQgb25seSBpZiB0aGV5IGRvIG5vdCBhbHJlYWR5IGV4aXN0LgogKgogKiBUaHVzLCB0aGUgZnVuY3Rpb25zIG9yIGNvbnN0YW50cyBqdXN0IHByb3h5IHRvIHRoZSBhcHByb3ByaWF0ZQogKiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdCBtZXRob2Qgb3IgY2xhc3MgY29uc3RhbnQsIHJlc3BlY3RpdmVseS4KICovCmZvcmVhY2ggKGFycmF5KAogICAgJ0NSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMnLAogICAgJ0NSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfTlNFQ0JZVEVTJywKICAgICdDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05QVUJCWVRFUycsCiAgICAnQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9BQllURVMnLAogICAgJ0NSWVBUT19BRUFEX0FFUzI1NkdDTV9LRVlCWVRFUycsCiAgICAnQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05TRUNCWVRFUycsCiAgICAnQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05QVUJCWVRFUycsCiAgICAnQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUycsCiAgICAnQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTJywKICAgICdDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlNFQ0JZVEVTJywKICAgICdDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTJywKICAgICdDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfQUJZVEVTJywKICAgICdDUllQVE9fQVVUSF9CWVRFUycsCiAgICAnQ1JZUFRPX0FVVEhfS0VZQllURVMnLAogICAgJ0NSWVBUT19CT1hfU0VBTEJZVEVTJywKICAgICdDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTJywKICAgICdDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTJywKICAgICdDUllQVE9fQk9YX0tFWVBBSVJCWVRFUycsCiAgICAnQ1JZUFRPX0JPWF9NQUNCWVRFUycsCiAgICAnQ1JZUFRPX0JPWF9OT05DRUJZVEVTJywKICAgICdDUllQVE9fQk9YX1NFRURCWVRFUycsCiAgICAnQ1JZUFRPX0tYX0JZVEVTJywKICAgICdDUllQVE9fS1hfU0VFREJZVEVTJywKICAgICdDUllQVE9fS1hfUFVCTElDS0VZQllURVMnLAogICAgJ0NSWVBUT19LWF9TRUNSRVRLRVlCWVRFUycsCiAgICAnQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTJywKICAgICdDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUlOJywKICAgICdDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYJywKICAgICdDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVMnLAogICAgJ0NSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NSU4nLAogICAgJ0NSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NQVgnLAogICAgJ0NSWVBUT19QV0hBU0hfU0FMVEJZVEVTJywKICAgICdDUllQVE9fUFdIQVNIX1NUUlBSRUZJWCcsCiAgICAnQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySTEzJywKICAgICdDUllQVE9fUFdIQVNIX0FMR19BUkdPTjJJRDEzJywKICAgICdDUllQVE9fUFdIQVNIX01FTUxJTUlUX0lOVEVSQUNUSVZFJywKICAgICdDUllQVE9fUFdIQVNIX09QU0xJTUlUX0lOVEVSQUNUSVZFJywKICAgICdDUllQVE9fUFdIQVNIX01FTUxJTUlUX01PREVSQVRFJywKICAgICdDUllQVE9fUFdIQVNIX09QU0xJTUlUX01PREVSQVRFJywKICAgICdDUllQVE9fUFdIQVNIX01FTUxJTUlUX1NFTlNJVElWRScsCiAgICAnQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9TRU5TSVRJVkUnLAogICAgJ0NSWVBUT19TQ0FMQVJNVUxUX0JZVEVTJywKICAgICdDUllQVE9fU0NBTEFSTVVMVF9TQ0FMQVJCWVRFUycsCiAgICAnQ1JZUFRPX1NIT1JUSEFTSF9CWVRFUycsCiAgICAnQ1JZUFRPX1NIT1JUSEFTSF9LRVlCWVRFUycsCiAgICAnQ1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUycsCiAgICAnQ1JZUFRPX1NFQ1JFVEJPWF9NQUNCWVRFUycsCiAgICAnQ1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTJywKICAgICdDUllQVE9fU0lHTl9CWVRFUycsCiAgICAnQ1JZUFRPX1NJR05fU0VFREJZVEVTJywKICAgICdDUllQVE9fU0lHTl9QVUJMSUNLRVlCWVRFUycsCiAgICAnQ1JZUFRPX1NJR05fU0VDUkVUS0VZQllURVMnLAogICAgJ0NSWVBUT19TSUdOX0tFWVBBSVJCWVRFUycsCiAgICAnQ1JZUFRPX1NUUkVBTV9LRVlCWVRFUycsCiAgICAnQ1JZUFRPX1NUUkVBTV9OT05DRUJZVEVTJywKICAgICdMSUJSQVJZX1ZFUlNJT05fTUFKT1InLAogICAgJ0xJQlJBUllfVkVSU0lPTl9NSU5PUicsCiAgICAnVkVSU0lPTl9TVFJJTkcnCiAgICApIGFzICRjb25zdGFudAopIHsKICAgIGlmICghZGVmaW5lZCgiU09ESVVNXyRjb25zdGFudCIpKSB7CiAgICAgICAgZGVmaW5lKCJTT0RJVU1fJGNvbnN0YW50IiwgY29uc3RhbnQoIlBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokY29uc3RhbnQiKSk7CiAgICB9Cn0KCmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9iaW4yaGV4JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6aGV4MmJpbigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2JpbjJoZXgoJHN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmJpbjJoZXgoJHN0cmluZyk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NvbXBhcmUnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0Ojpjb21wYXJlKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NvbXBhcmUoJGEsICRiKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y29tcGFyZSgkYSwgJGIpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9kZWNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlczI1NmdjbV9kZWNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9IGNhdGNoIChFcnJvciAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2VuY3J5cHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlczI1NmdjbV9lbmNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUoKQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21faXNfYXZhaWxhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0gY2F0Y2ggKEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9rZXlnZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2tleWdlbigpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9rZXlnZW4oKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9rZXlnZW4oKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSk7CiAgICAgICAgfSBjYXRjaCAoRXJyb3IgJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfa2V5Z2VuKCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4oKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXksIHRydWUpOwogICAgICAgIH0gY2F0Y2ggKEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5LCB0cnVlKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2tleWdlbigpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4oKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4oKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2F1dGgnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYXV0aCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hdXRoKCRtZXNzYWdlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2F1dGgoJG1lc3NhZ2UsICRrZXkpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYXV0aF9rZXlnZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYXV0aF9rZXlnZW4oKQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hdXRoX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYXV0aF9rZXlnZW4oKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2F1dGhfdmVyaWZ5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2F1dGhfdmVyaWZ5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hYwogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2F1dGhfdmVyaWZ5KCRtYWMsICRtZXNzYWdlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2F1dGhfdmVyaWZ5KCRtYWMsICRtZXNzYWdlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2JveCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3goKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94KCRtZXNzYWdlLCAkbm9uY2UsICRrcCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3goJG1lc3NhZ2UsICRub25jZSwgJGtwKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2JveF9rZXlwYWlyJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9rZXlwYWlyKCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfa2V5cGFpcigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X2tleXBhaXIoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzaywgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkoJHNrLCAkcGspOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYm94X29wZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X29wZW4oJG1lc3NhZ2UsICRub25jZSwgJGtwKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9vcGVuKCRtZXNzYWdlLCAkbm9uY2UsICRrcCk7CiAgICAgICAgfSBjYXRjaCAoRXJyb3IgJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19ib3hfcHVibGlja2V5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9wdWJsaWNrZXkoKQogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2JveF9wdWJsaWNrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3B1YmxpY2tleSgka2V5cGFpcik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoKQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19ib3hfc2VhbCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VhbCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfc2VhbCgkbWVzc2FnZSwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VhbCgkbWVzc2FnZSwgJHB1YmxpY0tleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19ib3hfc2VhbF9vcGVuJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWFsX29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka3AKICAgICAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3NlYWxfb3BlbigkbWVzc2FnZSwgJGtwKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWFsX29wZW4oJG1lc3NhZ2UsICRrcCk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICBpZiAoJGV4LT5nZXRNZXNzYWdlKCkgPT09ICdBcmd1bWVudCAyIG11c3QgYmUgQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgbG9uZy4nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZXg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2JveF9zZWNyZXRrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlY3JldGtleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3NlY3JldGtleSgka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VjcmV0a2V5KCRrZXlwYWlyKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2JveF9zZWVkX2tleXBhaXInKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlZWRfa2V5cGFpcigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3NlZWRfa2V5cGFpcigkc2VlZCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VlZF9rZXlwYWlyKCRzZWVkKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAka2V5CiAgICAgKiBAcGFyYW0gaW50ICRvdXRMZW4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaCgkbWVzc2FnZSwgJGtleSA9IG51bGwsICRvdXRMZW4gPSAzMikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaCgkbWVzc2FnZSwgJGtleSwgJG91dExlbik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9maW5hbCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9maW5hbCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGN0eAogICAgICogQHBhcmFtIGludCAkb3V0cHV0TGVuZ3RoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWwoJiRjdHgsICRvdXRwdXRMZW5ndGggPSAzMikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9maW5hbCgkY3R4LCAkb3V0cHV0TGVuZ3RoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHBhcmFtIGludCAkb3V0TGVuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgka2V5ID0gbnVsbCwgJG91dExlbiA9IDMyKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoX2luaXQoJGtleSwgJG91dExlbik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9rZXlnZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Z2VuKCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9rZXlnZW4oKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF91cGRhdGUoKQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjdHgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKCYkY3R4LCAkbWVzc2FnZSA9ICcnKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKCRjdHgsICRtZXNzYWdlKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2t4JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2t4KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG15X3NlY3JldAogICAgICogQHBhcmFtIHN0cmluZyAkdGhlaXJfcHVibGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfcHVibGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfcHVibGljCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fa3goJG15X3NlY3JldCwgJHRoZWlyX3B1YmxpYywgJGNsaWVudF9wdWJsaWMsICRzZXJ2ZXJfcHVibGljKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2t4KAogICAgICAgICAgICAkbXlfc2VjcmV0LAogICAgICAgICAgICAkdGhlaXJfcHVibGljLAogICAgICAgICAgICAkY2xpZW50X3B1YmxpYywKICAgICAgICAgICAgJHNlcnZlcl9wdWJsaWMKICAgICAgICApOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fcHdoYXNoJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaCgpCiAgICAgKiBAcGFyYW0gaW50ICRvdXRsZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkc2FsdAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGFsZ28KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2goJG91dGxlbiwgJHBhc3N3ZCwgJHNhbHQsICRvcHNsaW1pdCwgJG1lbWxpbWl0LCAkYWxnbyA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fcHdoYXNoKCRvdXRsZW4sICRwYXNzd2QsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCwgJGFsZ28pOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc3RyKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cigkcGFzc3dkLCAkb3BzbGltaXQsICRtZW1saW1pdCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc3RyKCRwYXNzd2QsICRvcHNsaW1pdCwgJG1lbWxpbWl0KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkaGFzaAogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSgkcGFzc3dkLCAkaGFzaCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSgkcGFzc3dkLCAkaGFzaCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2KCkKICAgICAqIEBwYXJhbSBpbnQgJG91dGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkcGFzc3dkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzYWx0CiAgICAgKiBAcGFyYW0gaW50ICRvcHNsaW1pdAogICAgICogQHBhcmFtIGludCAkbWVtbGltaXQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYoJG91dGxlbiwgJHBhc3N3ZCwgJHNhbHQsICRvcHNsaW1pdCwgJG1lbWxpbWl0KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nigkb3V0bGVuLCAkcGFzc3dkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cigkcGFzc3dkLCAkb3BzbGltaXQsICRtZW1saW1pdCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyKCRwYXNzd2QsICRvcHNsaW1pdCwgJG1lbWxpbWl0KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkaGFzaAogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeSgkcGFzc3dkLCAkaGFzaCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeSgkcGFzc3dkLCAkaGFzaCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NjYWxhcm11bHQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbgogICAgICogQHBhcmFtIHN0cmluZyAkcAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHQoJG4sICRwKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NjYWxhcm11bHQoJG4sICRwKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHRfYmFzZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zY2FsYXJtdWx0X2Jhc2UoKQogICAgICogQHBhcmFtIHN0cmluZyAkbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHRfYmFzZSgkbikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zY2FsYXJtdWx0X2Jhc2UoJG4pOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NlY3JldGJveCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2VjcmV0Ym94KCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94KCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94X2tleWdlbicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zZWNyZXRib3hfa2V5Z2VuKCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2VjcmV0Ym94X2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94X2tleWdlbigpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94X29wZW4nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94X29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbAogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldGJveF9vcGVuKCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94X29wZW4oJG1lc3NhZ2UsICRub25jZSwgJGtleSk7CiAgICAgICAgfSBjYXRjaCAoRXJyb3IgJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zaG9ydGhhc2gnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2hvcnRoYXNoKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3Nob3J0aGFzaCgkbWVzc2FnZSwgJGtleSA9ICcnKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3Nob3J0aGFzaCgkbWVzc2FnZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zaG9ydGhhc2hfa2V5Z2VuJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3Nob3J0aGFzaF9rZXlnZW4oKQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaG9ydGhhc2hfa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaG9ydGhhc2hfa2V5Z2VuKCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zaWduJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ24oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduKCRtZXNzYWdlLCAkc2spCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbigkbWVzc2FnZSwgJHNrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9kZXRhY2hlZCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2RldGFjaGVkKCRtZXNzYWdlLCAkc2spOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2lnbl9rZXlwYWlyJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fa2V5cGFpcigpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9rZXlwYWlyKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2tleXBhaXIoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3NpZ25fb3BlbicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmVkTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX29wZW4oJHNpZ25lZE1lc3NhZ2UsICRwaykKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX29wZW4oJHNpZ25lZE1lc3NhZ2UsICRwayk7CiAgICAgICAgfSBjYXRjaCAoRXJyb3IgJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3B1YmxpY2tleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9wdWJsaWNrZXkoJGtleXBhaXIpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoKQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2spCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoJHNrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3NpZ25fc2VjcmV0a2V5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fc2VjcmV0a2V5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX3NlY3JldGtleSgka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3NlY3JldGtleSgka2V5cGFpcik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zaWduX3NlZWRfa2V5cGFpcicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3NlZWRfa2V5cGFpcigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9zZWVkX2tleXBhaXIoJHNlZWQpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9zZWVkX2tleXBhaXIoJHNlZWQpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoKQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRtZXNzYWdlLCAkcGspOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkoKQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOSgkcGspCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkoJHBrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTkoJHNrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5KCRzayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zdHJlYW0nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc3RyZWFtKCkKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbSgkbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc3RyZWFtKCRsZW4sICRub25jZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zdHJlYW1fa2V5Z2VuJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3N0cmVhbV9rZXlnZW4oKQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zdHJlYW1fa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zdHJlYW1fa2V5Z2VuKCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19zdHJlYW1feG9yJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3N0cmVhbV94b3IoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94b3IoJG1lc3NhZ2UsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zdHJlYW1feG9yKCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9oZXgyYmluJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6aGV4MmJpbigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2hleDJiaW4oJHN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmhleDJiaW4oJHN0cmluZyk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2luY3JlbWVudCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmluY3JlbWVudCgpCiAgICAgKiBAcGFyYW0gJnN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1faW5jcmVtZW50KCYkc3RyaW5nKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjppbmNyZW1lbnQoJHN0cmluZyk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9tYWpvcicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmxpYnJhcnlfdmVyc2lvbl9tYWpvcigpCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fbGlicmFyeV92ZXJzaW9uX21ham9yKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmxpYnJhcnlfdmVyc2lvbl9tYWpvcigpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9saWJyYXJ5X3ZlcnNpb25fbWlub3InKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpsaWJyYXJ5X3ZlcnNpb25fbWlub3IoKQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9taW5vcigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpsaWJyYXJ5X3ZlcnNpb25fbWlub3IoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fdmVyc2lvbl9zdHJpbmcnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0Ojp2ZXJzaW9uX3N0cmluZygpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fdmVyc2lvbl9zdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6dmVyc2lvbl9zdHJpbmcoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fbWVtY21wJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtY21wKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX21lbWNtcCgkYSwgJGIpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW1jbXAoJGEsICRiKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdzb2RpdW1fbWVtemVybycpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oKQogICAgICogQHBhcmFtIHN0cmluZyAmJHN0cgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX21lbXplcm8oJiRzdHIpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN0cik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX3JhbmRvbWJ5dGVzX2J1ZicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OnJhbmRvbWJ5dGVzX2J1ZigpCiAgICAgKiBAcGFyYW0gaW50ICRhbW91bnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBmdW5jdGlvbiBzb2RpdW1fcmFuZG9tYnl0ZXNfYnVmKCRhbW91bnQpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpyYW5kb21ieXRlc19idWYoJGFtb3VudCk7CiAgICB9Cn0KCmlmICghaXNfY2FsbGFibGUoJ3NvZGl1bV9yYW5kb21ieXRlc191bmlmb3JtJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6cmFuZG9tYnl0ZXNfdW5pZm9ybSgpCiAgICAgKiBAcGFyYW0gaW50ICR1cHBlckxpbWl0CiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX3JhbmRvbWJ5dGVzX3VuaWZvcm0oJHVwcGVyTGltaXQpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpyYW5kb21ieXRlc191bmlmb3JtKCR1cHBlckxpbWl0KTsKICAgIH0KfQoKaWYgKCFpc19jYWxsYWJsZSgnc29kaXVtX3JhbmRvbWJ5dGVzX3JhbmRvbTE2JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6cmFuZG9tYnl0ZXNfcmFuZG9tMTYoKQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZnVuY3Rpb24gc29kaXVtX3JhbmRvbWJ5dGVzX3JhbmRvbTE2KCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OnJhbmRvbWJ5dGVzX3JhbmRvbTE2KCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/lib/sodium_compat.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFNvZGl1bTsKCnVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDsKCi8qKgogKiBUaGlzIGZpbGUgd2lsbCBtb25rZXkgcGF0Y2ggdGhlIHB1cmUtUEhQIGltcGxlbWVudGF0aW9uIGluIHBsYWNlIG9mIHRoZQogKiBQRUNMIGZ1bmN0aW9ucywgYnV0IG9ubHkgaWYgdGhleSBkbyBub3QgYWxyZWFkeSBleGlzdC4KICoKICogVGh1cywgdGhlIGZ1bmN0aW9ucyBqdXN0IHByb3h5IHRvIHRoZSBhcHByb3ByaWF0ZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdAogKiBtZXRob2QuCiAqLwppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcYmluMmhleCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmJpbjJoZXgoKQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gYmluMmhleCgkc3RyaW5nKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6YmluMmhleCgkc3RyaW5nKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY29tcGFyZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNvbXBhcmUoKQogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHBhcmFtIHN0cmluZyAkYgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNvbXBhcmUoJGEsICRiKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y29tcGFyZSgkYSwgJGIpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9kZWNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbAogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2RlY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9kZWNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0gY2F0Y2ggKEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9lbmNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19hZWFkX2FlczI1NmdjbV9lbmNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUoKQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZSgpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9IGNhdGNoIChFcnJvciAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbAogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoJG1lc3NhZ2UsICRhc3NvY0RhdGEsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0gY2F0Y2ggKEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KCRtZXNzYWdlLCAkYXNzb2NEYXRhLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgkbWVzc2FnZSwgJGFzc29jRGF0YSwgJG5vbmNlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2F1dGgnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYXV0aCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fYXV0aCgkbWVzc2FnZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hdXRoKCRtZXNzYWdlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2F1dGhfdmVyaWZ5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2F1dGhfdmVyaWZ5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hYwogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19hdXRoX3ZlcmlmeSgkbWFjLCAkbWVzc2FnZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19hdXRoX3ZlcmlmeSgkbWFjLCAkbWVzc2FnZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19ib3gnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrcAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19ib3goJG1lc3NhZ2UsICRub25jZSwgJGtwKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveCgkbWVzc2FnZSwgJG5vbmNlLCAka3ApOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYm94X2tleXBhaXInKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X2tleXBhaXIoKQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19ib3hfa2V5cGFpcigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X2tleXBhaXIoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleSgkc2ssICRwaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzaywgJHBrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9vcGVuJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9vcGVuKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrcAogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbAogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKCRtZXNzYWdlLCAkbm9uY2UsICRrcCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfb3BlbigkbWVzc2FnZSwgJG5vbmNlLCAka3ApOwogICAgICAgIH0gY2F0Y2ggKEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fYm94X3B1YmxpY2tleScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfcHVibGlja2V5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fYm94X3B1YmxpY2tleSgka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfcHVibGlja2V5KCRrZXlwYWlyKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19ib3hfc2VhbCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VhbF9vcGVuKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY0tleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19ib3hfc2VhbCgkbWVzc2FnZSwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfc2VhbCgkbWVzc2FnZSwgJHB1YmxpY0tleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19ib3hfc2VhbF9vcGVuJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWFsX29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka3AKICAgICAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fYm94X3NlYWxfb3BlbigkbWVzc2FnZSwgJGtwKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWFsX29wZW4oJG1lc3NhZ2UsICRrcCk7CiAgICAgICAgfSBjYXRjaCAoXEVycm9yICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9zZWNyZXRrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlY3JldGtleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2JveF9zZWNyZXRrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlY3JldGtleSgka2V5cGFpcik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19nZW5lcmljaGFzaCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHBhcmFtIGludCAkb3V0TGVuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2dlbmVyaWNoYXNoKCRtZXNzYWdlLCAka2V5ID0gbnVsbCwgJG91dExlbiA9IDMyKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoKCRtZXNzYWdlLCAka2V5LCAkb3V0TGVuKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsKCkKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY3R4CiAgICAgKiBAcGFyYW0gaW50ICRvdXRwdXRMZW5ndGgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWwoJiRjdHgsICRvdXRwdXRMZW5ndGggPSAzMikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9maW5hbCgkY3R4LCAkb3V0cHV0TGVuZ3RoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHBhcmFtIGludCAkb3V0TGVuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQoJGtleSA9IG51bGwsICRvdXRMZW4gPSAzMikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9pbml0KCRrZXksICRvdXRMZW4pOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGN0eAogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKCYkY3R4LCAkbWVzc2FnZSA9ICcnKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKCRjdHgsICRtZXNzYWdlKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX2t4JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2t4KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG15X3NlY3JldAogICAgICogQHBhcmFtIHN0cmluZyAkdGhlaXJfcHVibGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfcHVibGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfcHVibGljCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX2t4KCRteV9zZWNyZXQsICR0aGVpcl9wdWJsaWMsICRjbGllbnRfcHVibGljLCAkc2VydmVyX3B1YmxpYykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19reCgKICAgICAgICAgICAgJG15X3NlY3JldCwKICAgICAgICAgICAgJHRoZWlyX3B1YmxpYywKICAgICAgICAgICAgJGNsaWVudF9wdWJsaWMsCiAgICAgICAgICAgICRzZXJ2ZXJfcHVibGljCiAgICAgICAgKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3B3aGFzaCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2goKQogICAgICogQHBhcmFtIGludCAkb3V0bGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbHQKICAgICAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAgICAgKiBAcGFyYW0gaW50ICRtZW1saW1pdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19wd2hhc2goJG91dGxlbiwgJHBhc3N3ZCwgJHNhbHQsICRvcHNsaW1pdCwgJG1lbWxpbWl0KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaCgkb3V0bGVuLCAkcGFzc3dkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoX3N0cicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc3RyKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zdHIoJHBhc3N3ZCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fcHdoYXNoX3N0cigkcGFzc3dkLCAkb3BzbGltaXQsICRtZW1saW1pdCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5KCRwYXNzd2QsICRoYXNoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5KCRwYXNzd2QsICRoYXNoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1NicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYoKQogICAgICogQHBhcmFtIGludCAkb3V0bGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNhbHQKICAgICAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAgICAgKiBAcGFyYW0gaW50ICRtZW1saW1pdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYoJG91dGxlbiwgJHBhc3N3ZCwgJHNhbHQsICRvcHNsaW1pdCwgJG1lbWxpbWl0KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nigkb3V0bGVuLCAkcGFzc3dkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHIoJHBhc3N3ZCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cigkcGFzc3dkLCAkb3BzbGltaXQsICRtZW1saW1pdCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5KCRwYXNzd2QsICRoYXNoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5KCRwYXNzd2QsICRoYXNoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3NjYWxhcm11bHQnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2NhbGFybXVsdCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHQoJG4sICRwKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NjYWxhcm11bHQoJG4sICRwKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3NjYWxhcm11bHRfYmFzZScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zY2FsYXJtdWx0X2Jhc2UoKQogICAgICogQHBhcmFtIHN0cmluZyAkbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UoJG4pCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2NhbGFybXVsdF9iYXNlKCRuKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3NlY3JldGJveCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zZWNyZXRib3goKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3goJG1lc3NhZ2UsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zZWNyZXRib3goJG1lc3NhZ2UsICRub25jZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zZWNyZXRib3hfb3BlbicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zZWNyZXRib3hfb3BlbigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW4oJG1lc3NhZ2UsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zZWNyZXRib3hfb3BlbigkbWVzc2FnZSwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9IGNhdGNoIChFcnJvciAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3Nob3J0aGFzaCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaG9ydGhhc2goKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3Nob3J0aGFzaCgkbWVzc2FnZSwgJGtleSA9ICcnKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3Nob3J0aGFzaCgkbWVzc2FnZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ24oKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2lnbigkbWVzc2FnZSwgJHNrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ24oJG1lc3NhZ2UsICRzayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduX2RldGFjaGVkJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZGV0YWNoZWQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduX2tleXBhaXInKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9rZXlwYWlyKCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2tleXBhaXIoKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3NpZ25fb3BlbicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX29wZW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmVkTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3Blbigkc2lnbmVkTWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fb3Blbigkc2lnbmVkTWVzc2FnZSwgJHBrKTsKICAgICAgICB9IGNhdGNoIChcRXJyb3IgJGV4KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl9wdWJsaWNrZXknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9wdWJsaWNrZXkoKQogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zaWduX3B1YmxpY2tleSgka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3B1YmxpY2tleSgka2V5cGFpcik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2spCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoJHNrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3NpZ25fc2VjcmV0a2V5JykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fc2VjcmV0a2V5KCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGtleXBhaXIpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl9zZWVkX2tleXBhaXInKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9zZWVkX2tleXBhaXIoKQogICAgICogQHBhcmFtIHN0cmluZyAkc2VlZAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zaWduX3NlZWRfa2V5cGFpcigkc2VlZCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3NlZWRfa2V5cGFpcigkc2VlZCk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCcpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBrCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRtZXNzYWdlLCAkcGspOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTknKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkoKQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkoJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5KCRwayk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOSgkc2spCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTkoJHNrKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcY3J5cHRvX3N0cmVhbScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zdHJlYW0oKQogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gY3J5cHRvX3N0cmVhbSgkbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc3RyZWFtKCRsZW4sICRub25jZSwgJGtleSk7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXGNyeXB0b19zdHJlYW1feG9yJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3N0cmVhbV94b3IoKQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc3RyZWFtX3hvcigkbWVzc2FnZSwgJG5vbmNlLCAka2V5KTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcaGV4MmJpbicpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmhleDJiaW4oKQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxUeXBlRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gaGV4MmJpbigkc3RyaW5nKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6aGV4MmJpbigkc3RyaW5nKTsKICAgIH0KfQppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxcbWVtY21wJykpIHsKICAgIC8qKgogICAgICogQHNlZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtY21wKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBtZW1jbXAoJGEsICRiKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtY21wKCRhLCAkYik7CiAgICB9Cn0KaWYgKCFpc19jYWxsYWJsZSgnXFxTb2RpdW1cXG1lbXplcm8nKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFxTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXFR5cGVFcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBtZW16ZXJvKCYkc3RyKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRzdHIpOwogICAgfQp9CmlmICghaXNfY2FsbGFibGUoJ1xcU29kaXVtXFxyYW5kb21ieXRlc19idWYnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpyYW5kb21ieXRlc19idWYoKQogICAgICogQHBhcmFtIGludCAkYW1vdW50CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcVHlwZUVycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJhbmRvbWJ5dGVzX2J1ZigkYW1vdW50KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6cmFuZG9tYnl0ZXNfYnVmKCRhbW91bnQpOwogICAgfQp9CgppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxccmFuZG9tYnl0ZXNfdW5pZm9ybScpKSB7CiAgICAvKioKICAgICAqIEBzZWUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OnJhbmRvbWJ5dGVzX3VuaWZvcm0oKQogICAgICogQHBhcmFtIGludCAkdXBwZXJMaW1pdAogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICogQHRocm93cyBcRXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gcmFuZG9tYnl0ZXNfdW5pZm9ybSgkdXBwZXJMaW1pdCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OnJhbmRvbWJ5dGVzX3VuaWZvcm0oJHVwcGVyTGltaXQpOwogICAgfQp9CgppZiAoIWlzX2NhbGxhYmxlKCdcXFNvZGl1bVxccmFuZG9tYnl0ZXNfcmFuZG9tMTYnKSkgewogICAgLyoqCiAgICAgKiBAc2VlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpyYW5kb21ieXRlc19yYW5kb20xNigpCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmdW5jdGlvbiByYW5kb21ieXRlc19yYW5kb20xNigpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpyYW5kb21ieXRlc19yYW5kb20xNigpOwogICAgfQp9CgppZiAoIWRlZmluZWQoJ1xcU29kaXVtXFxDUllQVE9fQVVUSF9CWVRFUycpKSB7CiAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2NvbnN0YW50cy5waHAnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogSVNDIExpY2Vuc2UKICoKICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgKICogUGFyYWdvbiBJbml0aWF0aXZlIEVudGVycHJpc2VzIDxzZWN1cml0eSBhdCBwYXJhZ29uaWUgZG90IGNvbT4KICoKICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTgKICogRnJhbmsgRGVuaXMgPGogYXQgcHVyZWZ0cGQgZG90IG9yZz4KICoKICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCiAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwogKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICov]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Compat.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW07CgpjbGFzcyBDb21wYXQgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db21wYXQKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/BLAKE2b.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIEJMQUtFMmIgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmIKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIENoYUNoYTIwIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMAp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20/Ctx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDaGFDaGEyMDsKCmNsYXNzIEN0eCBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjBfQ3R4CnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDaGFDaGEyMDsKCmNsYXNzIElldGZDdHggZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0lldGZDdHgKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIEN1cnZlMjU1MTkgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTkKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Fe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5OwoKY2xhc3MgRmUgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5XEdlOwoKY2xhc3MgQ2FjaGVkIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX0NhY2hlZAp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5XEdlOwoKY2xhc3MgUDFwMSBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5XEdlOwoKY2xhc3MgUDIgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5XEdlOwoKY2xhc3MgUDMgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5XEdlOwoKY2xhc3MgUHJlY29tcCBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/H.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxDdXJ2ZTI1NTE5OwoKY2xhc3MgSCBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9ICnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Ed25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIEVkMjU1MTkgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTkKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/HChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIEhDaGFDaGEyMCBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfSENoYUNoYTIwCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/HSalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIEhTYWxzYTIwIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IU2Fsc2EyMAp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Poly1305.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFBvbHkxMzA1IGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNQp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Poly1305/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Poly1305/State.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZVxQb2x5MTMwNTsKCmNsYXNzIFN0YXRlIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZQp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Salsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFNpcEhhc2ggZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjAKewoKfQ==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/SipHash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFNpcEhhc2ggZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NpcEhhc2gKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Util.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFV0aWwgZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWwKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/X25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFgyNTUxOSBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfWDI1NTE5CnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/XChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFhDaGFDaGEyMCBleHRlbmRzIFxQYXJhZ29uSUVfU29kaXVtX0NvcmVfWENoYUNoYTIwCnsKCn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Core/Xsalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW1cQ29yZTsKCmNsYXNzIFhzYWxzYTIwIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Yc2Fsc2EyMAp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/Crypto.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW07CgpjbGFzcyBDcnlwdG8gZXh0ZW5kcyBcUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8KewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/namespaced/File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBhcmFnb25JRVxTb2RpdW07CgpjbGFzcyBGaWxlIGV4dGVuZHMgXFBhcmFnb25JRV9Tb2RpdW1fRmlsZQp7Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgIGJhY2t1cEdsb2JhbHM9InRydWUiCiAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgIGJvb3RzdHJhcD0idmVuZG9yL2F1dG9sb2FkLnBocCIKICAgIGNvbG9ycz0idHJ1ZSIKICAgIGNvbnZlcnRFcnJvcnNUb0V4Y2VwdGlvbnM9InRydWUiCiAgICBjb252ZXJ0Tm90aWNlc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgIHByb2Nlc3NJc29sYXRpb249ImZhbHNlIgogICAgc3RvcE9uRXJyb3I9ImZhbHNlIgogICAgc3RvcE9uRmFpbHVyZT0iZmFsc2UiCiAgICBzeW50YXhDaGVjaz0idHJ1ZSIKPgogICAgPHRlc3RzdWl0ZXM+CiAgICAgICAgPHRlc3RzdWl0ZSBuYW1lPSJVbml0IFRlc3RzIj4KICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3Rlc3RzL3VuaXQ8L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgICAgICA8dGVzdHN1aXRlIG5hbWU9IkxpYnNvZGl1bSBDb21wYXRpYmlsaXR5IFRlc3RzIj4KICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3Rlc3RzL2NvbXBhdDwvZGlyZWN0b3J5PgogICAgICAgIDwvdGVzdHN1aXRlPgogICAgPC90ZXN0c3VpdGVzPgogICAgPGZpbHRlcj4KICAgICAgICA8d2hpdGVsaXN0IHByb2Nlc3NVbmNvdmVyZWRGaWxlc0Zyb21XaGl0ZWxpc3Q9InRydWUiPgogICAgICAgICAgICA8ZGlyZWN0b3J5IHN1ZmZpeD0iLnBocCI+Li9zcmM8L2RpcmVjdG9yeT4KICAgICAgICA8L3doaXRlbGlzdD4KICAgIDwvZmlsdGVyPgo8L3BocHVuaXQ+]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBTb2RpdW0gQ29tcGF0CgpbIVtMaW51eCBCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdCkKWyFbV2luZG93cyBCdWlsZCBTdGF0dXNdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2FwaS9wcm9qZWN0cy9zdGF0dXMvaXRjeDF2Z21mcWlhd2diZT9zdmc9dHJ1ZSldKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL3Byb2plY3QvcGFyYWdvbmllLXNjb3R0L3NvZGl1bS1jb21wYXQpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC92L3N0YWJsZSldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdCkKWyFbTGF0ZXN0IFVuc3RhYmxlIFZlcnNpb25dKGh0dHBzOi8vcG9zZXIucHVneC5vcmcvcGFyYWdvbmllL3NvZGl1bV9jb21wYXQvdi91bnN0YWJsZSldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdCkKWyFbTGljZW5zZV0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC9saWNlbnNlKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3BhcmFnb25pZS9zb2RpdW1fY29tcGF0KQpbIVtEb3dubG9hZHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2R0L3BhcmFnb25pZS9zb2RpdW1fY29tcGF0LnN2ZyldKGh0dHBzOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdCkKClNvZGl1bSBDb21wYXQgaXMgYSBwdXJlIFBIUCBwb2x5ZmlsbCBmb3IgdGhlIFNvZGl1bSBjcnlwdG9ncmFwaHkgbGlicmFyeSAKKGxpYnNvZGl1bSksIGEgY29yZSBleHRlbnNpb24gaW4gUEhQIDcuMi4wKyBhbmQgb3RoZXJ3aXNlIFthdmFpbGFibGUgaW4gUEVDTF0oaHR0cHM6Ly9wZWNsLnBocC5uZXQvcGFja2FnZS9saWJzb2RpdW0pLgoKVGhpcyBsaWJyYXJ5IHRlbnRhdGl2ZWxleSBzdXBwb3J0cyBQSFAgNS4yLjQgLSA3LnggKGxhdGVzdCksIGJ1dCBvZmZpY2lhbGx5Cm9ubHkgc3VwcG9ydHMgW25vbi1FT0wnZCB2ZXJzaW9ucyBvZiBQSFBdKGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvc3VwcG9ydGVkLXZlcnNpb25zLnBocCkuCgpJZiB5b3UgaGF2ZSB0aGUgUEhQIGV4dGVuc2lvbiBpbnN0YWxsZWQsIFNvZGl1bSBDb21wYXQgd2lsbCBvcHBvcnR1bmlzdGljYWxseQphbmQgdHJhbnNwYXJlbnRseSB1c2UgdGhlIFBIUCBleHRlbnNpb24gaW5zdGVhZCBvZiBvdXIgaW1wbGVtZW50YXRpb24uCgojIyBJTVBPUlRBTlQhCgpUaGlzIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IGhhcyBub3QgYmVlbiBmb3JtYWxseSBhdWRpdGVkIGJ5IGFuIGluZGVwZW5kZW50IHRoaXJkIApwYXJ0eSB0aGF0IHNwZWNpYWxpemVzIGluIGNyeXB0b2dyYXBoeSBvciBjcnlwdGFuYWx5c2lzLgoKSWYgeW91IHJlcXVpcmUgc3VjaCBhbiBhdWRpdCBiZWZvcmUgeW91IGNhbiB1c2Ugc29kaXVtX2NvbXBhdCBpbiB5b3VyIHByb2plY3RzCmFuZCBoYXZlIHRoZSBmdW5kcyBmb3Igc3VjaCBhbiBhdWRpdCwgcGxlYXNlIG9wZW4gYW4gaXNzdWUgb3IgY29udGFjdCAKYHNlY3VyaXR5IGF0IHBhcmFnb25pZSBkb3QgY29tYCBzbyB3ZSBjYW4gaGVscCBnZXQgdGhlIGJhbGwgcm9sbGluZy4KCkhvd2V2ZXIsIHNvZGl1bV9jb21wYXQgaGFzIGJlZW4gYWRvcHRlZCBieSBoaWdoIHByb2ZpbGUgb3BlbiBzb3VyY2UgcHJvamVjdHMsCnN1Y2ggYXMgW0pvb21sYSFdKGh0dHBzOi8vZ2l0aHViLmNvbS9qb29tbGEvam9vbWxhLWNtcy9ibG9iLzQ1OWQ3NDY4NmQyYTYzOGVjNTExNDlkN2M0NGRkYWI4MDc1ODUyYmUvY29tcG9zZXIuanNvbiNMNDApCmFuZCBbTWFnZW50b10oaHR0cHM6Ly9naXRodWIuY29tL21hZ2VudG8vbWFnZW50bzIvYmxvYi84ZmQ4OWNmZGY1MmM1NjFhYzBjYTdiYzIwZmQzOGVmNjg4ZTIwMWIwL2NvbXBvc2VyLmpzb24jTDQ0KS4KRnVydGhlcm1vcmUsIHNvZGl1bV9jb21wYXQgd2FzIGRldmVsb3BlZCBieSBQYXJhZ29uIEluaXRpYXRpdmUgRW50ZXJwcmlzZXMsIGEKY29tcGFueSB0aGF0ICpzcGVjaWFsaXplcyogaW4gc2VjdXJlIFBIUCBkZXZlbG9wbWVudCBhbmQgUEhQIGNyeXB0b2dyYXBoeSwgYW5kCmhhcyBiZWVuIGluZm9ybWFsbHkgcmV2aWV3ZWQgYnkgbWFueSBvdGhlciBzZWN1cml0eSBleHBlcnRzIHdobyBhbHNvIHNwZWNpYWxpemUKaW4gUEhQLgoKSWYgeW91J2QgbGlrZSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBkZWZlbnNpdmUgc2VjdXJpdHkgbWVhc3VyZXMgd2UndmUgdGFrZW4KdG8gcHJldmVudCBzb2RpdW1fY29tcGF0IGZyb20gYmVpbmcgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0eSBpbiB5b3VyIHN5c3RlbXMsCnBsZWFzZSByZWFkIFsqQ3J5cHRvZ3JhcGhpY2FsbHkgU2VjdXJlIFBIUCBEZXZlbG9wbWVudCpdKGh0dHBzOi8vcGFyYWdvbmllLmNvbS9ibG9nLzIwMTcvMDIvY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlLXBocC1kZXZlbG9wbWVudCkuCgojIEluc3RhbGxpbmcgU29kaXVtIENvbXBhdAoKSWYgeW91J3JlIHVzaW5nIENvbXBvc2VyOgoKYGBgYmFzaApjb21wb3NlciByZXF1aXJlIHBhcmFnb25pZS9zb2RpdW1fY29tcGF0CmBgYAoKIyMjIEluc3RhbGwgRnJvbSBTb3VyY2UKCklmIHlvdSdyZSBub3QgdXNpbmcgQ29tcG9zZXIsIGRvd25sb2FkIGEgW3JlbGVhc2UgdGFyYmFsbF0oaHR0cHM6Ly9naXRodWIuY29tL3BhcmFnb25pZS9zb2RpdW1fY29tcGF0L3JlbGVhc2VzKQood2hpY2ggc2hvdWxkIGJlIHNpZ25lZCB3aXRoIFtvdXIgR251UEcgcHVibGljIGtleV0oaHR0cHM6Ly9wYXJhZ29uaWUuY29tL3N0YXRpYy9ncGctcHVibGljLWtleS50eHQpKSwgZXh0cmFjdAppdHMgY29udGVudHMsIHRoZW4gaW5jbHVkZSBvdXIgYGF1dG9sb2FkLnBocGAgc2NyaXB0IGluIHlvdXIgcHJvamVjdC4KCmBgYHBocAo8P3BocApyZXF1aXJlX29uY2UgIi9wYXRoL3RvL3NvZGl1bV9jb21wYXQvYXV0b2xvYWQucGhwIjsKYGBgCgojIyMgUEhQIEFyY2hpdmVzIChQaGFyKSBSZWxlYXNlcwoKU2luY2UgdmVyc2lvbiAxLjMuMCwgW3NvZGl1bV9jb21wYXQgcmVsZWFzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC9yZWxlYXNlcykgaW5jbHVkZSBhClBIUCBBcmNoaXZlICgucGhhciBmaWxlKSBhbmQgYXNzb2NpYXRlZCBHUEcgc2lnbmF0dXJlLiBGaXJzdCwgZG93bmxvYWQgYm90aCBmaWxlcyBhbmQgdmVyaWZ5IHRoZW0gd2l0aCBvdXIKR1BHIHB1YmxpYyBrZXksIGxpa2Ugc286CgpgYGBiYXNoCiMgR2V0dGluZyBvdXIgcHVibGljIGtleSBmcm9tIHRoZSBrZXlzZXJ2ZXI6CmdwZyAtLWZpbmdlcnByaW50IDdGNTJENUM2MUQxMjU1QzczMTM2MkU4MjZCOTdBMUMyODI2NDA0REEKaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiAgICBlY2hvIC1lICJcMDMzWzMzbURvd25sb2FkaW5nIFBHUCBQdWJsaWMgS2V5Li4uXDAzM1swbSIKICAgIGdwZyAgLS1rZXlzZXJ2ZXIgcGdwLm1pdC5lZHUgLS1yZWN2LWtleXMgN0Y1MkQ1QzYxRDEyNTVDNzMxMzYyRTgyNkI5N0ExQzI4MjY0MDREQQogICAgIyBTZWN1cml0eSA8c2VjdXJpdHlAcGFyYWdvbmllLmNvbT4KICAgIGdwZyAtLWZpbmdlcnByaW50IDdGNTJENUM2MUQxMjU1QzczMTM2MkU4MjZCOTdBMUMyODI2NDA0REEKICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlwwMzNbMzFtQ291bGQgbm90IGRvd25sb2FkIFBHUCBwdWJsaWMga2V5IGZvciB2ZXJpZmljYXRpb25cMDMzWzBtIgogICAgICAgIGV4aXQgMQogICAgZmkKZmkKCiMgVmVyaWZ5aW5nIHRoZSBQSFAgQXJjaGl2ZQpncGcgLS12ZXJpZnkgc29kaXVtLWNvbXBhdC5waGFyLnNpZyBzb2RpdW0tY29tcGF0LnBoYXIKYGBgCgpOb3csIHNpbXBseSBpbmNsdWRlIHRoaXMgLnBoYXIgZmlsZSBpbiB5b3VyIGFwcGxpY2F0aW9uLgoKYGBgcGhwCjw/cGhwCnJlcXVpcmVfb25jZSAiL3BhdGgvdG8vc29kaXVtLWNvbXBhdC5waGFyIjsKYGBgCgojIFN1cHBvcnQKCltDb21tZXJjaWFsIHN1cHBvcnQgZm9yIGxpYnNvZGl1bV0oaHR0cHM6Ly9kb3dubG9hZC5saWJzb2RpdW0ub3JnL2RvYy9jb21tZXJjaWFsX3N1cHBvcnQvKSBpcyBhdmFpbGFibGUKZnJvbSBtdWx0aXBsZSB2ZW5kb3JzLiBJZiB5b3UgbmVlZCBoZWxwIHVzaW5nIHNvZGl1bV9jb21wYXQgaW4gb25lIG9mIHlvdXIgcHJvamVjdHMsIFtjb250YWN0IFBhcmFnb24gSW5pdGlhdGl2ZSBFbnRlcnByaXNlc10oaHR0cHM6Ly9wYXJhZ29uaWUuY29tL2NvbnRhY3QpLiAKCk5vbi1jb21tZXJjaWFsIHJlcG9ydCB3aWxsIGJlIGZhY2lsaXRhdGVkIHRocm91Z2ggW0dpdGh1YiBpc3N1ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhZ29uaWUvc29kaXVtX2NvbXBhdC9pc3N1ZXMpLgpXZSBvZmZlciBubyBndWFyYW50ZWVzIG9mIG91ciBhdmFpbGFiaWxpdHkgdG8gcmVzb2x2ZSBxdWVzdGlvbnMgYWJvdXQgaW50ZWdyYXRpbmcgc29kaXVtX2NvbXBhdCBpbnRvIHRoaXJkLXBhcnR5CnNvZnR3YXJlIGZvciBmcmVlLCBidXQgd2lsbCBzdHJpdmUgdG8gZml4IGFueSBidWdzIChzZWN1cml0eS1yZWxhdGVkIG9yIG90aGVyd2lzZSkgaW4gb3VyIGxpYnJhcnkuCgojIyBTdXBwb3J0IENvbnRyYWN0cwoKSWYgeW91ciBjb21wYW55IHVzZXMgdGhpcyBsaWJyYXJ5IGluIHRoZWlyIHByb2R1Y3RzIG9yIHNlcnZpY2VzLCB5b3UgbWF5IGJlCmludGVyZXN0ZWQgaW4gW3B1cmNoYXNpbmcgYSBzdXBwb3J0IGNvbnRyYWN0IGZyb20gUGFyYWdvbiBJbml0aWF0aXZlIEVudGVycHJpc2VzXShodHRwczovL3BhcmFnb25pZS5jb20vZW50ZXJwcmlzZSkuCgojIFVzaW5nIFNvZGl1bSBDb21wYXQKCiMjIFRydWUgUG9seWZpbGwKCklmIHlvdSdyZSB1c2luZyBQSFAgNS4zLjAgb3IgbmV3ZXIgYW5kIGRvIG5vdCBoYXZlIHRoZSBQRUNMIGV4dGVuc2lvbiBpbnN0YWxsZWQsCnlvdSBjYW4ganVzdCB1c2UgdGhlIFtzdGFuZGFyZCBleHQvc29kaXVtIEFQSSBmZWF0dXJlcyBhcy1pc10oaHR0cHM6Ly9wYXJhZ29uaWUuY29tL2Jvb2svcGVjbC1saWJzb2RpdW0pCmFuZCB0aGUgcG9seWZpbGwgd2lsbCB3b3JrIGl0cyBtYWdpYy4KCmBgYHBocAo8P3BocApyZXF1aXJlX29uY2UgIi9wYXRoL3RvL3NvZGl1bV9jb21wYXQvYXV0b2xvYWQucGhwIjsKCiRhbGljZV9rcCA9IFxTb2RpdW1cY3J5cHRvX3NpZ25fa2V5cGFpcigpOwokYWxpY2Vfc2sgPSBcU29kaXVtXGNyeXB0b19zaWduX3NlY3JldGtleSgkYWxpY2Vfa3ApOwokYWxpY2VfcGsgPSBcU29kaXVtXGNyeXB0b19zaWduX3B1YmxpY2tleSgkYWxpY2Vfa3ApOwoKJG1lc3NhZ2UgPSAnVGhpcyBpcyBhIHRlc3QgbWVzc2FnZS4nOwokc2lnbmF0dXJlID0gXFNvZGl1bVxjcnlwdG9fc2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJGFsaWNlX3NrKTsKaWYgKFxTb2RpdW1cY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRtZXNzYWdlLCAkYWxpY2VfcGspKSB7CiAgICBlY2hvICdPSycsIFBIUF9FT0w7Cn0gZWxzZSB7CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHNpZ25hdHVyZScpOwp9CmBgYAoKVGhlIHBvbHlmaWxsIGRvZXMgbm90IGV4cG9zZSB0aGlzIEFQSSBvbiBQSFAgPCA1LjMsIG9yIGlmIHlvdSBoYXZlIHRoZSBQSFAKZXh0ZW5zaW9uIGluc3RhbGxlZCBhbHJlYWR5LgoKIyMgR2VuZXJhbC1Vc2UgUG9seWZpbGwKCklmIHlvdXIgdXNlcnMgYXJlIG9uIFBIUCA8IDUuMywgb3IgeW91IHdhbnQgdG8gd3JpdGUgY29kZSB0aGF0IHdpbGwgd29yawp3aGV0aGVyIG9yIG5vdCB0aGUgUEVDTCBleHRlbnNpb24gaXMgYXZhaWxhYmxlLCB5b3UnbGwgd2FudCB0byB1c2UgdGhlCioqYFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0YCoqIGNsYXNzIGZvciBtb3N0IG9mIHlvdXIgbGlic29kaXVtIG5lZWRzLgoKVGhlIGFib3ZlIGV4YW1wbGUsIHdyaXR0ZW4gZm9yIGdlbmVyYWwgdXNlOgoKYGBgcGhwCjw/cGhwCnJlcXVpcmVfb25jZSAiL3BhdGgvdG8vc29kaXVtX2NvbXBhdC9hdXRvbG9hZC5waHAiOwoKJGFsaWNlX2twID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2tleXBhaXIoKTsKJGFsaWNlX3NrID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX3NlY3JldGtleSgkYWxpY2Vfa3ApOwokYWxpY2VfcGsgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fcHVibGlja2V5KCRhbGljZV9rcCk7CgokbWVzc2FnZSA9ICdUaGlzIGlzIGEgdGVzdCBtZXNzYWdlLic7CiRzaWduYXR1cmUgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRhbGljZV9zayk7CmlmIChQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRtZXNzYWdlLCAkYWxpY2VfcGspKSB7CiAgICBlY2hvICdPSycsIFBIUF9FT0w7Cn0gZWxzZSB7CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHNpZ25hdHVyZScpOwp9CmBgYAoKR2VuZXJhbGx5OiBJZiB5b3UgcmVwbGFjZSBgXFNvZGl1bVwgYCB3aXRoIGBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6YCwgYW55CmNvZGUgYWxyZWFkeSB3cml0dGVuIGZvciB0aGUgbGlic29kaXVtIFBIUCBleHRlbnNpb24gc2hvdWxkIHdvcmsgd2l0aCBvdXIKcG9seWZpbGwgd2l0aG91dCBhZGRpdGlvbmFsIGNvZGUgY2hhbmdlcy4KClNpbmNlIHRoaXMgZG9lc24ndCByZXF1aXJlIGEgbmFtZXNwYWNlLCB0aGlzIEFQSSAqaXMqIGV4cG9zZWQgb24gUEhQIDUuMi4KClNpbmNlIHZlcnNpb24gMC43LjAsIHdlIGhhdmUgb3VyIG93biBuYW1lc3BhY2VkIEFQSSAoYFBhcmFnb25JRVxTb2RpdW1cKmApIHRvIGFsbG93IGJyZXZpdHkKaW4gc29mdHdhcmUgdGhhdCB1c2VzIFBIUCA1LjMrLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byB1c2Ugb3VyIGZpbGUgY3J5cHRvZ3JhcGh5IApmZWF0dXJlcyB3aXRob3V0IHdyaXRpbmcgYFBhcmFnb25JRV9Tb2RpdW1fRmlsZWAgZXZlcnkgdGltZS4gVGhpcyBpcyBub3QgZXhwb3NlZCBvbiBQSFAgPCA1LjMsCnNvIGlmIHlvdXIgcHJvamVjdCBzdXBwb3J0cyBQSFAgPCA1LjMsIHVzZSB0aGUgdW5kZXJzY29yZSBtZXRob2QgaW5zdGVhZC4KClRvIGxlYXJuIGhvdyB0byB1c2UgTGlic29kaXVtLCByZWFkIFsqVXNpbmcgTGlic29kaXVtIGluIFBIUCBQcm9qZWN0cypdKGh0dHBzOi8vcGFyYWdvbmllLmNvbS9ib29rL3BlY2wtbGlic29kaXVtKS4KCiMjIFBIUCA3LjIgUG9seWZpbGwKCkFzIHBlciB0aGUgW3NlY29uZCB2b3RlIG9uIHRoZSBsaWJzb2RpdW0gUkZDXShodHRwczovL3dpa2kucGhwLm5ldC9yZmMvbGlic29kaXVtI3Byb3Bvc2VkX3ZvdGluZ19jaG9pY2VzKSwKUEhQIDcuMiB1c2VzIGBzb2RpdW1fKmAgaW5zdGVhZCBvZiBgXFNvZGl1bVwqYC4KCmBgYHBocAo8P3BocApyZXF1aXJlX29uY2UgIi9wYXRoL3RvL3NvZGl1bV9jb21wYXQvYXV0b2xvYWQucGhwIjsKCiRhbGljZV9rcCA9IHNvZGl1bV9jcnlwdG9fc2lnbl9rZXlwYWlyKCk7CiRhbGljZV9zayA9IHNvZGl1bV9jcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGFsaWNlX2twKTsKJGFsaWNlX3BrID0gc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleSgkYWxpY2Vfa3ApOwoKJG1lc3NhZ2UgPSAnVGhpcyBpcyBhIHRlc3QgbWVzc2FnZS4nOwokc2lnbmF0dXJlID0gc29kaXVtX2NyeXB0b19zaWduX2RldGFjaGVkKCRtZXNzYWdlLCAkYWxpY2Vfc2spOwppZiAoc29kaXVtX2NyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJGFsaWNlX3BrKSkgewogICAgZWNobyAnT0snLCBQSFBfRU9MOwp9IGVsc2UgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBzaWduYXR1cmUnKTsKfQpgYGAKCiMjIEhlbHAsIFNvZGl1bV9Db21wYXQgaXMgU2xvdyEgSG93IGNhbiBJIG1ha2UgaXQgZmFzdD8KClRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIG1ha2UgaXQgZmFzdDoKCjEuIFVzZSBQSFAgNy4yLgoyLiBbSW5zdGFsbCB0aGUgbGlic29kaXVtIFBIUCBleHRlbnNpb24gZnJvbSBQRUNMXShodHRwczovL3BhcmFnb25pZS5jb20vYm9vay9wZWNsLWxpYnNvZGl1bS9yZWFkLzAwLWludHJvLm1kI2luc3RhbGxpbmctbGlic29kaXVtKS4KMy4gT25seSBpZiB0aGUgcHJldmlvdXMgdHdvIG9wdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHlvdToKICAgMS4gVmVyaWZ5IHRoYXQgW3RoZSBwcm9jZXNzb3IgeW91J3JlIHVzaW5nIGFjdHVhbGx5IGltcGxlbWVudHMgY29uc3RhbnQtdGltZSBtdWx0aXBsaWNhdGlvbl0oaHR0cHM6Ly9iZWFyc3NsLm9yZy9jdG11bC5odG1sKS4KICAgICAgU29kaXVtX2NvbXBhdCBkb2VzLCBidXQgaXQgbXVzdCB0cmFkZSBzb21lIHNwZWVkIGluIG9yZGVyIHRvIGF0dGFpbiBjcm9zcy1wbGF0Zm9ybSBzZWN1cml0eS4KICAgMi4gT25seSBpZiB5b3UgYXJlIDEwMCUgY2VydGFpbiB0aGF0IHlvdXIgcHJvY2Vzc29yIGlzIHNhZmUsIHlvdSBjYW4gc2V0IGBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0ID0gdHJ1ZTtgCiAgICAgIHdpdGhvdXQgaGFybWluZyB0aGUgc2VjdXJpdHkgb2YgeW91ciBjcnlwdG9ncmFwaHkga2V5cy4gSWYgeW91ciBwcm9jZXNzb3IgKmlzbid0KiBzYWZlLCB0aGVuIGRlY2lkZSB3aGV0aGVyIHlvdQogICAgICB3YW50IHNwZWVkIG9yIHNlY3VyaXR5IGJlY2F1c2UgeW91IGNhbid0IGhhdmUgYm90aC4KCiMjIyBIb3cgY2FuIEkgdGVsbCBpZiBzb2RpdW1fY29tcGF0IHdpbGwgYmUgc2xvdywgYXQgcnVudGltZT8KClNpbmNlIHZlcnNpb24gMS44LCB5b3UgY2FuIHVzZSB0aGUgYHBvbHlmaWxsX2lzX2Zhc3QoKWAgc3RhdGljIG1ldGhvZCB0bwpkZXRlcm1pbmUgaWYgc29kaXVtX2NvbXBhdCB3aWxsIGJlIHNsb3cgYXQgcnVudGltZS4KCmBgYHBocAo8P3BocAppZiAoUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OnBvbHlmaWxsX2lzX2Zhc3QoKSkgewogICAgLy8gVXNlIGxpYnNvZGl1bSBub3cKICAgICRwcm9jZXNzLT5leGVjdXRlKCk7Cn0gZWxzZSB7CiAgICAvLyBEZWZlciB0byBhIGNyb24gam9iIG9yIG90aGVyIHNvcnQgb2YgYXN5bmNocm9ub3VzIHByb2Nlc3MKICAgICRwcm9jZXNzLT5lbnF1ZXVlKCk7Cn0KYGBgCgojIyMgSGVscCwgbXkgUEhQIG9ubHkgaGFzIDMyLUJpdCBJbnRlZ2VycyEgSXQncyBzdXBlciBzbG93IQoKU29tZSBmZWF0dXJlcyBvZiBzb2RpdW1fY29tcGF0IGFyZSAqKippbmNyZWRpYmx5IHNsb3cqIHdpdGggUEhQIDUgb24gV2luZG93cyoqCihpbiBwYXJ0aWN1bGFyOiBwdWJsaWMta2V5IGNyeXB0b2dyYXBoeSAoZW5jcnlwdGlvbiBhbmQgc2lnbmF0dXJlcykgaXMKYWZmZWN0ZWQpLCBhbmQgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCwgZHVlIHRvIHBsYXRmb3JtCnJlc3RyaWN0aW9ucyBvbiBpbnRlZ2Vycy4KCkZvciBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlLCB3ZSBoaWdobHkgcmVjb21tZW5kIFdpbmRvd3MgdXNlcnMgdG8gdmVyc2lvbiAxLjAuNgpvZiB0aGUgbGlic29kaXVtIGV4dGVuc2lvbiBmcm9tIFBFQ0wgb3IuIEFsdGVybmF0aXZlbHksIHNpbXBseSB1cGdyYWRlIHRvIFBIUCA3CmFuZCB0aGUgc2xvd2Rvd24gd2lsbCBiZSBncmVhdGx5IHJlZHVjZWQuCgpUaGlzIGlzIGFsc28gdHJ1ZSBvZiBub24tV2luZG93cyAzMi1iaXQgb3BlcmF0aW5nIHN5c3RlbXMsIG9yIGlmIHNvbWVob3cgUEhQCndhcyBjb21waWxlZCB3aGVyZSBgUEhQX0lOVF9TSVpFYCBlcXVhbHMgYDRgIGluc3RlYWQgb2YgYDhgIChpLmUuIExpbnV4IG9uIGkzODYpLgoKIyMgQVBJIENvdmVyYWdlCgoqKlJlY29tbWVuZGVkIHJlYWRpbmc6KiogW0xpYnNvZGl1bSBRdWljayBSZWZlcmVuY2VdKGh0dHBzOi8vcGFyYWdvbmllLmNvbS9ibG9nLzIwMTcvMDYvbGlic29kaXVtLXF1aWNrLXJlZmVyZW5jZS1xdWljay1jb21wYXJpc29uLXNpbWlsYXItZnVuY3Rpb25zLWFuZC13aGljaC1vbmUtdXNlKQoKKiBNYWlubGluZSBOYUNsIEZlYXR1cmVzCiAgICAqIGBjcnlwdG9fYXV0aCgpYAogICAgKiBgY3J5cHRvX2F1dGhfdmVyaWZ5KClgCiAgICAqIGBjcnlwdG9fYm94KClgCiAgICAqIGBjcnlwdG9fYm94X29wZW4oKWAKICAgICogYGNyeXB0b19zY2FsYXJtdWx0KClgCiAgICAqIGBjcnlwdG9fc2VjcmV0Ym94KClgCiAgICAqIGBjcnlwdG9fc2VjcmV0Ym94X29wZW4oKWAKICAgICogYGNyeXB0b19zaWduKClgCiAgICAqIGBjcnlwdG9fc2lnbl9vcGVuKClgCiogUEVDTCBMaWJzb2RpdW0gRmVhdHVyZXMKICAgICogYGNyeXB0b19hZWFkX2FlczI1NmdjbV9lbmNyeXB0KClgCiAgICAqIGBjcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCgpYAogICAgKiBgY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KClgCiAgICAqIGBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoKWAKICAgICogYGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KClgCiAgICAqIGBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgpYAogICAgKiBgY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KClgCiAgICAqIGBjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoKWAKICAgICogYGNyeXB0b19ib3hfeGNoYWNoYTIwcG9seTEzMDUoKWAKICAgICogYGNyeXB0b19ib3hfeGNoYWNoYTIwcG9seTEzMDVfb3BlbigpYAogICAgKiBgY3J5cHRvX2JveF9zZWFsKClgCiAgICAqIGBjcnlwdG9fYm94X3NlYWxfb3BlbigpYAogICAgKiBgY3J5cHRvX2dlbmVyaWNoYXNoKClgCiAgICAqIGBjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgpYAogICAgKiBgY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZSgpYAogICAgKiBgY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsKClgCiAgICAqIGBjcnlwdG9fa3goKWAKICAgICogYGNyeXB0b19zZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoKWAKICAgICogYGNyeXB0b19zZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfb3BlbigpYAogICAgKiBgY3J5cHRvX3Nob3J0aGFzaCgpYAogICAgKiBgY3J5cHRvX3NpZ25fZGV0YWNoZWQoKWAKICAgICogYGNyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOSgpYAogICAgKiBgY3J5cHRvX3NpZ25fZWQyNTUxOV9za190b19jdXJ2ZTI1NTE5KClgCiAgICAqIGBjcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoKWAKICAgICogRm9yIGFkdmFuY2VkIHVzZXJzIG9ubHk6CiAgICAgICAgKiBgY3J5cHRvX3N0cmVhbSgpYAogICAgICAgICogYGNyeXB0b19zdHJlYW1feG9yKClgCiAgICAqIE90aGVyIHV0aWxpdGllcyAoZS5nLiBgY3J5cHRvXypfa2V5cGFpcigpYCkKCiMjIyBDcnlwdG9ncmFwaHkgUHJpbWl0aXZlcyBQcm92aWRlZAoKKiAqKlgyNTUxOSoqIC0gRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gb3ZlciBDdXJ2ZTI1NTE5CiogKipFZDI1NTE5KiogLSBFZHdhcmRzIGN1cnZlIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSBvdmVyIEN1cnZlMjU1MTkKKiAqKlhzYWxzYTIwKiogLSBFeHRlbmRlZC1ub25jZSBTYWxzYTIwIHN0cmVhbSBjaXBoZXIKKiAqKkNoYUNoYTIwKiogLSBTdHJlYW0gY2lwaGVyCiogKipYY2hhY2hhMjAqKiAtIEV4dGVuZGVkLW5vbmNlIENoYUNoYTIwIHN0cmVhbSBjaXBoZXIKKiAqKlBvbHkxMzA1KiogLSBQb2x5bm9taWFsIEV2YWx1YXRpb24gTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIG1vZHVsbyAyXjEzMCAtIDUKKiAqKkJMQUtFMmIqKiAtIENyeXB0b2dyYXBoaWMgSGFzaCBGdW5jdGlvbgoqICoqU2lwSGFzaC0yLTQqKiAtIEZhc3QgaGFzaCwgYnV0IG5vdCBjb2xsaXNpb24tcmVzaXN0YW50OyBpZGVhbCBmb3IgaGFzaCB0YWJsZXMuCgojIyMgRmVhdHVyZXMgRXhjbHVkZWQgZnJvbSB0aGlzIFBvbHlmaWxsCgoqIGBcU29kaXVtXG1lbXplcm8oKWAgLSBBbHRob3VnaCB3ZSBleHBvc2UgdGhpcyBBUEkgZW5kcG9pbnQsIHdlIGNhbid0IHJlbGlhYmx5CiAgemVybyBidWZmZXJzIGZyb20gUEhQLgogIAogIElmIHlvdSBoYXZlIHRoZSBQSFAgZXh0ZW5zaW9uIGluc3RhbGxlZCwgc29kaXVtX2NvbXBhdAogIHdpbGwgdXNlIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gdG8gemVybyBvdXQgdGhlIHN0cmluZyBwcm92aWRlZC4gT3RoZXJ3aXNlCiAgaXQgd2lsbCB0aHJvdyBhIGBTb2RpdW1FeGNlcHRpb25gLgoqIGBcU29kaXVtXGNyeXB0b19wd2hhc2goKWAgLSBJdCdzIG5vdCBmZWFzaWJsZSB0byBwb2x5ZmlsbCBzY3J5cHQgb3IgQXJnb24yCiAgaW50byBQSFAgYW5kIGdldCByZWFzb25hYmxlIHBlcmZvcm1hbmNlLiBVc2VycyB3b3VsZCBmZWVsIG1vdGl2YXRlZCB0byBzZWxlY3QKICBwYXJhbWV0ZXJzIHRoYXQgZG93bmdyYWRlIHNlY3VyaXR5IHRvIGF2b2lkIGRlbmlhbCBvZiBzZXJ2aWNlIChEb1MpIGF0dGFja3MuCiAgCiAgVGhlIG9ubHkgd2lubmluZyBtb3ZlIGlzIG5vdCB0byBwbGF5LgogIAogIElmIGV4dC9zb2RpdW0gb3IgZXh0L2xpYnNvZGl1bSBpcyBpbnN0YWxsZWQsIHRoZXNlIEFQSSBtZXRob2RzIHdpbGwgZmFsbHRocm91Z2gKICB0byB0aGUgZXh0ZW5zaW9uLiBPdGhlcndpc2UsIG91ciBwb2x5ZmlsbCBsaWJyYXJ5IHdpbGwgdGhyb3cgYSBgU29kaXVtRXhjZXB0aW9uYC4KICAKICBUbyBkZXRlY3Qgc3VwcG9ydCBmb3IgQXJnb24yaSBhdCBydW50aW1lLCB1c2UKICBgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19wd2hhc2hfaXNfYXZhaWxhYmxlKClgLCB3aGljaCByZXR1cm5zIGEKICAgYm9vbGVhbiB2YWx1ZSAoYFRSVUVgIG9yIGBGQUxTRWApLgoK]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Compat.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBMaWJzb2RpdW0gY29tcGF0aWJpbGl0eSBsYXllcgogKgogKiBUaGlzIGlzIHRoZSBvbmx5IGNsYXNzIHlvdSBzaG91bGQgYmUgaW50ZXJmYWNpbmcgd2l0aCwgYXMgYSB1c2VyIG9mCiAqIHNvZGl1bV9jb21wYXQuCiAqCiAqIElmIHRoZSBQSFAgZXh0ZW5zaW9uIGZvciBsaWJzb2RpdW0gaXMgaW5zdGFsbGVkLCBpdCB3aWxsIGFsd2F5cyB1c2UgdGhhdAogKiBpbnN0ZWFkIG9mIG91ciBpbXBsZW1lbnRhdGlvbnMuIFlvdSBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBzdHJvbmdlcgogKiBndWFyYW50ZWVzIGFnYWluc3Qgc2lkZS1jaGFubmVscyB0aGF0IHdheS4KICoKICogSG93ZXZlciwgaWYgeW91ciB1c2VycyBkb24ndCBoYXZlIHRoZSBQSFAgZXh0ZW5zaW9uIGluc3RhbGxlZCwgd2Ugb2ZmZXIgYQogKiBjb21wYXRpYmxlIGludGVyZmFjZSBoZXJlLiBJdCB3aWxsIGdpdmUgeW91IHRoZSBjb3JyZWN0IHJlc3VsdHMgYXMgaWYgdGhlCiAqIFBIUCBleHRlbnNpb24gd2FzIGluc3RhbGxlZC4gSXQgd29uJ3QgYmUgYXMgZmFzdCwgb2YgY291cnNlLgogKgogKiBDQVVUSU9OICogQ0FVVElPTiAqIENBVVRJT04gKiBDQVVUSU9OICogQ0FVVElPTiAqIENBVVRJT04gKiBDQVVUSU9OICogQ0FVVElPTiAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogICAgIFVudGlsIGF1ZGl0ZWQsIHRoaXMgaXMgcHJvYmFibHkgbm90IHNhZmUgdG8gdXNlISBEQU5HRVIgV0lMTCBST0JJTlNPTiAgICAgKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqIENBVVRJT04gKiBDQVVUSU9OICogQ0FVVElPTiAqIENBVVRJT04gKiBDQVVUSU9OICogQ0FVVElPTiAqIENBVVRJT04gKiBDQVVUSU9OICoKICovCgppZiAoY2xhc3NfZXhpc3RzKCdQYXJhZ29uSUVfU29kaXVtX0NvbXBhdCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdAp7CiAgICAvKioKICAgICAqIFRoaXMgcGFyYW1ldGVyIHByZXZlbnRzIHRoZSB1c2Ugb2YgdGhlIFBFQ0wgZXh0ZW5zaW9uLgogICAgICogSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5pdCB0ZXN0aW5nLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRkaXNhYmxlRmFsbGJhY2tGb3JVbml0VGVzdHMgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFVzZSBmYXN0IG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIG91ciBjb25zdGFudC10aW1lIG11bHRpcGxpY2F0aW9uCiAgICAgKiBpbXBsZW1lbnRhdGlvbi4gQ2FuIGJlIGVuYWJsZWQgYXQgcnVudGltZS4gT25seSBlbmFibGUgdGhpcyBpZiB5b3UKICAgICAqIGFyZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGVyZSBpcyBubyB0aW1pbmcgbGVhayBvbiB5b3VyIHBsYXRmb3JtLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRmYXN0TXVsdCA9IGZhbHNlOwoKICAgIGNvbnN0IExJQlJBUllfVkVSU0lPTl9NQUpPUiA9IDk7CiAgICBjb25zdCBMSUJSQVJZX1ZFUlNJT05fTUlOT1IgPSAxOwogICAgY29uc3QgVkVSU0lPTl9TVFJJTkcgPSAncG9seWZpbGwtMS4wLjgnOwoKICAgIC8vIEZyb20gbGlic29kaXVtCiAgICBjb25zdCBDUllQVE9fQUVBRF9BRVMyNTZHQ01fS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19BRUFEX0FFUzI1NkdDTV9OU0VDQllURVMgPSAwOwogICAgY29uc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05QVUJCWVRFUyA9IDEyOwogICAgY29uc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUyA9IDE2OwogICAgY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9LRVlCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OU0VDQllURVMgPSAwOwogICAgY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OUFVCQllURVMgPSA4OwogICAgY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9BQllURVMgPSAxNjsKICAgIGNvbnN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9LRVlCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05TRUNCWVRFUyA9IDA7CiAgICBjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTID0gMTI7CiAgICBjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfQUJZVEVTID0gMTY7CiAgICBjb25zdCBDUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05TRUNCWVRFUyA9IDA7CiAgICBjb25zdCBDUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05QVUJCWVRFUyA9IDI0OwogICAgY29uc3QgQ1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfSUVURl9BQllURVMgPSAxNjsKICAgIGNvbnN0IENSWVBUT19BVVRIX0JZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fQVVUSF9LRVlCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX0JPWF9TRUFMQllURVMgPSAxNjsKICAgIGNvbnN0IENSWVBUT19CT1hfU0VDUkVUS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19CT1hfUFVCTElDS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19CT1hfS0VZUEFJUkJZVEVTID0gNjQ7CiAgICBjb25zdCBDUllQVE9fQk9YX01BQ0JZVEVTID0gMTY7CiAgICBjb25zdCBDUllQVE9fQk9YX05PTkNFQllURVMgPSAyNDsKICAgIGNvbnN0IENSWVBUT19CT1hfU0VFREJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fS1hfQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19LWF9TRUVEQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19LWF9QVUJMSUNLRVlCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX0tYX1NFQ1JFVEtFWUJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fR0VORVJJQ0hBU0hfQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9CWVRFU19NSU4gPSAxNjsKICAgIGNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9CWVRFU19NQVggPSA2NDsKICAgIGNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01JTiA9IDE2OwogICAgY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01BWCA9IDY0OwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9TQUxUQllURVMgPSAxNjsKICAgIGNvbnN0IENSWVBUT19QV0hBU0hfU1RSUFJFRklYID0gJyRhcmdvbjJpJCc7CiAgICBjb25zdCBDUllQVE9fUFdIQVNIX0FMR19BUkdPTjJJMTMgPSAxOwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySUQxMyA9IDI7CiAgICBjb25zdCBDUllQVE9fUFdIQVNIX01FTUxJTUlUX0lOVEVSQUNUSVZFID0gMzM1NTQ0MzI7CiAgICBjb25zdCBDUllQVE9fUFdIQVNIX09QU0xJTUlUX0lOVEVSQUNUSVZFID0gNDsKICAgIGNvbnN0IENSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUgPSAxMzQyMTc3Mjg7CiAgICBjb25zdCBDUllQVE9fUFdIQVNIX09QU0xJTUlUX01PREVSQVRFID0gNjsKICAgIGNvbnN0IENSWVBUT19QV0hBU0hfTUVNTElNSVRfU0VOU0lUSVZFID0gNTM2ODcwOTEyOwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9TRU5TSVRJVkUgPSA4OwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9TQUxUQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfU1RSUFJFRklYID0gJyQ3JCc7CiAgICBjb25zdCBDUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X09QU0xJTUlUX0lOVEVSQUNUSVZFID0gNTM0Mjg4OwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9JTlRFUkFDVElWRSA9IDE2Nzc3MjE2OwogICAgY29uc3QgQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9PUFNMSU1JVF9TRU5TSVRJVkUgPSAzMzU1NDQzMjsKICAgIGNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfTUVNTElNSVRfU0VOU0lUSVZFID0gMTA3Mzc0MTgyNDsKICAgIGNvbnN0IENSWVBUT19TQ0FMQVJNVUxUX0JZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fU0NBTEFSTVVMVF9TQ0FMQVJCWVRFUyA9IDMyOwogICAgY29uc3QgQ1JZUFRPX1NIT1JUSEFTSF9CWVRFUyA9IDg7CiAgICBjb25zdCBDUllQVE9fU0hPUlRIQVNIX0tFWUJZVEVTID0gMTY7CiAgICBjb25zdCBDUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fU0VDUkVUQk9YX01BQ0JZVEVTID0gMTY7CiAgICBjb25zdCBDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMgPSAyNDsKICAgIGNvbnN0IENSWVBUT19TSUdOX0JZVEVTID0gNjQ7CiAgICBjb25zdCBDUllQVE9fU0lHTl9TRUVEQllURVMgPSAzMjsKICAgIGNvbnN0IENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUyA9IDY0OwogICAgY29uc3QgQ1JZUFRPX1NJR05fS0VZUEFJUkJZVEVTID0gOTY7CiAgICBjb25zdCBDUllQVE9fU1RSRUFNX0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBDUllQVE9fU1RSRUFNX05PTkNFQllURVMgPSAyNDsKCiAgICAvKioKICAgICAqIENhY2hlLXRpbWluZy1zYWZlIGltcGxlbWVudGF0aW9uIG9mIGJpbjJoZXgoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgQSBzdHJpbmcgKHByb2JhYmx5IHJhdyBiaW5hcnkpCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgQSBoZXhhZGVjaW1hbC1lbmNvZGVkIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJpbjJoZXgoJHN0cmluZykKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHN0cmluZywgJ3N0cmluZycsIDEpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9iaW4yaGV4KCRzdHJpbmcpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdiaW4yaGV4JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcYmluMmhleCcsICRzdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmJpbjJoZXgoJHN0cmluZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlIHR3byBzdHJpbmdzLCBpbiBjb25zdGFudC10aW1lLgogICAgICogQ29tcGFyZWQgdG8gbWVtY21wKCksIGNvbXBhcmUoKSBpcyBtb3JlIHVzZWZ1bCBmb3Igc29ydGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZWZ0ICBUaGUgbGVmdCBvcGVyYW5kOyBtdXN0IGJlIGEgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyaWdodCBUaGUgcmlnaHQgb3BlcmFuZDsgbXVzdCBiZSBhIHN0cmluZwogICAgICogQHJldHVybiBpbnQgICAgICAgICAgPCAwIGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgbGVzcyB0aGFuIHRoZSByaWdodAogICAgICogICAgICAgICAgICAgICAgICAgICAgPSAwIGlmIGJvdGggc3RyaW5ncyBhcmUgZXF1YWwKICAgICAqICAgICAgICAgICAgICAgICAgICAgID4gMCBpZiB0aGUgcmlnaHQgb3BlcmFuZCBpcyBsZXNzIHRoYW4gdGhlIGxlZnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlKCRsZWZ0LCAkcmlnaHQpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRsZWZ0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRyaWdodCwgJ3N0cmluZycsIDIpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpIHNvZGl1bV9jb21wYXJlKCRsZWZ0LCAkcmlnaHQpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjb21wYXJlJykpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY29tcGFyZScsICRsZWZ0LCAkcmlnaHQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmNvbXBhcmUoJGxlZnQsICRyaWdodCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyBBRVMtMjU2LUdDTSBldmVuIGF2YWlsYWJsZSB0byB1c2U/CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkRnVuY3Rpb24KICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEluZmVycmVkUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkUmV0dXJuU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZSgpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZSgpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYWVhZF9hZXMyNTZnY21faXNfYXZhaWxhYmxlJykpIHsKICAgICAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA3MDEwMCkgewogICAgICAgICAgICAvLyBPcGVuU1NMIGRvZXNuJ3Qgc3VwcG9ydCBBRUFEIGJlZm9yZSA3LjEuMAogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfY2FsbGFibGUoJ29wZW5zc2xfZW5jcnlwdCcpIHx8ICFpc19jYWxsYWJsZSgnb3BlbnNzbF9kZWNyeXB0JykpIHsKICAgICAgICAgICAgLy8gT3BlblNTTCBpc24ndCBpbnN0YWxsZWQKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKGJvb2wpIGluX2FycmF5KCdhZXMtMjU2LWdjbScsIG9wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhOiBEZWNyeXB0aW9uCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIEFFUy0yNTYtR0NNCiAgICAgKgogICAgICogVGhpcyBtb2RlIHVzZXMgYSA2NC1iaXQgcmFuZG9tIG5vbmNlIHdpdGggYSA2NC1iaXQgY291bnRlci4KICAgICAqIElFVEYgbW9kZSB1c2VzIGEgOTYtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgMzItYml0IGNvdW50ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dCBFbmNyeXB0ZWQgbWVzc2FnZSAod2l0aCBQb2x5MTMwNSBNQUMgYXBwZW5kZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEgIEF1dGhlbnRpY2F0ZWQgQXNzb2NpYXRlZCBEYXRhICh1bmVuY3J5cHRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgTnVtYmVyIHRvIGJlIHVzZWQgb25seSBPbmNlOyBtdXN0IGJlIDggYnl0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICAgRW5jcnlwdGlvbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sICAgICAgIFRoZSBvcmlnaW5hbCBwbGFpbnRleHQgbWVzc2FnZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCgKICAgICAgICAkY2lwaGVydGV4dCA9ICcnLAogICAgICAgICRhc3NvY0RhdGEgPSAnJywKICAgICAgICAkbm9uY2UgPSAnJywKICAgICAgICAka2V5ID0gJycKICAgICkgewogICAgICAgIGlmICghc2VsZjo6Y3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FFUy0yNTYtR0NNIGlzIG5vdCBhdmFpbGFibGUnKTsKICAgICAgICB9CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjaXBoZXJ0ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRhc3NvY0RhdGEsICdzdHJpbmcnLCAyKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMyk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCA0KTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fQUVBRF9BRVMyNTZHQ01fTlBVQkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ05vbmNlIG11c3QgYmUgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05QVUJCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXkpICE9PSBzZWxmOjpDUllQVE9fQUVBRF9BRVMyNTZHQ01fS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignS2V5IG11c3QgYmUgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0tFWUJZVEVTIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGNpcGhlcnRleHQpIDwgc2VsZjo6Q1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdNZXNzYWdlIG11c3QgYmUgYXQgbGVhc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfY2FsbGFibGUoJ29wZW5zc2xfZGVjcnlwdCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1RoZSBPcGVuU1NMIGV4dGVuc2lvbiBpcyBub3QgaW5zdGFsbGVkLCBvciBvcGVuc3NsX2RlY3J5cHQoKSBpcyBub3QgYXZhaWxhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGN0ZXh0ICovCiAgICAgICAgJGN0ZXh0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkY2lwaGVydGV4dCwgMCwgLXNlbGY6OkNSWVBUT19BRUFEX0FFUzI1NkdDTV9BQllURVMpOwogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYXV0aFRhZyAqLwogICAgICAgICRhdXRoVGFnID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkY2lwaGVydGV4dCwgLXNlbGY6OkNSWVBUT19BRUFEX0FFUzI1NkdDTV9BQllURVMsIDE2KTsKICAgICAgICByZXR1cm4gb3BlbnNzbF9kZWNyeXB0KAogICAgICAgICAgICAkY3RleHQsCiAgICAgICAgICAgICdhZXMtMjU2LWdjbScsCiAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgIE9QRU5TU0xfUkFXX0RBVEEsCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgJGF1dGhUYWcsCiAgICAgICAgICAgICRhc3NvY0RhdGEKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhOiBFbmNyeXB0aW9uCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIEFFUy0yNTYtR0NNCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGxhaW50ZXh0IE1lc3NhZ2UgdG8gYmUgZW5jcnlwdGVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEgQXV0aGVudGljYXRlZCBBc3NvY2lhdGVkIERhdGEgKHVuZW5jcnlwdGVkKQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgICAgIE51bWJlciB0byBiZSB1c2VkIG9ubHkgT25jZTsgbXVzdCBiZSA4IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgRW5jcnlwdGlvbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgQ2lwaGVydGV4dCB3aXRoIGEgMTYtYnl0ZSBHQ00gbWVzc2FnZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGNvZGUgYXBwZW5kZWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCgKICAgICAgICAkcGxhaW50ZXh0ID0gJycsCiAgICAgICAgJGFzc29jRGF0YSA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgaWYgKCFzZWxmOjpjcnlwdG9fYWVhZF9hZXMyNTZnY21faXNfYXZhaWxhYmxlKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQUVTLTI1Ni1HQ00gaXMgbm90IGF2YWlsYWJsZScpOwogICAgICAgIH0KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBsYWludGV4dCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYXNzb2NEYXRhLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDMpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgNCk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQUVTMjU2R0NNX05QVUJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdOb25jZSBtdXN0IGJlIENSWVBUT19BRUFEX0FFUzI1NkdDTV9OUFVCQllURVMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQUVTMjU2R0NNX0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0tleSBtdXN0IGJlIENSWVBUT19BRUFEX0FFUzI1NkdDTV9LRVlCWVRFUyBsb25nJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2NhbGxhYmxlKCdvcGVuc3NsX2VuY3J5cHQnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdUaGUgT3BlblNTTCBleHRlbnNpb24gaXMgbm90IGluc3RhbGxlZCwgb3Igb3BlbnNzbF9lbmNyeXB0KCkgaXMgbm90IGF2YWlsYWJsZScpOwogICAgICAgIH0KCiAgICAgICAgJGF1dGhUYWcgPSAnJzsKICAgICAgICAkY2lwaGVydGV4dCA9IG9wZW5zc2xfZW5jcnlwdCgKICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgJ2Flcy0yNTYtZ2NtJywKICAgICAgICAgICAgJGtleSwKICAgICAgICAgICAgT1BFTlNTTF9SQVdfREFUQSwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAkYXV0aFRhZywKICAgICAgICAgICAgJGFzc29jRGF0YQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRjaXBoZXJ0ZXh0IC4gJGF1dGhUYWc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBzZWN1cmUgcmFuZG9tIGtleSBmb3IgdXNlIHdpdGggdGhlIEFFUy0yNTYtR0NNCiAgICAgKiBzeW1tZXRyaWMgQUVBRCBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fQUVBRF9BRVMyNTZHQ01fS0VZQllURVMpOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhOiBEZWNyeXB0aW9uCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIENoYUNoYTIwLVBvbHkxMzA1CiAgICAgKgogICAgICogVGhpcyBtb2RlIHVzZXMgYSA2NC1iaXQgcmFuZG9tIG5vbmNlIHdpdGggYSA2NC1iaXQgY291bnRlci4KICAgICAqIElFVEYgbW9kZSB1c2VzIGEgOTYtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgMzItYml0IGNvdW50ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dCBFbmNyeXB0ZWQgbWVzc2FnZSAod2l0aCBQb2x5MTMwNSBNQUMgYXBwZW5kZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEgIEF1dGhlbnRpY2F0ZWQgQXNzb2NpYXRlZCBEYXRhICh1bmVuY3J5cHRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgTnVtYmVyIHRvIGJlIHVzZWQgb25seSBPbmNlOyBtdXN0IGJlIDggYnl0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICAgRW5jcnlwdGlvbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBwbGFpbnRleHQgbWVzc2FnZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoCiAgICAgICAgJGNpcGhlcnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGNpcGhlcnRleHQsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGFzc29jRGF0YSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbm9uY2UsICdzdHJpbmcnLCAzKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleSwgJ3N0cmluZycsIDQpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRub25jZSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfTlBVQkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ05vbmNlIG11c3QgYmUgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OUFVCQllURVMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdLZXkgbXVzdCBiZSBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGNpcGhlcnRleHQpIDwgc2VsZjo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9BQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignTWVzc2FnZSBtdXN0IGJlIGF0IGxlYXN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfQUJZVEVTIGxvbmcnKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWRSZXR1cm5TdGF0ZW1lbnQKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEZhbHNhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICAgICAqLwogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgKICAgICAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0JykpIHsKICAgICAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQnLAogICAgICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgKICAgICAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgKICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgICRhc3NvY0RhdGEsCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgJGtleQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICAgICAqCiAgICAgKiBBbGdvcml0aG06CiAgICAgKiAgICAgQ2hhQ2hhMjAtUG9seTEzMDUKICAgICAqCiAgICAgKiBUaGlzIG1vZGUgdXNlcyBhIDY0LWJpdCByYW5kb20gbm9uY2Ugd2l0aCBhIDY0LWJpdCBjb3VudGVyLgogICAgICogSUVURiBtb2RlIHVzZXMgYSA5Ni1iaXQgcmFuZG9tIG5vbmNlIHdpdGggYSAzMi1iaXQgY291bnRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQgTWVzc2FnZSB0byBiZSBlbmNyeXB0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFzc29jRGF0YSBBdXRoZW50aWNhdGVkIEFzc29jaWF0ZWQgRGF0YSAodW5lbmNyeXB0ZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZSAgICAgTnVtYmVyIHRvIGJlIHVzZWQgb25seSBPbmNlOyBtdXN0IGJlIDggYnl0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICBFbmNyeXB0aW9uIGtleQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBDaXBoZXJ0ZXh0IHdpdGggYSAxNi1ieXRlIFBvbHkxMzA1IG1lc3NhZ2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBjb2RlIGFwcGVuZGVkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KAogICAgICAgICRwbGFpbnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBsYWludGV4dCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYXNzb2NEYXRhLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDMpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgNCk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OUFVCQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignTm9uY2UgbXVzdCBiZSBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05QVUJCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXkpICE9PSBzZWxmOjpDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0tleSBtdXN0IGJlIENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMgbG9uZycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KAogICAgICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgICAgICRhc3NvY0RhdGEsCiAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAka2V5CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCcpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygKICAgICAgICAgICAgICAgICdcXFNvZGl1bVxcY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0JywKICAgICAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCgKICAgICAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KAogICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhOiBEZWNyeXB0aW9uCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIENoYUNoYTIwLVBvbHkxMzA1CiAgICAgKgogICAgICogSUVURiBtb2RlIHVzZXMgYSA5Ni1iaXQgcmFuZG9tIG5vbmNlIHdpdGggYSAzMi1iaXQgY291bnRlci4KICAgICAqIFJlZ3VsYXIgbW9kZSB1c2VzIGEgNjQtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgNjQtYml0IGNvdW50ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dCBFbmNyeXB0ZWQgbWVzc2FnZSAod2l0aCBQb2x5MTMwNSBNQUMgYXBwZW5kZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEgIEF1dGhlbnRpY2F0ZWQgQXNzb2NpYXRlZCBEYXRhICh1bmVuY3J5cHRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgTnVtYmVyIHRvIGJlIHVzZWQgb25seSBPbmNlOyBtdXN0IGJlIDEyIGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgIEVuY3J5cHRpb24ga2V5CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAgICBUaGUgb3JpZ2luYWwgcGxhaW50ZXh0IG1lc3NhZ2UKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEluZmVycmVkUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkUmV0dXJuU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgJGNpcGhlcnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGNpcGhlcnRleHQsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGFzc29jRGF0YSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbm9uY2UsICdzdHJpbmcnLCAzKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleSwgJ3N0cmluZycsIDQpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRub25jZSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9OUFVCQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignTm9uY2UgbXVzdCBiZSBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignS2V5IG11c3QgYmUgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9LRVlCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRjaXBoZXJ0ZXh0KSA8IHNlbGY6OkNSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfQUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ01lc3NhZ2UgbXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUyBsb25nJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbnZhbGlkUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBGYWxzYWJsZVJldHVyblN0YXRlbWVudAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgKICAgICAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQnKSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoCiAgICAgICAgICAgICAgICAnXFxTb2RpdW1cXGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0JywKICAgICAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgKICAgICAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhIHNlY3VyZSByYW5kb20ga2V5IGZvciB1c2Ugd2l0aCB0aGUgQ2hhQ2hhMjAtUG9seTEzMDUKICAgICAqIHN5bW1ldHJpYyBBRUFEIGludGVyZmFjZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTKTsKICAgIH0KCiAgICAvKioKICAgICAqIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQogICAgICoKICAgICAqIEFsZ29yaXRobToKICAgICAqICAgICBDaGFDaGEyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIElFVEYgbW9kZSB1c2VzIGEgOTYtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgMzItYml0IGNvdW50ZXIuCiAgICAgKiBSZWd1bGFyIG1vZGUgdXNlcyBhIDY0LWJpdCByYW5kb20gbm9uY2Ugd2l0aCBhIDY0LWJpdCBjb3VudGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dCBNZXNzYWdlIHRvIGJlIGVuY3J5cHRlZAogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhIEF1dGhlbnRpY2F0ZWQgQXNzb2NpYXRlZCBEYXRhICh1bmVuY3J5cHRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlIE51bWJlciB0byBiZSB1c2VkIG9ubHkgT25jZTsgbXVzdCBiZSA4IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgRW5jcnlwdGlvbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgQ2lwaGVydGV4dCB3aXRoIGEgMTYtYnl0ZSBQb2x5MTMwNSBtZXNzYWdlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb24gY29kZSBhcHBlbmRlZAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KAogICAgICAgICRwbGFpbnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBsYWludGV4dCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYXNzb2NEYXRhLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDMpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgNCk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05QVUJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdOb25jZSBtdXN0IGJlIENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9OUFVCQllURVMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdLZXkgbXVzdCBiZSBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTIGxvbmcnKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KAogICAgICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgICAgICRhc3NvY0RhdGEsCiAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAka2V5CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCcsCiAgICAgICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgKICAgICAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoCiAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICRhc3NvY0RhdGEsCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgJGtleQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBzZWN1cmUgcmFuZG9tIGtleSBmb3IgdXNlIHdpdGggdGhlIENoYUNoYTIwLVBvbHkxMzA1CiAgICAgKiBzeW1tZXRyaWMgQUVBRCBpbnRlcmZhY2UuIChJRVRGIHZlcnNpb24pCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfS0VZQllURVMpOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhOiBEZWNyeXB0aW9uCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIFhDaGFDaGEyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIFRoaXMgbW9kZSB1c2VzIGEgNjQtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgNjQtYml0IGNvdW50ZXIuCiAgICAgKiBJRVRGIG1vZGUgdXNlcyBhIDk2LWJpdCByYW5kb20gbm9uY2Ugd2l0aCBhIDMyLWJpdCBjb3VudGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQgICBFbmNyeXB0ZWQgbWVzc2FnZSAod2l0aCBQb2x5MTMwNSBNQUMgYXBwZW5kZWQpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NvY0RhdGEgICAgQXV0aGVudGljYXRlZCBBc3NvY2lhdGVkIERhdGEgKHVuZW5jcnlwdGVkKQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgICAgICAgIE51bWJlciB0byBiZSB1c2VkIG9ubHkgT25jZTsgbXVzdCBiZSA4IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgICAgRW5jcnlwdGlvbiBrZXkKICAgICAqIEBwYXJhbSBib29sICAgJGRvbnRGYWxsYmFjayBEb24ndCBmYWxsYmFjayB0byBleHQvc29kaXVtCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAgICBUaGUgb3JpZ2luYWwgcGxhaW50ZXh0IG1lc3NhZ2UKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgJGNpcGhlcnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnLAogICAgICAgICRkb250RmFsbGJhY2sgPSBmYWxzZQogICAgKSB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjaXBoZXJ0ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRhc3NvY0RhdGEsICdzdHJpbmcnLCAyKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMyk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCA0KTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05QVUJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdOb25jZSBtdXN0IGJlIENSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignS2V5IG11c3QgYmUgQ1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfSUVURl9LRVlCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRjaXBoZXJ0ZXh0KSA8IHNlbGY6OkNSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfQUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ01lc3NhZ2UgbXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0FCWVRFUyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSAmJiAhJGRvbnRGYWxsYmFjaykgewogICAgICAgICAgICBpZiAoaXNfY2FsbGFibGUoJ3NvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQnKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6YWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgICAgICRhc3NvY0RhdGEsCiAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAka2V5CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6YWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAkYXNzb2NEYXRhLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCiAgICAgKgogICAgICogQWxnb3JpdGhtOgogICAgICogICAgIFhDaGFDaGEyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIFRoaXMgbW9kZSB1c2VzIGEgNjQtYml0IHJhbmRvbSBub25jZSB3aXRoIGEgNjQtYml0IGNvdW50ZXIuCiAgICAgKiBJRVRGIG1vZGUgdXNlcyBhIDk2LWJpdCByYW5kb20gbm9uY2Ugd2l0aCBhIDMyLWJpdCBjb3VudGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dCAgICBNZXNzYWdlIHRvIGJlIGVuY3J5cHRlZAogICAgICogQHBhcmFtIHN0cmluZyAkYXNzb2NEYXRhICAgIEF1dGhlbnRpY2F0ZWQgQXNzb2NpYXRlZCBEYXRhICh1bmVuY3J5cHRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgICBOdW1iZXIgdG8gYmUgdXNlZCBvbmx5IE9uY2U7IG11c3QgYmUgOCBieXRlcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5ICAgICAgICAgIEVuY3J5cHRpb24ga2V5CiAgICAgKiBAcGFyYW0gYm9vbCAgICRkb250RmFsbGJhY2sgRG9uJ3QgZmFsbGJhY2sgdG8gZXh0L3NvZGl1bQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBDaXBoZXJ0ZXh0IHdpdGggYSAxNi1ieXRlIFBvbHkxMzA1IG1lc3NhZ2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbiBjb2RlIGFwcGVuZGVkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KAogICAgICAgICRwbGFpbnRleHQgPSAnJywKICAgICAgICAkYXNzb2NEYXRhID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnLAogICAgICAgICRkb250RmFsbGJhY2sgPSBmYWxzZQogICAgKSB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRwbGFpbnRleHQsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGFzc29jRGF0YSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbm9uY2UsICdzdHJpbmcnLCAzKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleSwgJ3N0cmluZycsIDQpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRub25jZSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ05vbmNlIG11c3QgYmUgQ1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfTlBVQkJZVEVTIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignS2V5IG11c3QgYmUgQ1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkgJiYgISRkb250RmFsbGJhY2spIHsKICAgICAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCdzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0JykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KAogICAgICAgICAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6YWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoCiAgICAgICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjphZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgKICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgJGFzc29jRGF0YSwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhIHNlY3VyZSByYW5kb20ga2V5IGZvciB1c2Ugd2l0aCB0aGUgWENoYUNoYTIwLVBvbHkxMzA1CiAgICAgKiBzeW1tZXRyaWMgQUVBRCBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4oKQogICAgewogICAgICAgIHJldHVybiByYW5kb21fYnl0ZXMoc2VsZjo6Q1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfSUVURl9LRVlCWVRFUyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdXRoZW50aWNhdGUgYSBtZXNzYWdlLiBVc2VzIHN5bW1ldHJpYy1rZXkgY3J5cHRvZ3JhcGh5LgogICAgICoKICAgICAqIEFsZ29yaXRobToKICAgICAqICAgICBITUFDLVNIQTUxMi0yNTYuIFdoaWNoIGlzIEhNQUMtU0hBLTUxMiB0cnVuY2F0ZWQgdG8gMjU2IGJpdHMuCiAgICAgKiAgICAgTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggSE1BQy1TSEEtNTEyLzI1NiB3aGljaCB3b3VsZCB1c2UgdGhlCiAgICAgKiAgICAgU0hBLTUxMi8yNTYgaGFzaCBmdW5jdGlvbiAodXNlcyBkaWZmZXJlbnQgaW5pdGlhbCBwYXJhbWV0ZXJzCiAgICAgKiAgICAgYnV0IHN0aWxsIHRydW5jYXRlcyB0byAyNTYgYml0cyB0byBzaWRlc3RlcCBsZW5ndGgtZXh0ZW5zaW9uCiAgICAgKiAgICAgYXR0YWNrcykuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBNZXNzYWdlIHRvIGJlIGF1dGhlbnRpY2F0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBTeW1tZXRyaWMgYXV0aGVudGljYXRpb24ga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgIE1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19hdXRoKCRtZXNzYWdlLCAka2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMik7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19BVVRIX0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fQVVUSF9LRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2F1dGgoJG1lc3NhZ2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYXV0aCcpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19hdXRoJywgJG1lc3NhZ2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjphdXRoKCRtZXNzYWdlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjphdXRoKCRtZXNzYWdlLCAka2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19hdXRoX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fQVVUSF9LRVlCWVRFUyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZnkgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgcHJldmlvdXNseSBhdXRoZW50aWNhdGVkIHdpdGggY3J5cHRvX2F1dGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFjIE1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBNZXNzYWdlIHdob3NlIGF1dGhlbnRpY2l0eSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5ICh3aXRoIGEgZ2l2ZW4gTUFDIGFuZCBrZXkpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgU3ltbWV0cmljIGF1dGhlbnRpY2F0aW9uIGtleQogICAgICogQHJldHVybiBib29sICAgICAgICAgICBUUlVFIGlmIGF1dGhlbnRpY2F0ZWQsIEZBTFNFIG90aGVyd2lzZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19hdXRoX3ZlcmlmeSgkbWFjLCAkbWVzc2FnZSwgJGtleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG1hYywgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMyk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG1hYykgIT09IHNlbGY6OkNSWVBUT19BVVRIX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fQVVUSF9CWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0FVVEhfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19BVVRIX0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChib29sKSBzb2RpdW1fY3J5cHRvX2F1dGhfdmVyaWZ5KCRtYWMsICRtZXNzYWdlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2F1dGhfdmVyaWZ5JykpIHsKICAgICAgICAgICAgcmV0dXJuIChib29sKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19hdXRoX3ZlcmlmeScsICRtYWMsICRtZXNzYWdlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6YXV0aF92ZXJpZnkoJG1hYywgJG1lc3NhZ2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmF1dGhfdmVyaWZ5KCRtYWMsICRtZXNzYWdlLCAka2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEF1dGhlbnRpY2F0ZWQgYXN5bW1ldHJpYy1rZXkgZW5jcnlwdGlvbi4gQm90aCB0aGUgc2VuZGVyIGFuZCByZWNpcGllbnQKICAgICAqIG1heSBkZWNyeXB0IG1lc3NhZ2VzLgogICAgICoKICAgICAqIEFsZ29yaXRobTogWDI1NTE5LVhTYWxzYTIwLVBvbHkxMzA1LgogICAgICogICAgIFgyNTUxOTogRWxsaXB0aWMtQ3VydmUgRGlmZmllIEhlbGxtYW4gb3ZlciBDdXJ2ZTI1NTE5LgogICAgICogICAgIFhTYWxzYTIwOiBFeHRlbmRlZC1ub25jZSB2YXJpYW50IG9mIHNhbHNhMjAuCiAgICAgKiAgICAgUG95bDEzMDU6IFBvbHlub21pYWwgTUFDIGZvciBvbmUtdGltZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dCBUaGUgbWVzc2FnZSB0byBiZSBlbmNyeXB0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlIEEgTnVtYmVyIHRvIG9ubHkgYmUgdXNlZCBPbmNlOyBtdXN0IGJlIDI0IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyIFlvdXIgc2VjcmV0IGtleSBhbmQgeW91ciByZWNpcGllbnQncyBwdWJsaWMga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgQ2lwaGVydGV4dCB3aXRoIDE2LWJ5dGUgUG9seTEzMDUgTUFDCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2JveCgkcGxhaW50ZXh0LCAkbm9uY2UsICRrZXlwYWlyKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcGxhaW50ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5cGFpciwgJ3N0cmluZycsIDMpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRub25jZSkgIT09IHNlbGY6OkNSWVBUT19CT1hfTk9OQ0VCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAyIG11c3QgYmUgQ1JZUFRPX0JPWF9OT05DRUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXlwYWlyKSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19CT1hfS0VZUEFJUkJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9jcnlwdG9fYm94KCRwbGFpbnRleHQsICRub25jZSwgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX2JveCcsICRwbGFpbnRleHQsICRub25jZSwgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Ym94KCRwbGFpbnRleHQsICRub25jZSwgJGtleXBhaXIpOwogICAgfQoKICAgIC8qKgogICAgICogQW5vbnltb3VzIHB1YmxpYy1rZXkgZW5jcnlwdGlvbi4gT25seSB0aGUgcmVjaXBpZW50IG1heSBkZWNyeXB0IG1lc3NhZ2VzLgogICAgICoKICAgICAqIEFsZ29yaXRobTogWDI1NTE5LVhTYWxzYTIwLVBvbHkxMzA1LCBhcyB3aXRoIGNyeXB0b19ib3guCiAgICAgKiAgICAgVGhlIHNlbmRlcidzIFgyNTUxOSBrZXlwYWlyIGlzIGVwaGVtZXJhbC4KICAgICAqICAgICBOb25jZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgQkxBS0UyYiBoYXNoIG9mIGJvdGggcHVibGljIGtleXMuCiAgICAgKgogICAgICogVGhpcyBwcm92aWRlcyBjaXBoZXJ0ZXh0IGludGVncml0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQgTWVzc2FnZSB0byBiZSBzZWFsZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY0tleSBZb3VyIHJlY2lwaWVudCdzIHB1YmxpYyBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBTZWFsZWQgbWVzc2FnZSB0aGF0IG9ubHkgeW91ciByZWNpcGllbnQgY2FuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19ib3hfc2VhbCgkcGxhaW50ZXh0LCAkcHVibGljS2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcGxhaW50ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRwdWJsaWNLZXksICdzdHJpbmcnLCAyKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkcHVibGljS2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAyIG11c3QgYmUgQ1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2JveF9zZWFsKCRwbGFpbnRleHQsICRwdWJsaWNLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94X3NlYWwnKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fYm94X3NlYWwnLCAkcGxhaW50ZXh0LCAkcHVibGljS2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X3NlYWwoJHBsYWludGV4dCwgJHB1YmxpY0tleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Ym94X3NlYWwoJHBsYWludGV4dCwgJHB1YmxpY0tleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcGVucyBhIG1lc3NhZ2UgZW5jcnlwdGVkIHdpdGggY3J5cHRvX2JveF9zZWFsKCkuIFJlcXVpcmVzCiAgICAgKiB0aGUgcmVjaXBpZW50J3Mga2V5cGFpciAoc2sgfHwgcGspIHRvIGRlY3J5cHQgc3VjY2Vzc2Z1bGx5LgogICAgICoKICAgICAqIFRoaXMgdmFsaWRhdGVzIGNpcGhlcnRleHQgaW50ZWdyaXR5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQgU2VhbGVkIG1lc3NhZ2UgdG8gYmUgb3BlbmVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyICAgIFlvdXIgY3J5cHRvX2JveCBrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBwbGFpbnRleHQgbWVzc2FnZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X3NlYWxfb3BlbigkY2lwaGVydGV4dCwgJGtleXBhaXIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjaXBoZXJ0ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXlwYWlyLCAnc3RyaW5nJywgMik7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleXBhaXIpICE9PSBzZWxmOjpDUllQVE9fQk9YX0tFWVBBSVJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAyIG11c3QgYmUgQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWRSZXR1cm5TdGF0ZW1lbnQKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEZhbHNhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICAgICAqLwogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19ib3hfc2VhbF9vcGVuKCRjaXBoZXJ0ZXh0LCAka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19ib3hfc2VhbF9vcGVuJykpIHsKICAgICAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9zZWFsX29wZW4nLCAkY2lwaGVydGV4dCwgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfc2VhbF9vcGVuKCRjaXBoZXJ0ZXh0LCAka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Ym94X3NlYWxfb3BlbigkY2lwaGVydGV4dCwgJGtleXBhaXIpOwogICAgfQoKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSBuZXcgcmFuZG9tIFgyNTUxOSBrZXlwYWlyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgNjQtYnl0ZSBzdHJpbmc7IHRoZSBmaXJzdCAzMiBhcmUgeW91ciBzZWNyZXQga2V5LCB3aGlsZQogICAgICogICAgICAgICAgICAgICAgdGhlIGxhc3QgMzIgYXJlIHlvdXIgcHVibGljIGtleS4gY3J5cHRvX2JveF9zZWNyZXRrZXkoKQogICAgICogICAgICAgICAgICAgICAgYW5kIGNyeXB0b19ib3hfcHVibGlja2V5KCkgZXhpc3QgdG8gc2VwYXJhdGUgdGhlbSBzbyB5b3UKICAgICAqICAgICAgICAgICAgICAgIGRvbid0IGFjY2lkZW50YWxseSBnZXQgdGhlbSBtaXhlZCB1cCEKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoKQogICAgewogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgc29kaXVtX2NyeXB0b19ib3hfa2V5cGFpcigpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94X2tleXBhaXInKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fYm94X2tleXBhaXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X2tleXBhaXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfa2V5cGFpcigpOwogICAgfQoKICAgIC8qKgogICAgICogQ29tYmluZSB0d28ga2V5cyBpbnRvIGEga2V5cGFpciBmb3IgdXNlIGluIGxpYnJhcnkgbWV0aG9kcyB0aGF0IGV4cGVjdAogICAgICogYSBrZXlwYWlyLiBUaGlzIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBiZSB0aGUgc2FtZSBwZXJzb24ncyBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleSBTZWNyZXQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkgUHVibGljIGtleQogICAgICogQHJldHVybiBzdHJpbmcgICAgS2V5cGFpcgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19ib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzZWNyZXRLZXksICRwdWJsaWNLZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzZWNyZXRLZXksICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHB1YmxpY0tleSwgJ3N0cmluZycsIDIpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzZWNyZXRLZXkpICE9PSBzZWxmOjpDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRwdWJsaWNLZXkpICE9PSBzZWxmOjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9jcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleSgkc2VjcmV0S2V5LCAkcHVibGljS2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXknKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleScsICRzZWNyZXRLZXksICRwdWJsaWNLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzZWNyZXRLZXksICRwdWJsaWNLZXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmJveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkoJHNlY3JldEtleSwgJHB1YmxpY0tleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IGEgbWVzc2FnZSBwcmV2aW91c2x5IGVuY3J5cHRlZCB3aXRoIGNyeXB0b19ib3goKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0IEVuY3J5cHRlZCBtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZSAgICAgIE51bWJlciB0byBvbmx5IGJlIHVzZWQgT25jZTsgbXVzdCBiZSAyNCBieXRlcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpciAgICBZb3VyIHNlY3JldCBrZXkgYW5kIHRoZSBzZW5kZXIncyBwdWJsaWMga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgIFRoZSBvcmlnaW5hbCBwbGFpbnRleHQgbWVzc2FnZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleXBhaXIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjaXBoZXJ0ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5cGFpciwgJ3N0cmluZycsIDMpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRjaXBoZXJ0ZXh0KSA8IHNlbGY6OkNSWVBUT19CT1hfTUFDQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMSBtdXN0IGJlIGF0IGxlYXN0IENSWVBUT19CT1hfTUFDQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9OT05DRUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fQk9YX05PTkNFQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleXBhaXIpICE9PSBzZWxmOjpDUllQVE9fQk9YX0tFWVBBSVJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEludmFsaWRSZXR1cm5TdGF0ZW1lbnQKICAgICAgICAgICAgICogQHBzYWxtLXN1cHByZXNzIEZhbHNhYmxlUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICAgICAqLwogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19ib3hfb3BlbigkY2lwaGVydGV4dCwgJG5vbmNlLCAka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19ib3hfb3BlbicpKSB7CiAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19ib3hfb3BlbicsICRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmJveF9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXlwYWlyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgdGhlIHB1YmxpYyBrZXkgZnJvbSBhIGNyeXB0b19ib3gga2V5cGFpci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyIEtleXBhaXIgY29udGFpbmluZyBzZWNyZXQgYW5kIHB1YmxpYyBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgWW91ciBjcnlwdG9fYm94IHB1YmxpYyBrZXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X3B1YmxpY2tleSgka2V5cGFpcikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleXBhaXIsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5cGFpcikgIT09IHNlbGY6OkNSWVBUT19CT1hfS0VZUEFJUkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fQk9YX0tFWVBBSVJCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2JveF9wdWJsaWNrZXkoJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94X3B1YmxpY2tleScpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19ib3hfcHVibGlja2V5JywgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfcHVibGlja2V5KCRrZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfcHVibGlja2V5KCRrZXlwYWlyKTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgWDI1NTE5IHB1YmxpYyBrZXkgZnJvbSBhIGdpdmVuIFgyNTUxOSBzZWNyZXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleSBBbnkgWDI1NTE5IHNlY3JldCBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBYMjU1MTkgcHVibGljIGtleQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzZWNyZXRLZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzZWNyZXRLZXksICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkc2VjcmV0S2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAxIG11c3QgYmUgQ1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoJHNlY3JldEtleSk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19ib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknLCAkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzZWNyZXRLZXkpOwogICAgfQoKICAgIC8qKgogICAgICogRXh0cmFjdCB0aGUgc2VjcmV0IGtleSBmcm9tIGEgY3J5cHRvX2JveCBrZXlwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgWW91ciBjcnlwdG9fYm94IHNlY3JldCBrZXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X3NlY3JldGtleSgka2V5cGFpcikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleXBhaXIsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5cGFpcikgIT09IHNlbGY6OkNSWVBUT19CT1hfS0VZUEFJUkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fQk9YX0tFWVBBSVJCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2JveF9zZWNyZXRrZXkoJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94X3NlY3JldGtleScpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19ib3hfc2VjcmV0a2V5JywgJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfc2VjcmV0a2V5KCRrZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfc2VjcmV0a2V5KCRrZXlwYWlyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGFuIFgyNTUxOSBrZXlwYWlyIGZyb20gYSBzZWVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlZWQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgVW5kZWZpbmVkRnVuY3Rpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fYm94X3NlZWRfa2V5cGFpcigkc2VlZCkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNlZWQsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2JveF9zZWVkX2tleXBhaXIoJHNlZWQpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fYm94X3NlZWRfa2V5cGFpcicpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19ib3hfc2VlZF9rZXlwYWlyJywgJHNlZWQpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfc2VlZF9rZXlwYWlyKCRzZWVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfc2VlZF9rZXlwYWlyKCRzZWVkKTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgYSBCTEFLRTJiIGhhc2gsIHdpdGggYW4gb3B0aW9uYWwga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBoYXNoZWQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAka2V5ICAgICBJZiBzcGVjaWZpZWQsIG11c3QgYmUgYSBzdHJpbmcgYmV0d2VlbiAxNgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA2NCBieXRlcyBsb25nCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgJGxlbmd0aCAgT3V0cHV0IGxlbmd0aCBpbiBieXRlczsgbXVzdCBiZSBiZXR3ZWVuIDE2CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDY0IChkZWZhdWx0ID0gMzIpCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgICAgUmF3IGJpbmFyeQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19nZW5lcmljaGFzaCgkbWVzc2FnZSwgJGtleSA9ICcnLCAkbGVuZ3RoID0gc2VsZjo6Q1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDEpOwogICAgICAgIGlmIChpc19udWxsKCRrZXkpKSB7CiAgICAgICAgICAgICRrZXkgPSAnJzsKICAgICAgICB9CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCAyKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGxlbmd0aCwgJ2ludCcsIDMpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmICghZW1wdHkoJGtleSkpIHsKICAgICAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgPCBzZWxmOjpDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBrZXkgc2l6ZS4gTXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOIGJ5dGVzIGxvbmcuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgPiBzZWxmOjpDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBrZXkgc2l6ZS4gTXVzdCBiZSBhdCBtb3N0IENSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NQVggYnl0ZXMgbG9uZy4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoKCRtZXNzYWdlLCAka2V5LCAkbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2dlbmVyaWNoYXNoJykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX2dlbmVyaWNoYXNoJywgJG1lc3NhZ2UsICRrZXksICRsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpnZW5lcmljaGFzaCgkbWVzc2FnZSwgJGtleSwgJGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Z2VuZXJpY2hhc2goJG1lc3NhZ2UsICRrZXksICRsZW5ndGgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBmaW5hbCBCTEFLRTJiIGhhc2ggb3V0cHV0IGZvciBhIGdpdmVuIGNvbnRleHQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAmJGN0eCBCTEFLRTIgaGFzaGluZyBjb250ZXh0LiBHZW5lcmF0ZWQgYnkgY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQoKS4KICAgICAqIEBwYXJhbSBpbnQgJGxlbmd0aCAgSGFzaCBvdXRwdXQgc2l6ZS4KICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgRmluYWwgQkxBS0UyYiBoYXNoLgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19nZW5lcmljaGFzaF9maW5hbCgmJGN0eCwgJGxlbmd0aCA9IHNlbGY6OkNSWVBUT19HRU5FUklDSEFTSF9CWVRFUykKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGN0eCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbGVuZ3RoLCAnaW50JywgMik7CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9maW5hbCgkY3R4LCAkbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsJykpIHsKICAgICAgICAgICAgJGZ1bmMgPSAnXFxTb2RpdW1cXGNyeXB0b19nZW5lcmljaGFzaF9maW5hbCc7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkZnVuYygkY3R4LCAkbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICAkcmVzdWx0ID0gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Z2VuZXJpY2hhc2hfZmluYWwoJGN0eCwgJGxlbmd0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpnZW5lcmljaGFzaF9maW5hbCgkY3R4LCAkbGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc2VsZjo6bWVtemVybygkY3R4KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHVuc2V0KCRjdHgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYSBCTEFLRTJiIGhhc2hpbmcgY29udGV4dCwgZm9yIHVzZSBpbiBhIHN0cmVhbWluZyBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRrZXkgSWYgc3BlY2lmaWVkIG11c3QgYmUgYSBzdHJpbmcgYmV0d2VlbiAxNiBhbmQgNjQgYnl0ZXMKICAgICAqIEBwYXJhbSBpbnQgJGxlbmd0aCAgICAgIFRoZSBzaXplIG9mIHRoZSBkZXNpcmVkIGhhc2ggb3V0cHV0CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICBBIEJMQUtFMiBoYXNoaW5nIGNvbnRleHQsIGVuY29kZWQgYXMgYSBzdHJpbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIChUbyBiZSAxMDAlIGNvbXBhdGlibGUgd2l0aCBleHQvbGlic29kaXVtKQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19nZW5lcmljaGFzaF9pbml0KCRrZXkgPSAnJywgJGxlbmd0aCA9IHNlbGY6OkNSWVBUT19HRU5FUklDSEFTSF9CWVRFUykKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoaXNfbnVsbCgka2V5KSkgewogICAgICAgICAgICAka2V5ID0gJyc7CiAgICAgICAgfQogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRsZW5ndGgsICdpbnQnLCAyKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoIWVtcHR5KCRrZXkpKSB7CiAgICAgICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXkpIDwgc2VsZjo6Q1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01JTikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignVW5zdXBwb3J0ZWQga2V5IHNpemUuIE11c3QgYmUgYXQgbGVhc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01JTiBieXRlcyBsb25nLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXkpID4gc2VsZjo6Q1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01BWCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignVW5zdXBwb3J0ZWQga2V5IHNpemUuIE11c3QgYmUgYXQgbW9zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYIGJ5dGVzIGxvbmcuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9pbml0KCRrZXksICRsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCcpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19nZW5lcmljaGFzaF9pbml0JywgJGtleSwgJGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OmdlbmVyaWNoYXNoX2luaXQoJGtleSwgJGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Z2VuZXJpY2hhc2hfaW5pdCgka2V5LCAkbGVuZ3RoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0IHdpdGggYWRkaXRpb25hbCBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJiRjdHggICAgQkxBS0UyIGhhc2hpbmcgY29udGV4dC4gR2VuZXJhdGVkIGJ5IGNyeXB0b19nZW5lcmljaGFzaF9pbml0KCkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICRjdHggaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBhbmQgZ2V0cyB1cGRhdGVkIGluLXBsYWNlLgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQgdG8gdGhlIGV4aXN0aW5nIGhhc2ggc3RhdGUuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfdXBkYXRlKCYkY3R4LCAkbWVzc2FnZSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGN0eCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDIpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF91cGRhdGUoJGN0eCwgJG1lc3NhZ2UpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19nZW5lcmljaGFzaF91cGRhdGUnKSkgewogICAgICAgICAgICAkZnVuYyA9ICdcXFNvZGl1bVxcY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZSc7CiAgICAgICAgICAgICRmdW5jKCRjdHgsICRtZXNzYWdlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgICRjdHggPSBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpnZW5lcmljaGFzaF91cGRhdGUoJGN0eCwgJG1lc3NhZ2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdHggPSBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Z2VuZXJpY2hhc2hfdXBkYXRlKCRjdHgsICRtZXNzYWdlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gcmFuZG9tX2J5dGVzKHNlbGY6OkNSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFUyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEga2V5IGV4Y2hhbmdlLCBiZXR3ZWVuIGEgZGVzaWduYXRlZCBjbGllbnQgYW5kIGEgc2VydmVyLgogICAgICoKICAgICAqIFR5cGljYWxseSwgeW91IHdvdWxkIGRlc2lnbmF0ZSBvbmUgbWFjaGluZSB0byBiZSB0aGUgY2xpZW50IGFuZCB0aGUKICAgICAqIG90aGVyIHRvIGJlIHRoZSBzZXJ2ZXIuIFRoZSBmaXJzdCB0d28ga2V5cyBhcmUgd2hhdCB5b3UnZCBleHBlY3QgZm9yCiAgICAgKiBzY2FsYXJtdWx0KCkgYmVsb3csIGJ1dCB0aGUgbGF0dGVyIHR3byBwdWJsaWMga2V5cyBkb24ndCBzd2FwIHBsYWNlcy4KICAgICAqCiAgICAgKiB8IEFMSUNFICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJPQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAqIHwgQ2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VydmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgKiB8IHNoYXJlZCA9IGNyeXB0b19reCggICAgICAgICAgICB8IHNoYXJlZCA9IGNyeXB0b19reCggICAgICAgICAgICAgICAgIHwKICAgICAqIHwgICAgIGFsaWNlX3NrLCAgICAgICAgICAgICAgICAgIHwgICAgIGJvYl9zaywgICAgICAgICAgICAgICAgICAgICAgICAgfCA8LSBjb250ZXh0dWFsCiAgICAgKiB8ICAgICBib2JfcGssICAgICAgICAgICAgICAgICAgICB8ICAgICBhbGljZV9waywgICAgICAgICAgICAgICAgICAgICAgIHwgPC0gY29udGV4dHVhbAogICAgICogfCAgICAgYWxpY2VfcGssICAgICAgICAgICAgICAgICAgfCAgICAgYWxpY2VfcGssICAgICAgICAgICAgICAgICAgICAgICB8IDwtLS0tLSBzdGF0aWMKICAgICAqIHwgICAgIGJvYl9wayAgICAgICAgICAgICAgICAgICAgIHwgICAgIGJvYl9wayAgICAgICAgICAgICAgICAgICAgICAgICAgfCA8LS0tLS0gc3RhdGljCiAgICAgKiB8ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAqCiAgICAgKiBUaGV5IGFyZSB1c2VkIGFsb25nIHdpdGggdGhlIHNjYWxhcm11bHQgcHJvZHVjdCB0byBnZW5lcmF0ZSBhIDI1Ni1iaXQKICAgICAqIEJMQUtFMmIgaGFzaCB1bmlxdWUgdG8gdGhlIGNsaWVudCBhbmQgc2VydmVyIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbXlfc2VjcmV0CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aGVpcl9wdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsaWVudF9wdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9wdWJsaWMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX2t4KCRteV9zZWNyZXQsICR0aGVpcl9wdWJsaWMsICRjbGllbnRfcHVibGljLCAkc2VydmVyX3B1YmxpYykKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG15X3NlY3JldCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkdGhlaXJfcHVibGljLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjbGllbnRfcHVibGljLCAnc3RyaW5nJywgMyk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzZXJ2ZXJfcHVibGljLCAnc3RyaW5nJywgNCk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG15X3NlY3JldCkgIT09IHNlbGY6OkNSWVBUT19CT1hfU0VDUkVUS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMSBtdXN0IGJlIENSWVBUT19CT1hfU0VDUkVUS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHRoZWlyX3B1YmxpYykgIT09IHNlbGY6OkNSWVBUT19CT1hfUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19CT1hfUFVCTElDS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGNsaWVudF9wdWJsaWMpICE9PSBzZWxmOjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDMgbXVzdCBiZSBDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzZXJ2ZXJfcHVibGljKSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCA0IG11c3QgYmUgQ1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIGlmIChpc19jYWxsYWJsZSgnc29kaXVtX2NyeXB0b19reCcpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHN0cmluZykgc29kaXVtX2NyeXB0b19reCgKICAgICAgICAgICAgICAgICAgICAkbXlfc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICR0aGVpcl9wdWJsaWMsCiAgICAgICAgICAgICAgICAgICAgJGNsaWVudF9wdWJsaWMsCiAgICAgICAgICAgICAgICAgICAgJHNlcnZlcl9wdWJsaWMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX2t4JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fa3gnLAogICAgICAgICAgICAgICAgJG15X3NlY3JldCwKICAgICAgICAgICAgICAgICR0aGVpcl9wdWJsaWMsCiAgICAgICAgICAgICAgICAkY2xpZW50X3B1YmxpYywKICAgICAgICAgICAgICAgICRzZXJ2ZXJfcHVibGljCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OmtleUV4Y2hhbmdlKAogICAgICAgICAgICAgICAgJG15X3NlY3JldCwKICAgICAgICAgICAgICAgICR0aGVpcl9wdWJsaWMsCiAgICAgICAgICAgICAgICAkY2xpZW50X3B1YmxpYywKICAgICAgICAgICAgICAgICRzZXJ2ZXJfcHVibGljCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6a2V5RXhjaGFuZ2UoCiAgICAgICAgICAgICRteV9zZWNyZXQsCiAgICAgICAgICAgICR0aGVpcl9wdWJsaWMsCiAgICAgICAgICAgICRjbGllbnRfcHVibGljLAogICAgICAgICAgICAkc2VydmVyX3B1YmxpYwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRvdXRsZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkc2FsdAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGFsZwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fcHdoYXNoKCRvdXRsZW4sICRwYXNzd2QsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCwgJGFsZyA9IG51bGwpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRvdXRsZW4sICdpbnQnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBhc3N3ZCwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc2FsdCwgICdzdHJpbmcnLCAzKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG9wc2xpbWl0LCAnaW50JywgNCk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRtZW1saW1pdCwgJ2ludCcsIDUpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgaWYgKCFpc19udWxsKCRhbGcpKSB7CiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGFsZywgJ2ludCcsIDYpOwogICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fcHdoYXNoKCRvdXRsZW4sICRwYXNzd2QsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCwgJGFsZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fcHdoYXNoKCRvdXRsZW4sICRwYXNzd2QsICRzYWx0LCAkb3BzbGltaXQsICRtZW1saW1pdCk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19wd2hhc2gnKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoJywgJG91dGxlbiwgJHBhc3N3ZCwgJHNhbHQsICRvcHNsaW1pdCwgJG1lbWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1RoaXMgaXMgbm90IGltcGxlbWVudGVkLCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IEFyZ29uMmkgd2l0aCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlIGluIHB1cmUtUEhQJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiAhRXhjbHVzaXZlIHRvIHNvZGl1bV9jb21wYXQhCiAgICAgKgogICAgICogVGhpcyByZXR1cm5zIFRSVUUgaWYgdGhlIG5hdGl2ZSBjcnlwdG9fcHdoYXNoIEFQSSBpcyBhdmFpbGFibGUgYnkgbGlic29kaXVtLgogICAgICogVGhpcyByZXR1cm5zIEZBTFNFIGlmIG9ubHkgc29kaXVtX2NvbXBhdCBpcyBhdmFpbGFibGUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9pc19hdmFpbGFibGUoKQogICAgewogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3B3aGFzaCcpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAgICAgKiBAcGFyYW0gaW50ICRtZW1saW1pdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3N0cigkcGFzc3dkLCAkb3BzbGltaXQsICRtZW1saW1pdCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBhc3N3ZCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkb3BzbGltaXQsICdpbnQnLCAyKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG1lbWxpbWl0LCAnaW50JywgMyk7CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyKCRwYXNzd2QsICRvcHNsaW1pdCwgJG1lbWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3B3aGFzaF9zdHInKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoX3N0cicsICRwYXNzd2QsICRvcHNsaW1pdCwgJG1lbWxpbWl0KTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1RoaXMgaXMgbm90IGltcGxlbWVudGVkLCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IEFyZ29uMmkgd2l0aCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlIGluIHB1cmUtUEhQJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeSgkcGFzc3dkLCAkaGFzaCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBhc3N3ZCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkaGFzaCwgJ3N0cmluZycsIDIpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChib29sKSBzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5KCRwYXNzd2QsICRoYXNoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5JykpIHsKICAgICAgICAgICAgcmV0dXJuIChib29sKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19wd2hhc2hfc3RyX3ZlcmlmeScsICRwYXNzd2QsICRoYXNoKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1RoaXMgaXMgbm90IGltcGxlbWVudGVkLCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IEFyZ29uMmkgd2l0aCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlIGluIHB1cmUtUEhQJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRvdXRsZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkc2FsdAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nigkb3V0bGVuLCAkcGFzc3dkLCAkc2FsdCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRvdXRsZW4sICdpbnQnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHBhc3N3ZCwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc2FsdCwgICdzdHJpbmcnLCAzKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG9wc2xpbWl0LCAnaW50JywgNCk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRtZW1saW1pdCwgJ2ludCcsIDUpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2KAogICAgICAgICAgICAgICAgKGludCkgJG91dGxlbiwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwYXNzd2QsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAkc2FsdCwKICAgICAgICAgICAgICAgIChpbnQpICRvcHNsaW1pdCwKICAgICAgICAgICAgICAgIChpbnQpICRtZW1saW1pdAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2JywKICAgICAgICAgICAgICAgIChpbnQpICRvdXRsZW4sCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAkcGFzc3dkLAogICAgICAgICAgICAgICAgKHN0cmluZykgJHNhbHQsCiAgICAgICAgICAgICAgICAoaW50KSAkb3BzbGltaXQsCiAgICAgICAgICAgICAgICAoaW50KSAkbWVtbGltaXQKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1RoaXMgaXMgbm90IGltcGxlbWVudGVkLCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IFNjcnlwdCB3aXRoIGFjY2VwdGFibGUgcGVyZm9ybWFuY2UgaW4gcHVyZS1QSFAnCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqICFFeGNsdXNpdmUgdG8gc29kaXVtX2NvbXBhdCEKICAgICAqCiAgICAgKiBUaGlzIHJldHVybnMgVFJVRSBpZiB0aGUgbmF0aXZlIGNyeXB0b19wd2hhc2ggQVBJIGlzIGF2YWlsYWJsZSBieSBsaWJzb2RpdW0uCiAgICAgKiBUaGlzIHJldHVybnMgRkFMU0UgaWYgb25seSBzb2RpdW1fY29tcGF0IGlzIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X2lzX2F2YWlsYWJsZSgpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2JykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIGludCAkb3BzbGltaXQKICAgICAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHIoJHBhc3N3ZCwgJG9wc2xpbWl0LCAkbWVtbGltaXQpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRwYXNzd2QsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG9wc2xpbWl0LCAnaW50JywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRtZW1saW1pdCwgJ2ludCcsIDMpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cigKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwYXNzd2QsCiAgICAgICAgICAgICAgICAoaW50KSAkb3BzbGltaXQsCiAgICAgICAgICAgICAgICAoaW50KSAkbWVtbGltaXQKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHInKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoCiAgICAgICAgICAgICAgICAnXFxTb2RpdW1cXGNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyJywKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwYXNzd2QsCiAgICAgICAgICAgICAgICAoaW50KSAkb3BzbGltaXQsCiAgICAgICAgICAgICAgICAoaW50KSAkbWVtbGltaXQKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigKICAgICAgICAgICAgJ1RoaXMgaXMgbm90IGltcGxlbWVudGVkLCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IFNjcnlwdCB3aXRoIGFjY2VwdGFibGUgcGVyZm9ybWFuY2UgaW4gcHVyZS1QSFAnCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3ZAogICAgICogQHBhcmFtIHN0cmluZyAkaGFzaAogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnkoJHBhc3N3ZCwgJGhhc2gpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRwYXNzd2QsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGhhc2gsICdzdHJpbmcnLCAyKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiAoYm9vbCkgc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeSgKICAgICAgICAgICAgICAgIChzdHJpbmcpICRwYXNzd2QsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAkaGFzaAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnknKSkgewogICAgICAgICAgICByZXR1cm4gKGJvb2wpIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnknLAogICAgICAgICAgICAgICAgKHN0cmluZykgJHBhc3N3ZCwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRoYXNoCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgogICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oCiAgICAgICAgICAgICdUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCwgYXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGltcGxlbWVudCBTY3J5cHQgd2l0aCBhY2NlcHRhYmxlIHBlcmZvcm1hbmNlIGluIHB1cmUtUEhQJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIHNoYXJlZCBzZWNyZXQgYmV0d2VlbiB5b3VyIHNlY3JldCBrZXkgYW5kIHlvdXIKICAgICAqIHJlY2lwaWVudCdzIHB1YmxpYyBrZXkuCiAgICAgKgogICAgICogQWxnb3JpdGhtOiBYMjU1MTkgKEVDREggb3ZlciBDdXJ2ZTI1NTE5KQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleQogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KCRzZWNyZXRLZXksICRwdWJsaWNLZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzZWNyZXRLZXksICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHB1YmxpY0tleSwgJ3N0cmluZycsIDIpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzZWNyZXRLZXkpICE9PSBzZWxmOjpDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRwdWJsaWNLZXkpICE9PSBzZWxmOjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2NhbGFybXVsdCgkc2VjcmV0S2V5LCAkcHVibGljS2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NjYWxhcm11bHQnKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fc2NhbGFybXVsdCcsICRzZWNyZXRLZXksICRwdWJsaWNLZXkpOwogICAgICAgIH0KCiAgICAgICAgLyogT3V0cHV0IHZhbGlkYXRpb246IEZvcmJpZCBhbGwtemVybyBrZXlzICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpoYXNoRXF1YWxzKCRzZWNyZXRLZXksIHN0cl9yZXBlYXQoIlwwIiwgc2VsZjo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUykpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1plcm8gc2VjcmV0IGtleSBpcyBub3QgYWxsb3dlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6Omhhc2hFcXVhbHMoJHB1YmxpY0tleSwgc3RyX3JlcGVhdCgiXDAiLCBzZWxmOjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignWmVybyBwdWJsaWMga2V5IGlzIG5vdCBhbGxvd2VkJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OnNjYWxhcm11bHQoJHNlY3JldEtleSwgJHB1YmxpY0tleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2NhbGFybXVsdCgkc2VjcmV0S2V5LCAkcHVibGljS2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSBhbiBYMjU1MTkgcHVibGljIGtleSBmcm9tIGFuIFgyNTUxOSBzZWNyZXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIFRvb0Zld0FyZ3VtZW50cwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKCRzZWNyZXRLZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzZWNyZXRLZXksICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkc2VjcmV0S2V5KSAhPT0gc2VsZjo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAxIG11c3QgYmUgQ1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHRfYmFzZSgkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NjYWxhcm11bHRfYmFzZScpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UnLCAkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpoYXNoRXF1YWxzKCRzZWNyZXRLZXksIHN0cl9yZXBlYXQoIlwwIiwgc2VsZjo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUykpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1plcm8gc2VjcmV0IGtleSBpcyBub3QgYWxsb3dlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzY2FsYXJtdWx0X2Jhc2UoJHNlY3JldEtleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2NhbGFybXVsdF9iYXNlKCRzZWNyZXRLZXkpOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBzeW1tZXRyaWMta2V5IGVuY3J5cHRpb24uCiAgICAgKgogICAgICogQWxnb3JpdGhtOiBYU2Fsc2EyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dCBUaGUgbWVzc2FnZSB5b3UncmUgZW5jcnlwdGluZwogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgQSBOdW1iZXIgdG8gYmUgdXNlZCBPbmNlOyBtdXN0IGJlIDI0IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgU3ltbWV0cmljIGVuY3J5cHRpb24ga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgQ2lwaGVydGV4dCB3aXRoIFBvbHkxMzA1IE1BQwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcGxhaW50ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMyk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19TRUNSRVRCT1hfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19zZWNyZXRib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NlY3JldGJveCcpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zZWNyZXRib3gnLCAkcGxhaW50ZXh0LCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzZWNyZXRib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzZWNyZXRib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHRzIGEgbWVzc2FnZSBwcmV2aW91c2x5IGVuY3J5cHRlZCB3aXRoIGNyeXB0b19zZWNyZXRib3goKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0IENpcGhlcnRleHQgd2l0aCBQb2x5MTMwNSBNQUMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgQSBOdW1iZXIgdG8gYmUgdXNlZCBPbmNlOyBtdXN0IGJlIDI0IGJ5dGVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgIFN5bW1ldHJpYyBlbmNyeXB0aW9uIGtleQogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAgICBPcmlnaW5hbCBwbGFpbnRleHQgbWVzc2FnZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGNpcGhlcnRleHQsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCAzKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgQ1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgSW52YWxpZFJldHVyblN0YXRlbWVudAogICAgICAgICAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRmFsc2FibGVSZXR1cm5TdGF0ZW1lbnQKICAgICAgICAgICAgICovCiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NlY3JldGJveF9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2VjcmV0Ym94X29wZW4nKSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fc2VjcmV0Ym94X29wZW4nLCAkY2lwaGVydGV4dCwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6c2VjcmV0Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2VjcmV0Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBzZWN1cmUgcmFuZG9tIGtleSBmb3IgdXNlIHdpdGggY3J5cHRvX3NlY3JldGJveAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfa2V5Z2VuKCkKICAgIHsKICAgICAgICByZXR1cm4gcmFuZG9tX2J5dGVzKHNlbGY6OkNSWVBUT19TRUNSRVRCT1hfS0VZQllURVMpOwogICAgfQoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlZCBzeW1tZXRyaWMta2V5IGVuY3J5cHRpb24uCiAgICAgKgogICAgICogQWxnb3JpdGhtOiBYQ2hhQ2hhMjAtUG9seTEzMDUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQgVGhlIG1lc3NhZ2UgeW91J3JlIGVuY3J5cHRpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICBBIE51bWJlciB0byBiZSB1c2VkIE9uY2U7IG11c3QgYmUgMjQgYnl0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICBTeW1tZXRyaWMgZW5jcnlwdGlvbiBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBDaXBoZXJ0ZXh0IHdpdGggUG9seTEzMDUgTUFDCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNSgkcGxhaW50ZXh0LCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRwbGFpbnRleHQsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCAzKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgQ1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KTsKICAgIH0KICAgIC8qKgogICAgICogRGVjcnlwdHMgYSBtZXNzYWdlIHByZXZpb3VzbHkgZW5jcnlwdGVkIHdpdGggY3J5cHRvX3NlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNSgpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQgQ2lwaGVydGV4dCB3aXRoIFBvbHkxMzA1IE1BQwogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgICAgICBBIE51bWJlciB0byBiZSB1c2VkIE9uY2U7IG11c3QgYmUgMjQgYnl0ZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICAgU3ltbWV0cmljIGVuY3J5cHRpb24ga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgIE9yaWdpbmFsIHBsYWludGV4dCBtZXNzYWdlCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjaXBoZXJ0ZXh0LCAnc3RyaW5nJywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRub25jZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMyk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG5vbmNlKSAhPT0gc2VsZjo6Q1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMgbG9uZy4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19TRUNSRVRCT1hfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyBhIFNpcEhhc2gtMi00IGhhc2ggb2YgYSBtZXNzYWdlIGZvciBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIElucHV0IG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBTaXBIYXNoLTItNCBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgSGFzaAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkSW5mZXJyZWRSZXR1cm5UeXBlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2hvcnRoYXNoKCRtZXNzYWdlLCAka2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5LCAnc3RyaW5nJywgMik7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleSkgIT09IHNlbGY6OkNSWVBUT19TSE9SVEhBU0hfS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TSE9SVEhBU0hfS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19zaG9ydGhhc2goJG1lc3NhZ2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2hvcnRoYXNoJykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX3Nob3J0aGFzaCcsICRtZXNzYWdlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2lwSGFzaDo6c2lwSGFzaDI0KCRtZXNzYWdlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9TaXBIYXNoOjpzaXBIYXNoMjQoJG1lc3NhZ2UsICRrZXkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgc2VjdXJlIHJhbmRvbSBrZXkgZm9yIHVzZSB3aXRoIGNyeXB0b19zaG9ydGhhc2gKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2hvcnRoYXNoX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fU0hPUlRIQVNIX0tFWUJZVEVTKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzaWduZWQgbWVzc2FnZS4gWW91IHByb2JhYmx5IHdhbnQgY3J5cHRvX3NpZ25fZGV0YWNoZWQoKQogICAgICogaW5zdGVhZCwgd2hpY2ggb25seSByZXR1cm5zIHRoZSBzaWduYXR1cmUuCiAgICAgKgogICAgICogQWxnb3JpdGhtOiBFZDI1NTE5IChFZERTQSBvdmVyIEN1cnZlMjU1MTkpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBNZXNzYWdlIHRvIGJlIHNpZ25lZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleSBTZWNyZXQgc2lnbmluZyBrZXkuCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgU2lnbmVkIG1lc3NhZ2UgKHNpZ25hdHVyZSBpcyBwcmVmaXhlZCkuCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRJbmZlcnJlZFJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZFJldHVyblN0YXRlbWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduKCRtZXNzYWdlLCAkc2VjcmV0S2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc2VjcmV0S2V5LCAnc3RyaW5nJywgMik7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHNlY3JldEtleSkgIT09IHNlbGY6OkNSWVBUT19TSUdOX1NFQ1JFVEtFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NpZ24oJG1lc3NhZ2UsICRzZWNyZXRLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2lnbicpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduJywgJG1lc3NhZ2UsICRzZWNyZXRLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzaWduKCRtZXNzYWdlLCAkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzaWduKCRtZXNzYWdlLCAkc2VjcmV0S2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIHNpZ25lZCBtZXNzYWdlIHRoZW4gcmV0dXJucyB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduZWRNZXNzYWdlIEEgc2lnbmVkIG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY0tleSBBIHB1YmxpYyBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICAgICAgVGhlIG9yaWdpbmFsIG1lc3NhZ2UgKGlmIHRoZSBzaWduYXR1cmUgaXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgZm9yIHRoaXMgcHVibGljIGtleSkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEluZmVycmVkUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkUmV0dXJuU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3Blbigkc2lnbmVkTWVzc2FnZSwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNpZ25lZE1lc3NhZ2UsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHB1YmxpY0tleSwgJ3N0cmluZycsIDIpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzaWduZWRNZXNzYWdlKSA8IHNlbGY6OkNSWVBUT19TSUdOX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fU0lHTl9CWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkcHVibGljS2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBJbnZhbGlkUmV0dXJuU3RhdGVtZW50CiAgICAgICAgICAgICAqIEBwc2FsbS1zdXBwcmVzcyBGYWxzYWJsZVJldHVyblN0YXRlbWVudAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl9vcGVuKCRzaWduZWRNZXNzYWdlLCAkcHVibGljS2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NpZ25fb3BlbicpKSB7CiAgICAgICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX29wZW4nLCAkc2lnbmVkTWVzc2FnZSwgJHB1YmxpY0tleSk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OnNpZ25fb3Blbigkc2lnbmVkTWVzc2FnZSwgJHB1YmxpY0tleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2lnbl9vcGVuKCRzaWduZWRNZXNzYWdlLCAkcHVibGljS2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGEgbmV3IHJhbmRvbSBFZDI1NTE5IGtleXBhaXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX2tleXBhaXIoKQogICAgewogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19zaWduX2tleXBhaXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NpZ25fa2V5cGFpcicpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX2tleXBhaXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6a2V5cGFpcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OmtleXBhaXIoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGFuIEVkMjU1MTkga2V5cGFpciBmcm9tIGEgc2VlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWVkIElucHV0IHNlZWQKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgS2V5cGFpcgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX3NlZWRfa2V5cGFpcigkc2VlZCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNlZWQsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyKCRzZWVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NpZ25fa2V5cGFpcicpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX3NlZWRfa2V5cGFpcicsICRzZWVkKTsKICAgICAgICB9CiAgICAgICAgJHB1YmxpY0tleSA9ICcnOwogICAgICAgICRzZWNyZXRLZXkgPSAnJzsKICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OnNlZWRfa2V5cGFpcigkcHVibGljS2V5LCAkc2VjcmV0S2V5LCAkc2VlZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OnNlZWRfa2V5cGFpcigkcHVibGljS2V5LCAkc2VjcmV0S2V5LCAkc2VlZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2VjcmV0S2V5IC4gJHB1YmxpY0tleTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgYW4gRWQyNTUxOSBwdWJsaWMga2V5IGZyb20gYW4gRWQyNTUxOSBrZXlwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIgS2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICBQdWJsaWMga2V5CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NpZ25fcHVibGlja2V5KCRrZXlwYWlyKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgka2V5cGFpciwgJ3N0cmluZycsIDEpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRrZXlwYWlyKSAhPT0gc2VsZjo6Q1JZUFRPX1NJR05fS0VZUEFJUkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fU0lHTl9LRVlQQUlSQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleSgka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19zaWduX3B1YmxpY2tleScpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX3B1YmxpY2tleScsICRrZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6cHVibGlja2V5KCRrZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5OjpwdWJsaWNrZXkoJGtleXBhaXIpOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIGFuIEVkMjU1MTkgcHVibGljIGtleSBmcm9tIGFuIEVkMjU1MTkgc2VjcmV0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRLZXkgWW91ciBFZDI1NTE5IHNlY3JldCBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBFZDI1NTE5IHB1YmxpYyBrZXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoJHNlY3JldEtleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNlY3JldEtleSwgJ3N0cmluZycsIDEpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzZWNyZXRLZXkpICE9PSBzZWxmOjpDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAxIG11c3QgYmUgQ1JZUFRPX1NJR05fU0VDUkVUS0VZQllURVMgbG9uZy4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICByZXR1cm4gc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnY3J5cHRvX3NpZ25fcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5JykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX3NpZ25fcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5JywgJHNlY3JldEtleSk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OnB1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5OjpwdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoJHNlY3JldEtleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0IGFuIEVkMjU1MTkgc2VjcmV0IGtleSBmcm9tIGFuIEVkMjU1MTkga2V5cGFpci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyIEtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgU2VjcmV0IGtleQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX3NlY3JldGtleSgka2V5cGFpcikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGtleXBhaXIsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5cGFpcikgIT09IHNlbGY6OkNSWVBUT19TSUdOX0tFWVBBSVJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAxIG11c3QgYmUgQ1JZUFRPX1NJR05fS0VZUEFJUkJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl9zZWNyZXRrZXkoJGtleXBhaXIpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2lnbl9zZWNyZXRrZXknKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl9zZWNyZXRrZXknLCAka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OnNlY3JldGtleSgka2V5cGFpcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2VjcmV0a2V5KCRrZXlwYWlyKTsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgRWQyNTUxOSBzaWduYXR1cmUgb2YgYSBtZXNzYWdlIGFuZCByZXR1cm4gT05MWSB0aGUgc2lnbmF0dXJlLgogICAgICoKICAgICAqIEFsZ29yaXRobTogRWQyNTUxOSAoRWREU0Egb3ZlciBDdXJ2ZTI1NTE5KQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgTWVzc2FnZSB0byBiZSBzaWduZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleSBTZWNyZXQgc2lnbmluZyBrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBEaWdpdGFsIHNpZ25hdHVyZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX2RldGFjaGVkKCRtZXNzYWdlLCAkc2VjcmV0S2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc2VjcmV0S2V5LCAnc3RyaW5nJywgMik7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHNlY3JldEtleSkgIT09IHNlbGY6OkNSWVBUT19TSUdOX1NFQ1JFVEtFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzZWNyZXRLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2lnbl9kZXRhY2hlZCcpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX2RldGFjaGVkJywgJG1lc3NhZ2UsICRzZWNyZXRLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzaWduX2RldGFjaGVkKCRtZXNzYWdlLCAkc2VjcmV0S2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzaWduX2RldGFjaGVkKCRtZXNzYWdlLCAkc2VjcmV0S2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmeSB0aGUgRWQyNTUxOSBzaWduYXR1cmUgb2YgYSBtZXNzYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZSBEaWdpdGFsIHNnaW5hdHVyZQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBNZXNzYWdlIHRvIGJlIHZlcmlmaWVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkgUHVibGljIGtleQogICAgICogQHJldHVybiBib29sICAgICAgICAgICAgIFRSVUUgaWYgdGhpcyBzaWduYXR1cmUgaXMgZ29vZCBmb3IgdGhpcyBwdWJsaWMga2V5OwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIG90aGVyd2lzZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNpZ25hdHVyZSwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbWVzc2FnZSwgJ3N0cmluZycsIDIpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcHVibGljS2V5LCAnc3RyaW5nJywgMyk7CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHNpZ25hdHVyZSkgIT09IHNlbGY6OkNSWVBUT19TSUdOX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fU0lHTl9CWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkcHVibGljS2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1lc3NhZ2UsICRwdWJsaWNLZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQnKSkgewogICAgICAgICAgICByZXR1cm4gKGJvb2wpIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQnLAogICAgICAgICAgICAgICAgJHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAgICAgJHB1YmxpY0tleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpzaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHB1YmxpY0tleSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2lnbl92ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1lc3NhZ2UsICRwdWJsaWNLZXkpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhbiBFZDI1NTE5IHB1YmxpYyBrZXkgdG8gYSBDdXJ2ZTI1NTE5IHB1YmxpYyBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkoJHBrKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcGssICdzdHJpbmcnLCAxKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkcGspIDwgc2VsZjo6Q1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMSBtdXN0IGJlIGF0IGxlYXN0IENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTIGxvbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VOZXdTb2RpdW1BUEkoKSkgewogICAgICAgICAgICBpZiAoaXNfY2FsbGFibGUoJ2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOScpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHN0cmluZykgc29kaXVtX2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOSgkcGspOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOScpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGNyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOScsICRwayk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OnBrX3RvX2N1cnZlMjU1MTkoJHBrKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5Ojpwa190b19jdXJ2ZTI1NTE5KCRwayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGFuIEVkMjU1MTkgc2VjcmV0IGtleSB0byBhIEN1cnZlMjU1MTkgc2VjcmV0IGtleQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOSgkc2spCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzaywgJ3N0cmluZycsIDEpOwoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzaykgPCBzZWxmOjpDUllQVE9fU0lHTl9TRUVEQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMSBtdXN0IGJlIGF0IGxlYXN0IENSWVBUT19TSUdOX1NFRURCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCdjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTkoJHNrKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknLCAkc2spOwogICAgICAgIH0KCiAgICAgICAgJGggPSBoYXNoKCdzaGE1MTInLCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRzaywgMCwgMzIpLCB0cnVlKTsKICAgICAgICAkaFswXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjppbnRUb0NocigKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmNoclRvSW50KCRoWzBdKSAmIDI0OAogICAgICAgICk7CiAgICAgICAgJGhbMzFdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmludFRvQ2hyKAogICAgICAgICAgICAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmNoclRvSW50KCRoWzMxXSkgJiAxMjcpIHwgNjQKICAgICAgICApOwogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRoLCAwLCAzMik7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHBhbmQgYSBrZXkgYW5kIG5vbmNlIGludG8gYSBrZXlzdHJlYW0gb2YgcHNldWRvcmFuZG9tIGJ5dGVzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbiBOdW1iZXIgb2YgYnl0ZXMgZGVzaXJlZAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgTnVtYmVyIHRvIGJlIHVzZWQgT25jZTsgbXVzdCBiZSAyNCBieXRlcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFhTYWxzYTIwIGtleQogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgUHNldWRvcmFuZG9tIHN0cmVhbSB0aGF0IGNhbiBiZSBYT1JlZCB3aXRoIG1lc3NhZ2VzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIGVuY3J5cHRpb24gKGJ1dCBub3QgYXV0aGVudGljYXRpb247IHNlZQogICAgICogICAgICAgICAgICAgICAgICAgICAgUG9seTEzMDUgb3IgY3J5cHRvX2F1dGgoKSBmb3IgdGhhdCwgd2hpY2ggaXMgbm90CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBmb3Igc2VjdXJpdHkpCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3N0cmVhbSgkbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRsZW4sICdpbnQnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCAzKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fU1RSRUFNX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NUUkVBTV9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgQ1JZUFRPX1NUUkVBTV9LRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3N0cmVhbSgkbGVuLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdjcnlwdG9fc3RyZWFtJykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX3N0cmVhbScsICRsZW4sICRub25jZSwgJGtleSk7CiAgICAgICAgfQogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDQpIHsKICAgICAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1hTYWxzYTIwOjp4c2Fsc2EyMCgkbGVuLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1hTYWxzYTIwOjp4c2Fsc2EyMCgkbGVuLCAkbm9uY2UsICRrZXkpOwogICAgfQoKICAgIC8qKgogICAgICogREFOR0VSISBVTkFVVEhFTlRJQ0FURUQgRU5DUllQVElPTiEKICAgICAqCiAgICAgKiBVbmxlc3MgeW91IGFyZSBmb2xsb3dpbmcgZXhwZXJ0IGFkdmljZSwgZG8gbm90IHVzZWQgdGhpcyBmZWF0dXJlLgogICAgICoKICAgICAqIEFsZ29yaXRobTogWFNhbHNhMjAKICAgICAqCiAgICAgKiBUaGlzIERPRVMgTk9UIHByb3ZpZGUgY2lwaGVydGV4dCBpbnRlZ3JpdHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBQbGFpbnRleHQgbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UgTnVtYmVyIHRvIGJlIHVzZWQgT25jZTsgbXVzdCBiZSAyNCBieXRlcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IEVuY3J5cHRpb24ga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgIEVuY3J5cHRlZCB0ZXh0IHdoaWNoIGlzIHZ1bG5lcmFibGUgdG8gY2hvc2VuLQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0IGF0dGFja3MgdW5sZXNzIHlvdSBpbXBsZW1lbnQgc29tZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBvdGhlciBtaXRpZ2F0aW9uIHRvIHRoZSBjaXBoZXJ0ZXh0IChpLmUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEVuY3J5cHQgdGhlbiBNQUMpCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV94b3IoJG1lc3NhZ2UsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG1lc3NhZ2UsICdzdHJpbmcnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJG5vbmNlLCAnc3RyaW5nJywgMik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRrZXksICdzdHJpbmcnLCAzKTsKCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbm9uY2UpICE9PSBzZWxmOjpDUllQVE9fU1RSRUFNX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQXJndW1lbnQgMiBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyBsb25nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5KSAhPT0gc2VsZjo6Q1JZUFRPX1NUUkVBTV9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgQ1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUyBsb25nLicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94b3IoJG1lc3NhZ2UsICRub25jZSwgJGtleSk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2NyeXB0b19zdHJlYW1feG9yJykpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcY3J5cHRvX3N0cmVhbV94b3InLCAkbWVzc2FnZSwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfWFNhbHNhMjA6OnhzYWxzYTIwX3hvcigkbWVzc2FnZSwgJG5vbmNlLCAka2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9YU2Fsc2EyMDo6eHNhbHNhMjBfeG9yKCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgc2VjdXJlIHJhbmRvbSBrZXkgZm9yIHVzZSB3aXRoIGNyeXB0b19zdHJlYW0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc3RyZWFtX2tleWdlbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHJhbmRvbV9ieXRlcyhzZWxmOjpDUllQVE9fU1RSRUFNX0tFWUJZVEVTKTsKICAgIH0KCiAgICAvKioKICAgICAqIENhY2hlLXRpbWluZy1zYWZlIGltcGxlbWVudGF0aW9uIG9mIGhleDJiaW4oKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgSGV4YWRlY2ltYWwgc3RyaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgUmF3IGJpbmFyeSBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIFRvb0Zld0FyZ3VtZW50cwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoZXgyYmluKCRzdHJpbmcpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzdHJpbmcsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIGlmIChpc19jYWxsYWJsZSgnc29kaXVtX2hleDJiaW4nKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV9oZXgyYmluKCRzdHJpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2hleDJiaW4nKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxoZXgyYmluJywgJHN0cmluZyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6aGV4MmJpbigkc3RyaW5nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEluY3JlYXNlIGEgc3RyaW5nIChsaXR0bGUgZW5kaWFuKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhcgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluY3JlbWVudCgmJHZhcikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHZhciwgJ3N0cmluZycsIDEpOwoKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgc29kaXVtX2luY3JlbWVudCgkdmFyKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdpbmNyZW1lbnQnKSkgewogICAgICAgICAgICAkZnVuYyA9ICdcXFNvZGl1bVxcaW5jcmVtZW50JzsKICAgICAgICAgICAgJGZ1bmMoJHZhcik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCR2YXIpOwogICAgICAgICRjID0gMTsKICAgICAgICAkY29weSA9ICcnOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICsrJGkpIHsKICAgICAgICAgICAgJGMgKz0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmNoclRvSW50KAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkdmFyLCAkaSwgMSkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJGNvcHkgLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmludFRvQ2hyKCRjKTsKICAgICAgICAgICAgJGMgPj49IDg7CiAgICAgICAgfQogICAgICAgICR2YXIgPSAkY29weTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBlcXVpdmFsZW50IHRvIHRoZSBsaWJzb2RpdW0gbWlub3IgdmVyc2lvbiB3ZSBhaW0gdG8gYmUgY29tcGF0aWJsZQogICAgICogd2l0aCAoc2FucyBwd2hhc2ggYW5kIG1lbXplcm8pLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRJbmZlcnJlZFJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRGdW5jdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpYnJhcnlfdmVyc2lvbl9tYWpvcigpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHJldHVybiBzb2RpdW1fbGlicmFyeV92ZXJzaW9uX21ham9yKCk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ2xpYnJhcnlfdmVyc2lvbl9tYWpvcicpKSB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXGxpYnJhcnlfdmVyc2lvbl9tYWpvcicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6TElCUkFSWV9WRVJTSU9OX01BSk9SOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGVxdWl2YWxlbnQgdG8gdGhlIGxpYnNvZGl1bSBtaW5vciB2ZXJzaW9uIHdlIGFpbSB0byBiZSBjb21wYXRpYmxlCiAgICAgKiB3aXRoIChzYW5zIHB3aGFzaCBhbmQgbWVtemVybykuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEluZmVycmVkUmV0dXJuVHlwZQogICAgICogQHBzYWxtLXN1cHByZXNzIFVuZGVmaW5lZEZ1bmN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGlicmFyeV92ZXJzaW9uX21pbm9yKCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIHNvZGl1bV9saWJyYXJ5X3ZlcnNpb25fbWlub3IoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnbGlicmFyeV92ZXJzaW9uX21pbm9yJykpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcbGlicmFyeV92ZXJzaW9uX21pbm9yJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpMSUJSQVJZX1ZFUlNJT05fTUlOT1I7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlIHR3byBzdHJpbmdzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxlZnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJpZ2h0CiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lbWNtcCgkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbGVmdCwgJ3N0cmluZycsIDEpOwogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkcmlnaHQsICdzdHJpbmcnLCAyKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygnbWVtY21wJykpIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpIGNhbGxfdXNlcl9mdW5jKCdcXFNvZGl1bVxcbWVtY21wJywgJGxlZnQsICRyaWdodCk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbGVmdCAqLwogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmlnaHQgKi8KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6Om1lbWNtcCgkbGVmdCwgJHJpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEl0J3MgYWN0dWFsbHkgbm90IHBvc3NpYmxlIHRvIHplcm8gbWVtb3J5IGJ1ZmZlcnMgaW4gUEhQLiBZb3UgbmVlZCB0aGUKICAgICAqIG5hdGl2ZSBsaWJyYXJ5IGZvciB0aGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdmFyCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbiAoVW5sZXNzIGxpYnNvZGl1bSBpcyBpbnN0YWxsZWQpCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIFRvb0Zld0FyZ3VtZW50cwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lbXplcm8oJiR2YXIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCR2YXIsICdzdHJpbmcnLCAxKTsKCiAgICAgICAgaWYgKHNlbGY6OnVzZU5ld1NvZGl1bUFQSSgpKSB7CiAgICAgICAgICAgIHNvZGl1bV9tZW16ZXJvKCR2YXIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjp1c2VfZmFsbGJhY2soJ21lbXplcm8nKSkgewogICAgICAgICAgICAkZnVuYyA9ICdcXFNvZGl1bVxcbWVtemVybyc7CiAgICAgICAgICAgICRmdW5jKCR2YXIpOwogICAgICAgICAgICBpZiAoJHZhciA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgogICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oCiAgICAgICAgICAgICdUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBzb2RpdW1fY29tcGF0LCBhcyBpdCBpcyBub3QgcG9zc2libGUgdG8gc2VjdXJlbHkgd2lwZSBtZW1vcnkgZnJvbSBQSFAuICcgLgogICAgICAgICAgICAnVG8gZml4IHRoaXMgZXJyb3IsIG1ha2Ugc3VyZSBsaWJzb2RpdW0gaXMgaW5zdGFsbGVkIGFuZCB0aGUgUEhQIGV4dGVuc2lvbiBpcyBlbmFibGVkLicKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogV2lsbCBzb2RpdW1fY29tcGF0IHJ1biBmYXN0IG9uIHRoZSBjdXJyZW50IGhhcmR3YXJlIGFuZCBQSFAgY29uZmlndXJhdGlvbj8KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwb2x5ZmlsbF9pc19mYXN0KCkKICAgIHsKICAgICAgICBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnc29kaXVtJykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChleHRlbnNpb25fbG9hZGVkKCdsaWJzb2RpdW0nKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBIUF9JTlRfU0laRSA9PT0gODsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGEgc3RyaW5nIG9mIGJ5dGVzIGZyb20gdGhlIGtlcm5lbCdzIENTUFJORy4KICAgICAqIFByb3VkbHkgdXNlcyAvZGV2L3VyYW5kb20gKGlmIGdldHJhbmRvbSgyKSBpcyBub3QgYXZhaWxhYmxlKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRudW1CeXRlcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbWJ5dGVzX2J1ZigkbnVtQnl0ZXMpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19pbnQoJG51bUJ5dGVzKSkgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkbnVtQnl0ZXMpKSB7CiAgICAgICAgICAgICAgICAkbnVtQnl0ZXMgPSAoaW50KSAkbnVtQnl0ZXM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICAgICdBcmd1bWVudCAxIG11c3QgYmUgYW4gaW50ZWdlciwgJyAuIGdldHR5cGUoJG51bUJ5dGVzKSAuICcgZ2l2ZW4uJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCdyYW5kb21ieXRlc19idWYnKSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxyYW5kb21ieXRlc19idWYnLCAkbnVtQnl0ZXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmFuZG9tX2J5dGVzKCRudW1CeXRlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgJHJhbmdlIChub24taW5jbHVzaXZlKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRyYW5nZQogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIEVycm9yCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbWJ5dGVzX3VuaWZvcm0oJHJhbmdlKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfaW50KCRyYW5nZSkpIHsKICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJHJhbmdlKSkgewogICAgICAgICAgICAgICAgJHJhbmdlID0gKGludCkgJHJhbmdlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnQgMSBtdXN0IGJlIGFuIGludGVnZXIsICcgLiBnZXR0eXBlKCRyYW5nZSkgLiAnIGdpdmVuLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygncmFuZG9tYnl0ZXNfdW5pZm9ybScpKSB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXHJhbmRvbWJ5dGVzX3VuaWZvcm0nLCAkcmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmFuZG9tX2ludCgwLCAkcmFuZ2UgLSAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGEgcmFuZG9tIDE2LWJpdCBpbnRlZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBFcnJvcgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByYW5kb21ieXRlc19yYW5kb20xNigpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnVzZV9mYWxsYmFjaygncmFuZG9tYnl0ZXNfcmFuZG9tMTYnKSkgewogICAgICAgICAgICByZXR1cm4gKGludCkgY2FsbF91c2VyX2Z1bmMoJ1xcU29kaXVtXFxyYW5kb21ieXRlc19yYW5kb20xNicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmFuZG9tX2ludCgwLCA2NTUzNSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGVtdWxhdGVzIGxpYnNvZGl1bSdzIHZlcnNpb25fc3RyaW5nKCkgZnVuY3Rpb24sIGV4Y2VwdCBvdXJzIGlzCiAgICAgKiBwcmVmaXhlZCB3aXRoICdwb2x5ZmlsbC0nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRJbmZlcnJlZFJldHVyblR5cGUKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBVbmRlZmluZWRGdW5jdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZlcnNpb25fc3RyaW5nKCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6dXNlTmV3U29kaXVtQVBJKCkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNvZGl1bV92ZXJzaW9uX3N0cmluZygpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6dXNlX2ZhbGxiYWNrKCd2ZXJzaW9uX3N0cmluZycpKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSBjYWxsX3VzZXJfZnVuYygnXFxTb2RpdW1cXHZlcnNpb25fc3RyaW5nJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoc3RyaW5nKSBzZWxmOjpWRVJTSU9OX1NUUklORzsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCB3ZSB1c2UgdGhlIGxpYnNvZGl1bSBjb3JlIGZ1bmN0aW9uIGluc3RlYWQ/CiAgICAgKiBUaGlzIGlzIGFsd2F5cyBhIGdvb2QgaWRlYSwgaWYgaXQncyBhdmFpbGFibGUuIChVbmxlc3Mgd2UncmUgaW4gdGhlCiAgICAgKiBtaWRkbGUgb2YgcnVubmluZyBvdXIgdW5pdCB0ZXN0IHN1aXRlLikKICAgICAqCiAgICAgKiBJZiBleHQvbGlic29kaXVtIGlzIGF2YWlsYWJsZSwgdXNlIGl0LiBSZXR1cm4gVFJVRS4KICAgICAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0byB1c2UgdGhlIGNvZGUgcHJvdmlkZWQgaGVyZWluLiBSZXR1cm4gRkFMU0UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc29kaXVtX2Z1bmNfbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVzZV9mYWxsYmFjaygkc29kaXVtX2Z1bmNfbmFtZSA9ICcnKQogICAgewogICAgICAgIHN0YXRpYyAkcmVzID0gbnVsbDsKICAgICAgICBpZiAoJHJlcyA9PT0gbnVsbCkgewogICAgICAgICAgICAkcmVzID0gZXh0ZW5zaW9uX2xvYWRlZCgnbGlic29kaXVtJykgJiYgUEhQX1ZFUlNJT05fSUQgPj0gNTAzMDA7CiAgICAgICAgfQogICAgICAgIGlmICgkcmVzID09PSBmYWxzZSkgewogICAgICAgICAgICAvLyBObyBsaWJzb2RpdW0gaW5zdGFsbGVkCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OiRkaXNhYmxlRmFsbGJhY2tGb3JVbml0VGVzdHMpIHsKICAgICAgICAgICAgLy8gRG9uJ3QgZmFsbGJhY2suIFVzZSB0aGUgUEhQIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJHNvZGl1bV9mdW5jX25hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBpc19jYWxsYWJsZSgnXFxTb2RpdW1cXCcgLiAkc29kaXVtX2Z1bmNfbmFtZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogTGlic29kaXVtIGFzIGltcGxlbWVudGVkIGluIFBIUCA3LjIKICAgICAqIGFuZC9vciBleHQvc29kaXVtICh2aWEgUEVDTCkKICAgICAqCiAgICAgKiBAcmVmIGh0dHBzOi8vd2lraS5waHAubmV0L3JmYy9saWJzb2RpdW0KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHVzZU5ld1NvZGl1bUFQSSgpCiAgICB7CiAgICAgICAgc3RhdGljICRyZXMgPSBudWxsOwogICAgICAgIGlmICgkcmVzID09PSBudWxsKSB7CiAgICAgICAgICAgICRyZXMgPSBQSFBfVkVSU0lPTl9JRCA+PSA3MDAwMCAmJiBleHRlbnNpb25fbG9hZGVkKCdzb2RpdW0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OiRkaXNhYmxlRmFsbGJhY2tGb3JVbml0VGVzdHMpIHsKICAgICAgICAgICAgLy8gRG9uJ3QgZmFsbGJhY2suIFVzZSB0aGUgUEhQIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoYm9vbCkgJHJlczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYgogKgogKiBCYXNlZCBvbiB0aGUgd29yayBvZiBEZXZpIE1hbmRpcmkgaW4gZGV2aS9zYWx0LgogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmIgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAp7CiAgICAvKioKICAgICAqIEB2YXIgU3BsRml4ZWRBcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRpdjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBhcnJheTxpbnQsIGludD4+CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJHNpZ21hID0gYXJyYXkoCiAgICAgICAgYXJyYXkoICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KSwKICAgICAgICBhcnJheSggMTQsIDEwLCAgNCwgIDgsICA5LCAxNSwgMTMsICA2LCAgMSwgMTIsICAwLCAgMiwgMTEsICA3LCAgNSwgIDMpLAogICAgICAgIGFycmF5KCAxMSwgIDgsIDEyLCAgMCwgIDUsICAyLCAxNSwgMTMsIDEwLCAxNCwgIDMsICA2LCAgNywgIDEsICA5LCAgNCksCiAgICAgICAgYXJyYXkoICA3LCAgOSwgIDMsICAxLCAxMywgMTIsIDExLCAxNCwgIDIsICA2LCAgNSwgMTAsICA0LCAgMCwgMTUsICA4KSwKICAgICAgICBhcnJheSggIDksICAwLCAgNSwgIDcsICAyLCAgNCwgMTAsIDE1LCAxNCwgIDEsIDExLCAxMiwgIDYsICA4LCAgMywgMTMpLAogICAgICAgIGFycmF5KCAgMiwgMTIsICA2LCAxMCwgIDAsIDExLCAgOCwgIDMsICA0LCAxMywgIDcsICA1LCAxNSwgMTQsICAxLCAgOSksCiAgICAgICAgYXJyYXkoIDEyLCAgNSwgIDEsIDE1LCAxNCwgMTMsICA0LCAxMCwgIDAsICA3LCAgNiwgIDMsICA5LCAgMiwgIDgsIDExKSwKICAgICAgICBhcnJheSggMTMsIDExLCAgNywgMTQsIDEyLCAgMSwgIDMsICA5LCAgNSwgIDAsIDE1LCAgNCwgIDgsICA2LCAgMiwgMTApLAogICAgICAgIGFycmF5KCAgNiwgMTUsIDE0LCAgOSwgMTEsICAzLCAgMCwgIDgsIDEyLCAgMiwgMTMsICA3LCAgMSwgIDQsIDEwLCAgNSksCiAgICAgICAgYXJyYXkoIDEwLCAgMiwgIDgsICA0LCAgNywgIDYsICAxLCAgNSwgMTUsIDExLCAgOSwgMTQsICAzLCAxMiwgMTMgLCAwKSwKICAgICAgICBhcnJheSggIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpLAogICAgICAgIGFycmF5KCAxNCwgMTAsICA0LCAgOCwgIDksIDE1LCAxMywgIDYsICAxLCAxMiwgIDAsICAyLCAxMSwgIDcsICA1LCAgMykKICAgICk7CgogICAgY29uc3QgQkxPQ0tCWVRFUyA9IDEyODsKICAgIGNvbnN0IE9VVEJZVEVTICAgPSA2NDsKICAgIGNvbnN0IEtFWUJZVEVTICAgPSA2NDsKCiAgICAvKioKICAgICAqIFR1cm4gdHdvIDMyLWJpdCBpbnRlZ2VycyBpbnRvIGEgZml4ZWQgYXJyYXkgcmVwcmVzZW50aW5nIGEgNjQtYml0IGludGVnZXIuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGhpZ2gKICAgICAqIEBwYXJhbSBpbnQgJGxvdwogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3NjQoJGhpZ2gsICRsb3cpCiAgICB7CiAgICAgICAgJGk2NCA9IG5ldyBTcGxGaXhlZEFycmF5KDIpOwogICAgICAgICRpNjRbMF0gPSAkaGlnaCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgJGk2NFsxXSA9ICRsb3cgJiAweGZmZmZmZmZmOwogICAgICAgIHJldHVybiAkaTY0OwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhbiBhcmJpdHJhcnkgbnVtYmVyIGludG8gYW4gU3BsRml4ZWRBcnJheSBvZiB0d28gMzItYml0IGludGVnZXJzCiAgICAgKiB0aGF0IHJlcHJlc2VudHMgYSA2NC1iaXQgaW50ZWdlci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbnVtCiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB0bzY0KCRudW0pCiAgICB7CiAgICAgICAgbGlzdCgkaGksICRsbykgPSBzZWxmOjpudW1lcmljVG82NEJpdEludGVnZXIoJG51bSk7CiAgICAgICAgcmV0dXJuIHNlbGY6Om5ldzY0KCRoaSwgJGxvKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgdHdvIDY0LWJpdCBpbnRlZ2VycyB0b2dldGhlciwgcmV0dXJuaW5nIHRoZWlyIHN1bSBhcyBhIFNwbEZpeGVkQXJyYXkKICAgICAqIGNvbnRhaW5pbmcgdHdvIDMyLWJpdCBpbnRlZ2VycyAocmVwcmVzZW50aW5nIGEgNjQtYml0IGludGVnZXIpLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJHkKICAgICAqIEByZXR1cm4gU3BsRml4ZWRBcnJheQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE9wZXJhbmQKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGQ2NCgkeCwgJHkpCiAgICB7CiAgICAgICAgJGwgPSAoJHhbMV0gKyAkeVsxXSkgJiAweGZmZmZmZmZmOwogICAgICAgIHJldHVybiBzZWxmOjpuZXc2NCgKICAgICAgICAgICAgJHhbMF0gKyAkeVswXSArICgKICAgICAgICAgICAgICAgICgkbCA8ICR4WzFdKSA/IDEgOiAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgICRsCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJHkKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICR6CiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGQzNjQoJHgsICR5LCAkeikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6YWRkNjQoJHgsIHNlbGY6OmFkZDY0KCR5LCAkeikpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICR4CiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeQogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB4b3I2NChTcGxGaXhlZEFycmF5ICR4LCBTcGxGaXhlZEFycmF5ICR5KQogICAgewogICAgICAgIGlmICghaXNfbnVtZXJpYygkeFswXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigneFswXSBpcyBub3QgYW4gaW50ZWdlcicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX251bWVyaWMoJHhbMV0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ3hbMV0gaXMgbm90IGFuIGludGVnZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19udW1lcmljKCR5WzBdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCd5WzBdIGlzIG5vdCBhbiBpbnRlZ2VyJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfbnVtZXJpYygkeVsxXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbigneVsxXSBpcyBub3QgYW4gaW50ZWdlcicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6bmV3NjQoCiAgICAgICAgICAgIChpbnQpICgkeFswXSBeICR5WzBdKSwKICAgICAgICAgICAgKGludCkgKCR4WzFdIF4gJHlbMV0pCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeAogICAgICogQHBhcmFtIGludCAkYwogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcm90cjY0KCR4LCAkYykKICAgIHsKICAgICAgICBpZiAoJGMgPj0gNjQpIHsKICAgICAgICAgICAgJGMgJT0gNjQ7CiAgICAgICAgfQogICAgICAgIGlmICgkYyA+PSAzMikgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJHRtcCAqLwogICAgICAgICAgICAkdG1wID0gJHhbMF07CiAgICAgICAgICAgICR4WzBdID0gJHhbMV07CiAgICAgICAgICAgICR4WzFdID0gJHRtcDsKICAgICAgICAgICAgJGMgLT0gMzI7CiAgICAgICAgfQogICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJHg7CiAgICAgICAgfQoKICAgICAgICAkbDAgPSAwOwogICAgICAgICRjID0gNjQgLSAkYzsKCiAgICAgICAgaWYgKCRjIDwgMzIpIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRoMCAqLwogICAgICAgICAgICAkaDAgPSAoKGludCkgKCR4WzBdKSA8PCAkYykgfCAoCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgKGludCkgKCR4WzFdKSAmICgoMSA8PCAkYykgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICA8PAogICAgICAgICAgICAgICAgICAgICgzMiAtICRjKQogICAgICAgICAgICAgICAgKSA+PiAoMzIgLSAkYykKICAgICAgICAgICAgKTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRsMCAqLwogICAgICAgICAgICAkbDAgPSAoaW50KSAoJHhbMV0pIDw8ICRjOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAgICAgJGgwID0gKGludCkgKCR4WzFdKSA8PCAoJGMgLSAzMik7CiAgICAgICAgfQoKICAgICAgICAkaDEgPSAwOwogICAgICAgICRjMSA9IDY0IC0gJGM7CgogICAgICAgIGlmICgkYzEgPCAzMikgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJGgxICovCiAgICAgICAgICAgICRoMSA9IChpbnQpICgkeFswXSkgPj4gJGMxOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGwxICovCiAgICAgICAgICAgICRsMSA9ICgoaW50KSAoJHhbMV0pID4+ICRjMSkgfCAoKGludCkgKCR4WzBdKSAmICgoMSA8PCAkYzEpIC0gMSkpIDw8ICgzMiAtICRjMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRsMSAqLwogICAgICAgICAgICAkbDEgPSAoaW50KSAoJHhbMF0pID4+ICgkYzEgLSAzMik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6bmV3NjQoJGgwIHwgJGgxLCAkbDAgfCAkbDEpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICR4CiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkT3BlcmFuZAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGZsYXR0ZW42NCgkeCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgKCR4WzBdICogNDI5NDk2NzI5NiArICR4WzFdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeAogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBsb2FkNjQoU3BsRml4ZWRBcnJheSAkeCwgJGkpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRsICovCiAgICAgICAgJGwgPSAoaW50KSAoJHhbJGldKQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzFdKSA8PCA4KQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzJdKSA8PCAxNikKICAgICAgICAgICAgIHwgKChpbnQpICgkeFskaSszXSkgPDwgMjQpOwogICAgICAgIC8qKiBAdmFyIGludCAkaCAqLwogICAgICAgICRoID0gKGludCkgKCR4WyRpKzRdKQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzVdKSA8PCA4KQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzZdKSA8PCAxNikKICAgICAgICAgICAgIHwgKChpbnQpICgkeFskaSs3XSkgPDwgMjQpOwogICAgICAgIHJldHVybiBzZWxmOjpuZXc2NCgkaCwgJGwpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICR4CiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkdQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc3RvcmU2NChTcGxGaXhlZEFycmF5ICR4LCAkaSwgU3BsRml4ZWRBcnJheSAkdSkKICAgIHsKICAgICAgICAkbWF4TGVuZ3RoID0gJHgtPmdldFNpemUoKSAtIDE7CiAgICAgICAgZm9yICgkaiA9IDA7ICRqIDwgODsgKyskaikgewogICAgICAgICAgICAvKgogICAgICAgICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgN10KICAgICAgICAgICAgICAgICAgICAuLi4gYmVjb21lcyAuLi4KICAgICAgICAgICAgICAgWzAsIDAsIDAsIDAsIDEsIDEsIDEsIDFdCiAgICAgICAgICAgICovCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkdUlkeCAqLwogICAgICAgICAgICAkdUlkeCA9ICgoNyAtICRqKSAmIDQpID4+IDI7CiAgICAgICAgICAgICR4WyRpXSAgID0gKChpbnQpICgkdVskdUlkeF0pICYgMHhmZik7CiAgICAgICAgICAgIGlmICgrKyRpID4gJG1heExlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR1WyR1SWR4XSA+Pj0gODsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGp1c3Qgc2V0cyB0aGUgJGl2IHN0YXRpYyB2YXJpYWJsZS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHNldWRvQ29uc3RydWN0b3IoKQogICAgewogICAgICAgIHN0YXRpYyAkY2FsbGVkID0gZmFsc2U7CiAgICAgICAgaWYgKCRjYWxsZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzZWxmOjokaXYgPSBuZXcgU3BsRml4ZWRBcnJheSg4KTsKICAgICAgICBzZWxmOjokaXZbMF0gPSBzZWxmOjpuZXc2NCgweDZhMDllNjY3LCAweGYzYmNjOTA4KTsKICAgICAgICBzZWxmOjokaXZbMV0gPSBzZWxmOjpuZXc2NCgweGJiNjdhZTg1LCAweDg0Y2FhNzNiKTsKICAgICAgICBzZWxmOjokaXZbMl0gPSBzZWxmOjpuZXc2NCgweDNjNmVmMzcyLCAweGZlOTRmODJiKTsKICAgICAgICBzZWxmOjokaXZbM10gPSBzZWxmOjpuZXc2NCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKTsKICAgICAgICBzZWxmOjokaXZbNF0gPSBzZWxmOjpuZXc2NCgweDUxMGU1MjdmLCAweGFkZTY4MmQxKTsKICAgICAgICBzZWxmOjokaXZbNV0gPSBzZWxmOjpuZXc2NCgweDliMDU2ODhjLCAweDJiM2U2YzFmKTsKICAgICAgICBzZWxmOjokaXZbNl0gPSBzZWxmOjpuZXc2NCgweDFmODNkOWFiLCAweGZiNDFiZDZiKTsKICAgICAgICBzZWxmOjokaXZbN10gPSBzZWxmOjpuZXc2NCgweDViZTBjZDE5LCAweDEzN2UyMTc5KTsKCiAgICAgICAgJGNhbGxlZCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZnJlc2ggQkxBS0UyIGNvbnRleHQuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gU3BsRml4ZWRBcnJheQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QXNzaWdubWVudAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNvbnRleHQoKQogICAgewogICAgICAgICRjdHggICAgPSBuZXcgU3BsRml4ZWRBcnJheSg1KTsKICAgICAgICAkY3R4WzBdID0gbmV3IFNwbEZpeGVkQXJyYXkoOCk7ICAgLy8gaAogICAgICAgICRjdHhbMV0gPSBuZXcgU3BsRml4ZWRBcnJheSgyKTsgICAvLyB0CiAgICAgICAgJGN0eFsyXSA9IG5ldyBTcGxGaXhlZEFycmF5KDIpOyAgIC8vIGYKICAgICAgICAkY3R4WzNdID0gbmV3IFNwbEZpeGVkQXJyYXkoMjU2KTsgLy8gYnVmCiAgICAgICAgJGN0eFs0XSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmxlbgoKICAgICAgICBmb3IgKCRpID0gODsgJGktLTspIHsKICAgICAgICAgICAgJGN0eFswXVskaV0gPSBzZWxmOjokaXZbJGldOwogICAgICAgIH0KICAgICAgICBmb3IgKCRpID0gMjU2OyAkaS0tOykgewogICAgICAgICAgICAkY3R4WzNdWyRpXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkemVybyA9IHNlbGY6Om5ldzY0KDAsIDApOwogICAgICAgICRjdHhbMV1bMF0gPSAkemVybzsKICAgICAgICAkY3R4WzFdWzFdID0gJHplcm87CiAgICAgICAgJGN0eFsyXVswXSA9ICR6ZXJvOwogICAgICAgICRjdHhbMl1bMV0gPSAkemVybzsKCiAgICAgICAgcmV0dXJuICRjdHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGN0eAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGJ1ZgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNvbXByZXNzKFNwbEZpeGVkQXJyYXkgJGN0eCwgU3BsRml4ZWRBcnJheSAkYnVmKQogICAgewogICAgICAgICRtID0gbmV3IFNwbEZpeGVkQXJyYXkoMTYpOwogICAgICAgICR2ID0gbmV3IFNwbEZpeGVkQXJyYXkoMTYpOwoKICAgICAgICBmb3IgKCRpID0gMTY7ICRpLS07KSB7CiAgICAgICAgICAgICRtWyRpXSA9IHNlbGY6OmxvYWQ2NCgkYnVmLCAkaSA8PCAzKTsKICAgICAgICB9CgogICAgICAgIGZvciAoJGkgPSA4OyAkaS0tOykgewogICAgICAgICAgICAkdlskaV0gPSAkY3R4WzBdWyRpXTsKICAgICAgICB9CgogICAgICAgICR2WyA4XSA9IHNlbGY6OiRpdlswXTsKICAgICAgICAkdlsgOV0gPSBzZWxmOjokaXZbMV07CiAgICAgICAgJHZbMTBdID0gc2VsZjo6JGl2WzJdOwogICAgICAgICR2WzExXSA9IHNlbGY6OiRpdlszXTsKCiAgICAgICAgJHZbMTJdID0gc2VsZjo6eG9yNjQoJGN0eFsxXVswXSwgc2VsZjo6JGl2WzRdKTsKICAgICAgICAkdlsxM10gPSBzZWxmOjp4b3I2NCgkY3R4WzFdWzFdLCBzZWxmOjokaXZbNV0pOwogICAgICAgICR2WzE0XSA9IHNlbGY6OnhvcjY0KCRjdHhbMl1bMF0sIHNlbGY6OiRpdls2XSk7CiAgICAgICAgJHZbMTVdID0gc2VsZjo6eG9yNjQoJGN0eFsyXVsxXSwgc2VsZjo6JGl2WzddKTsKCiAgICAgICAgZm9yICgkciA9IDA7ICRyIDwgMTI7ICsrJHIpIHsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCAwLCAwLCA0LCA4LCAxMiwgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCAxLCAxLCA1LCA5LCAxMywgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCAyLCAyLCA2LCAxMCwgMTQsICR2LCAkbSk7CiAgICAgICAgICAgICR2ID0gc2VsZjo6RygkciwgMywgMywgNywgMTEsIDE1LCAkdiwgJG0pOwogICAgICAgICAgICAkdiA9IHNlbGY6OkcoJHIsIDQsIDAsIDUsIDEwLCAxNSwgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCA1LCAxLCA2LCAxMSwgMTIsICR2LCAkbSk7CiAgICAgICAgICAgICR2ID0gc2VsZjo6RygkciwgNiwgMiwgNywgOCwgMTMsICR2LCAkbSk7CiAgICAgICAgICAgICR2ID0gc2VsZjo6RygkciwgNywgMywgNCwgOSwgMTQsICR2LCAkbSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKCRpID0gODsgJGktLTspIHsKICAgICAgICAgICAgJGN0eFswXVskaV0gPSBzZWxmOjp4b3I2NCgKICAgICAgICAgICAgICAgICRjdHhbMF1bJGldLCBzZWxmOjp4b3I2NCgkdlskaV0sICR2WyRpKzhdKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRyCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcGFyYW0gaW50ICRhCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcGFyYW0gaW50ICRjCiAgICAgKiBAcGFyYW0gaW50ICRkCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkdgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJG0KICAgICAqIEByZXR1cm4gU3BsRml4ZWRBcnJheQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHKCRyLCAkaSwgJGEsICRiLCAkYywgJGQsIFNwbEZpeGVkQXJyYXkgJHYsIFNwbEZpeGVkQXJyYXkgJG0pCiAgICB7CiAgICAgICAgJHZbJGFdID0gc2VsZjo6YWRkMzY0KCR2WyRhXSwgJHZbJGJdLCAkbVtzZWxmOjokc2lnbWFbJHJdWyRpIDw8IDFdXSk7CiAgICAgICAgJHZbJGRdID0gc2VsZjo6cm90cjY0KHNlbGY6OnhvcjY0KCR2WyRkXSwgJHZbJGFdKSwgMzIpOwogICAgICAgICR2WyRjXSA9IHNlbGY6OmFkZDY0KCR2WyRjXSwgJHZbJGRdKTsKICAgICAgICAkdlskYl0gPSBzZWxmOjpyb3RyNjQoc2VsZjo6eG9yNjQoJHZbJGJdLCAkdlskY10pLCAyNCk7CiAgICAgICAgJHZbJGFdID0gc2VsZjo6YWRkMzY0KCR2WyRhXSwgJHZbJGJdLCAkbVtzZWxmOjokc2lnbWFbJHJdWygkaSA8PCAxKSArIDFdXSk7CiAgICAgICAgJHZbJGRdID0gc2VsZjo6cm90cjY0KHNlbGY6OnhvcjY0KCR2WyRkXSwgJHZbJGFdKSwgMTYpOwogICAgICAgICR2WyRjXSA9IHNlbGY6OmFkZDY0KCR2WyRjXSwgJHZbJGRdKTsKICAgICAgICAkdlskYl0gPSBzZWxmOjpyb3RyNjQoc2VsZjo6eG9yNjQoJHZbJGJdLCAkdlskY10pLCA2Myk7CiAgICAgICAgcmV0dXJuICR2OwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICRjdHgKICAgICAqIEBwYXJhbSBpbnQgJGluYwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbmNyZW1lbnRfY291bnRlcigkY3R4LCAkaW5jKQogICAgewogICAgICAgIGlmICgkaW5jIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbmNyZWFzaW5nIGJ5IGEgbmVnYXRpdmUgbnVtYmVyIG1ha2VzIG5vIHNlbnNlLicpOwogICAgICAgIH0KICAgICAgICAkdCA9IHNlbGY6OnRvNjQoJGluYyk7CiAgICAgICAgIyBTLT50IGlzICRjdHhbMV0gaW4gb3VyIGltcGxlbWVudGF0aW9uCgogICAgICAgICMgUy0+dFswXSA9ICggdWludDY0X3QgKSggdCA+PiAwICk7CiAgICAgICAgJGN0eFsxXVswXSA9IHNlbGY6OmFkZDY0KCRjdHhbMV1bMF0sICR0KTsKCiAgICAgICAgIyBTLT50WzFdICs9ICggUy0+dFswXSA8IGluYyApOwogICAgICAgIGlmIChzZWxmOjpmbGF0dGVuNjQoJGN0eFsxXVswXSkgPCAkaW5jKSB7CiAgICAgICAgICAgICRjdHhbMV1bMV0gPSBzZWxmOjphZGQ2NCgkY3R4WzFdWzFdLCBzZWxmOjp0bzY0KDEpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGN0eAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJHAKICAgICAqIEBwYXJhbSBpbnQgJHBsZW4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE9wZXJhbmQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGUoU3BsRml4ZWRBcnJheSAkY3R4LCBTcGxGaXhlZEFycmF5ICRwLCAkcGxlbikKICAgIHsKICAgICAgICBzZWxmOjpwc2V1ZG9Db25zdHJ1Y3RvcigpOwoKICAgICAgICAkb2Zmc2V0ID0gMDsKICAgICAgICB3aGlsZSAoJHBsZW4gPiAwKSB7CiAgICAgICAgICAgICRsZWZ0ID0gJGN0eFs0XTsKICAgICAgICAgICAgJGZpbGwgPSAyNTYgLSAkbGVmdDsKCiAgICAgICAgICAgIGlmICgkcGxlbiA+ICRmaWxsKSB7CiAgICAgICAgICAgICAgICAjIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsgLyogRmlsbCBidWZmZXIgKi8KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAkZmlsbDsgJGktLTspIHsKICAgICAgICAgICAgICAgICAgICAkY3R4WzNdWyRpICsgJGxlZnRdID0gJHBbJGkgKyAkb2Zmc2V0XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFMtPmJ1ZmxlbiArPSBmaWxsOwogICAgICAgICAgICAgICAgJGN0eFs0XSArPSAkZmlsbDsKCiAgICAgICAgICAgICAgICAjIGJsYWtlMmJfaW5jcmVtZW50X2NvdW50ZXIoIFMsIEJMQUtFMkJfQkxPQ0tCWVRFUyApOwogICAgICAgICAgICAgICAgc2VsZjo6aW5jcmVtZW50X2NvdW50ZXIoJGN0eCwgMTI4KTsKCiAgICAgICAgICAgICAgICAjIGJsYWtlMmJfY29tcHJlc3MoIFMsIFMtPmJ1ZiApOyAvKiBDb21wcmVzcyAqLwogICAgICAgICAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CgogICAgICAgICAgICAgICAgIyBtZW1jcHkoIFMtPmJ1ZiwgUy0+YnVmICsgQkxBS0UyQl9CTE9DS0JZVEVTLCBCTEFLRTJCX0JMT0NLQllURVMgKTsgLyogU2hpZnQgYnVmZmVyIGxlZnQgKi8KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAxMjg7ICRpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgJGN0eFszXVskaV0gPSAkY3R4WzNdWyRpICsgMTI4XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFMtPmJ1ZmxlbiAtPSBCTEFLRTJCX0JMT0NLQllURVM7CiAgICAgICAgICAgICAgICAkY3R4WzRdIC09IDEyODsKCiAgICAgICAgICAgICAgICAjIGluICs9IGZpbGw7CiAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9ICRmaWxsOwoKICAgICAgICAgICAgICAgICMgaW5sZW4gLT0gZmlsbDsKICAgICAgICAgICAgICAgICRwbGVuIC09ICRmaWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yICgkaSA9ICRwbGVuOyAkaS0tOykgewogICAgICAgICAgICAgICAgICAgICRjdHhbM11bJGkgKyAkbGVmdF0gPSAkcFskaSArICRvZmZzZXRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGN0eFs0XSArPSAkcGxlbjsKICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gJHBsZW47CiAgICAgICAgICAgICAgICAkcGxlbiAtPSAkcGxlbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkY3R4CiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkb3V0CiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRPcGVyYW5kCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluaXNoKFNwbEZpeGVkQXJyYXkgJGN0eCwgU3BsRml4ZWRBcnJheSAkb3V0KQogICAgewogICAgICAgIHNlbGY6OnBzZXVkb0NvbnN0cnVjdG9yKCk7CiAgICAgICAgaWYgKCRjdHhbNF0gPiAxMjgpIHsKICAgICAgICAgICAgc2VsZjo6aW5jcmVtZW50X2NvdW50ZXIoJGN0eCwgMTI4KTsKICAgICAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CiAgICAgICAgICAgICRjdHhbNF0gLT0gMTI4OwogICAgICAgICAgICBpZiAoJGN0eFs0XSA+IDEyOCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignRmFpbGVkIHRvIGFzc2VydCB0aGF0IGJ1ZmxlbiA8PSAxMjggYnl0ZXMnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gJGN0eFs0XTsgJGktLTspIHsKICAgICAgICAgICAgICAgICRjdHhbM11bJGldID0gJGN0eFszXVskaSArIDEyOF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNlbGY6OmluY3JlbWVudF9jb3VudGVyKCRjdHgsICRjdHhbNF0pOwogICAgICAgICRjdHhbMl1bMF0gPSBzZWxmOjpuZXc2NCgweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKCiAgICAgICAgZm9yICgkaSA9IDI1NiAtICRjdHhbNF07ICRpLS07KSB7CiAgICAgICAgICAgICRjdHhbM11bJGkrJGN0eFs0XV0gPSAwOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CgogICAgICAgICRpID0gKGludCkgKCgkb3V0LT5nZXRTaXplKCkgLSAxKSAvIDgpOwogICAgICAgIGZvciAoOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgIHNlbGY6OnN0b3JlNjQoJG91dCwgJGkgPDwgMywgJGN0eFswXVskaV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheXxudWxsICRrZXkKICAgICAqIEBwYXJhbSBpbnQgJG91dGxlbgogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXQoJGtleSA9IG51bGwsICRvdXRsZW4gPSA2NCkKICAgIHsKICAgICAgICBzZWxmOjpwc2V1ZG9Db25zdHJ1Y3RvcigpOwogICAgICAgICRrbGVuID0gMDsKCiAgICAgICAgaWYgKCRrZXkgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGNvdW50KCRrZXkpID4gNjQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQga2V5IHNpemUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAka2xlbiA9IGNvdW50KCRrZXkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvdXRsZW4gPiA2NCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIG91dHB1dCBzaXplJyk7CiAgICAgICAgfQoKICAgICAgICAkY3R4ID0gc2VsZjo6Y29udGV4dCgpOwoKICAgICAgICAkcCA9IG5ldyBTcGxGaXhlZEFycmF5KDY0KTsKICAgICAgICBmb3IgKCRpID0gNjQ7IC0tJGk7KSB7CiAgICAgICAgICAgICRwWyRpXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkcFswXSA9ICRvdXRsZW47IC8vIGRpZ2VzdF9sZW5ndGgKICAgICAgICAkcFsxXSA9ICRrbGVuOyAgIC8vIGtleV9sZW5ndGgKICAgICAgICAkcFsyXSA9IDE7ICAgICAgIC8vIGZhbm91dAogICAgICAgICRwWzNdID0gMTsgICAgICAgLy8gZGVwdGgKCiAgICAgICAgJGN0eFswXVswXSA9IHNlbGY6OnhvcjY0KAogICAgICAgICAgICAkY3R4WzBdWzBdLAogICAgICAgICAgICBzZWxmOjpsb2FkNjQoJHAsIDApCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRrbGVuID4gMCAmJiAka2V5IGluc3RhbmNlb2YgU3BsRml4ZWRBcnJheSkgewogICAgICAgICAgICAkYmxvY2sgPSBuZXcgU3BsRml4ZWRBcnJheSgxMjgpOwogICAgICAgICAgICBmb3IgKCRpID0gMTI4OyAkaS0tOykgewogICAgICAgICAgICAgICAgJGJsb2NrWyRpXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICgkaSA9ICRrbGVuOyAkaS0tOykgewogICAgICAgICAgICAgICAgJGJsb2NrWyRpXSA9ICRrZXlbJGldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbGY6OnVwZGF0ZSgkY3R4LCAkYmxvY2ssIDEyOCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGN0eDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYSBzdHJpbmcgaW50byBhbiBTcGxGaXhlZEFycmF5IG9mIGludGVnZXJzCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nVG9TcGxGaXhlZEFycmF5KCRzdHIgPSAnJykKICAgIHsKICAgICAgICAkdmFsdWVzID0gdW5wYWNrKCdDKicsICRzdHIpOwogICAgICAgIHJldHVybiBTcGxGaXhlZEFycmF5Ojpmcm9tQXJyYXkoYXJyYXlfdmFsdWVzKCR2YWx1ZXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYW4gU3BsRml4ZWRBcnJheSBvZiBpbnRlZ2VycyBpbnRvIGEgc3RyaW5nCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICRhCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBTcGxGaXhlZEFycmF5VG9TdHJpbmcoU3BsRml4ZWRBcnJheSAkYSkKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIGFycmF5PGludCwgaW50fHN0cmluZz4gJGFycgogICAgICAgICAqLwogICAgICAgICRhcnIgPSAkYS0+dG9BcnJheSgpOwogICAgICAgICRjID0gJGEtPmNvdW50KCk7CiAgICAgICAgYXJyYXlfdW5zaGlmdCgkYXJyLCBzdHJfcmVwZWF0KCdDJywgJGMpKTsKICAgICAgICByZXR1cm4gKHN0cmluZykgKGNhbGxfdXNlcl9mdW5jX2FycmF5KCdwYWNrJywgJGFycikpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5W1NwbEZpeGVkQXJyYXldICRjdHgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udGV4dFRvU3RyaW5nKFNwbEZpeGVkQXJyYXkgJGN0eCkKICAgIHsKICAgICAgICAkc3RyID0gJyc7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBhcnJheTxpbnQsIGludD4+ICRjdHhBICovCiAgICAgICAgJGN0eEEgPSAkY3R4WzBdLT50b0FycmF5KCk7CgogICAgICAgICMgdWludDY0X3QgaFs4XTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICRzdHIgLj0gc2VsZjo6c3RvcmUzMl9sZSgkY3R4QVskaV1bMV0pOwogICAgICAgICAgICAkc3RyIC49IHNlbGY6OnN0b3JlMzJfbGUoJGN0eEFbJGldWzBdKTsKICAgICAgICB9CgogICAgICAgICMgdWludDY0X3QgdFsyXTsKICAgICAgICAjIHVpbnQ2NF90IGZbMl07CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMzsgKyskaSkgewogICAgICAgICAgICAkY3R4QSA9ICRjdHhbJGldLT50b0FycmF5KCk7CiAgICAgICAgICAgICRzdHIgLj0gc2VsZjo6c3RvcmUzMl9sZSgkY3R4QVswXVsxXSk7CiAgICAgICAgICAgICRzdHIgLj0gc2VsZjo6c3RvcmUzMl9sZSgkY3R4QVswXVswXSk7CiAgICAgICAgICAgICRzdHIgLj0gc2VsZjo6c3RvcmUzMl9sZSgkY3R4QVsxXVsxXSk7CiAgICAgICAgICAgICRzdHIgLj0gc2VsZjo6c3RvcmUzMl9sZSgkY3R4QVsxXVswXSk7CiAgICAgICAgfQoKICAgICAgICAjIHVpbnQ4X3QgYnVmWzIgKiAxMjhdOwogICAgICAgICRzdHIgLj0gc2VsZjo6U3BsRml4ZWRBcnJheVRvU3RyaW5nKCRjdHhbM10pOwoKICAgICAgICAvKiogQHZhciBpbnQgJGN0eDQgKi8KICAgICAgICAkY3R4NCA9IChpbnQpICRjdHhbNF07CgogICAgICAgICMgc2l6ZV90IGJ1ZmxlbjsKICAgICAgICAkc3RyIC49IGltcGxvZGUoJycsIGFycmF5KAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigkY3R4NCAmIDB4ZmYpLAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGN0eDQgPj4gOCkgJiAweGZmKSwKICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRjdHg0ID4+IDE2KSAmIDB4ZmYpLAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGN0eDQgPj4gMjQpICYgMHhmZiksCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkY3R4NCA+PiAzMikgJiAweGZmKSwKICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRjdHg0ID4+IDQwKSAmIDB4ZmYpLAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGN0eDQgPj4gNDgpICYgMHhmZiksCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkY3R4NCA+PiA1NikgJiAweGZmKQogICAgICAgICkpOwogICAgICAgICMgdWludDhfdCBsYXN0X25vZGU7CiAgICAgICAgcmV0dXJuICRzdHIgLiAiXHgwMCI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIFNwbEZpeGVkQXJyYXkgY29udGFpbmluZyBvdGhlciBTcGxGaXhlZEFycmF5IGVsZW1lbnRzLCBmcm9tCiAgICAgKiBhIHN0cmluZyAoY29tcGF0aWJsZSB3aXRoIFxTb2RpdW1cY3J5cHRvX2dlbmVyaWNoYXNoX3tpbml0LCB1cGRhdGUsIGZpbmFsfSkKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nVG9Db250ZXh0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJGN0eCA9IHNlbGY6OmNvbnRleHQoKTsKCiAgICAgICAgIyB1aW50NjRfdCBoWzhdOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDg7ICsrJGkpIHsKICAgICAgICAgICAgJGN0eFswXVskaV0gPSBTcGxGaXhlZEFycmF5Ojpmcm9tQXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICBzZWxmOjpsb2FkXzQoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkc3RyaW5nLCAoKCRpIDw8IDMpICsgNCksIDQpCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBzZWxmOjpsb2FkXzQoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkc3RyaW5nLCAoKCRpIDw8IDMpICsgMCksIDQpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1aW50NjRfdCB0WzJdOwogICAgICAgICMgdWludDY0X3QgZlsyXTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAzOyArKyRpKSB7CiAgICAgICAgICAgICRjdHhbJGldWzFdID0gU3BsRml4ZWRBcnJheTo6ZnJvbUFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkc3RyaW5nLCA3NiArICgoJGkgLSAxKSA8PCA0KSwgNCkpLAogICAgICAgICAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHN0cmluZywgNzIgKyAoKCRpIC0gMSkgPDwgNCksIDQpKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwogICAgICAgICAgICAkY3R4WyRpXVswXSA9IFNwbEZpeGVkQXJyYXk6OmZyb21BcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHN0cmluZywgNjggKyAoKCRpIC0gMSkgPDwgNCksIDQpKSwKICAgICAgICAgICAgICAgICAgICBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzdHJpbmcsIDY0ICsgKCgkaSAtIDEpIDw8IDQpLCA0KSkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdWludDhfdCBidWZbMiAqIDEyOF07CiAgICAgICAgJGN0eFszXSA9IHNlbGY6OnN0cmluZ1RvU3BsRml4ZWRBcnJheShzZWxmOjpzdWJzdHIoJHN0cmluZywgOTYsIDI1NikpOwoKCiAgICAgICAgIyB1aW50OF90IGJ1ZlsyICogMTI4XTsKICAgICAgICAkaW50ID0gMDsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICRpbnQgfD0gc2VsZjo6Y2hyVG9JbnQoJHN0cmluZ1szNTIgKyAkaV0pIDw8ICgkaSA8PCAzKTsKICAgICAgICB9CiAgICAgICAgJGN0eFs0XSA9ICRpbnQ7CgogICAgICAgIHJldHVybiAkY3R4OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/ChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAp7CiAgICAvKioKICAgICAqIEJpdHdpc2UgbGVmdCByb3RhdGlvbgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR2CiAgICAgKiBAcGFyYW0gaW50ICRuCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJvdGF0ZSgkdiwgJG4pCiAgICB7CiAgICAgICAgJHYgJj0gMHhmZmZmZmZmZjsKICAgICAgICAkbiAmPSAzMTsKICAgICAgICByZXR1cm4gKGludCkgKAogICAgICAgICAgICAweGZmZmZmZmZmICYgKAogICAgICAgICAgICAgICAgKCR2IDw8ICRuKQogICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICgkdiA+PiAoMzIgLSAkbikpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIENoYUNoYTIwIHF1YXJ0ZXIgcm91bmQgZnVuY3Rpb24uIFdvcmtzIG9uIGZvdXIgMzItYml0IGludGVnZXJzLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcGFyYW0gaW50ICRjCiAgICAgKiBAcGFyYW0gaW50ICRkCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHF1YXJ0ZXJSb3VuZCgkYSwgJGIsICRjLCAkZCkKICAgIHsKICAgICAgICAjIGEgPSBQTFVTKGEsYik7IGQgPSBST1RBVEUoWE9SKGQsYSksMTYpOwogICAgICAgIC8qKiBAdmFyIGludCAkYSAqLwogICAgICAgICRhID0gKCRhICsgJGIpICYgMHhmZmZmZmZmZjsKICAgICAgICAkZCA9IHNlbGY6OnJvdGF0ZSgkZCBeICRhLCAxNik7CgogICAgICAgICMgYyA9IFBMVVMoYyxkKTsgYiA9IFJPVEFURShYT1IoYixjKSwxMik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoJGMgKyAkZCkgJiAweGZmZmZmZmZmOwogICAgICAgICRiID0gc2VsZjo6cm90YXRlKCRiIF4gJGMsIDEyKTsKCiAgICAgICAgIyBhID0gUExVUyhhLGIpOyBkID0gUk9UQVRFKFhPUihkLGEpLCA4KTsKICAgICAgICAvKiogQHZhciBpbnQgJGEgKi8KICAgICAgICAkYSA9ICgkYSArICRiKSAmIDB4ZmZmZmZmZmY7CiAgICAgICAgJGQgPSBzZWxmOjpyb3RhdGUoJGQgXiAkYSwgOCk7CgogICAgICAgICMgYyA9IFBMVVMoYyxkKTsgYiA9IFJPVEFURShYT1IoYixjKSwgNyk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoJGMgKyAkZCkgJiAweGZmZmZmZmZmOwogICAgICAgICRiID0gc2VsZjo6cm90YXRlKCRiIF4gJGMsIDcpOwogICAgICAgIHJldHVybiBhcnJheSgoaW50KSAkYSwgKGludCkgJGIsIChpbnQpICRjLCAoaW50KSAkZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHggJGN0eAogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbmNyeXB0Qnl0ZXMoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0N0eCAkY3R4LAogICAgICAgICRtZXNzYWdlID0gJycKICAgICkgewogICAgICAgICRieXRlcyA9IHNlbGY6OnN0cmxlbigkbWVzc2FnZSk7CgogICAgICAgIC8qCiAgICAgICAgajAgPSBjdHgtPmlucHV0WzBdOwogICAgICAgIGoxID0gY3R4LT5pbnB1dFsxXTsKICAgICAgICBqMiA9IGN0eC0+aW5wdXRbMl07CiAgICAgICAgajMgPSBjdHgtPmlucHV0WzNdOwogICAgICAgIGo0ID0gY3R4LT5pbnB1dFs0XTsKICAgICAgICBqNSA9IGN0eC0+aW5wdXRbNV07CiAgICAgICAgajYgPSBjdHgtPmlucHV0WzZdOwogICAgICAgIGo3ID0gY3R4LT5pbnB1dFs3XTsKICAgICAgICBqOCA9IGN0eC0+aW5wdXRbOF07CiAgICAgICAgajkgPSBjdHgtPmlucHV0WzldOwogICAgICAgIGoxMCA9IGN0eC0+aW5wdXRbMTBdOwogICAgICAgIGoxMSA9IGN0eC0+aW5wdXRbMTFdOwogICAgICAgIGoxMiA9IGN0eC0+aW5wdXRbMTJdOwogICAgICAgIGoxMyA9IGN0eC0+aW5wdXRbMTNdOwogICAgICAgIGoxNCA9IGN0eC0+aW5wdXRbMTRdOwogICAgICAgIGoxNSA9IGN0eC0+aW5wdXRbMTVdOwogICAgICAgICovCiAgICAgICAgJGowICA9IChpbnQpICRjdHhbMF07CiAgICAgICAgJGoxICA9IChpbnQpICRjdHhbMV07CiAgICAgICAgJGoyICA9IChpbnQpICRjdHhbMl07CiAgICAgICAgJGozICA9IChpbnQpICRjdHhbM107CiAgICAgICAgJGo0ICA9IChpbnQpICRjdHhbNF07CiAgICAgICAgJGo1ICA9IChpbnQpICRjdHhbNV07CiAgICAgICAgJGo2ICA9IChpbnQpICRjdHhbNl07CiAgICAgICAgJGo3ICA9IChpbnQpICRjdHhbN107CiAgICAgICAgJGo4ICA9IChpbnQpICRjdHhbOF07CiAgICAgICAgJGo5ICA9IChpbnQpICRjdHhbOV07CiAgICAgICAgJGoxMCA9IChpbnQpICRjdHhbMTBdOwogICAgICAgICRqMTEgPSAoaW50KSAkY3R4WzExXTsKICAgICAgICAkajEyID0gKGludCkgJGN0eFsxMl07CiAgICAgICAgJGoxMyA9IChpbnQpICRjdHhbMTNdOwogICAgICAgICRqMTQgPSAoaW50KSAkY3R4WzE0XTsKICAgICAgICAkajE1ID0gKGludCkgJGN0eFsxNV07CgogICAgICAgICRjID0gJyc7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICBpZiAoJGJ5dGVzIDwgNjQpIHsKICAgICAgICAgICAgICAgICRtZXNzYWdlIC49IHN0cl9yZXBlYXQoIlx4MDAiLCA2NCAtICRieXRlcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR4MCA9ICAoaW50KSAkajA7CiAgICAgICAgICAgICR4MSA9ICAoaW50KSAkajE7CiAgICAgICAgICAgICR4MiA9ICAoaW50KSAkajI7CiAgICAgICAgICAgICR4MyA9ICAoaW50KSAkajM7CiAgICAgICAgICAgICR4NCA9ICAoaW50KSAkajQ7CiAgICAgICAgICAgICR4NSA9ICAoaW50KSAkajU7CiAgICAgICAgICAgICR4NiA9ICAoaW50KSAkajY7CiAgICAgICAgICAgICR4NyA9ICAoaW50KSAkajc7CiAgICAgICAgICAgICR4OCA9ICAoaW50KSAkajg7CiAgICAgICAgICAgICR4OSA9ICAoaW50KSAkajk7CiAgICAgICAgICAgICR4MTAgPSAoaW50KSAkajEwOwogICAgICAgICAgICAkeDExID0gKGludCkgJGoxMTsKICAgICAgICAgICAgJHgxMiA9IChpbnQpICRqMTI7CiAgICAgICAgICAgICR4MTMgPSAoaW50KSAkajEzOwogICAgICAgICAgICAkeDE0ID0gKGludCkgJGoxNDsKICAgICAgICAgICAgJHgxNSA9IChpbnQpICRqMTU7CgogICAgICAgICAgICAjIGZvciAoaSA9IDIwOyBpID4gMDsgaSAtPSAyKSB7CiAgICAgICAgICAgIGZvciAoJGkgPSAyMDsgJGkgPiAwOyAkaSAtPSAyKSB7CiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDAsICB4NCwgIHg4LCAgeDEyKQogICAgICAgICAgICAgICAgbGlzdCgkeDAsICR4NCwgJHg4LCAkeDEyKSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDAsICR4NCwgJHg4LCAkeDEyKTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDEsICB4NSwgIHg5LCAgeDEzKQogICAgICAgICAgICAgICAgbGlzdCgkeDEsICR4NSwgJHg5LCAkeDEzKSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDEsICR4NSwgJHg5LCAkeDEzKTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDIsICB4NiwgIHgxMCwgIHgxNCkKICAgICAgICAgICAgICAgIGxpc3QoJHgyLCAkeDYsICR4MTAsICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MiwgJHg2LCAkeDEwLCAkeDE0KTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDMsICB4NywgIHgxMSwgIHgxNSkKICAgICAgICAgICAgICAgIGxpc3QoJHgzLCAkeDcsICR4MTEsICR4MTUpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MywgJHg3LCAkeDExLCAkeDE1KTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDAsICB4NSwgIHgxMCwgIHgxNSkKICAgICAgICAgICAgICAgIGxpc3QoJHgwLCAkeDUsICR4MTAsICR4MTUpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MCwgJHg1LCAkeDEwLCAkeDE1KTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDEsICB4NiwgIHgxMSwgIHgxMikKICAgICAgICAgICAgICAgIGxpc3QoJHgxLCAkeDYsICR4MTEsICR4MTIpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg2LCAkeDExLCAkeDEyKTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDIsICB4NywgIHg4LCAgeDEzKQogICAgICAgICAgICAgICAgbGlzdCgkeDIsICR4NywgJHg4LCAkeDEzKSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDIsICR4NywgJHg4LCAkeDEzKTsKCiAgICAgICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDMsICB4NCwgIHg5LCAgeDE0KQogICAgICAgICAgICAgICAgbGlzdCgkeDMsICR4NCwgJHg5LCAkeDE0KSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDMsICR4NCwgJHg5LCAkeDE0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKgogICAgICAgICAgICB4MCA9IFBMVVMoeDAsIGowKTsKICAgICAgICAgICAgeDEgPSBQTFVTKHgxLCBqMSk7CiAgICAgICAgICAgIHgyID0gUExVUyh4MiwgajIpOwogICAgICAgICAgICB4MyA9IFBMVVMoeDMsIGozKTsKICAgICAgICAgICAgeDQgPSBQTFVTKHg0LCBqNCk7CiAgICAgICAgICAgIHg1ID0gUExVUyh4NSwgajUpOwogICAgICAgICAgICB4NiA9IFBMVVMoeDYsIGo2KTsKICAgICAgICAgICAgeDcgPSBQTFVTKHg3LCBqNyk7CiAgICAgICAgICAgIHg4ID0gUExVUyh4OCwgajgpOwogICAgICAgICAgICB4OSA9IFBMVVMoeDksIGo5KTsKICAgICAgICAgICAgeDEwID0gUExVUyh4MTAsIGoxMCk7CiAgICAgICAgICAgIHgxMSA9IFBMVVMoeDExLCBqMTEpOwogICAgICAgICAgICB4MTIgPSBQTFVTKHgxMiwgajEyKTsKICAgICAgICAgICAgeDEzID0gUExVUyh4MTMsIGoxMyk7CiAgICAgICAgICAgIHgxNCA9IFBMVVMoeDE0LCBqMTQpOwogICAgICAgICAgICB4MTUgPSBQTFVTKHgxNSwgajE1KTsKICAgICAgICAgICAgKi8KICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4MCAqLwogICAgICAgICAgICAkeDAgID0gKCR4MCAmIDB4ZmZmZmZmZmYpICsgJGowOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHgxICovCiAgICAgICAgICAgICR4MSAgPSAoJHgxICYgMHhmZmZmZmZmZikgKyAkajE7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDIgKi8KICAgICAgICAgICAgJHgyICA9ICgkeDIgJiAweGZmZmZmZmZmKSArICRqMjsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4MyAqLwogICAgICAgICAgICAkeDMgID0gKCR4MyAmIDB4ZmZmZmZmZmYpICsgJGozOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHg0ICovCiAgICAgICAgICAgICR4NCAgPSAoJHg0ICYgMHhmZmZmZmZmZikgKyAkajQ7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDUgKi8KICAgICAgICAgICAgJHg1ICA9ICgkeDUgJiAweGZmZmZmZmZmKSArICRqNTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4NiAqLwogICAgICAgICAgICAkeDYgID0gKCR4NiAmIDB4ZmZmZmZmZmYpICsgJGo2OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHg3ICovCiAgICAgICAgICAgICR4NyAgPSAoJHg3ICYgMHhmZmZmZmZmZikgKyAkajc7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDggKi8KICAgICAgICAgICAgJHg4ICA9ICgkeDggJiAweGZmZmZmZmZmKSArICRqODsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4OSAqLwogICAgICAgICAgICAkeDkgID0gKCR4OSAmIDB4ZmZmZmZmZmYpICsgJGo5OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHgxMCAqLwogICAgICAgICAgICAkeDEwID0gKCR4MTAgJiAweGZmZmZmZmZmKSArICRqMTA7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDExICovCiAgICAgICAgICAgICR4MTEgPSAoJHgxMSAmIDB4ZmZmZmZmZmYpICsgJGoxMTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4MTIgKi8KICAgICAgICAgICAgJHgxMiA9ICgkeDEyICYgMHhmZmZmZmZmZikgKyAkajEyOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHgxMyAqLwogICAgICAgICAgICAkeDEzID0gKCR4MTMgJiAweGZmZmZmZmZmKSArICRqMTM7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDE0ICovCiAgICAgICAgICAgICR4MTQgPSAoJHgxNCAmIDB4ZmZmZmZmZmYpICsgJGoxNDsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4MTUgKi8KICAgICAgICAgICAgJHgxNSA9ICgkeDE1ICYgMHhmZmZmZmZmZikgKyAkajE1OwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgeDAgPSBYT1IoeDAsIExPQUQzMl9MRShtICsgMCkpOwogICAgICAgICAgICB4MSA9IFhPUih4MSwgTE9BRDMyX0xFKG0gKyA0KSk7CiAgICAgICAgICAgIHgyID0gWE9SKHgyLCBMT0FEMzJfTEUobSArIDgpKTsKICAgICAgICAgICAgeDMgPSBYT1IoeDMsIExPQUQzMl9MRShtICsgMTIpKTsKICAgICAgICAgICAgeDQgPSBYT1IoeDQsIExPQUQzMl9MRShtICsgMTYpKTsKICAgICAgICAgICAgeDUgPSBYT1IoeDUsIExPQUQzMl9MRShtICsgMjApKTsKICAgICAgICAgICAgeDYgPSBYT1IoeDYsIExPQUQzMl9MRShtICsgMjQpKTsKICAgICAgICAgICAgeDcgPSBYT1IoeDcsIExPQUQzMl9MRShtICsgMjgpKTsKICAgICAgICAgICAgeDggPSBYT1IoeDgsIExPQUQzMl9MRShtICsgMzIpKTsKICAgICAgICAgICAgeDkgPSBYT1IoeDksIExPQUQzMl9MRShtICsgMzYpKTsKICAgICAgICAgICAgeDEwID0gWE9SKHgxMCwgTE9BRDMyX0xFKG0gKyA0MCkpOwogICAgICAgICAgICB4MTEgPSBYT1IoeDExLCBMT0FEMzJfTEUobSArIDQ0KSk7CiAgICAgICAgICAgIHgxMiA9IFhPUih4MTIsIExPQUQzMl9MRShtICsgNDgpKTsKICAgICAgICAgICAgeDEzID0gWE9SKHgxMywgTE9BRDMyX0xFKG0gKyA1MikpOwogICAgICAgICAgICB4MTQgPSBYT1IoeDE0LCBMT0FEMzJfTEUobSArIDU2KSk7CiAgICAgICAgICAgIHgxNSA9IFhPUih4MTUsIExPQUQzMl9MRShtICsgNjApKTsKICAgICAgICAgICAgKi8KICAgICAgICAgICAgJHgwICBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAwLCA0KSk7CiAgICAgICAgICAgICR4MSAgXj0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNCwgNCkpOwogICAgICAgICAgICAkeDIgIF49IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDgsIDQpKTsKICAgICAgICAgICAgJHgzICBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAxMiwgNCkpOwogICAgICAgICAgICAkeDQgIF49IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDE2LCA0KSk7CiAgICAgICAgICAgICR4NSAgXj0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMjAsIDQpKTsKICAgICAgICAgICAgJHg2ICBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAyNCwgNCkpOwogICAgICAgICAgICAkeDcgIF49IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDI4LCA0KSk7CiAgICAgICAgICAgICR4OCAgXj0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMzIsIDQpKTsKICAgICAgICAgICAgJHg5ICBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAzNiwgNCkpOwogICAgICAgICAgICAkeDEwIF49IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDQwLCA0KSk7CiAgICAgICAgICAgICR4MTEgXj0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNDQsIDQpKTsKICAgICAgICAgICAgJHgxMiBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA0OCwgNCkpOwogICAgICAgICAgICAkeDEzIF49IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDUyLCA0KSk7CiAgICAgICAgICAgICR4MTQgXj0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNTYsIDQpKTsKICAgICAgICAgICAgJHgxNSBePSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2MCwgNCkpOwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIGoxMiA9IFBMVVNPTkUoajEyKTsKICAgICAgICAgICAgICAgIGlmICghajEyKSB7CiAgICAgICAgICAgICAgICAgICAgajEzID0gUExVU09ORShqMTMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgKyskajEyOwogICAgICAgICAgICBpZiAoJGoxMiAmIDB4ZjAwMDAwMDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ092ZXJmbG93Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDAsIHgwKTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgNCwgeDEpOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA4LCB4Mik7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDEyLCB4Myk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDE2LCB4NCk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDIwLCB4NSk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDI0LCB4Nik7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDI4LCB4Nyk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDMyLCB4OCk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDM2LCB4OSk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDQwLCB4MTApOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA0NCwgeDExKTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgNDgsIHgxMik7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDUyLCB4MTMpOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA1NiwgeDE0KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgNjAsIHgxNSk7CiAgICAgICAgICAgICovCiAgICAgICAgICAgICRibG9jayA9IHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MCAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MSAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MiAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MyAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4NCAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4NSAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4NiAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4NyAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4OCAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4OSAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTEgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTIgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTMgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTQgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTUgJiAweGZmZmZmZmZmKSk7CgogICAgICAgICAgICAvKiBQYXJ0aWFsIGJsb2NrICovCiAgICAgICAgICAgIGlmICgkYnl0ZXMgPCA2NCkgewogICAgICAgICAgICAgICAgJGMgLj0gc2VsZjo6c3Vic3RyKCRibG9jaywgMCwgJGJ5dGVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBGdWxsIGJsb2NrICovCiAgICAgICAgICAgICRjIC49ICRibG9jazsKICAgICAgICAgICAgJGJ5dGVzIC09IDY0OwogICAgICAgICAgICBpZiAoJGJ5dGVzIDw9IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2NCk7CiAgICAgICAgfQogICAgICAgIC8qIGVuZCBmb3IoOzspIGxvb3AgKi8KCiAgICAgICAgJGN0eFsxMl0gPSAkajEyOwogICAgICAgICRjdHhbMTNdID0gJGoxMzsKICAgICAgICByZXR1cm4gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtKCRsZW4gPSA2NCwgJG5vbmNlID0gJycsICRrZXkgPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6ZW5jcnlwdEJ5dGVzKAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0N0eCgka2V5LCAkbm9uY2UpLAogICAgICAgICAgICBzdHJfcmVwZWF0KCJceDAwIiwgJGxlbikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlldGZTdHJlYW0oJGxlbiwgJG5vbmNlID0gJycsICRrZXkgPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6ZW5jcnlwdEJ5dGVzKAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0lldGZDdHgoJGtleSwgJG5vbmNlKSwKICAgICAgICAgICAgc3RyX3JlcGVhdCgiXHgwMCIsICRsZW4pCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpYwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlldGZTdHJlYW1Yb3JJYygkbWVzc2FnZSwgJG5vbmNlID0gJycsICRrZXkgPSAnJywgJGljID0gJycpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY3J5cHRCeXRlcygKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9JZXRmQ3R4KCRrZXksICRub25jZSwgJGljKSwKICAgICAgICAgICAgJG1lc3NhZ2UKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtWG9ySWMoJG1lc3NhZ2UsICRub25jZSA9ICcnLCAka2V5ID0gJycsICRpYyA9ICcnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbmNyeXB0Qnl0ZXMoCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjBfQ3R4KCRrZXksICRub25jZSwgJGljKSwKICAgICAgICAgICAgJG1lc3NhZ2UKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/ChaCha20/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/ChaCha20/Ctx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHgnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHgKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHggZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbCBpbXBsZW1lbnRzIEFycmF5QWNjZXNzCnsKICAgIC8qKgogICAgICogQHZhciBTcGxGaXhlZEFycmF5IGludGVybmFsbHksIDxpbnQsIGludD4KICAgICAqLwogICAgcHJvdGVjdGVkICRjb250YWluZXI7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjBfQ3R4IGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgIENoYUNoYTIwIGtleS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGl2ICAgICAgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChhLmsuYS4gbm9uY2UpLgogICAgICogQHBhcmFtIHN0cmluZyAkY291bnRlciBUaGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA4IDB4MDAgYnl0ZXMuCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXkgPSAnJywgJGl2ID0gJycsICRjb3VudGVyID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSAhPT0gMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2hhQ2hhMjAgZXhwZWN0cyBhIDI1Ni1iaXQga2V5LicpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRpdikgIT09IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2hhQ2hhMjAgZXhwZWN0cyBhIDY0LWJpdCBub25jZS4nKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lciA9IG5ldyBTcGxGaXhlZEFycmF5KDE2KTsKCiAgICAgICAgLyogImV4cGFuZCAzMi1ieXRlIGsiIGFzIHBlciBDaGFDaGEyMCBzcGVjICovCiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclswXSAgPSAweDYxNzA3ODY1OwogICAgICAgICR0aGlzLT5jb250YWluZXJbMV0gID0gMHgzMzIwNjQ2ZTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzJdICA9IDB4Nzk2MjJkMzI7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclszXSAgPSAweDZiMjA2NTc0OwogICAgICAgICR0aGlzLT5jb250YWluZXJbNF0gID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAwLCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcls1XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDQsIDQpKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzZdICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGtleSwgOCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbN10gID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAxMiwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbOF0gID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAxNiwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbOV0gID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAyMCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMTBdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAyNCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMTFdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAyOCwgNCkpOwoKICAgICAgICBpZiAoZW1wdHkoJGNvdW50ZXIpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbMTJdID0gMDsKICAgICAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxM10gPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbMTJdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkY291bnRlciwgMCwgNCkpOwogICAgICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzEzXSA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGNvdW50ZXIsIDQsIDQpKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxNF0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpdiwgMCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMTVdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaXYsIDQsIDQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQKICAgICAqIEBwYXJhbSBpbnQgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKQogICAgewogICAgICAgIGlmICghaXNfaW50KCRvZmZzZXQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGludGVnZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19pbnQoJHZhbHVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFeHBlY3RlZCBhbiBpbnRlZ2VyJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5jb250YWluZXJbJG9mZnNldF0gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCkKICAgIHsKICAgICAgICB1bnNldCgkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5jb250YWluZXJbJG9mZnNldF0pCiAgICAgICAgICAgID8gJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XQogICAgICAgICAgICA6IG51bGw7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/ChaCha20/IetfCtx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9JZXRmQ3R4JywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjBfSWV0ZkN0eAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0lldGZDdHggZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjBfQ3R4CnsKICAgIC8qKgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0lldGZDdHggY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgQ2hhQ2hhMjAga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkaXYgICAgICBJbml0aWFsaXphdGlvbiBWZWN0b3IgKGEuay5hLiBub25jZSkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudGVyIFRoZSBpbml0aWFsIGNvdW50ZXIgdmFsdWUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIDQgMHgwMCBieXRlcy4KICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGtleSA9ICcnLCAkaXYgPSAnJywgJGNvdW50ZXIgPSAnJykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRpdikgIT09IDEyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0NoYUNoYTIwIGV4cGVjdHMgYSA5Ni1iaXQgbm9uY2UgaW4gSUVURiBtb2RlLicpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRrZXksIHNlbGY6OnN1YnN0cigkaXYsIDAsIDgpLCAkY291bnRlcik7CgogICAgICAgIGlmICghZW1wdHkoJGNvdW50ZXIpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbMTJdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkY291bnRlciwgMCwgNCkpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzEzXSA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGl2LCAwLCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxNF0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpdiwgNCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMTVdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaXYsIDgsIDQpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5JywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOQogKgogKiBJbXBsZW1lbnRzIEN1cnZlMjU1MTkgY29yZSBmdW5jdGlvbnMKICoKICogQmFzZWQgb24gdGhlIHJlZjEwIGN1cnZlMjU1MTkgY29kZSBwcm92aWRlZCBieSBsaWJzb2RpdW0KICoKICogQHJlZiBodHRwczovL2dpdGh1Yi5jb20vamVkaXNjdDEvbGlic29kaXVtL2Jsb2IvbWFzdGVyL3NyYy9saWJzb2RpdW0vY3J5cHRvX2NvcmUvY3VydmUyNTUxOS9yZWYxMC9jdXJ2ZTI1NTE5X3JlZjEwLmMKICovCmFic3RyYWN0IGNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5IGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfSAp7CiAgICAvKioKICAgICAqIEdldCBhIGZpZWxkIGVsZW1lbnQgb2Ygc2l6ZSAxMCB3aXRoIGEgdmFsdWUgb2YgMAogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGZpZWxkIGVsZW1lbnQgb2Ygc2l6ZSAxMCB3aXRoIGEgdmFsdWUgb2YgMQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfMSgpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCB0d28gZmllbGQgZWxlbWVudHMuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRnCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRPcGVyYW5kCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfYWRkKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRnCiAgICApIHsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGFyciAqLwogICAgICAgICRhcnIgPSBhcnJheSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICRhcnJbJGldID0gKGludCkgKCRmWyRpXSArICRnWyRpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KCRhcnIpOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RhbnQtdGltZSBjb25kaXRpb25hbCBtb3ZlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZwogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2Ntb3YoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGcsCiAgICAgICAgJGIgPSAwCiAgICApIHsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGggKi8KICAgICAgICAkaCA9IGFycmF5KCk7CiAgICAgICAgJGIgKj0gLTE7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR4ICovCiAgICAgICAgICAgICR4ID0gKCgkZlskaV0gXiAkZ1skaV0pICYgJGIpOwogICAgICAgICAgICAkaFskaV0gPSAoaW50KSAoKGludCkgKCRmWyRpXSkgXiAkeCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KCRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIGNvcHkgb2YgYSBmaWVsZCBlbGVtZW50LgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9jb3B5KFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgICRoID0gY2xvbmUgJGY7CiAgICAgICAgcmV0dXJuICRoOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZTogMzItYnl0ZSBzdHJpbmcuCiAgICAgKiBSZWNlaXZlOiBBIGZpZWxkIGVsZW1lbnQgb2JqZWN0IHRvIHVzZSBmb3IgaW50ZXJuYWwgY2FsY3VsYXRpb25zLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2Zyb21ieXRlcygkcykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRzKSAhPT0gMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdFeHBlY3RlZCBhIDMyLWJ5dGUgc3RyaW5nLicpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBpbnQgJGgwICovCiAgICAgICAgJGgwID0gc2VsZjo6bG9hZF80KCRzKTsKICAgICAgICAvKiogQHZhciBpbnQgJGgxICovCiAgICAgICAgJGgxID0gc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgNCwgMykpIDw8IDY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMiAqLwogICAgICAgICRoMiA9IHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDcsIDMpKSA8PCA1OwogICAgICAgIC8qKiBAdmFyIGludCAkaDMgKi8KICAgICAgICAkaDMgPSBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAxMCwgMykpIDw8IDM7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoNCAqLwogICAgICAgICRoNCA9IHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDEzLCAzKSkgPDwgMjsKICAgICAgICAvKiogQHZhciBpbnQgJGg1ICovCiAgICAgICAgJGg1ID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMTYsIDQpKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg2ICovCiAgICAgICAgJGg2ID0gc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMjAsIDMpKSA8PCA3OwogICAgICAgIC8qKiBAdmFyIGludCAkaDcgKi8KICAgICAgICAkaDcgPSBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAyMywgMykpIDw8IDU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoOCAqLwogICAgICAgICRoOCA9IHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDI2LCAzKSkgPDwgNDsKICAgICAgICAvKiogQHZhciBpbnQgJGg5ICovCiAgICAgICAgJGg5ID0gKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDI5LCAzKSkgJiA4Mzg4NjA3KSA8PCAyOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OSAqLwogICAgICAgICRjYXJyeTkgPSAoJGg5ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDAgKz0gc2VsZjo6bXVsKCRjYXJyeTksIDE5LCA1KTsKICAgICAgICAkaDkgLT0gJGNhcnJ5OSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MSAqLwogICAgICAgICRjYXJyeTEgPSAoJGgxICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDIgKz0gJGNhcnJ5MTsKICAgICAgICAkaDEgLT0gJGNhcnJ5MSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAoJGgzICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDQgKz0gJGNhcnJ5MzsKICAgICAgICAkaDMgLT0gJGNhcnJ5MyA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAoJGg1ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDYgKz0gJGNhcnJ5NTsKICAgICAgICAkaDUgLT0gJGNhcnJ5NSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJGg3ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDggKz0gJGNhcnJ5NzsKICAgICAgICAkaDcgLT0gJGNhcnJ5NyA8PCAyNTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gKCRoMCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGgxICs9ICRjYXJyeTA7CiAgICAgICAgJGgwIC09ICRjYXJyeTAgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gKCRoMiArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGgzICs9ICRjYXJyeTI7CiAgICAgICAgJGgyIC09ICRjYXJyeTIgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gKCRoNCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg1ICs9ICRjYXJyeTQ7CiAgICAgICAgJGg0IC09ICRjYXJyeTQgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gKCRoNiArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg3ICs9ICRjYXJyeTY7CiAgICAgICAgJGg2IC09ICRjYXJyeTYgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRoOCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg5ICs9ICRjYXJyeTg7CiAgICAgICAgJGg4IC09ICRjYXJyeTggPDwgMjY7CgogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChpbnQpICRoMCwKICAgICAgICAgICAgICAgIChpbnQpICRoMSwKICAgICAgICAgICAgICAgIChpbnQpICRoMiwKICAgICAgICAgICAgICAgIChpbnQpICRoMywKICAgICAgICAgICAgICAgIChpbnQpICRoNCwKICAgICAgICAgICAgICAgIChpbnQpICRoNSwKICAgICAgICAgICAgICAgIChpbnQpICRoNiwKICAgICAgICAgICAgICAgIChpbnQpICRoNywKICAgICAgICAgICAgICAgIChpbnQpICRoOCwKICAgICAgICAgICAgICAgIChpbnQpICRoOQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYSBmaWVsZCBlbGVtZW50IHRvIGEgYnl0ZSBzdHJpbmcuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkaAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV90b2J5dGVzKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRoKQogICAgewogICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAkaDAgPSAoaW50KSAkaFswXTsKICAgICAgICAvKiogQHZhciBpbnQgJGgxICovCiAgICAgICAgJGgxID0gKGludCkgJGhbMV07CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMiAqLwogICAgICAgICRoMiA9IChpbnQpICRoWzJdOwogICAgICAgIC8qKiBAdmFyIGludCAkaDMgKi8KICAgICAgICAkaDMgPSAoaW50KSAkaFszXTsKICAgICAgICAvKiogQHZhciBpbnQgJGg0ICovCiAgICAgICAgJGg0ID0gKGludCkgJGhbNF07CiAgICAgICAgLyoqIEB2YXIgaW50ICRoNSAqLwogICAgICAgICRoNSA9IChpbnQpICRoWzVdOwogICAgICAgIC8qKiBAdmFyIGludCAkaDYgKi8KICAgICAgICAkaDYgPSAoaW50KSAkaFs2XTsKICAgICAgICAvKiogQHZhciBpbnQgJGg3ICovCiAgICAgICAgJGg3ID0gKGludCkgJGhbN107CiAgICAgICAgLyoqIEB2YXIgaW50ICRoOCAqLwogICAgICAgICRoOCA9IChpbnQpICRoWzhdOwogICAgICAgIC8qKiBAdmFyIGludCAkaDkgKi8KICAgICAgICAkaDkgPSAoaW50KSAkaFs5XTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRxICovCiAgICAgICAgJHEgPSAoc2VsZjo6bXVsKCRoOSwgMTksIDUpICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJHEgKi8KICAgICAgICAkcSA9ICgkaDAgKyAkcSkgPj4gMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRxICovCiAgICAgICAgJHEgPSAoJGgxICsgJHEpID4+IDI1OwogICAgICAgIC8qKiBAdmFyIGludCAkcSAqLwogICAgICAgICRxID0gKCRoMiArICRxKSA+PiAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJHEgKi8KICAgICAgICAkcSA9ICgkaDMgKyAkcSkgPj4gMjU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRxICovCiAgICAgICAgJHEgPSAoJGg0ICsgJHEpID4+IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkcSAqLwogICAgICAgICRxID0gKCRoNSArICRxKSA+PiAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJHEgKi8KICAgICAgICAkcSA9ICgkaDYgKyAkcSkgPj4gMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRxICovCiAgICAgICAgJHEgPSAoJGg3ICsgJHEpID4+IDI1OwogICAgICAgIC8qKiBAdmFyIGludCAkcSAqLwogICAgICAgICRxID0gKCRoOCArICRxKSA+PiAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJHEgKi8KICAgICAgICAkcSA9ICgkaDkgKyAkcSkgPj4gMjU7CgogICAgICAgICRoMCArPSBzZWxmOjptdWwoJHEsIDE5LCA1KTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gJGgwID4+IDI2OwogICAgICAgICRoMSArPSAkY2FycnkwOwogICAgICAgICRoMCAtPSAkY2FycnkwIDw8IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxICovCiAgICAgICAgJGNhcnJ5MSA9ICRoMSA+PiAyNTsKICAgICAgICAkaDIgKz0gJGNhcnJ5MTsKICAgICAgICAkaDEgLT0gJGNhcnJ5MSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MiAqLwogICAgICAgICRjYXJyeTIgPSAkaDIgPj4gMjY7CiAgICAgICAgJGgzICs9ICRjYXJyeTI7CiAgICAgICAgJGgyIC09ICRjYXJyeTIgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTMgKi8KICAgICAgICAkY2FycnkzID0gJGgzID4+IDI1OwogICAgICAgICRoNCArPSAkY2FycnkzOwogICAgICAgICRoMyAtPSAkY2FycnkzIDw8IDI1OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk0ICovCiAgICAgICAgJGNhcnJ5NCA9ICRoNCA+PiAyNjsKICAgICAgICAkaDUgKz0gJGNhcnJ5NDsKICAgICAgICAkaDQgLT0gJGNhcnJ5NCA8PCAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAkaDUgPj4gMjU7CiAgICAgICAgJGg2ICs9ICRjYXJyeTU7CiAgICAgICAgJGg1IC09ICRjYXJyeTUgPDwgMjU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gJGg2ID4+IDI2OwogICAgICAgICRoNyArPSAkY2Fycnk2OwogICAgICAgICRoNiAtPSAkY2Fycnk2IDw8IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICRoNyA+PiAyNTsKICAgICAgICAkaDggKz0gJGNhcnJ5NzsKICAgICAgICAkaDcgLT0gJGNhcnJ5NyA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAkaDggPj4gMjY7CiAgICAgICAgJGg5ICs9ICRjYXJyeTg7CiAgICAgICAgJGg4IC09ICRjYXJyeTggPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gJGg5ID4+IDI1OwogICAgICAgICRoOSAtPSAkY2Fycnk5IDw8IDI1OwoKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICAgICAqLwogICAgICAgICRzID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgoJGgwID4+IDApICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgwID4+IDgpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgwID4+IDE2KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCgkaDAgPj4gMjQpIHwgKCRoMSA8PCAyKSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDEgPj4gNikgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDEgPj4gMTQpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoKCRoMSA+PiAyMikgfCAoJGgyIDw8IDMpKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMiA+PiA1KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMiA+PiAxMykgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGgyID4+IDIxKSB8ICgkaDMgPDwgNSkpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgzID4+IDMpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgzID4+IDExKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCgkaDMgPj4gMTkpIHwgKCRoNCA8PCA2KSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDQgPj4gMikgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDQgPj4gMTApICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg0ID4+IDE4KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNSA+PiAwKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNSA+PiA4KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNSA+PiAxNikgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGg1ID4+IDI0KSB8ICgkaDYgPDwgMSkpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg2ID4+IDcpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg2ID4+IDE1KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCgkaDYgPj4gMjMpIHwgKCRoNyA8PCAzKSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDcgPj4gNSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDcgPj4gMTMpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoKCRoNyA+PiAyMSkgfCAoJGg4IDw8IDQpKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoOCA+PiA0KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoOCA+PiAxMikgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGg4ID4+IDIwKSB8ICgkaDkgPDwgNikpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg5ID4+IDIpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg5ID4+IDEwKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoOSA+PiAxOCkgJiAweGZmKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmludEFycmF5VG9TdHJpbmcoJHMpOwogICAgfQoKICAgIC8qKgogICAgICogSXMgYSBmaWVsZCBlbGVtZW50IG5lZ2F0aXZlPyAoMSA9IHllcywgMCA9IG5vLiBVc2VkIGluIGNhbGN1bGF0aW9ucy4pCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2lzbmVnYXRpdmUoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYpCiAgICB7CiAgICAgICAgJHN0ciA9IHNlbGY6OmZlX3RvYnl0ZXMoJGYpOwogICAgICAgIHJldHVybiAoaW50KSAoc2VsZjo6Y2hyVG9JbnQoJHN0clswXSkgJiAxKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgMCBpZiB0aGlzIGZpZWxkIGVsZW1lbnQgcmVzdWx0cyBpbiBhbGwgTlVMIGJ5dGVzLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfaXNub256ZXJvKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgIHN0YXRpYyAkemVybzsKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBzdHJfcmVwZWF0KCJceDAwIiwgMzIpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBzdHJpbmcgJHplcm8gKi8KICAgICAgICAvKiogQHZhciBzdHJpbmcgJHN0ciAqLwogICAgICAgICRzdHIgPSBzZWxmOjpmZV90b2J5dGVzKCRmKTsKICAgICAgICByZXR1cm4gIXNlbGY6OnZlcmlmeV8zMigkc3RyLCAoc3RyaW5nKSAkemVybyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNdWx0aXBseSB0d28gZmllbGQgZWxlbWVudHMKICAgICAqCiAgICAgKiBoID0gZiAqIGcKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHNlY3VyaXR5IElzIG11bHRpcGxpY2F0aW9uIGEgc291cmNlIG9mIHRpbWluZyBsZWFrcz8gSWYgc28sIGNhbiB3ZSBkbwogICAgICogICAgICAgICAgIGFueXRoaW5nIHRvIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZz8KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZwogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX211bCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZiwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZwogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmMCAqLwogICAgICAgICRmMCA9ICRmWzBdOwogICAgICAgIC8qKiBAdmFyIGludCAkZjEgKi8KICAgICAgICAkZjEgPSAkZlsxXTsKICAgICAgICAvKiogQHZhciBpbnQgJGYyICovCiAgICAgICAgJGYyID0gJGZbMl07CiAgICAgICAgLyoqIEB2YXIgaW50ICRmMyAqLwogICAgICAgICRmMyA9ICRmWzNdOwogICAgICAgIC8qKiBAdmFyIGludCAkZjQgKi8KICAgICAgICAkZjQgPSAkZls0XTsKICAgICAgICAvKiogQHZhciBpbnQgJGY1ICovCiAgICAgICAgJGY1ID0gJGZbNV07CiAgICAgICAgLyoqIEB2YXIgaW50ICRmNiAqLwogICAgICAgICRmNiA9ICRmWzZdOwogICAgICAgIC8qKiBAdmFyIGludCAkZjcgKi8KICAgICAgICAkZjcgPSAkZls3XTsKICAgICAgICAvKiogQHZhciBpbnQgJGY4ICovCiAgICAgICAgJGY4ID0gJGZbOF07CiAgICAgICAgLyoqIEB2YXIgaW50ICRmOSAqLwogICAgICAgICRmOSA9ICRmWzldOwogICAgICAgIC8qKiBAdmFyIGludCAkZzAgKi8KICAgICAgICAkZzAgPSAkZ1swXTsKICAgICAgICAvKiogQHZhciBpbnQgJGcxICovCiAgICAgICAgJGcxID0gJGdbMV07CiAgICAgICAgLyoqIEB2YXIgaW50ICRnMiAqLwogICAgICAgICRnMiA9ICRnWzJdOwogICAgICAgIC8qKiBAdmFyIGludCAkZzMgKi8KICAgICAgICAkZzMgPSAkZ1szXTsKICAgICAgICAvKiogQHZhciBpbnQgJGc0ICovCiAgICAgICAgJGc0ID0gJGdbNF07CiAgICAgICAgLyoqIEB2YXIgaW50ICRnNSAqLwogICAgICAgICRnNSA9ICRnWzVdOwogICAgICAgIC8qKiBAdmFyIGludCAkZzYgKi8KICAgICAgICAkZzYgPSAkZ1s2XTsKICAgICAgICAvKiogQHZhciBpbnQgJGc3ICovCiAgICAgICAgJGc3ID0gJGdbN107CiAgICAgICAgLyoqIEB2YXIgaW50ICRnOCAqLwogICAgICAgICRnOCA9ICRnWzhdOwogICAgICAgIC8qKiBAdmFyIGludCAkZzkgKi8KICAgICAgICAkZzkgPSAkZ1s5XTsKICAgICAgICAkZzFfMTkgPSBzZWxmOjptdWwoJGcxLCAxOSwgNSk7CiAgICAgICAgJGcyXzE5ID0gc2VsZjo6bXVsKCRnMiwgMTksIDUpOwogICAgICAgICRnM18xOSA9IHNlbGY6Om11bCgkZzMsIDE5LCA1KTsKICAgICAgICAkZzRfMTkgPSBzZWxmOjptdWwoJGc0LCAxOSwgNSk7CiAgICAgICAgJGc1XzE5ID0gc2VsZjo6bXVsKCRnNSwgMTksIDUpOwogICAgICAgICRnNl8xOSA9IHNlbGY6Om11bCgkZzYsIDE5LCA1KTsKICAgICAgICAkZzdfMTkgPSBzZWxmOjptdWwoJGc3LCAxOSwgNSk7CiAgICAgICAgJGc4XzE5ID0gc2VsZjo6bXVsKCRnOCwgMTksIDUpOwogICAgICAgICRnOV8xOSA9IHNlbGY6Om11bCgkZzksIDE5LCA1KTsKICAgICAgICAvKiogQHZhciBpbnQgJGYxXzIgKi8KICAgICAgICAkZjFfMiA9ICRmMSA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjNfMiAqLwogICAgICAgICRmM18yID0gJGYzIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmNV8yICovCiAgICAgICAgJGY1XzIgPSAkZjUgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGY3XzIgKi8KICAgICAgICAkZjdfMiA9ICRmNyA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjlfMiAqLwogICAgICAgICRmOV8yID0gJGY5IDw8IDE7CiAgICAgICAgJGYwZzAgICAgPSBzZWxmOjptdWwoJGYwLCAgICAkZzAsIDI2KTsKICAgICAgICAkZjBnMSAgICA9IHNlbGY6Om11bCgkZjAsICAgICRnMSwgMjUpOwogICAgICAgICRmMGcyICAgID0gc2VsZjo6bXVsKCRmMCwgICAgJGcyLCAyNik7CiAgICAgICAgJGYwZzMgICAgPSBzZWxmOjptdWwoJGYwLCAgICAkZzMsIDI1KTsKICAgICAgICAkZjBnNCAgICA9IHNlbGY6Om11bCgkZjAsICAgICRnNCwgMjYpOwogICAgICAgICRmMGc1ICAgID0gc2VsZjo6bXVsKCRmMCwgICAgJGc1LCAyNSk7CiAgICAgICAgJGYwZzYgICAgPSBzZWxmOjptdWwoJGYwLCAgICAkZzYsIDI2KTsKICAgICAgICAkZjBnNyAgICA9IHNlbGY6Om11bCgkZjAsICAgICRnNywgMjUpOwogICAgICAgICRmMGc4ICAgID0gc2VsZjo6bXVsKCRmMCwgICAgJGc4LCAyNik7CiAgICAgICAgJGYwZzkgICAgPSBzZWxmOjptdWwoJGYwLCAgICAkZzksIDI2KTsKICAgICAgICAkZjFnMCAgICA9IHNlbGY6Om11bCgkZjEsICAgICRnMCwgMjYpOwogICAgICAgICRmMWcxXzIgID0gc2VsZjo6bXVsKCRmMV8yLCAgJGcxLCAyNSk7CiAgICAgICAgJGYxZzIgICAgPSBzZWxmOjptdWwoJGYxLCAgICAkZzIsIDI2KTsKICAgICAgICAkZjFnM18yICA9IHNlbGY6Om11bCgkZjFfMiwgICRnMywgMjUpOwogICAgICAgICRmMWc0ICAgID0gc2VsZjo6bXVsKCRmMSwgICAgJGc0LCAyNik7CiAgICAgICAgJGYxZzVfMiAgPSBzZWxmOjptdWwoJGYxXzIsICAkZzUsIDI1KTsKICAgICAgICAkZjFnNiAgICA9IHNlbGY6Om11bCgkZjEsICAgICRnNiwgMjYpOwogICAgICAgICRmMWc3XzIgID0gc2VsZjo6bXVsKCRmMV8yLCAgJGc3LCAyNSk7CiAgICAgICAgJGYxZzggICAgPSBzZWxmOjptdWwoJGYxLCAgICAkZzgsIDI2KTsKICAgICAgICAkZjFnOV8zOCA9IHNlbGY6Om11bCgkZzlfMTksICRmMV8yLCAyNik7CiAgICAgICAgJGYyZzAgICAgPSBzZWxmOjptdWwoJGYyLCAgICAkZzAsIDI2KTsKICAgICAgICAkZjJnMSAgICA9IHNlbGY6Om11bCgkZjIsICAgICRnMSwgMjUpOwogICAgICAgICRmMmcyICAgID0gc2VsZjo6bXVsKCRmMiwgICAgJGcyLCAyNik7CiAgICAgICAgJGYyZzMgICAgPSBzZWxmOjptdWwoJGYyLCAgICAkZzMsIDI1KTsKICAgICAgICAkZjJnNCAgICA9IHNlbGY6Om11bCgkZjIsICAgICRnNCwgMjYpOwogICAgICAgICRmMmc1ICAgID0gc2VsZjo6bXVsKCRmMiwgICAgJGc1LCAyNSk7CiAgICAgICAgJGYyZzYgICAgPSBzZWxmOjptdWwoJGYyLCAgICAkZzYsIDI2KTsKICAgICAgICAkZjJnNyAgICA9IHNlbGY6Om11bCgkZjIsICAgICRnNywgMjUpOwogICAgICAgICRmMmc4XzE5ID0gc2VsZjo6bXVsKCRnOF8xOSwgJGYyLCAyNik7CiAgICAgICAgJGYyZzlfMTkgPSBzZWxmOjptdWwoJGc5XzE5LCAkZjIsIDI2KTsKICAgICAgICAkZjNnMCAgICA9IHNlbGY6Om11bCgkZjMsICAgICRnMCwgMjYpOwogICAgICAgICRmM2cxXzIgID0gc2VsZjo6bXVsKCRmM18yLCAgJGcxLCAyNSk7CiAgICAgICAgJGYzZzIgICAgPSBzZWxmOjptdWwoJGYzLCAgICAkZzIsIDI2KTsKICAgICAgICAkZjNnM18yICA9IHNlbGY6Om11bCgkZjNfMiwgICRnMywgMjUpOwogICAgICAgICRmM2c0ICAgID0gc2VsZjo6bXVsKCRmMywgICAgJGc0LCAyNik7CiAgICAgICAgJGYzZzVfMiAgPSBzZWxmOjptdWwoJGYzXzIsICAkZzUsIDI1KTsKICAgICAgICAkZjNnNiAgICA9IHNlbGY6Om11bCgkZjMsICAgICRnNiwgMjYpOwogICAgICAgICRmM2c3XzM4ID0gc2VsZjo6bXVsKCRnN18xOSwgJGYzXzIsIDI2KTsKICAgICAgICAkZjNnOF8xOSA9IHNlbGY6Om11bCgkZzhfMTksICRmMywgMjUpOwogICAgICAgICRmM2c5XzM4ID0gc2VsZjo6bXVsKCRnOV8xOSwgJGYzXzIsIDI2KTsKICAgICAgICAkZjRnMCAgICA9IHNlbGY6Om11bCgkZjQsICAgICRnMCwgMjYpOwogICAgICAgICRmNGcxICAgID0gc2VsZjo6bXVsKCRmNCwgICAgJGcxLCAyNSk7CiAgICAgICAgJGY0ZzIgICAgPSBzZWxmOjptdWwoJGY0LCAgICAkZzIsIDI2KTsKICAgICAgICAkZjRnMyAgICA9IHNlbGY6Om11bCgkZjQsICAgICRnMywgMjUpOwogICAgICAgICRmNGc0ICAgID0gc2VsZjo6bXVsKCRmNCwgICAgJGc0LCAyNik7CiAgICAgICAgJGY0ZzUgICAgPSBzZWxmOjptdWwoJGY0LCAgICAkZzUsIDI1KTsKICAgICAgICAkZjRnNl8xOSA9IHNlbGY6Om11bCgkZzZfMTksICRmNCwgMjYpOwogICAgICAgICRmNGc3XzE5ID0gc2VsZjo6bXVsKCRnN18xOSwgJGY0LCAyNik7CiAgICAgICAgJGY0ZzhfMTkgPSBzZWxmOjptdWwoJGc4XzE5LCAkZjQsIDI2KTsKICAgICAgICAkZjRnOV8xOSA9IHNlbGY6Om11bCgkZzlfMTksICRmNCwgMjYpOwogICAgICAgICRmNWcwICAgID0gc2VsZjo6bXVsKCRmNSwgICAgJGcwLCAyNik7CiAgICAgICAgJGY1ZzFfMiAgPSBzZWxmOjptdWwoJGY1XzIsICAkZzEsIDI1KTsKICAgICAgICAkZjVnMiAgICA9IHNlbGY6Om11bCgkZjUsICAgICRnMiwgMjYpOwogICAgICAgICRmNWczXzIgID0gc2VsZjo6bXVsKCRmNV8yLCAgJGczLCAyNSk7CiAgICAgICAgJGY1ZzQgICAgPSBzZWxmOjptdWwoJGY1LCAgICAkZzQsIDI2KTsKICAgICAgICAkZjVnNV8zOCA9IHNlbGY6Om11bCgkZzVfMTksICRmNV8yLCAyNik7CiAgICAgICAgJGY1ZzZfMTkgPSBzZWxmOjptdWwoJGc2XzE5LCAkZjUsIDI1KTsKICAgICAgICAkZjVnN18zOCA9IHNlbGY6Om11bCgkZzdfMTksICRmNV8yLCAyNik7CiAgICAgICAgJGY1ZzhfMTkgPSBzZWxmOjptdWwoJGc4XzE5LCAkZjUsIDI1KTsKICAgICAgICAkZjVnOV8zOCA9IHNlbGY6Om11bCgkZzlfMTksICRmNV8yLCAyNik7CiAgICAgICAgJGY2ZzAgICAgPSBzZWxmOjptdWwoJGY2LCAgICAkZzAsIDI2KTsKICAgICAgICAkZjZnMSAgICA9IHNlbGY6Om11bCgkZjYsICAgICRnMSwgMjUpOwogICAgICAgICRmNmcyICAgID0gc2VsZjo6bXVsKCRmNiwgICAgJGcyLCAyNik7CiAgICAgICAgJGY2ZzMgICAgPSBzZWxmOjptdWwoJGY2LCAgICAkZzMsIDI1KTsKICAgICAgICAkZjZnNF8xOSA9IHNlbGY6Om11bCgkZzRfMTksICRmNiwgMjYpOwogICAgICAgICRmNmc1XzE5ID0gc2VsZjo6bXVsKCRnNV8xOSwgJGY2LCAyNik7CiAgICAgICAgJGY2ZzZfMTkgPSBzZWxmOjptdWwoJGc2XzE5LCAkZjYsIDI2KTsKICAgICAgICAkZjZnN18xOSA9IHNlbGY6Om11bCgkZzdfMTksICRmNiwgMjYpOwogICAgICAgICRmNmc4XzE5ID0gc2VsZjo6bXVsKCRnOF8xOSwgJGY2LCAyNik7CiAgICAgICAgJGY2ZzlfMTkgPSBzZWxmOjptdWwoJGc5XzE5LCAkZjYsIDI2KTsKICAgICAgICAkZjdnMCAgICA9IHNlbGY6Om11bCgkZjcsICAgICRnMCwgMjYpOwogICAgICAgICRmN2cxXzIgID0gc2VsZjo6bXVsKCRmN18yLCAgJGcxLCAyNSk7CiAgICAgICAgJGY3ZzIgICAgPSBzZWxmOjptdWwoJGY3LCAgICAkZzIsIDI2KTsKICAgICAgICAkZjdnM18zOCA9IHNlbGY6Om11bCgkZzNfMTksICRmN18yLCAyNik7CiAgICAgICAgJGY3ZzRfMTkgPSBzZWxmOjptdWwoJGc0XzE5LCAkZjcsIDI2KTsKICAgICAgICAkZjdnNV8zOCA9IHNlbGY6Om11bCgkZzVfMTksICRmN18yLCAyNik7CiAgICAgICAgJGY3ZzZfMTkgPSBzZWxmOjptdWwoJGc2XzE5LCAkZjcsIDI1KTsKICAgICAgICAkZjdnN18zOCA9IHNlbGY6Om11bCgkZzdfMTksICRmN18yLCAyNik7CiAgICAgICAgJGY3ZzhfMTkgPSBzZWxmOjptdWwoJGc4XzE5LCAkZjcsIDI1KTsKICAgICAgICAkZjdnOV8zOCA9IHNlbGY6Om11bCgkZzlfMTksJGY3XzIsIDI2KTsKICAgICAgICAkZjhnMCAgICA9IHNlbGY6Om11bCgkZjgsICAgICRnMCwgMjYpOwogICAgICAgICRmOGcxICAgID0gc2VsZjo6bXVsKCRmOCwgICAgJGcxLCAyNSk7CiAgICAgICAgJGY4ZzJfMTkgPSBzZWxmOjptdWwoJGcyXzE5LCAkZjgsIDI2KTsKICAgICAgICAkZjhnM18xOSA9IHNlbGY6Om11bCgkZzNfMTksICRmOCwgMjYpOwogICAgICAgICRmOGc0XzE5ID0gc2VsZjo6bXVsKCRnNF8xOSwgJGY4LCAyNik7CiAgICAgICAgJGY4ZzVfMTkgPSBzZWxmOjptdWwoJGc1XzE5LCAkZjgsIDI2KTsKICAgICAgICAkZjhnNl8xOSA9IHNlbGY6Om11bCgkZzZfMTksICRmOCwgMjYpOwogICAgICAgICRmOGc3XzE5ID0gc2VsZjo6bXVsKCRnN18xOSwgJGY4LCAyNik7CiAgICAgICAgJGY4ZzhfMTkgPSBzZWxmOjptdWwoJGc4XzE5LCAkZjgsIDI2KTsKICAgICAgICAkZjhnOV8xOSA9IHNlbGY6Om11bCgkZzlfMTksICRmOCwgMjYpOwogICAgICAgICRmOWcwICAgID0gc2VsZjo6bXVsKCRmOSwgICAgJGcwLCAyNik7CiAgICAgICAgJGY5ZzFfMzggPSBzZWxmOjptdWwoJGcxXzE5LCAkZjlfMiwgMjYpOwogICAgICAgICRmOWcyXzE5ID0gc2VsZjo6bXVsKCRnMl8xOSwgJGY5LCAyNSk7CiAgICAgICAgJGY5ZzNfMzggPSBzZWxmOjptdWwoJGczXzE5LCAkZjlfMiwgMjYpOwogICAgICAgICRmOWc0XzE5ID0gc2VsZjo6bXVsKCRnNF8xOSwgJGY5LCAyNSk7CiAgICAgICAgJGY5ZzVfMzggPSBzZWxmOjptdWwoJGc1XzE5LCAkZjlfMiwgMjYpOwogICAgICAgICRmOWc2XzE5ID0gc2VsZjo6bXVsKCRnNl8xOSwgJGY5LCAyNSk7CiAgICAgICAgJGY5ZzdfMzggPSBzZWxmOjptdWwoJGc3XzE5LCAkZjlfMiwgMjYpOwogICAgICAgICRmOWc4XzE5ID0gc2VsZjo6bXVsKCRnOF8xOSwgJGY5LCAyNSk7CiAgICAgICAgJGY5ZzlfMzggPSBzZWxmOjptdWwoJGc5XzE5LCAkZjlfMiwgMjYpOwogICAgICAgICRoMCA9ICRmMGcwICsgJGYxZzlfMzggKyAkZjJnOF8xOSArICRmM2c3XzM4ICsgJGY0ZzZfMTkgKyAkZjVnNV8zOCArICRmNmc0XzE5ICsgJGY3ZzNfMzggKyAkZjhnMl8xOSArICRmOWcxXzM4OwogICAgICAgICRoMSA9ICRmMGcxICsgJGYxZzAgICAgKyAkZjJnOV8xOSArICRmM2c4XzE5ICsgJGY0ZzdfMTkgKyAkZjVnNl8xOSArICRmNmc1XzE5ICsgJGY3ZzRfMTkgKyAkZjhnM18xOSArICRmOWcyXzE5OwogICAgICAgICRoMiA9ICRmMGcyICsgJGYxZzFfMiAgKyAkZjJnMCAgICArICRmM2c5XzM4ICsgJGY0ZzhfMTkgKyAkZjVnN18zOCArICRmNmc2XzE5ICsgJGY3ZzVfMzggKyAkZjhnNF8xOSArICRmOWczXzM4OwogICAgICAgICRoMyA9ICRmMGczICsgJGYxZzIgICAgKyAkZjJnMSAgICArICRmM2cwICAgICsgJGY0ZzlfMTkgKyAkZjVnOF8xOSArICRmNmc3XzE5ICsgJGY3ZzZfMTkgKyAkZjhnNV8xOSArICRmOWc0XzE5OwogICAgICAgICRoNCA9ICRmMGc0ICsgJGYxZzNfMiAgKyAkZjJnMiAgICArICRmM2cxXzIgICsgJGY0ZzAgICAgKyAkZjVnOV8zOCArICRmNmc4XzE5ICsgJGY3ZzdfMzggKyAkZjhnNl8xOSArICRmOWc1XzM4OwogICAgICAgICRoNSA9ICRmMGc1ICsgJGYxZzQgICAgKyAkZjJnMyAgICArICRmM2cyICAgICsgJGY0ZzEgICAgKyAkZjVnMCAgICArICRmNmc5XzE5ICsgJGY3ZzhfMTkgKyAkZjhnN18xOSArICRmOWc2XzE5OwogICAgICAgICRoNiA9ICRmMGc2ICsgJGYxZzVfMiAgKyAkZjJnNCAgICArICRmM2czXzIgICsgJGY0ZzIgICAgKyAkZjVnMV8yICArICRmNmcwICAgICsgJGY3ZzlfMzggKyAkZjhnOF8xOSArICRmOWc3XzM4OwogICAgICAgICRoNyA9ICRmMGc3ICsgJGYxZzYgICAgKyAkZjJnNSAgICArICRmM2c0ICAgICsgJGY0ZzMgICAgKyAkZjVnMiAgICArICRmNmcxICAgICsgJGY3ZzAgICAgKyAkZjhnOV8xOSArICRmOWc4XzE5OwogICAgICAgICRoOCA9ICRmMGc4ICsgJGYxZzdfMiAgKyAkZjJnNiAgICArICRmM2c1XzIgICsgJGY0ZzQgICAgKyAkZjVnM18yICArICRmNmcyICAgICsgJGY3ZzFfMiAgKyAkZjhnMCAgICArICRmOWc5XzM4OwogICAgICAgICRoOSA9ICRmMGc5ICsgJGYxZzggICAgKyAkZjJnNyAgICArICRmM2c2ICAgICsgJGY0ZzUgICAgKyAkZjVnNCAgICArICRmNmczICAgICsgJGY3ZzIgICAgKyAkZjhnMSAgICArICRmOWcwICAgOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAoJGgwICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDEgKz0gJGNhcnJ5MDsKICAgICAgICAkaDAgLT0gJGNhcnJ5MCA8PCAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NCAqLwogICAgICAgICRjYXJyeTQgPSAoJGg0ICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDUgKz0gJGNhcnJ5NDsKICAgICAgICAkaDQgLT0gJGNhcnJ5NCA8PCAyNjsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEgKi8KICAgICAgICAkY2FycnkxID0gKCRoMSArICgxIDw8IDI0KSkgPj4gMjU7CiAgICAgICAgJGgyICs9ICRjYXJyeTE7CiAgICAgICAgJGgxIC09ICRjYXJyeTEgPDwgMjU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTUgKi8KICAgICAgICAkY2Fycnk1ID0gKCRoNSArICgxIDw8IDI0KSkgPj4gMjU7CiAgICAgICAgJGg2ICs9ICRjYXJyeTU7CiAgICAgICAgJGg1IC09ICRjYXJyeTUgPDwgMjU7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyICovCiAgICAgICAgJGNhcnJ5MiA9ICgkaDIgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoMyArPSAkY2FycnkyOwogICAgICAgICRoMiAtPSAkY2FycnkyIDw8IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk2ICovCiAgICAgICAgJGNhcnJ5NiA9ICgkaDYgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoNyArPSAkY2Fycnk2OwogICAgICAgICRoNiAtPSAkY2Fycnk2IDw8IDI2OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAoJGgzICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDQgKz0gJGNhcnJ5MzsKICAgICAgICAkaDMgLT0gJGNhcnJ5MyA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJGg3ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDggKz0gJGNhcnJ5NzsKICAgICAgICAkaDcgLT0gJGNhcnJ5NyA8PCAyNTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gKCRoNCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg1ICs9ICRjYXJyeTQ7CiAgICAgICAgJGg0IC09ICRjYXJyeTQgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRoOCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg5ICs9ICRjYXJyeTg7CiAgICAgICAgJGg4IC09ICRjYXJyeTggPDwgMjY7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk5ICovCiAgICAgICAgJGNhcnJ5OSA9ICgkaDkgKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoMCArPSBzZWxmOjptdWwoJGNhcnJ5OSwgMTksIDUpOwogICAgICAgICRoOSAtPSAkY2Fycnk5IDw8IDI1OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAoJGgwICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDEgKz0gJGNhcnJ5MDsKICAgICAgICAkaDAgLT0gJGNhcnJ5MCA8PCAyNjsKCiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgKGludCkgJGgwLAogICAgICAgICAgICAgICAgKGludCkgJGgxLAogICAgICAgICAgICAgICAgKGludCkgJGgyLAogICAgICAgICAgICAgICAgKGludCkgJGgzLAogICAgICAgICAgICAgICAgKGludCkgJGg0LAogICAgICAgICAgICAgICAgKGludCkgJGg1LAogICAgICAgICAgICAgICAgKGludCkgJGg2LAogICAgICAgICAgICAgICAgKGludCkgJGg3LAogICAgICAgICAgICAgICAgKGludCkgJGg4LAogICAgICAgICAgICAgICAgKGludCkgJGg5CiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIGVhY2ggcGllY2Ugb2YgdGhlIGZpZWxkIGVsZW1lbnQuCiAgICAgKgogICAgICogaCA9IC1mCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX25lZyhQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZikKICAgIHsKICAgICAgICAkaCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICRoWyRpXSA9IC0kZlskaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaDsKICAgIH0KCiAgICAvKioKICAgICAqIFNxdWFyZSBhIGZpZWxkIGVsZW1lbnQKICAgICAqCiAgICAgKiBoID0gZiAqIGYKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfc3EoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGYpCiAgICB7CiAgICAgICAgJGYwID0gKGludCkgJGZbMF07CiAgICAgICAgJGYxID0gKGludCkgJGZbMV07CiAgICAgICAgJGYyID0gKGludCkgJGZbMl07CiAgICAgICAgJGYzID0gKGludCkgJGZbM107CiAgICAgICAgJGY0ID0gKGludCkgJGZbNF07CiAgICAgICAgJGY1ID0gKGludCkgJGZbNV07CiAgICAgICAgJGY2ID0gKGludCkgJGZbNl07CiAgICAgICAgJGY3ID0gKGludCkgJGZbN107CiAgICAgICAgJGY4ID0gKGludCkgJGZbOF07CiAgICAgICAgJGY5ID0gKGludCkgJGZbOV07CgogICAgICAgIC8qKiBAdmFyIGludCAkZjBfMiAqLwogICAgICAgICRmMF8yID0gJGYwIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmMV8yICovCiAgICAgICAgJGYxXzIgPSAkZjEgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGYyXzIgKi8KICAgICAgICAkZjJfMiA9ICRmMiA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjNfMiAqLwogICAgICAgICRmM18yID0gJGYzIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmNF8yICovCiAgICAgICAgJGY0XzIgPSAkZjQgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGY1XzIgKi8KICAgICAgICAkZjVfMiA9ICRmNSA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjZfMiAqLwogICAgICAgICRmNl8yID0gJGY2IDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmN18yICovCiAgICAgICAgJGY3XzIgPSAkZjcgPDwgMTsKICAgICAgICAkZjVfMzggPSBzZWxmOjptdWwoJGY1LCAzOCwgNik7CiAgICAgICAgJGY2XzE5ID0gc2VsZjo6bXVsKCRmNiwgMTksIDUpOwogICAgICAgICRmN18zOCA9IHNlbGY6Om11bCgkZjcsIDM4LCA2KTsKICAgICAgICAkZjhfMTkgPSBzZWxmOjptdWwoJGY4LCAxOSwgNSk7CiAgICAgICAgJGY5XzM4ID0gc2VsZjo6bXVsKCRmOSwgMzgsIDYpOwogICAgICAgICRmMGYwICAgID0gc2VsZjo6bXVsKCRmMCwgICAgJGYwLCAgICAyNSk7CiAgICAgICAgJGYwZjFfMiAgPSBzZWxmOjptdWwoJGYwXzIsICAkZjEsICAgIDI0KTsKICAgICAgICAkZjBmMl8yICA9IHNlbGY6Om11bCgkZjBfMiwgICRmMiwgICAgMjUpOwogICAgICAgICRmMGYzXzIgID0gc2VsZjo6bXVsKCRmMF8yLCAgJGYzLCAgICAyNCk7CiAgICAgICAgJGYwZjRfMiAgPSBzZWxmOjptdWwoJGYwXzIsICAkZjQsICAgIDI1KTsKICAgICAgICAkZjBmNV8yICA9IHNlbGY6Om11bCgkZjBfMiwgICRmNSwgICAgMjUpOwogICAgICAgICRmMGY2XzIgID0gc2VsZjo6bXVsKCRmMF8yLCAgJGY2LCAgICAyNSk7CiAgICAgICAgJGYwZjdfMiAgPSBzZWxmOjptdWwoJGYwXzIsICAkZjcsICAgIDI0KTsKICAgICAgICAkZjBmOF8yICA9IHNlbGY6Om11bCgkZjBfMiwgICRmOCwgICAgMjUpOwogICAgICAgICRmMGY5XzIgID0gc2VsZjo6bXVsKCRmMF8yLCAgJGY5LCAgICAyNSk7CiAgICAgICAgJGYxZjFfMiAgPSBzZWxmOjptdWwoJGYxXzIsICAkZjEsICAgIDI0KTsKICAgICAgICAkZjFmMl8yICA9IHNlbGY6Om11bCgkZjFfMiwgICRmMiwgICAgMjUpOwogICAgICAgICRmMWYzXzQgID0gc2VsZjo6bXVsKCRmMV8yLCAgJGYzXzIsICAyNSk7CiAgICAgICAgJGYxZjRfMiAgPSBzZWxmOjptdWwoJGYxXzIsICAkZjQsICAgIDI1KTsKICAgICAgICAkZjFmNV80ICA9IHNlbGY6Om11bCgkZjFfMiwgICRmNV8yLCAgMjYpOwogICAgICAgICRmMWY2XzIgID0gc2VsZjo6bXVsKCRmMV8yLCAgJGY2LCAgICAyNSk7CiAgICAgICAgJGYxZjdfNCAgPSBzZWxmOjptdWwoJGYxXzIsICAkZjdfMiwgIDI1KTsKICAgICAgICAkZjFmOF8yICA9IHNlbGY6Om11bCgkZjFfMiwgICRmOCwgICAgMjUpOwogICAgICAgICRmMWY5Xzc2ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGYxXzIsICAyNSk7CiAgICAgICAgJGYyZjIgICAgPSBzZWxmOjptdWwoJGYyLCAgICAkZjIsICAgIDI1KTsKICAgICAgICAkZjJmM18yICA9IHNlbGY6Om11bCgkZjJfMiwgICRmMywgICAgMjQpOwogICAgICAgICRmMmY0XzIgID0gc2VsZjo6bXVsKCRmMl8yLCAgJGY0LCAgICAyNSk7CiAgICAgICAgJGYyZjVfMiAgPSBzZWxmOjptdWwoJGYyXzIsICAkZjUsICAgIDI1KTsKICAgICAgICAkZjJmNl8yICA9IHNlbGY6Om11bCgkZjJfMiwgICRmNiwgICAgMjUpOwogICAgICAgICRmMmY3XzIgID0gc2VsZjo6bXVsKCRmMl8yLCAgJGY3LCAgICAyNCk7CiAgICAgICAgJGYyZjhfMzggPSBzZWxmOjptdWwoJGY4XzE5LCAkZjJfMiwgIDI2KTsKICAgICAgICAkZjJmOV8zOCA9IHNlbGY6Om11bCgkZjlfMzgsICRmMiwgICAgMjUpOwogICAgICAgICRmM2YzXzIgID0gc2VsZjo6bXVsKCRmM18yLCAgJGYzLCAgICAyNCk7CiAgICAgICAgJGYzZjRfMiAgPSBzZWxmOjptdWwoJGYzXzIsICAkZjQsICAgIDI1KTsKICAgICAgICAkZjNmNV80ICA9IHNlbGY6Om11bCgkZjNfMiwgICRmNV8yLCAgMjYpOwogICAgICAgICRmM2Y2XzIgID0gc2VsZjo6bXVsKCRmM18yLCAgJGY2LCAgICAyNSk7CiAgICAgICAgJGYzZjdfNzYgPSBzZWxmOjptdWwoJGY3XzM4LCAkZjNfMiwgIDI1KTsKICAgICAgICAkZjNmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmM18yLCAgMjUpOwogICAgICAgICRmM2Y5Xzc2ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGYzXzIsICAyNSk7CiAgICAgICAgJGY0ZjQgICAgPSBzZWxmOjptdWwoJGY0LCAgICAkZjQsICAgIDI1KTsKICAgICAgICAkZjRmNV8yICA9IHNlbGY6Om11bCgkZjRfMiwgICRmNSwgICAgMjUpOwogICAgICAgICRmNGY2XzM4ID0gc2VsZjo6bXVsKCRmNl8xOSwgJGY0XzIsICAyNik7CiAgICAgICAgJGY0ZjdfMzggPSBzZWxmOjptdWwoJGY3XzM4LCAkZjQsICAgIDI1KTsKICAgICAgICAkZjRmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmNF8yLCAgMjYpOwogICAgICAgICRmNGY5XzM4ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY0LCAgICAyNSk7CiAgICAgICAgJGY1ZjVfMzggPSBzZWxmOjptdWwoJGY1XzM4LCAkZjUsICAgIDI1KTsKICAgICAgICAkZjVmNl8zOCA9IHNlbGY6Om11bCgkZjZfMTksICRmNV8yLCAgMjYpOwogICAgICAgICRmNWY3Xzc2ID0gc2VsZjo6bXVsKCRmN18zOCwgJGY1XzIsICAyNik7CiAgICAgICAgJGY1ZjhfMzggPSBzZWxmOjptdWwoJGY4XzE5LCAkZjVfMiwgIDI2KTsKICAgICAgICAkZjVmOV83NiA9IHNlbGY6Om11bCgkZjlfMzgsICRmNV8yLCAgMjYpOwogICAgICAgICRmNmY2XzE5ID0gc2VsZjo6bXVsKCRmNl8xOSwgJGY2LCAgICAyNSk7CiAgICAgICAgJGY2ZjdfMzggPSBzZWxmOjptdWwoJGY3XzM4LCAkZjYsICAgIDI1KTsKICAgICAgICAkZjZmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmNl8yLCAgMjYpOwogICAgICAgICRmNmY5XzM4ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY2LCAgICAyNSk7CiAgICAgICAgJGY3ZjdfMzggPSBzZWxmOjptdWwoJGY3XzM4LCAkZjcsICAgIDI0KTsKICAgICAgICAkZjdmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmN18yLCAgMjUpOwogICAgICAgICRmN2Y5Xzc2ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY3XzIsICAyNSk7CiAgICAgICAgJGY4ZjhfMTkgPSBzZWxmOjptdWwoJGY4XzE5LCAkZjgsICAgIDI1KTsKICAgICAgICAkZjhmOV8zOCA9IHNlbGY6Om11bCgkZjlfMzgsICRmOCwgICAgMjUpOwogICAgICAgICRmOWY5XzM4ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY5LCAgICAyNSk7CiAgICAgICAgJGgwID0gJGYwZjAgICArICRmMWY5Xzc2ICsgJGYyZjhfMzggKyAkZjNmN183NiArICRmNGY2XzM4ICsgJGY1ZjVfMzg7CiAgICAgICAgJGgxID0gJGYwZjFfMiArICRmMmY5XzM4ICsgJGYzZjhfMzggKyAkZjRmN18zOCArICRmNWY2XzM4OwogICAgICAgICRoMiA9ICRmMGYyXzIgKyAkZjFmMV8yICArICRmM2Y5Xzc2ICsgJGY0ZjhfMzggKyAkZjVmN183NiArICRmNmY2XzE5OwogICAgICAgICRoMyA9ICRmMGYzXzIgKyAkZjFmMl8yICArICRmNGY5XzM4ICsgJGY1ZjhfMzggKyAkZjZmN18zODsKICAgICAgICAkaDQgPSAkZjBmNF8yICsgJGYxZjNfNCAgKyAkZjJmMiAgICArICRmNWY5Xzc2ICsgJGY2ZjhfMzggKyAkZjdmN18zODsKICAgICAgICAkaDUgPSAkZjBmNV8yICsgJGYxZjRfMiAgKyAkZjJmM18yICArICRmNmY5XzM4ICsgJGY3ZjhfMzg7CiAgICAgICAgJGg2ID0gJGYwZjZfMiArICRmMWY1XzQgICsgJGYyZjRfMiAgKyAkZjNmM18yICArICRmN2Y5Xzc2ICsgJGY4ZjhfMTk7CiAgICAgICAgJGg3ID0gJGYwZjdfMiArICRmMWY2XzIgICsgJGYyZjVfMiAgKyAkZjNmNF8yICArICRmOGY5XzM4OwogICAgICAgICRoOCA9ICRmMGY4XzIgKyAkZjFmN180ICArICRmMmY2XzIgICsgJGYzZjVfNCAgKyAkZjRmNCAgICArICRmOWY5XzM4OwogICAgICAgICRoOSA9ICRmMGY5XzIgKyAkZjFmOF8yICArICRmMmY3XzIgICsgJGYzZjZfMiAgKyAkZjRmNV8yOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAoJGgwICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDEgKz0gJGNhcnJ5MDsKICAgICAgICAkaDAgLT0gJGNhcnJ5MCA8PCAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NCAqLwogICAgICAgICRjYXJyeTQgPSAoJGg0ICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDUgKz0gJGNhcnJ5NDsKICAgICAgICAkaDQgLT0gJGNhcnJ5NCA8PCAyNjsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEgKi8KICAgICAgICAkY2FycnkxID0gKCRoMSArICgxIDw8IDI0KSkgPj4gMjU7CiAgICAgICAgJGgyICs9ICRjYXJyeTE7CiAgICAgICAgJGgxIC09ICRjYXJyeTEgPDwgMjU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTUgKi8KICAgICAgICAkY2Fycnk1ID0gKCRoNSArICgxIDw8IDI0KSkgPj4gMjU7CiAgICAgICAgJGg2ICs9ICRjYXJyeTU7CiAgICAgICAgJGg1IC09ICRjYXJyeTUgPDwgMjU7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyICovCiAgICAgICAgJGNhcnJ5MiA9ICgkaDIgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoMyArPSAkY2FycnkyOwogICAgICAgICRoMiAtPSAkY2FycnkyIDw8IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk2ICovCiAgICAgICAgJGNhcnJ5NiA9ICgkaDYgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoNyArPSAkY2Fycnk2OwogICAgICAgICRoNiAtPSAkY2Fycnk2IDw8IDI2OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAoJGgzICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDQgKz0gJGNhcnJ5MzsKICAgICAgICAkaDMgLT0gJGNhcnJ5MyA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJGg3ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDggKz0gJGNhcnJ5NzsKICAgICAgICAkaDcgLT0gJGNhcnJ5NyA8PCAyNTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gKCRoNCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg1ICs9ICRjYXJyeTQ7CiAgICAgICAgJGg0IC09ICRjYXJyeTQgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRoOCArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg5ICs9ICRjYXJyeTg7CiAgICAgICAgJGg4IC09ICRjYXJyeTggPDwgMjY7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk5ICovCiAgICAgICAgJGNhcnJ5OSA9ICgkaDkgKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoMCArPSBzZWxmOjptdWwoJGNhcnJ5OSwgMTksIDUpOwogICAgICAgICRoOSAtPSAkY2Fycnk5IDw8IDI1OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAoJGgwICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDEgKz0gJGNhcnJ5MDsKICAgICAgICAkaDAgLT0gJGNhcnJ5MCA8PCAyNjsKCiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgKGludCkgJGgwLAogICAgICAgICAgICAgICAgKGludCkgJGgxLAogICAgICAgICAgICAgICAgKGludCkgJGgyLAogICAgICAgICAgICAgICAgKGludCkgJGgzLAogICAgICAgICAgICAgICAgKGludCkgJGg0LAogICAgICAgICAgICAgICAgKGludCkgJGg1LAogICAgICAgICAgICAgICAgKGludCkgJGg2LAogICAgICAgICAgICAgICAgKGludCkgJGg3LAogICAgICAgICAgICAgICAgKGludCkgJGg4LAogICAgICAgICAgICAgICAgKGludCkgJGg5CiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKCiAgICAvKioKICAgICAqIFNxdWFyZSBhbmQgZG91YmxlIGEgZmllbGQgZWxlbWVudAogICAgICoKICAgICAqIGggPSAyICogZiAqIGYKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfc3EyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgICRmMCA9IChpbnQpICRmWzBdOwogICAgICAgICRmMSA9IChpbnQpICRmWzFdOwogICAgICAgICRmMiA9IChpbnQpICRmWzJdOwogICAgICAgICRmMyA9IChpbnQpICRmWzNdOwogICAgICAgICRmNCA9IChpbnQpICRmWzRdOwogICAgICAgICRmNSA9IChpbnQpICRmWzVdOwogICAgICAgICRmNiA9IChpbnQpICRmWzZdOwogICAgICAgICRmNyA9IChpbnQpICRmWzddOwogICAgICAgICRmOCA9IChpbnQpICRmWzhdOwogICAgICAgICRmOSA9IChpbnQpICRmWzldOwoKICAgICAgICAvKiogQHZhciBpbnQgJGYwXzIgKi8KICAgICAgICAkZjBfMiA9ICRmMCA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjFfMiAqLwogICAgICAgICRmMV8yID0gJGYxIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmMl8yICovCiAgICAgICAgJGYyXzIgPSAkZjIgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGYzXzIgKi8KICAgICAgICAkZjNfMiA9ICRmMyA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjRfMiAqLwogICAgICAgICRmNF8yID0gJGY0IDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRmNV8yICovCiAgICAgICAgJGY1XzIgPSAkZjUgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGY2XzIgKi8KICAgICAgICAkZjZfMiA9ICRmNiA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkZjdfMiAqLwogICAgICAgICRmN18yID0gJGY3IDw8IDE7CiAgICAgICAgJGY1XzM4ID0gc2VsZjo6bXVsKCRmNSwgMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY2XzE5ID0gc2VsZjo6bXVsKCRmNiwgMTksIDUpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY3XzM4ID0gc2VsZjo6bXVsKCRmNywgMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY4XzE5ID0gc2VsZjo6bXVsKCRmOCwgMTksIDUpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY5XzM4ID0gc2VsZjo6bXVsKCRmOSwgMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGYwZjAgPSBzZWxmOjptdWwoJGYwLCAkZjAsIDI0KTsKICAgICAgICAkZjBmMV8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjEsIDI0KTsKICAgICAgICAkZjBmMl8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjIsIDI0KTsKICAgICAgICAkZjBmM18yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjMsIDI0KTsKICAgICAgICAkZjBmNF8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjQsIDI0KTsKICAgICAgICAkZjBmNV8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjUsIDI0KTsKICAgICAgICAkZjBmNl8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjYsIDI0KTsKICAgICAgICAkZjBmN18yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjcsIDI0KTsKICAgICAgICAkZjBmOF8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjgsIDI0KTsKICAgICAgICAkZjBmOV8yID0gc2VsZjo6bXVsKCRmMF8yLCAkZjksIDI0KTsKICAgICAgICAkZjFmMV8yID0gc2VsZjo6bXVsKCRmMV8yLCAgJGYxLCAyNCk7CiAgICAgICAgJGYxZjJfMiA9IHNlbGY6Om11bCgkZjFfMiwgICRmMiwgMjQpOwogICAgICAgICRmMWYzXzQgPSBzZWxmOjptdWwoJGYxXzIsICAkZjNfMiwgMjQpOwogICAgICAgICRmMWY0XzIgPSBzZWxmOjptdWwoJGYxXzIsICAkZjQsIDI0KTsKICAgICAgICAkZjFmNV80ID0gc2VsZjo6bXVsKCRmMV8yLCAgJGY1XzIsIDI0KTsKICAgICAgICAkZjFmNl8yID0gc2VsZjo6bXVsKCRmMV8yLCAgJGY2LCAyNCk7CiAgICAgICAgJGYxZjdfNCA9IHNlbGY6Om11bCgkZjFfMiwgICRmN18yLCAyNCk7CiAgICAgICAgJGYxZjhfMiA9IHNlbGY6Om11bCgkZjFfMiwgICRmOCwgMjQpOwogICAgICAgICRmMWY5Xzc2ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGYxXzIsIDI0KTsKICAgICAgICAkZjJmMiA9IHNlbGY6Om11bCgkZjIsICAkZjIsIDI0KTsKICAgICAgICAkZjJmM18yID0gc2VsZjo6bXVsKCRmMl8yLCAgJGYzLCAyNCk7CiAgICAgICAgJGYyZjRfMiA9IHNlbGY6Om11bCgkZjJfMiwgICRmNCwgMjQpOwogICAgICAgICRmMmY1XzIgPSBzZWxmOjptdWwoJGYyXzIsICAkZjUsIDI0KTsKICAgICAgICAkZjJmNl8yID0gc2VsZjo6bXVsKCRmMl8yLCAgJGY2LCAyNCk7CiAgICAgICAgJGYyZjdfMiA9IHNlbGY6Om11bCgkZjJfMiwgICRmNywgMjQpOwogICAgICAgICRmMmY4XzM4ID0gc2VsZjo6bXVsKCRmOF8xOSwgJGYyXzIsIDI1KTsKICAgICAgICAkZjJmOV8zOCA9IHNlbGY6Om11bCgkZjlfMzgsICRmMiwgMjQpOwogICAgICAgICRmM2YzXzIgPSBzZWxmOjptdWwoJGYzXzIsICAkZjMsIDI0KTsKICAgICAgICAkZjNmNF8yID0gc2VsZjo6bXVsKCRmM18yLCAgJGY0LCAyNCk7CiAgICAgICAgJGYzZjVfNCA9IHNlbGY6Om11bCgkZjNfMiwgICRmNV8yLCAyNCk7CiAgICAgICAgJGYzZjZfMiA9IHNlbGY6Om11bCgkZjNfMiwgICRmNiwgMjQpOwogICAgICAgICRmM2Y3Xzc2ID0gc2VsZjo6bXVsKCRmN18zOCwgJGYzXzIsIDI0KTsKICAgICAgICAkZjNmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmM18yLCAyNCk7CiAgICAgICAgJGYzZjlfNzYgPSBzZWxmOjptdWwoJGY5XzM4LCAkZjNfMiwgMjQpOwogICAgICAgICRmNGY0ID0gc2VsZjo6bXVsKCRmNCwgICRmNCwgMjQpOwogICAgICAgICRmNGY1XzIgPSBzZWxmOjptdWwoJGY0XzIsICAkZjUsIDI0KTsKICAgICAgICAkZjRmNl8zOCA9IHNlbGY6Om11bCgkZjZfMTksICRmNF8yLCAyNSk7CiAgICAgICAgJGY0ZjdfMzggPSBzZWxmOjptdWwoJGY3XzM4LCAkZjQsIDI0KTsKICAgICAgICAkZjRmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmNF8yLCAyNSk7CiAgICAgICAgJGY0ZjlfMzggPSBzZWxmOjptdWwoJGY5XzM4LCAkZjQsIDI0KTsKICAgICAgICAkZjVmNV8zOCA9IHNlbGY6Om11bCgkZjVfMzgsICRmNSwgMjQpOwogICAgICAgICRmNWY2XzM4ID0gc2VsZjo6bXVsKCRmNl8xOSwgJGY1XzIsIDI0KTsKICAgICAgICAkZjVmN183NiA9IHNlbGY6Om11bCgkZjdfMzgsICRmNV8yLCAyNCk7CiAgICAgICAgJGY1ZjhfMzggPSBzZWxmOjptdWwoJGY4XzE5LCAkZjVfMiwgMjQpOwogICAgICAgICRmNWY5Xzc2ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY1XzIsIDI0KTsKICAgICAgICAkZjZmNl8xOSA9IHNlbGY6Om11bCgkZjZfMTksICRmNiwgMjQpOwogICAgICAgICRmNmY3XzM4ID0gc2VsZjo6bXVsKCRmN18zOCwgJGY2LCAyNCk7CiAgICAgICAgJGY2ZjhfMzggPSBzZWxmOjptdWwoJGY4XzE5LCAkZjZfMiwgMjUpOwogICAgICAgICRmNmY5XzM4ID0gc2VsZjo6bXVsKCRmOV8zOCwgJGY2LCAyNCk7CiAgICAgICAgJGY3ZjdfMzggPSBzZWxmOjptdWwoJGY3XzM4LCAkZjcsIDI0KTsKICAgICAgICAkZjdmOF8zOCA9IHNlbGY6Om11bCgkZjhfMTksICRmN18yLCAyNCk7CiAgICAgICAgJGY3ZjlfNzYgPSBzZWxmOjptdWwoJGY5XzM4LCAkZjdfMiwgMjQpOwogICAgICAgICRmOGY4XzE5ID0gc2VsZjo6bXVsKCRmOF8xOSwgJGY4LCAyNCk7CiAgICAgICAgJGY4ZjlfMzggPSBzZWxmOjptdWwoJGY5XzM4LCAkZjgsIDI0KTsKICAgICAgICAkZjlmOV8zOCA9IHNlbGY6Om11bCgkZjlfMzgsICRmOSwgMjQpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGgwICovCiAgICAgICAgJGgwID0gKGludCkgKCRmMGYwICsgJGYxZjlfNzYgKyAkZjJmOF8zOCArICRmM2Y3Xzc2ICsgJGY0ZjZfMzggKyAkZjVmNV8zOCkgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGgxICovCiAgICAgICAgJGgxID0gKGludCkgKCRmMGYxXzIgKyAkZjJmOV8zOCArICRmM2Y4XzM4ICsgJGY0ZjdfMzggKyAkZjVmNl8zOCkgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGgyICovCiAgICAgICAgJGgyID0gKGludCkgKCRmMGYyXzIgKyAkZjFmMV8yICArICRmM2Y5Xzc2ICsgJGY0ZjhfMzggKyAkZjVmN183NiArICRmNmY2XzE5KSA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkaDMgKi8KICAgICAgICAkaDMgPSAoaW50KSAoJGYwZjNfMiArICRmMWYyXzIgICsgJGY0ZjlfMzggKyAkZjVmOF8zOCArICRmNmY3XzM4KSA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkaDQgKi8KICAgICAgICAkaDQgPSAoaW50KSAoJGYwZjRfMiArICRmMWYzXzQgICsgJGYyZjIgICAgKyAkZjVmOV83NiArICRmNmY4XzM4ICsgJGY3ZjdfMzgpIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoNSAqLwogICAgICAgICRoNSA9IChpbnQpICgkZjBmNV8yICsgJGYxZjRfMiAgKyAkZjJmM18yICArICRmNmY5XzM4ICsgJGY3ZjhfMzgpIDw8IDE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoNiAqLwogICAgICAgICRoNiA9IChpbnQpICgkZjBmNl8yICsgJGYxZjVfNCAgKyAkZjJmNF8yICArICRmM2YzXzIgICsgJGY3ZjlfNzYgKyAkZjhmOF8xOSkgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGg3ICovCiAgICAgICAgJGg3ID0gKGludCkgKCRmMGY3XzIgKyAkZjFmNl8yICArICRmMmY1XzIgICsgJGYzZjRfMiAgKyAkZjhmOV8zOCkgPDwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJGg4ICovCiAgICAgICAgJGg4ID0gKGludCkgKCRmMGY4XzIgKyAkZjFmN180ICArICRmMmY2XzIgICsgJGYzZjVfNCAgKyAkZjRmNCAgICArICRmOWY5XzM4KSA8PCAxOwogICAgICAgIC8qKiBAdmFyIGludCAkaDkgKi8KICAgICAgICAkaDkgPSAoaW50KSAoJGYwZjlfMiArICRmMWY4XzIgICsgJGYyZjdfMiAgKyAkZjNmNl8yICArICRmNGY1XzIpIDw8IDE7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkwICovCiAgICAgICAgJGNhcnJ5MCA9ICgkaDAgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoMSArPSAkY2FycnkwOwogICAgICAgICRoMCAtPSAkY2FycnkwIDw8IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk0ICovCiAgICAgICAgJGNhcnJ5NCA9ICgkaDQgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoNSArPSAkY2Fycnk0OwogICAgICAgICRoNCAtPSAkY2Fycnk0IDw8IDI2OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MSAqLwogICAgICAgICRjYXJyeTEgPSAoJGgxICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDIgKz0gJGNhcnJ5MTsKICAgICAgICAkaDEgLT0gJGNhcnJ5MSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAoJGg1ICsgKDEgPDwgMjQpKSA+PiAyNTsKICAgICAgICAkaDYgKz0gJGNhcnJ5NTsKICAgICAgICAkaDUgLT0gJGNhcnJ5NSA8PCAyNTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gKCRoMiArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGgzICs9ICRjYXJyeTI7CiAgICAgICAgJGgyIC09ICRjYXJyeTIgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gKCRoNiArICgxIDw8IDI1KSkgPj4gMjY7CiAgICAgICAgJGg3ICs9ICRjYXJyeTY7CiAgICAgICAgJGg2IC09ICRjYXJyeTYgPDwgMjY7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkzICovCiAgICAgICAgJGNhcnJ5MyA9ICgkaDMgKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoNCArPSAkY2FycnkzOwogICAgICAgICRoMyAtPSAkY2FycnkzIDw8IDI1OwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICgkaDcgKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoOCArPSAkY2Fycnk3OwogICAgICAgICRoNyAtPSAkY2Fycnk3IDw8IDI1OwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NCAqLwogICAgICAgICRjYXJyeTQgPSAoJGg0ICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDUgKz0gJGNhcnJ5NDsKICAgICAgICAkaDQgLT0gJGNhcnJ5NCA8PCAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAoJGg4ICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaDkgKz0gJGNhcnJ5ODsKICAgICAgICAkaDggLT0gJGNhcnJ5OCA8PCAyNjsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gKCRoOSArICgxIDw8IDI0KSkgPj4gMjU7CiAgICAgICAgJGgwICs9IHNlbGY6Om11bCgkY2Fycnk5LCAxOSwgNSk7CiAgICAgICAgJGg5IC09ICRjYXJyeTkgPDwgMjU7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkwICovCiAgICAgICAgJGNhcnJ5MCA9ICgkaDAgKyAoMSA8PCAyNSkpID4+IDI2OwogICAgICAgICRoMSArPSAkY2FycnkwOwogICAgICAgICRoMCAtPSAkY2FycnkwIDw8IDI2OwoKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAoaW50KSAkaDAsCiAgICAgICAgICAgICAgICAoaW50KSAkaDEsCiAgICAgICAgICAgICAgICAoaW50KSAkaDIsCiAgICAgICAgICAgICAgICAoaW50KSAkaDMsCiAgICAgICAgICAgICAgICAoaW50KSAkaDQsCiAgICAgICAgICAgICAgICAoaW50KSAkaDUsCiAgICAgICAgICAgICAgICAoaW50KSAkaDYsCiAgICAgICAgICAgICAgICAoaW50KSAkaDcsCiAgICAgICAgICAgICAgICAoaW50KSAkaDgsCiAgICAgICAgICAgICAgICAoaW50KSAkaDkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRaCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfaW52ZXJ0KFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRaKQogICAgewogICAgICAgICR6ID0gY2xvbmUgJFo7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfc3EoJHopOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9tdWwoJHosICR0MSk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MCwgJHQxKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDApOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDEsICR0Mik7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1OyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAxMDsgKyskaSkgewogICAgICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIH0KICAgICAgICAkdDIgPSBzZWxmOjpmZV9tdWwoJHQyLCAkdDEpOwogICAgICAgICR0MyA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMjA7ICsrJGkpIHsKICAgICAgICAgICAgJHQzID0gc2VsZjo6ZmVfc3EoJHQzKTsKICAgICAgICB9CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfbXVsKCR0MywgJHQyKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1MDsgKyskaSkgewogICAgICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIH0KICAgICAgICAkdDIgPSBzZWxmOjpmZV9tdWwoJHQyLCAkdDEpOwogICAgICAgICR0MyA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTAwOyArKyRpKSB7CiAgICAgICAgICAgICR0MyA9IHNlbGY6OmZlX3NxKCR0Myk7CiAgICAgICAgfQogICAgICAgICR0MiA9IHNlbGY6OmZlX211bCgkdDMsICR0Mik7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1MDsgKyskaSkgewogICAgICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIH0KICAgICAgICAkdDEgPSBzZWxmOjpmZV9tdWwoJHQyLCAkdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgNTsgKyskaSkgewogICAgICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9qZWRpc2N0MS9saWJzb2RpdW0vYmxvYi82ODU2NDMyNmUxZTlkYzU3ZWYwMzc0NmY4NTczNDIzMmQyMGNhNmZiL3NyYy9saWJzb2RpdW0vY3J5cHRvX2NvcmUvY3VydmUyNTUxOS9yZWYxMC9jdXJ2ZTI1NTE5X3JlZjEwLmMjTDEwNTQtTDExMDYKICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHoKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9wb3cyMjUyMyhQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeikKICAgIHsKICAgICAgICAjIGZlX3NxKHQwLCB6KTsKICAgICAgICAjIGZlX3NxKHQxLCB0MCk7CiAgICAgICAgIyBmZV9zcSh0MSwgdDEpOwogICAgICAgICMgZmVfbXVsKHQxLCB6LCB0MSk7CiAgICAgICAgIyBmZV9tdWwodDAsIHQwLCB0MSk7CiAgICAgICAgIyBmZV9zcSh0MCwgdDApOwogICAgICAgICMgZmVfbXVsKHQwLCB0MSwgdDApOwogICAgICAgICMgZmVfc3EodDEsIHQwKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9zcSgkeik7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQwKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkeiwgJHQxKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9tdWwoJHQwLCAkdDEpOwogICAgICAgICR0MCA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDApOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCA1OyArK2kpIHsKICAgICAgICAjICAgICBmZV9zcSh0MSwgdDEpOwogICAgICAgICMgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDU7ICsrJGkpIHsKICAgICAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICB9CgogICAgICAgICMgZmVfbXVsKHQwLCB0MSwgdDApOwogICAgICAgICMgZmVfc3EodDEsIHQwKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9tdWwoJHQxLCAkdDApOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MCk7CgogICAgICAgICMgZm9yIChpID0gMTsgaSA8IDEwOyArK2kpIHsKICAgICAgICAjICAgICBmZV9zcSh0MSwgdDEpOwogICAgICAgICMgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX211bCh0MSwgdDEsIHQwKTsKICAgICAgICAjIGZlX3NxKHQyLCB0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDEpOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCAyMDsgKytpKSB7CiAgICAgICAgIyAgICAgZmVfc3EodDIsIHQyKTsKICAgICAgICAjIH0KICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAyMDsgKyskaSkgewogICAgICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwodDEsIHQyLCB0MSk7CiAgICAgICAgIyBmZV9zcSh0MSwgdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKCiAgICAgICAgIyBmb3IgKGkgPSAxOyBpIDwgMTA7ICsraSkgewogICAgICAgICMgICAgIGZlX3NxKHQxLCB0MSk7CiAgICAgICAgIyB9CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICB9CgogICAgICAgICMgZmVfbXVsKHQwLCB0MSwgdDApOwogICAgICAgICMgZmVfc3EodDEsIHQwKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9tdWwoJHQxLCAkdDApOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MCk7CgogICAgICAgICMgZm9yIChpID0gMTsgaSA8IDUwOyArK2kpIHsKICAgICAgICAjICAgICBmZV9zcSh0MSwgdDEpOwogICAgICAgICMgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDUwOyArKyRpKSB7CiAgICAgICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX211bCh0MSwgdDEsIHQwKTsKICAgICAgICAjIGZlX3NxKHQyLCB0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDEpOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCAxMDA7ICsraSkgewogICAgICAgICMgICAgIGZlX3NxKHQyLCB0Mik7CiAgICAgICAgIyB9CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTAwOyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQoKICAgICAgICAjIGZlX211bCh0MSwgdDIsIHQxKTsKICAgICAgICAjIGZlX3NxKHQxLCB0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MiwgJHQxKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCA1MDsgKytpKSB7CiAgICAgICAgIyAgICAgZmVfc3EodDEsIHQxKTsKICAgICAgICAjIH0KICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1MDsgKyskaSkgewogICAgICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwodDAsIHQxLCB0MCk7CiAgICAgICAgIyBmZV9zcSh0MCwgdDApOwogICAgICAgICMgZmVfc3EodDAsIHQwKTsKICAgICAgICAjIGZlX211bChvdXQsIHQwLCB6KTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9tdWwoJHQxLCAkdDApOwogICAgICAgICR0MCA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfc3EoJHQwKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmVfbXVsKCR0MCwgJHopOwogICAgfQoKICAgIC8qKgogICAgICogU3VidHJhY3QgdHdvIGZpZWxkIGVsZW1lbnRzLgogICAgICoKICAgICAqIGggPSBmIC0gZwogICAgICoKICAgICAqIFByZWNvbmRpdGlvbnM6CiAgICAgKiB8ZnwgYm91bmRlZCBieSAxLjEqMl4yNSwxLjEqMl4yNCwxLjEqMl4yNSwxLjEqMl4yNCxldGMuCiAgICAgKiB8Z3wgYm91bmRlZCBieSAxLjEqMl4yNSwxLjEqMl4yNCwxLjEqMl4yNSwxLjEqMl4yNCxldGMuCiAgICAgKgogICAgICogUG9zdGNvbmRpdGlvbnM6CiAgICAgKiB8aHwgYm91bmRlZCBieSAxLjEqMl4yNiwxLjEqMl4yNSwxLjEqMl4yNiwxLjEqMl4yNSxldGMuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRnCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRPcGVyYW5kCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfc3ViKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmLCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbMF0gLSAkZ1swXSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbMV0gLSAkZ1sxXSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbMl0gLSAkZ1syXSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbM10gLSAkZ1szXSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbNF0gLSAkZ1s0XSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbNV0gLSAkZ1s1XSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbNl0gLSAkZ1s2XSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbN10gLSAkZ1s3XSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbOF0gLSAkZ1s4XSksCiAgICAgICAgICAgICAgICAoaW50KSAoJGZbOV0gLSAkZ1s5XSkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgdHdvIGdyb3VwIGVsZW1lbnRzLgogICAgICoKICAgICAqIHIgPSBwICsgcQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHAKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQgJHEKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDFwMQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX2FkZCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMyAkcCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQgJHEKICAgICkgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEoKTsKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX2FkZCgkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfc3ViKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9tdWwoJHItPlgsICRxLT5ZcGx1c1gpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfbXVsKCRyLT5ZLCAkcS0+WW1pbnVzWCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9tdWwoJHEtPlQyZCwgJHAtPlQpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfbXVsKCRwLT5aLCAkcS0+Wik7CiAgICAgICAgJHQwICAgPSBzZWxmOjpmZV9hZGQoJHItPlgsICRyLT5YKTsKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX3N1Yigkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfYWRkKCRyLT5aLCAkci0+WSk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9hZGQoJHQwLCAkci0+VCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9zdWIoJHQwLCAkci0+VCk7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZWYgaHR0cHM6Ly9naXRodWIuY29tL2plZGlzY3QxL2xpYnNvZGl1bS9ibG9iLzE1N2M0YTgwYzEzYjExNzYwOGFlYWUxMjE3OGIyZDM4ODI1ZjlmOGYvc3JjL2xpYnNvZGl1bS9jcnlwdG9fY29yZS9jdXJ2ZTI1NTE5L3JlZjEwL2N1cnZlMjU1MTlfcmVmMTAuYyNMMTE4NS1MMTIxNQogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHJldHVybiBhcnJheTxpbnQsIG1peGVkPgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2xpZGUoJGEpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkYSkgPCAyNTYpIHsKICAgICAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkYSkgPCAxNikgewogICAgICAgICAgICAgICAgJGEgPSBzdHJfcGFkKCRhLCAyNTYsICcwJywgU1RSX1BBRF9SSUdIVCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRyICovCiAgICAgICAgJHIgPSBhcnJheSgpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGkgKi8KICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAyNTY7ICsrJGkpIHsKICAgICAgICAgICAgJHJbJGldID0gKGludCkgKAogICAgICAgICAgICAgICAgMSAmICgKICAgICAgICAgICAgICAgICAgICBzZWxmOjpjaHJUb0ludCgkYVsoaW50KSAoJGkgPj4gMyldKQogICAgICAgICAgICAgICAgICAgICAgICA+PgogICAgICAgICAgICAgICAgICAgICgkaSAmIDcpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKCRpID0gMDskaSA8IDI1NjsrKyRpKSB7CiAgICAgICAgICAgIGlmICgkclskaV0pIHsKICAgICAgICAgICAgICAgIGZvciAoJGIgPSAxOyRiIDw9IDYgJiYgJGkgKyAkYiA8IDI1NjsrKyRiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRyWyRpICsgJGJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkclskaV0gKyAoJHJbJGkgKyAkYl0gPDwgJGIpIDw9IDE1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkclskaV0gKz0gJHJbJGkgKyAkYl0gPDwgJGI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkclskaSArICRiXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkclskaV0gLSAoJHJbJGkgKyAkYl0gPDwgJGIpID49IC0xNSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJbJGldIC09ICRyWyRpICsgJGJdIDw8ICRiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkayA9ICRpICsgJGI7ICRrIDwgMjU2OyArKyRrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkclska10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJbJGtdID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyWyRrXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcwogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfZnJvbWJ5dGVzX25lZ2F0ZV92YXJ0aW1lKCRzKQogICAgewogICAgICAgIHN0YXRpYyAkZCA9IG51bGw7CiAgICAgICAgaWYgKCEkZCkgewogICAgICAgICAgICAkZCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoc2VsZjo6JGQpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9mcm9tYnl0ZXMoaC0+WSxzKTsKICAgICAgICAjIGZlXzEoaC0+Wik7CiAgICAgICAgJGggPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMoCiAgICAgICAgICAgIHNlbGY6OmZlXzAoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfZnJvbWJ5dGVzKCRzKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpCiAgICAgICAgKTsKCiAgICAgICAgIyBmZV9zcSh1LGgtPlkpOwogICAgICAgICMgZmVfbXVsKHYsdSxkKTsKICAgICAgICAjIGZlX3N1Yih1LHUsaC0+Wik7ICAgICAgIC8qIHUgPSB5XjItMSAqLwogICAgICAgICMgZmVfYWRkKHYsdixoLT5aKTsgICAgICAgLyogdiA9IGR5XjIrMSAqLwogICAgICAgICR1ID0gc2VsZjo6ZmVfc3EoJGgtPlkpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRkICovCiAgICAgICAgJHYgPSBzZWxmOjpmZV9tdWwoJHUsICRkKTsKICAgICAgICAkdSA9IHNlbGY6OmZlX3N1YigkdSwgJGgtPlopOyAvKiB1ID0gIHleMiAtIDEgKi8KICAgICAgICAkdiA9IHNlbGY6OmZlX2FkZCgkdiwgJGgtPlopOyAvKiB2ID0gZHleMiArIDEgKi8KCiAgICAgICAgIyBmZV9zcSh2Myx2KTsKICAgICAgICAjIGZlX211bCh2Myx2Myx2KTsgICAgICAgIC8qIHYzID0gdl4zICovCiAgICAgICAgIyBmZV9zcShoLT5YLHYzKTsKICAgICAgICAjIGZlX211bChoLT5YLGgtPlgsdik7CiAgICAgICAgIyBmZV9tdWwoaC0+WCxoLT5YLHUpOyAgICAvKiB4ID0gdXZeNyAqLwogICAgICAgICR2MyA9IHNlbGY6OmZlX3NxKCR2KTsKICAgICAgICAkdjMgPSBzZWxmOjpmZV9tdWwoJHYzLCAkdik7IC8qIHYzID0gdl4zICovCiAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9zcSgkdjMpOwogICAgICAgICRoLT5YID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkdik7CiAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9tdWwoJGgtPlgsICR1KTsgLyogeCA9IHV2XjcgKi8KCiAgICAgICAgIyBmZV9wb3cyMjUyMyhoLT5YLGgtPlgpOyAvKiB4ID0gKHV2XjcpXigocS01KS84KSAqLwogICAgICAgICMgZmVfbXVsKGgtPlgsaC0+WCx2Myk7CiAgICAgICAgIyBmZV9tdWwoaC0+WCxoLT5YLHUpOyAgICAvKiB4ID0gdXZeMyh1dl43KV4oKHEtNSkvOCkgKi8KICAgICAgICAkaC0+WCA9IHNlbGY6OmZlX3BvdzIyNTIzKCRoLT5YKTsgLyogeCA9ICh1dl43KV4oKHEtNSkvOCkgKi8KICAgICAgICAkaC0+WCA9IHNlbGY6OmZlX211bCgkaC0+WCwgJHYzKTsKICAgICAgICAkaC0+WCA9IHNlbGY6OmZlX211bCgkaC0+WCwgJHUpOyAvKiB4ID0gdXZeMyh1dl43KV4oKHEtNSkvOCkgKi8KCiAgICAgICAgIyBmZV9zcSh2eHgsaC0+WCk7CiAgICAgICAgIyBmZV9tdWwodnh4LHZ4eCx2KTsKICAgICAgICAjIGZlX3N1YihjaGVjayx2eHgsdSk7ICAgIC8qIHZ4XjItdSAqLwogICAgICAgICR2eHggPSBzZWxmOjpmZV9zcSgkaC0+WCk7CiAgICAgICAgJHZ4eCA9IHNlbGY6OmZlX211bCgkdnh4LCAkdik7CiAgICAgICAgJGNoZWNrID0gc2VsZjo6ZmVfc3ViKCR2eHgsICR1KTsgLyogdnheMiAtIHUgKi8KCiAgICAgICAgIyBpZiAoZmVfaXNub256ZXJvKGNoZWNrKSkgewogICAgICAgICMgICAgIGZlX2FkZChjaGVjayx2eHgsdSk7ICAvKiB2eF4yK3UgKi8KICAgICAgICAjICAgICBpZiAoZmVfaXNub256ZXJvKGNoZWNrKSkgewogICAgICAgICMgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIyAgICAgfQogICAgICAgICMgICAgIGZlX211bChoLT5YLGgtPlgsc3FydG0xKTsKICAgICAgICAjIH0KICAgICAgICBpZiAoc2VsZjo6ZmVfaXNub256ZXJvKCRjaGVjaykpIHsKICAgICAgICAgICAgJGNoZWNrID0gc2VsZjo6ZmVfYWRkKCR2eHgsICR1KTsgLyogdnheMiArIHUgKi8KICAgICAgICAgICAgaWYgKHNlbGY6OmZlX2lzbm9uemVybygkY2hlY2spKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oJ0ludGVybmFsIGNoZWNrIGZhaWxlZC4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaC0+WCA9IHNlbGY6OmZlX211bCgKICAgICAgICAgICAgICAgICRoLT5YLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheShzZWxmOjokc3FydG0xKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiAoZmVfaXNuZWdhdGl2ZShoLT5YKSA9PSAoc1szMV0gPj4gNykpIHsKICAgICAgICAjICAgICBmZV9uZWcoaC0+WCxoLT5YKTsKICAgICAgICAjIH0KICAgICAgICAkaSA9IHNlbGY6OmNoclRvSW50KCRzWzMxXSk7CiAgICAgICAgaWYgKHNlbGY6OmZlX2lzbmVnYXRpdmUoJGgtPlgpID09PSAoJGkgPj4gNykpIHsKICAgICAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9uZWcoJGgtPlgpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwoaC0+VCxoLT5YLGgtPlkpOwogICAgICAgICRoLT5UID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkaC0+WSk7CiAgICAgICAgcmV0dXJuICRoOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRSCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHAKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wICRxCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9tYWRkKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEgJFIsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHAsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkcQogICAgKSB7CiAgICAgICAgJHIgPSBjbG9uZSAkUjsKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX2FkZCgkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfc3ViKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9tdWwoJHItPlgsICRxLT55cGx1c3gpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfbXVsKCRyLT5ZLCAkcS0+eW1pbnVzeCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9tdWwoJHEtPnh5MmQsICRwLT5UKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9hZGQoY2xvbmUgJHAtPlosIGNsb25lICRwLT5aKTsKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX3N1Yigkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfYWRkKCRyLT5aLCAkci0+WSk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9hZGQoJHQwLCAkci0+VCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9zdWIoJHQwLCAkci0+VCk7CgogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDFwMSAkUgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkcQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfbXN1YigKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRSLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHEKICAgICkgewogICAgICAgICRyID0gY2xvbmUgJFI7CgogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfYWRkKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9zdWIoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX211bCgkci0+WCwgJHEtPnltaW51c3gpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfbXVsKCRyLT5ZLCAkcS0+eXBsdXN4KTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX211bCgkcS0+eHkyZCwgJHAtPlQpOwogICAgICAgICR0MCA9IHNlbGY6OmZlX2FkZCgkcC0+WiwgJHAtPlopOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfc3ViKCRyLT5aLCAkci0+WSk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9hZGQoJHItPlosICRyLT5ZKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX3N1YigkdDAsICRyLT5UKTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX2FkZCgkdDAsICRyLT5UKTsKCiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRwCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDFwMV90b19wMihQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRwKQogICAgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AyKCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9tdWwoJHAtPlgsICRwLT5UKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX211bCgkcC0+WSwgJHAtPlopOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfbXVsKCRwLT5aLCAkcC0+VCk7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRwCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDFwMV90b19wMyhQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxICRwKQogICAgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzKCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9tdWwoJHAtPlgsICRwLT5UKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX211bCgkcC0+WSwgJHAtPlopOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfbXVsKCRwLT5aLCAkcC0+VCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9tdWwoJHAtPlgsICRwLT5ZKTsKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AyXzAoKQogICAgewogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIoCiAgICAgICAgICAgIHNlbGY6OmZlXzAoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpLAogICAgICAgICAgICBzZWxmOjpmZV8xKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMiAkcAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDJfZGJsKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AyICRwKQogICAgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEoKTsKCiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9zcSgkcC0+WCk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9zcSgkcC0+WSk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9zcTIoJHAtPlopOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfYWRkKCRwLT5YLCAkcC0+WSk7CiAgICAgICAgJHQwICAgPSBzZWxmOjpmZV9zcSgkci0+WSk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9hZGQoJHItPlosICRyLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX3N1Yigkci0+WiwgJHItPlgpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfc3ViKCR0MCwgJHItPlkpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfc3ViKCRyLT5ULCAkci0+Wik7CgogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDNfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMygKICAgICAgICAgICAgc2VsZjo6ZmVfMCgpLAogICAgICAgICAgICBzZWxmOjpmZV8xKCksCiAgICAgICAgICAgIHNlbGY6OmZlXzEoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMCgpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHAKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfQ2FjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDNfdG9fY2FjaGVkKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwKQogICAgewogICAgICAgIHN0YXRpYyAkZDIgPSBudWxsOwogICAgICAgIGlmICgkZDIgPT09IG51bGwpIHsKICAgICAgICAgICAgJGQyID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheShzZWxmOjokZDIpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZDIgKi8KICAgICAgICAkciA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQoKTsKICAgICAgICAkci0+WXBsdXNYID0gc2VsZjo6ZmVfYWRkKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlltaW51c1ggPSBzZWxmOjpmZV9zdWIoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX2NvcHkoJHAtPlopOwogICAgICAgICRyLT5UMmQgPSBzZWxmOjpmZV9tdWwoJHAtPlQsICRkMik7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMyAkcAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AzX3RvX3AyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwKQogICAgewogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIoCiAgICAgICAgICAgICRwLT5YLAogICAgICAgICAgICAkcC0+WSwKICAgICAgICAgICAgJHAtPloKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMyAkaAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AzX3RvYnl0ZXMoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJGgpCiAgICB7CiAgICAgICAgJHJlY2lwID0gc2VsZjo6ZmVfaW52ZXJ0KCRoLT5aKTsKICAgICAgICAkeCA9IHNlbGY6OmZlX211bCgkaC0+WCwgJHJlY2lwKTsKICAgICAgICAkeSA9IHNlbGY6OmZlX211bCgkaC0+WSwgJHJlY2lwKTsKICAgICAgICAkcyA9IHNlbGY6OmZlX3RvYnl0ZXMoJHkpOwogICAgICAgICRzWzMxXSA9IHNlbGY6OmludFRvQ2hyKAogICAgICAgICAgICBzZWxmOjpjaHJUb0ludCgkc1szMV0pIF4gKHNlbGY6OmZlX2lzbmVnYXRpdmUoJHgpIDw8IDcpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9wM19kYmwoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHApCiAgICB7CiAgICAgICAgJHEgPSBzZWxmOjpnZV9wM190b19wMigkcCk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdlX3AyX2RibCgkcSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9wcmVjb21wXzAoKQogICAgewogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCgKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpLAogICAgICAgICAgICBzZWxmOjpmZV8xKCksCiAgICAgICAgICAgIHNlbGY6OmZlXzAoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHBhcmFtIGludCAkYwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcXVhbCgkYiwgJGMpCiAgICB7CiAgICAgICAgcmV0dXJuIChpbnQpICgoKCRiIF4gJGMpIC0gMSAmIDB4ZmZmZmZmZmYpID4+IDMxKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY2hhcgogICAgICogQHJldHVybiBpbnQgKDEgPSB5ZXMsIDAgPSBubykKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5lZ2F0aXZlKCRjaGFyKQogICAgewogICAgICAgIGlmIChpc19pbnQoJGNoYXIpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2hhciA8IDAgPyAxIDogMDsKICAgICAgICB9CiAgICAgICAgJHggPSBzZWxmOjpjaHJUb0ludChzZWxmOjpzdWJzdHIoJGNoYXIsIDAsIDEpKTsKICAgICAgICByZXR1cm4gKGludCkgKCR4ID4+IDYzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmRpdGlvbmFsIG1vdmUKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHQKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wICR1CiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbW92KAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHQsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkdSwKICAgICAgICAkYgogICAgKSB7CiAgICAgICAgaWYgKCFpc19pbnQoJGIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGludGVnZXIuJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCgKICAgICAgICAgICAgc2VsZjo6ZmVfY21vdigkdC0+eXBsdXN4LCAkdS0+eXBsdXN4LCAkYiksCiAgICAgICAgICAgIHNlbGY6OmZlX2Ntb3YoJHQtPnltaW51c3gsICR1LT55bWludXN4LCAkYiksCiAgICAgICAgICAgIHNlbGY6OmZlX2Ntb3YoJHQtPnh5MmQsICR1LT54eTJkLCAkYikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBvcwogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9zZWxlY3QoJHBvcyA9IDAsICRiID0gMCkKICAgIHsKICAgICAgICBzdGF0aWMgJGJhc2UgPSBudWxsOwogICAgICAgIGlmICgkYmFzZSA9PT0gbnVsbCkgewogICAgICAgICAgICAkYmFzZSA9IGFycmF5KCk7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaSAqLwogICAgICAgICAgICBmb3JlYWNoIChzZWxmOjokYmFzZSBhcyAkaSA9PiAkYmFzKSB7CiAgICAgICAgICAgICAgICBmb3IgKCRqID0gMDsgJGogPCA4OyArKyRqKSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2VbJGldWyRqXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wKAogICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KCRiYXNbJGpdWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgkYmFzWyRqXVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoJGJhc1skal1bMl0pCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcD4+ICRiYXNlICovCiAgICAgICAgaWYgKCFpc19pbnQoJHBvcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUG9zaXRpb24gbXVzdCBiZSBhbiBpbnRlZ2VyJyk7CiAgICAgICAgfQogICAgICAgIGlmICgkcG9zIDwgMCB8fCAkcG9zID4gMzEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdQb3NpdGlvbiBpcyBvdXQgb2YgcmFuZ2UgWzAsIDMxXScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50ICRibmVnYXRpdmUgKi8KICAgICAgICAkYm5lZ2F0aXZlID0gc2VsZjo6bmVnYXRpdmUoJGIpOwogICAgICAgIC8qKiBAdmFyIGludCAkYmFicyAqLwogICAgICAgICRiYWJzID0gJGIgLSAoKCgtJGJuZWdhdGl2ZSkgJiAkYikgPDwgMSk7CgogICAgICAgICR0ID0gc2VsZjo6Z2VfcHJlY29tcF8wKCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgODsgKyskaSkgewogICAgICAgICAgICAkdCA9IHNlbGY6OmNtb3YoCiAgICAgICAgICAgICAgICAkdCwKICAgICAgICAgICAgICAgICRiYXNlWyRwb3NdWyRpXSwKICAgICAgICAgICAgICAgIHNlbGY6OmVxdWFsKCRiYWJzLCAkaSArIDEpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRtaW51c1QgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcCgKICAgICAgICAgICAgc2VsZjo6ZmVfY29weSgkdC0+eW1pbnVzeCksCiAgICAgICAgICAgIHNlbGY6OmZlX2NvcHkoJHQtPnlwbHVzeCksCiAgICAgICAgICAgIHNlbGY6OmZlX25lZygkdC0+eHkyZCkKICAgICAgICApOwogICAgICAgIHJldHVybiBzZWxmOjpjbW92KCR0LCAkbWludXNULCAkYm5lZ2F0aXZlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN1YnRyYWN0IHR3byBncm91cCBlbGVtZW50cy4KICAgICAqCiAgICAgKiByID0gcCAtIHEKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRwCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfQ2FjaGVkICRxCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9zdWIoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJHAsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfQ2FjaGVkICRxCiAgICApIHsKICAgICAgICAkciA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMXAxKCk7CgogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfYWRkKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9zdWIoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX211bCgkci0+WCwgJHEtPlltaW51c1gpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfbXVsKCRyLT5ZLCAkcS0+WXBsdXNYKTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX211bCgkcS0+VDJkLCAkcC0+VCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9tdWwoJHAtPlosICRxLT5aKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9hZGQoJHItPlgsICRyLT5YKTsKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX3N1Yigkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfYWRkKCRyLT5aLCAkci0+WSk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9zdWIoJHQwLCAkci0+VCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9hZGQoJHQwLCAkci0+VCk7CgogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYSBncm91cCBlbGVtZW50IHRvIGEgYnl0ZSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AyICRoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfdG9ieXRlcyhQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMiAkaCkKICAgIHsKICAgICAgICAkcmVjaXAgPSBzZWxmOjpmZV9pbnZlcnQoJGgtPlopOwogICAgICAgICR4ID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkcmVjaXApOwogICAgICAgICR5ID0gc2VsZjo6ZmVfbXVsKCRoLT5ZLCAkcmVjaXApOwogICAgICAgICRzID0gc2VsZjo6ZmVfdG9ieXRlcygkeSk7CiAgICAgICAgJHNbMzFdID0gc2VsZjo6aW50VG9DaHIoCiAgICAgICAgICAgIHNlbGY6OmNoclRvSW50KCRzWzMxXSkgXiAoc2VsZjo6ZmVfaXNuZWdhdGl2ZSgkeCkgPDwgNykKICAgICAgICApOwogICAgICAgIHJldHVybiAkczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJEEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGIKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfZG91YmxlX3NjYWxhcm11bHRfdmFydGltZSgKICAgICAgICAkYSwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMyAkQSwKICAgICAgICAkYgogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQ+ICRBaSAqLwogICAgICAgICRBaSA9IGFycmF5KCk7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUHJlY29tcD4gJEJpICovCiAgICAgICAgc3RhdGljICRCaSA9IGFycmF5KCk7CiAgICAgICAgaWYgKCEkQmkpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgODsgKyskaSkgewogICAgICAgICAgICAgICAgJEJpWyRpXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QcmVjb21wKAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoc2VsZjo6JGJhc2UyWyRpXVswXSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheShzZWxmOjokYmFzZTJbJGldWzFdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KHNlbGY6OiRiYXNlMlskaV1bMl0pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDg7ICsrJGkpIHsKICAgICAgICAgICAgJEFpWyRpXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQoCiAgICAgICAgICAgICAgICBzZWxmOjpmZV8wKCksCiAgICAgICAgICAgICAgICBzZWxmOjpmZV8wKCksCiAgICAgICAgICAgICAgICBzZWxmOjpmZV8wKCksCiAgICAgICAgICAgICAgICBzZWxmOjpmZV8wKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2xpZGUoYXNsaWRlLGEpOwogICAgICAgICMgc2xpZGUoYnNsaWRlLGIpOwogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkYXNsaWRlICovCiAgICAgICAgJGFzbGlkZSA9IHNlbGY6OnNsaWRlKCRhKTsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGJzbGlkZSAqLwogICAgICAgICRic2xpZGUgPSBzZWxmOjpzbGlkZSgkYik7CgogICAgICAgICMgZ2VfcDNfdG9fY2FjaGVkKCZBaVswXSxBKTsKICAgICAgICAjIGdlX3AzX2RibCgmdCxBKTsgZ2VfcDFwMV90b19wMygmQTIsJnQpOwogICAgICAgICRBaVswXSA9IHNlbGY6OmdlX3AzX3RvX2NhY2hlZCgkQSk7CiAgICAgICAgJHQgPSBzZWxmOjpnZV9wM19kYmwoJEEpOwogICAgICAgICRBMiA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHQpOwoKICAgICAgICAjIGdlX2FkZCgmdCwmQTIsJkFpWzBdKTsgZ2VfcDFwMV90b19wMygmdSwmdCk7IGdlX3AzX3RvX2NhY2hlZCgmQWlbMV0sJnUpOwogICAgICAgICMgZ2VfYWRkKCZ0LCZBMiwmQWlbMV0pOyBnZV9wMXAxX3RvX3AzKCZ1LCZ0KTsgZ2VfcDNfdG9fY2FjaGVkKCZBaVsyXSwmdSk7CiAgICAgICAgIyBnZV9hZGQoJnQsJkEyLCZBaVsyXSk7IGdlX3AxcDFfdG9fcDMoJnUsJnQpOyBnZV9wM190b19jYWNoZWQoJkFpWzNdLCZ1KTsKICAgICAgICAjIGdlX2FkZCgmdCwmQTIsJkFpWzNdKTsgZ2VfcDFwMV90b19wMygmdSwmdCk7IGdlX3AzX3RvX2NhY2hlZCgmQWlbNF0sJnUpOwogICAgICAgICMgZ2VfYWRkKCZ0LCZBMiwmQWlbNF0pOyBnZV9wMXAxX3RvX3AzKCZ1LCZ0KTsgZ2VfcDNfdG9fY2FjaGVkKCZBaVs1XSwmdSk7CiAgICAgICAgIyBnZV9hZGQoJnQsJkEyLCZBaVs1XSk7IGdlX3AxcDFfdG9fcDMoJnUsJnQpOyBnZV9wM190b19jYWNoZWQoJkFpWzZdLCZ1KTsKICAgICAgICAjIGdlX2FkZCgmdCwmQTIsJkFpWzZdKTsgZ2VfcDFwMV90b19wMygmdSwmdCk7IGdlX3AzX3RvX2NhY2hlZCgmQWlbN10sJnUpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDc7ICsrJGkpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9hZGQoJEEyLCAkQWlbJGldKTsKICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgJEFpWyRpICsgMV0gPSBzZWxmOjpnZV9wM190b19jYWNoZWQoJHUpOwogICAgICAgIH0KCiAgICAgICAgIyBnZV9wMl8wKHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfMCgpOwoKICAgICAgICAjIGZvciAoaSA9IDI1NTtpID49IDA7LS1pKSB7CiAgICAgICAgIyAgICAgaWYgKGFzbGlkZVtpXSB8fCBic2xpZGVbaV0pIGJyZWFrOwogICAgICAgICMgfQogICAgICAgICRpID0gMjU1OwogICAgICAgIGZvciAoOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgIGlmICgkYXNsaWRlWyRpXSB8fCAkYnNsaWRlWyRpXSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZm9yICg7aSA+PSAwOy0taSkgewogICAgICAgIGZvciAoOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgICMgZ2VfcDJfZGJsKCZ0LHIpOwogICAgICAgICAgICAkdCA9IHNlbGY6OmdlX3AyX2RibCgkcik7CgogICAgICAgICAgICAjIGlmIChhc2xpZGVbaV0gPiAwKSB7CiAgICAgICAgICAgIGlmICgkYXNsaWRlWyRpXSA+IDApIHsKICAgICAgICAgICAgICAgICMgZ2VfcDFwMV90b19wMygmdSwmdCk7CiAgICAgICAgICAgICAgICAjIGdlX2FkZCgmdCwmdSwmQWlbYXNsaWRlW2ldLzJdKTsKICAgICAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICAgICAkdCA9IHNlbGY6OmdlX2FkZCgKICAgICAgICAgICAgICAgICAgICAkdSwKICAgICAgICAgICAgICAgICAgICAkQWlbKGludCkgZmxvb3IoJGFzbGlkZVskaV0gLyAyKV0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICMgfSBlbHNlIGlmIChhc2xpZGVbaV0gPCAwKSB7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYXNsaWRlWyRpXSA8IDApIHsKICAgICAgICAgICAgICAgICMgZ2VfcDFwMV90b19wMygmdSwmdCk7CiAgICAgICAgICAgICAgICAjIGdlX3N1YigmdCwmdSwmQWlbKC1hc2xpZGVbaV0pLzJdKTsKICAgICAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICAgICAkdCA9IHNlbGY6OmdlX3N1YigKICAgICAgICAgICAgICAgICAgICAkdSwKICAgICAgICAgICAgICAgICAgICAkQWlbKGludCkgZmxvb3IoLSRhc2xpZGVbJGldIC8gMildCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIChic2xpZGVbaV0gPiAwKSB7CiAgICAgICAgICAgIGlmICgkYnNsaWRlWyRpXSA+IDApIHsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaW5kZXggKi8KICAgICAgICAgICAgICAgICRpbmRleCA9IChpbnQpIGZsb29yKCRic2xpZGVbJGldIC8gMik7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsJnQpOwogICAgICAgICAgICAgICAgIyBnZV9tYWRkKCZ0LCZ1LCZCaVtic2xpZGVbaV0vMl0pOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfbWFkZCgkdCwgJHUsICRCaVskaW5kZXhdKTsKICAgICAgICAgICAgIyB9IGVsc2UgaWYgKGJzbGlkZVtpXSA8IDApIHsKICAgICAgICAgICAgfSBlbHNlaWYgKCRic2xpZGVbJGldIDwgMCkgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRpbmRleCAqLwogICAgICAgICAgICAgICAgJGluZGV4ID0gKGludCkgZmxvb3IoLSRic2xpZGVbJGldIC8gMik7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsJnQpOwogICAgICAgICAgICAgICAgIyBnZV9tc3ViKCZ0LCZ1LCZCaVsoLWJzbGlkZVtpXSkvMl0pOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfbXN1YigkdCwgJHUsICRCaVskaW5kZXhdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDIociwmdCk7CiAgICAgICAgICAgICRyID0gc2VsZjo6Z2VfcDFwMV90b19wMigkdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE9wZXJhbmQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9zY2FsYXJtdWx0X2Jhc2UoJGEpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRlICovCiAgICAgICAgJGUgPSBhcnJheSgpOwogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEoKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMzI7ICsrJGkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRkYmwgKi8KICAgICAgICAgICAgJGRibCA9IChpbnQpICRpIDw8IDE7CiAgICAgICAgICAgICRlWyRkYmxdID0gKGludCkgc2VsZjo6Y2hyVG9JbnQoJGFbJGldKSAmIDE1OwogICAgICAgICAgICAkZVskZGJsICsgMV0gPSAoaW50KSAoc2VsZjo6Y2hyVG9JbnQoJGFbJGldKSA+PiA0KSAmIDE1OwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeSAqLwogICAgICAgICRjYXJyeSA9IDA7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgNjM7ICsrJGkpIHsKICAgICAgICAgICAgJGVbJGldICs9ICRjYXJyeTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeSAqLwogICAgICAgICAgICAkY2FycnkgPSAkZVskaV0gKyA4OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5ICovCiAgICAgICAgICAgICRjYXJyeSA+Pj0gNDsKICAgICAgICAgICAgJGVbJGldIC09ICRjYXJyeSA8PCA0OwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGUgKi8KICAgICAgICAkZVs2M10gKz0gKGludCkgJGNhcnJ5OwoKICAgICAgICAkaCA9IHNlbGY6OmdlX3AzXzAoKTsKCiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgNjQ7ICRpICs9IDIpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9zZWxlY3QoKGludCkgZmxvb3IoJGkgLyAyKSwgKGludCkgJGVbJGldKTsKICAgICAgICAgICAgJHIgPSBzZWxmOjpnZV9tYWRkKCRyLCAkaCwgJHQpOwogICAgICAgICAgICAkaCA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHIpOwogICAgICAgIH0KCiAgICAgICAgJHIgPSBzZWxmOjpnZV9wM19kYmwoJGgpOwoKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKCiAgICAgICAgJGggPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCRyKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgNjQ7ICRpICs9IDIpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9zZWxlY3QoJGkgPj4gMSwgKGludCkgJGVbJGldKTsKICAgICAgICAgICAgJHIgPSBzZWxmOjpnZV9tYWRkKCRyLCAkaCwgJHQpOwogICAgICAgICAgICAkaCA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIChhYiArIGMpIG1vZCBsCiAgICAgKiB3aGVyZSBsID0gMl4yNTIgKyAyNzc0MjMxNzc3NzM3MjM1MzUzNTg1MTkzNzc5MDg4MzY0ODQ5MwogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzY19tdWxhZGQoJGEsICRiLCAkYykKICAgIHsKICAgICAgICAvKiogQHZhciBpbnQgJGEwICovCiAgICAgICAgJGEwID0gMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGEsIDAsIDMpKTsKICAgICAgICAvKiogQHZhciBpbnQgJGExICovCiAgICAgICAgJGExID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAyLCA0KSkgPj4gNSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRhMiAqLwogICAgICAgICRhMiA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYSwgNSwgMykpID4+IDIpOwogICAgICAgIC8qKiBAdmFyIGludCAkYTMgKi8KICAgICAgICAkYTMgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGEsIDcsIDQpKSA+PiA3KTsKICAgICAgICAvKiogQHZhciBpbnQgJGE0ICovCiAgICAgICAgJGE0ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAxMCwgNCkpID4+IDQpOwogICAgICAgIC8qKiBAdmFyIGludCAkYTUgKi8KICAgICAgICAkYTUgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGEsIDEzLCAzKSkgPj4gMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRhNiAqLwogICAgICAgICRhNiA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYSwgMTUsIDQpKSA+PiA2KTsKICAgICAgICAvKiogQHZhciBpbnQgJGE3ICovCiAgICAgICAgJGE3ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRhLCAxOCwgMykpID4+IDMpOwogICAgICAgIC8qKiBAdmFyIGludCAkYTggKi8KICAgICAgICAkYTggPSAyMDk3MTUxICYgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYSwgMjEsIDMpKTsKICAgICAgICAvKiogQHZhciBpbnQgJGE5ICovCiAgICAgICAgJGE5ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAyMywgNCkpID4+IDUpOwogICAgICAgIC8qKiBAdmFyIGludCAkYTEwICovCiAgICAgICAgJGExMCA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYSwgMjYsIDMpKSA+PiAyKTsKICAgICAgICAvKiogQHZhciBpbnQgJGExMSAqLwogICAgICAgICRhMTEgPSAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYSwgMjgsIDQpKSA+PiA3KTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRiMCAqLwogICAgICAgICRiMCA9IDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRiLCAwLCAzKSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiMSAqLwogICAgICAgICRiMSA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYiwgMiwgNCkpID4+IDUpOwogICAgICAgIC8qKiBAdmFyIGludCAkYjIgKi8KICAgICAgICAkYjIgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGIsIDUsIDMpKSA+PiAyKTsKICAgICAgICAvKiogQHZhciBpbnQgJGIzICovCiAgICAgICAgJGIzID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRiLCA3LCA0KSkgPj4gNyk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiNCAqLwogICAgICAgICRiNCA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYiwgMTAsIDQpKSA+PiA0KTsKICAgICAgICAvKiogQHZhciBpbnQgJGI1ICovCiAgICAgICAgJGI1ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRiLCAxMywgMykpID4+IDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkYjYgKi8KICAgICAgICAkYjYgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDE1LCA0KSkgPj4gNik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiNyAqLwogICAgICAgICRiNyA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYiwgMTgsIDMpKSA+PiAzKTsKICAgICAgICAvKiogQHZhciBpbnQgJGI4ICovCiAgICAgICAgJGI4ID0gMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGIsIDIxLCAzKSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiOSAqLwogICAgICAgICRiOSA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYiwgMjMsIDQpKSA+PiA1KTsKICAgICAgICAvKiogQHZhciBpbnQgJGIxMCAqLwogICAgICAgICRiMTAgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGIsIDI2LCAzKSkgPj4gMik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiMTEgKi8KICAgICAgICAkYjExID0gKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDI4LCA0KSkgPj4gNyk7CgogICAgICAgIC8qKiBAdmFyIGludCAkYzAgKi8KICAgICAgICAkYzAgPSAyMDk3MTUxICYgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYywgMCwgMykpOwogICAgICAgIC8qKiBAdmFyIGludCAkYzEgKi8KICAgICAgICAkYzEgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsIDIsIDQpKSA+PiA1KTsKICAgICAgICAvKiogQHZhciBpbnQgJGMyICovCiAgICAgICAgJGMyID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRjLCA1LCAzKSkgPj4gMik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjMyAqLwogICAgICAgICRjMyA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgNywgNCkpID4+IDcpOwogICAgICAgIC8qKiBAdmFyIGludCAkYzQgKi8KICAgICAgICAkYzQgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsIDEwLCA0KSkgPj4gNCk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjNSAqLwogICAgICAgICRjNSA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYywgMTMsIDMpKSA+PiAxKTsKICAgICAgICAvKiogQHZhciBpbnQgJGM2ICovCiAgICAgICAgJGM2ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRjLCAxNSwgNCkpID4+IDYpOwogICAgICAgIC8qKiBAdmFyIGludCAkYzcgKi8KICAgICAgICAkYzcgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGMsIDE4LCAzKSkgPj4gMyk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjOCAqLwogICAgICAgICRjOCA9IDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRjLCAyMSwgMykpOwogICAgICAgIC8qKiBAdmFyIGludCAkYzkgKi8KICAgICAgICAkYzkgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsIDIzLCA0KSkgPj4gNSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjMTAgKi8KICAgICAgICAkYzEwID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRjLCAyNiwgMykpID4+IDIpOwogICAgICAgIC8qKiBAdmFyIGludCAkYzExICovCiAgICAgICAgJGMxMSA9IChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRjLCAyOCwgNCkpID4+IDcpOwoKICAgICAgICAvKiBDYW4ndCByZWFsbHkgYXZvaWQgdGhlIHB5cmFtaWQgaGVyZTogKi8KICAgICAgICAkczAgPSAkYzAgKyBzZWxmOjptdWwoJGEwLCAkYjAsIDI0KTsKICAgICAgICAkczEgPSAkYzEgKyBzZWxmOjptdWwoJGEwLCAkYjEsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiMCwgMjQpOwogICAgICAgICRzMiA9ICRjMiArIHNlbGY6Om11bCgkYTAsICRiMiwgMjQpICsgc2VsZjo6bXVsKCRhMSwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGEyLCAkYjAsIDI0KTsKICAgICAgICAkczMgPSAkYzMgKyBzZWxmOjptdWwoJGEwLCAkYjMsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiMiwgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjAsIDI0KTsKICAgICAgICAkczQgPSAkYzQgKyBzZWxmOjptdWwoJGEwLCAkYjQsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiMywgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGIyLCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjEsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTQsICRiMCwgMjQpOwogICAgICAgICRzNSA9ICRjNSArIHNlbGY6Om11bCgkYTAsICRiNSwgMjQpICsgc2VsZjo6bXVsKCRhMSwgJGI0LCAyNCkgKyBzZWxmOjptdWwoJGEyLCAkYjMsIDI0KSArIHNlbGY6Om11bCgkYTMsICRiMiwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhNCwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGE1LCAkYjAsIDI0KTsKICAgICAgICAkczYgPSAkYzYgKyBzZWxmOjptdWwoJGEwLCAkYjYsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiNSwgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGI0LCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjMsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTQsICRiMiwgMjQpICsgc2VsZjo6bXVsKCRhNSwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGE2LCAkYjAsIDI0KTsKICAgICAgICAkczcgPSAkYzcgKyBzZWxmOjptdWwoJGEwLCAkYjcsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGI1LCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjQsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTQsICRiMywgMjQpICsgc2VsZjo6bXVsKCRhNSwgJGIyLCAyNCkgKyBzZWxmOjptdWwoJGE2LCAkYjEsIDI0KSArIHNlbGY6Om11bCgkYTcsICRiMCwgMjQpOwogICAgICAgICRzOCA9ICRjOCArIHNlbGY6Om11bCgkYTAsICRiOCwgMjQpICsgc2VsZjo6bXVsKCRhMSwgJGI3LCAyNCkgKyBzZWxmOjptdWwoJGEyLCAkYjYsIDI0KSArIHNlbGY6Om11bCgkYTMsICRiNSwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhNCwgJGI0LCAyNCkgKyBzZWxmOjptdWwoJGE1LCAkYjMsIDI0KSArIHNlbGY6Om11bCgkYTYsICRiMiwgMjQpICsgc2VsZjo6bXVsKCRhNywgJGIxLCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGE4LCAkYjAsIDI0KTsKICAgICAgICAkczkgPSAkYzkgKyBzZWxmOjptdWwoJGEwLCAkYjksIDI0KSArIHNlbGY6Om11bCgkYTEsICRiOCwgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGI3LCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjYsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTQsICRiNSwgMjQpICsgc2VsZjo6bXVsKCRhNSwgJGI0LCAyNCkgKyBzZWxmOjptdWwoJGE2LCAkYjMsIDI0KSArIHNlbGY6Om11bCgkYTcsICRiMiwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhOCwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGE5LCAkYjAsIDI0KTsKICAgICAgICAkczEwID0gJGMxMCArIHNlbGY6Om11bCgkYTAsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhMiwgJGI4LCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjcsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTQsICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhNSwgJGI1LCAyNCkgKyBzZWxmOjptdWwoJGE2LCAkYjQsIDI0KSArIHNlbGY6Om11bCgkYTcsICRiMywgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhOCwgJGIyLCAyNCkgKyBzZWxmOjptdWwoJGE5LCAkYjEsIDI0KSArIHNlbGY6Om11bCgkYTEwLCAkYjAsIDI0KTsKICAgICAgICAkczExID0gJGMxMSArIHNlbGY6Om11bCgkYTAsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTEsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTIsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhMywgJGI4LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGE0LCAkYjcsIDI0KSArIHNlbGY6Om11bCgkYTUsICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhNiwgJGI1LCAyNCkgKyBzZWxmOjptdWwoJGE3LCAkYjQsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTgsICRiMywgMjQpICsgc2VsZjo6bXVsKCRhOSwgJGIyLCAyNCkgKyBzZWxmOjptdWwoJGExMCwgJGIxLCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGIwLCAyNCk7CiAgICAgICAgJHMxMiA9IHNlbGY6Om11bCgkYTEsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTIsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTMsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhNCwgJGI4LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGE1LCAkYjcsIDI0KSArIHNlbGY6Om11bCgkYTYsICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhNywgJGI1LCAyNCkgKyBzZWxmOjptdWwoJGE4LCAkYjQsIDI0KSArCiAgICAgICAgICAgICAgIHNlbGY6Om11bCgkYTksICRiMywgMjQpICsgc2VsZjo6bXVsKCRhMTAsICRiMiwgMjQpICsgc2VsZjo6bXVsKCRhMTEsICRiMSwgMjQpOwogICAgICAgICRzMTMgPSBzZWxmOjptdWwoJGEyLCAkYjExLCAyNCkgKyBzZWxmOjptdWwoJGEzLCAkYjEwLCAyNCkgKyBzZWxmOjptdWwoJGE0LCAkYjksIDI0KSArIHNlbGY6Om11bCgkYTUsICRiOCwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhNiwgJGI3LCAyNCkgKyBzZWxmOjptdWwoJGE3LCAkYjYsIDI0KSArIHNlbGY6Om11bCgkYTgsICRiNSwgMjQpICsgc2VsZjo6bXVsKCRhOSwgJGI0LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGExMCwgJGIzLCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGIyLCAyNCk7CiAgICAgICAgJHMxNCA9IHNlbGY6Om11bCgkYTMsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTQsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTUsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhNiwgJGI4LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGE3LCAkYjcsIDI0KSArIHNlbGY6Om11bCgkYTgsICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhOSwgJGI1LCAyNCkgKyBzZWxmOjptdWwoJGExMCwgJGI0LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGExMSwgJGIzLCAyNCk7CiAgICAgICAgJHMxNSA9IHNlbGY6Om11bCgkYTQsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTUsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTYsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhNywgJGI4LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGE4LCAkYjcsIDI0KSArIHNlbGY6Om11bCgkYTksICRiNiwgMjQpICsgc2VsZjo6bXVsKCRhMTAsICRiNSwgMjQpICsgc2VsZjo6bXVsKCRhMTEsICRiNCwgMjQpOwogICAgICAgICRzMTYgPSBzZWxmOjptdWwoJGE1LCAkYjExLCAyNCkgKyBzZWxmOjptdWwoJGE2LCAkYjEwLCAyNCkgKyBzZWxmOjptdWwoJGE3LCAkYjksIDI0KSArIHNlbGY6Om11bCgkYTgsICRiOCwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhOSwgJGI3LCAyNCkgKyBzZWxmOjptdWwoJGExMCwgJGI2LCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGI1LCAyNCk7CiAgICAgICAgJHMxNyA9IHNlbGY6Om11bCgkYTYsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTcsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTgsICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhOSwgJGI4LCAyNCkgKwogICAgICAgICAgICAgICBzZWxmOjptdWwoJGExMCwgJGI3LCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGI2LCAyNCk7CiAgICAgICAgJHMxOCA9IHNlbGY6Om11bCgkYTcsICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTgsICRiMTAsIDI0KSArIHNlbGY6Om11bCgkYTksICRiOSwgMjQpICsgc2VsZjo6bXVsKCRhMTAsICRiOCwgMjQpICsKICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRhMTEsICRiNywgMjQpOwogICAgICAgICRzMTkgPSBzZWxmOjptdWwoJGE4LCAkYjExLCAyNCkgKyBzZWxmOjptdWwoJGE5LCAkYjEwLCAyNCkgKyBzZWxmOjptdWwoJGExMCwgJGI5LCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGI4LCAyNCk7CiAgICAgICAgJHMyMCA9IHNlbGY6Om11bCgkYTksICRiMTEsIDI0KSArIHNlbGY6Om11bCgkYTEwLCAkYjEwLCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGI5LCAyNCk7CiAgICAgICAgJHMyMSA9IHNlbGY6Om11bCgkYTEwLCAkYjExLCAyNCkgKyBzZWxmOjptdWwoJGExMSwgJGIxMCwgMjQpOwogICAgICAgICRzMjIgPSBzZWxmOjptdWwoJGExMSwgJGIxMSwgMjQpOwogICAgICAgICRzMjMgPSAwOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAoJHMwICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczEgKz0gJGNhcnJ5MDsKICAgICAgICAkczAgLT0gJGNhcnJ5MCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MiAqLwogICAgICAgICRjYXJyeTIgPSAoJHMyICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczMgKz0gJGNhcnJ5MjsKICAgICAgICAkczIgLT0gJGNhcnJ5MiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NCAqLwogICAgICAgICRjYXJyeTQgPSAoJHM0ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczUgKz0gJGNhcnJ5NDsKICAgICAgICAkczQgLT0gJGNhcnJ5NCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NiAqLwogICAgICAgICRjYXJyeTYgPSAoJHM2ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczcgKz0gJGNhcnJ5NjsKICAgICAgICAkczYgLT0gJGNhcnJ5NiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAoJHM4ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczkgKz0gJGNhcnJ5ODsKICAgICAgICAkczggLT0gJGNhcnJ5OCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTAgKi8KICAgICAgICAkY2FycnkxMCA9ICgkczEwICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczExICs9ICRjYXJyeTEwOwogICAgICAgICRzMTAgLT0gJGNhcnJ5MTAgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEyICovCiAgICAgICAgJGNhcnJ5MTIgPSAoJHMxMiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMyArPSAkY2FycnkxMjsKICAgICAgICAkczEyIC09ICRjYXJyeTEyIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxNCAqLwogICAgICAgICRjYXJyeTE0ID0gKCRzMTQgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTUgKz0gJGNhcnJ5MTQ7CiAgICAgICAgJHMxNCAtPSAkY2FycnkxNCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTYgKi8KICAgICAgICAkY2FycnkxNiA9ICgkczE2ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczE3ICs9ICRjYXJyeTE2OwogICAgICAgICRzMTYgLT0gJGNhcnJ5MTYgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTE4ICovCiAgICAgICAgJGNhcnJ5MTggPSAoJHMxOCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxOSArPSAkY2FycnkxODsKICAgICAgICAkczE4IC09ICRjYXJyeTE4IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyMCAqLwogICAgICAgICRjYXJyeTIwID0gKCRzMjAgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMjEgKz0gJGNhcnJ5MjA7CiAgICAgICAgJHMyMCAtPSAkY2FycnkyMCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MjIgKi8KICAgICAgICAkY2FycnkyMiA9ICgkczIyICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczIzICs9ICRjYXJyeTIyOwogICAgICAgICRzMjIgLT0gJGNhcnJ5MjIgPDwgMjE7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxICovCiAgICAgICAgJGNhcnJ5MSA9ICgkczEgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMiArPSAkY2FycnkxOwogICAgICAgICRzMSAtPSAkY2FycnkxIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkzICovCiAgICAgICAgJGNhcnJ5MyA9ICgkczMgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzNCArPSAkY2FycnkzOwogICAgICAgICRzMyAtPSAkY2FycnkzIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk1ICovCiAgICAgICAgJGNhcnJ5NSA9ICgkczUgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzNiArPSAkY2Fycnk1OwogICAgICAgICRzNSAtPSAkY2Fycnk1IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICgkczcgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzOCArPSAkY2Fycnk3OwogICAgICAgICRzNyAtPSAkY2Fycnk3IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk5ICovCiAgICAgICAgJGNhcnJ5OSA9ICgkczkgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTAgKz0gJGNhcnJ5OTsKICAgICAgICAkczkgLT0gJGNhcnJ5OSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTEgKi8KICAgICAgICAkY2FycnkxMSA9ICgkczExICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczEyICs9ICRjYXJyeTExOwogICAgICAgICRzMTEgLT0gJGNhcnJ5MTEgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEzICovCiAgICAgICAgJGNhcnJ5MTMgPSAoJHMxMyArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxNCArPSAkY2FycnkxMzsKICAgICAgICAkczEzIC09ICRjYXJyeTEzIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxNSAqLwogICAgICAgICRjYXJyeTE1ID0gKCRzMTUgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTYgKz0gJGNhcnJ5MTU7CiAgICAgICAgJHMxNSAtPSAkY2FycnkxNSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTcgKi8KICAgICAgICAkY2FycnkxNyA9ICgkczE3ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczE4ICs9ICRjYXJyeTE3OwogICAgICAgICRzMTcgLT0gJGNhcnJ5MTcgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTE5ICovCiAgICAgICAgJGNhcnJ5MTkgPSAoJHMxOSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMyMCArPSAkY2FycnkxOTsKICAgICAgICAkczE5IC09ICRjYXJyeTE5IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyMSAqLwogICAgICAgICRjYXJyeTIxID0gKCRzMjEgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMjIgKz0gJGNhcnJ5MjE7CiAgICAgICAgJHMyMSAtPSAkY2FycnkyMSA8PCAyMTsKCiAgICAgICAgJHMxMSArPSBzZWxmOjptdWwoJHMyMywgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMxMiArPSBzZWxmOjptdWwoJHMyMywgNDcwMjk2LCAxOSk7CiAgICAgICAgJHMxMyArPSBzZWxmOjptdWwoJHMyMywgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMxNCAtPSBzZWxmOjptdWwoJHMyMywgOTk3ODA1LCAyMCk7CiAgICAgICAgJHMxNSArPSBzZWxmOjptdWwoJHMyMywgMTM2NjU3LCAxOCk7CiAgICAgICAgJHMxNiAtPSBzZWxmOjptdWwoJHMyMywgNjgzOTAxLCAyMCk7CgogICAgICAgICRzMTAgKz0gc2VsZjo6bXVsKCRzMjIsIDY2NjY0MywgMjApOwogICAgICAgICRzMTEgKz0gc2VsZjo6bXVsKCRzMjIsIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMTIgKz0gc2VsZjo6bXVsKCRzMjIsIDY1NDE4MywgMjApOwogICAgICAgICRzMTMgLT0gc2VsZjo6bXVsKCRzMjIsIDk5NzgwNSwgMjApOwogICAgICAgICRzMTQgKz0gc2VsZjo6bXVsKCRzMjIsIDEzNjY1NywgMTgpOwogICAgICAgICRzMTUgLT0gc2VsZjo6bXVsKCRzMjIsIDY4MzkwMSwgMjApOwoKICAgICAgICAkczkgICs9IHNlbGY6Om11bCgkczIxLCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMxMCArPSBzZWxmOjptdWwoJHMyMSwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMTEgKz0gc2VsZjo6bXVsKCRzMjEsICA2NTQxODMsIDIwKTsKICAgICAgICAkczEyIC09IHNlbGY6Om11bCgkczIxLCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHMxMyArPSBzZWxmOjptdWwoJHMyMSwgIDEzNjY1NywgMTgpOwogICAgICAgICRzMTQgLT0gc2VsZjo6bXVsKCRzMjEsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHM4ICArPSBzZWxmOjptdWwoJHMyMCwgIDY2NjY0MywgMjApOwogICAgICAgICRzOSAgKz0gc2VsZjo6bXVsKCRzMjAsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczEwICs9IHNlbGY6Om11bCgkczIwLCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMxMSAtPSBzZWxmOjptdWwoJHMyMCwgIDk5NzgwNSwgMjApOwogICAgICAgICRzMTIgKz0gc2VsZjo6bXVsKCRzMjAsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczEzIC09IHNlbGY6Om11bCgkczIwLCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzNyAgKz0gc2VsZjo6bXVsKCRzMTksICA2NjY2NDMsIDIwKTsKICAgICAgICAkczggICs9IHNlbGY6Om11bCgkczE5LCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHM5ICArPSBzZWxmOjptdWwoJHMxOSwgIDY1NDE4MywgMjApOwogICAgICAgICRzMTAgLT0gc2VsZjo6bXVsKCRzMTksICA5OTc4MDUsIDIwKTsKICAgICAgICAkczExICs9IHNlbGY6Om11bCgkczE5LCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHMxMiAtPSBzZWxmOjptdWwoJHMxOSwgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczYgICs9IHNlbGY6Om11bCgkczE4LCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHM3ICArPSBzZWxmOjptdWwoJHMxOCwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzOCAgKz0gc2VsZjo6bXVsKCRzMTgsICA2NTQxODMsIDIwKTsKICAgICAgICAkczkgIC09IHNlbGY6Om11bCgkczE4LCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHMxMCArPSBzZWxmOjptdWwoJHMxOCwgIDEzNjY1NywgMTgpOwogICAgICAgICRzMTEgLT0gc2VsZjo6bXVsKCRzMTgsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gKCRzNiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM3ICs9ICRjYXJyeTY7CiAgICAgICAgJHM2IC09ICRjYXJyeTYgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRzOCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM5ICs9ICRjYXJyeTg7CiAgICAgICAgJHM4IC09ICRjYXJyeTggPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEwICovCiAgICAgICAgJGNhcnJ5MTAgPSAoJHMxMCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMSArPSAkY2FycnkxMDsKICAgICAgICAkczEwIC09ICRjYXJyeTEwIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMiAqLwogICAgICAgICRjYXJyeTEyID0gKCRzMTIgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTMgKz0gJGNhcnJ5MTI7CiAgICAgICAgJHMxMiAtPSAkY2FycnkxMiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTQgKi8KICAgICAgICAkY2FycnkxNCA9ICgkczE0ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczE1ICs9ICRjYXJyeTE0OwogICAgICAgICRzMTQgLT0gJGNhcnJ5MTQgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTE2ICovCiAgICAgICAgJGNhcnJ5MTYgPSAoJHMxNiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxNyArPSAkY2FycnkxNjsKICAgICAgICAkczE2IC09ICRjYXJyeTE2IDw8IDIxOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJHM3ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczggKz0gJGNhcnJ5NzsKICAgICAgICAkczcgLT0gJGNhcnJ5NyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OSAqLwogICAgICAgICRjYXJyeTkgPSAoJHM5ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczEwICs9ICRjYXJyeTk7CiAgICAgICAgJHM5IC09ICRjYXJyeTkgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTExICovCiAgICAgICAgJGNhcnJ5MTEgPSAoJHMxMSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMiArPSAkY2FycnkxMTsKICAgICAgICAkczExIC09ICRjYXJyeTExIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMyAqLwogICAgICAgICRjYXJyeTEzID0gKCRzMTMgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTQgKz0gJGNhcnJ5MTM7CiAgICAgICAgJHMxMyAtPSAkY2FycnkxMyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTUgKi8KICAgICAgICAkY2FycnkxNSA9ICgkczE1ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczE2ICs9ICRjYXJyeTE1OwogICAgICAgICRzMTUgLT0gJGNhcnJ5MTUgPDwgMjE7CgogICAgICAgICRzNSAgKz0gc2VsZjo6bXVsKCRzMTcsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczYgICs9IHNlbGY6Om11bCgkczE3LCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHM3ICArPSBzZWxmOjptdWwoJHMxNywgIDY1NDE4MywgMjApOwogICAgICAgICRzOCAgLT0gc2VsZjo6bXVsKCRzMTcsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczkgICs9IHNlbGY6Om11bCgkczE3LCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHMxMCAtPSBzZWxmOjptdWwoJHMxNywgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczQgKz0gc2VsZjo6bXVsKCRzMTYsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczUgKz0gc2VsZjo6bXVsKCRzMTYsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczYgKz0gc2VsZjo6bXVsKCRzMTYsICA2NTQxODMsIDIwKTsKICAgICAgICAkczcgLT0gc2VsZjo6bXVsKCRzMTYsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczggKz0gc2VsZjo6bXVsKCRzMTYsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczkgLT0gc2VsZjo6bXVsKCRzMTYsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHMzICs9IHNlbGY6Om11bCgkczE1LCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHM0ICs9IHNlbGY6Om11bCgkczE1LCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHM1ICs9IHNlbGY6Om11bCgkczE1LCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHM2IC09IHNlbGY6Om11bCgkczE1LCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHM3ICs9IHNlbGY6Om11bCgkczE1LCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHM4IC09IHNlbGY6Om11bCgkczE1LCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzMiArPSBzZWxmOjptdWwoJHMxNCwgIDY2NjY0MywgMjApOwogICAgICAgICRzMyArPSBzZWxmOjptdWwoJHMxNCwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzNCArPSBzZWxmOjptdWwoJHMxNCwgIDY1NDE4MywgMjApOwogICAgICAgICRzNSAtPSBzZWxmOjptdWwoJHMxNCwgIDk5NzgwNSwgMjApOwogICAgICAgICRzNiArPSBzZWxmOjptdWwoJHMxNCwgIDEzNjY1NywgMTgpOwogICAgICAgICRzNyAtPSBzZWxmOjptdWwoJHMxNCwgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczEgKz0gc2VsZjo6bXVsKCRzMTMsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczIgKz0gc2VsZjo6bXVsKCRzMTMsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczMgKz0gc2VsZjo6bXVsKCRzMTMsICA2NTQxODMsIDIwKTsKICAgICAgICAkczQgLT0gc2VsZjo6bXVsKCRzMTMsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczUgKz0gc2VsZjo6bXVsKCRzMTMsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczYgLT0gc2VsZjo6bXVsKCRzMTMsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHMwICs9IHNlbGY6Om11bCgkczEyLCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMxICs9IHNlbGY6Om11bCgkczEyLCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHMyICs9IHNlbGY6Om11bCgkczEyLCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMzIC09IHNlbGY6Om11bCgkczEyLCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHM0ICs9IHNlbGY6Om11bCgkczEyLCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHM1IC09IHNlbGY6Om11bCgkczEyLCAgNjgzOTAxLCAyMCk7CiAgICAgICAgJHMxMiA9IDA7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkwICovCiAgICAgICAgJGNhcnJ5MCA9ICgkczAgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMSArPSAkY2FycnkwOwogICAgICAgICRzMCAtPSAkY2FycnkwIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyICovCiAgICAgICAgJGNhcnJ5MiA9ICgkczIgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMyArPSAkY2FycnkyOwogICAgICAgICRzMiAtPSAkY2FycnkyIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk0ICovCiAgICAgICAgJGNhcnJ5NCA9ICgkczQgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzNSArPSAkY2Fycnk0OwogICAgICAgICRzNCAtPSAkY2Fycnk0IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk2ICovCiAgICAgICAgJGNhcnJ5NiA9ICgkczYgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzNyArPSAkY2Fycnk2OwogICAgICAgICRzNiAtPSAkY2Fycnk2IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk4ICovCiAgICAgICAgJGNhcnJ5OCA9ICgkczggKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzOSArPSAkY2Fycnk4OwogICAgICAgICRzOCAtPSAkY2Fycnk4IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMCAqLwogICAgICAgICRjYXJyeTEwID0gKCRzMTAgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTEgKz0gJGNhcnJ5MTA7CiAgICAgICAgJHMxMCAtPSAkY2FycnkxMCA8PCAyMTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEgKi8KICAgICAgICAkY2FycnkxID0gKCRzMSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMyICs9ICRjYXJyeTE7CiAgICAgICAgJHMxIC09ICRjYXJyeTEgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTMgKi8KICAgICAgICAkY2FycnkzID0gKCRzMyArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM0ICs9ICRjYXJyeTM7CiAgICAgICAgJHMzIC09ICRjYXJyeTMgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTUgKi8KICAgICAgICAkY2Fycnk1ID0gKCRzNSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM2ICs9ICRjYXJyeTU7CiAgICAgICAgJHM1IC09ICRjYXJyeTUgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTcgKi8KICAgICAgICAkY2Fycnk3ID0gKCRzNyArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM4ICs9ICRjYXJyeTc7CiAgICAgICAgJHM3IC09ICRjYXJyeTcgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gKCRzOSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMCArPSAkY2Fycnk5OwogICAgICAgICRzOSAtPSAkY2Fycnk5IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMSAqLwogICAgICAgICRjYXJyeTExID0gKCRzMTEgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTIgKz0gJGNhcnJ5MTE7CiAgICAgICAgJHMxMSAtPSAkY2FycnkxMSA8PCAyMTsKCiAgICAgICAgJHMwICs9IHNlbGY6Om11bCgkczEyLCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMxICs9IHNlbGY6Om11bCgkczEyLCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHMyICs9IHNlbGY6Om11bCgkczEyLCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMzIC09IHNlbGY6Om11bCgkczEyLCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHM0ICs9IHNlbGY6Om11bCgkczEyLCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHM1IC09IHNlbGY6Om11bCgkczEyLCAgNjgzOTAxLCAyMCk7CiAgICAgICAgJHMxMiA9IDA7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkwICovCiAgICAgICAgJGNhcnJ5MCA9ICRzMCA+PiAyMTsKICAgICAgICAkczEgKz0gJGNhcnJ5MDsKICAgICAgICAkczAgLT0gJGNhcnJ5MCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MSAqLwogICAgICAgICRjYXJyeTEgPSAkczEgPj4gMjE7CiAgICAgICAgJHMyICs9ICRjYXJyeTE7CiAgICAgICAgJHMxIC09ICRjYXJyeTEgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gJHMyID4+IDIxOwogICAgICAgICRzMyArPSAkY2FycnkyOwogICAgICAgICRzMiAtPSAkY2FycnkyIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkzICovCiAgICAgICAgJGNhcnJ5MyA9ICRzMyA+PiAyMTsKICAgICAgICAkczQgKz0gJGNhcnJ5MzsKICAgICAgICAkczMgLT0gJGNhcnJ5MyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NCAqLwogICAgICAgICRjYXJyeTQgPSAkczQgPj4gMjE7CiAgICAgICAgJHM1ICs9ICRjYXJyeTQ7CiAgICAgICAgJHM0IC09ICRjYXJyeTQgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTUgKi8KICAgICAgICAkY2Fycnk1ID0gJHM1ID4+IDIxOwogICAgICAgICRzNiArPSAkY2Fycnk1OwogICAgICAgICRzNSAtPSAkY2Fycnk1IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk2ICovCiAgICAgICAgJGNhcnJ5NiA9ICRzNiA+PiAyMTsKICAgICAgICAkczcgKz0gJGNhcnJ5NjsKICAgICAgICAkczYgLT0gJGNhcnJ5NiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAkczcgPj4gMjE7CiAgICAgICAgJHM4ICs9ICRjYXJyeTc7CiAgICAgICAgJHM3IC09ICRjYXJyeTcgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gJHM4ID4+IDIxOwogICAgICAgICRzOSArPSAkY2Fycnk4OwogICAgICAgICRzOCAtPSAkY2Fycnk4IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk5ICovCiAgICAgICAgJGNhcnJ5OSA9ICRzOSA+PiAyMTsKICAgICAgICAkczEwICs9ICRjYXJyeTk7CiAgICAgICAgJHM5IC09ICRjYXJyeTkgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEwICovCiAgICAgICAgJGNhcnJ5MTAgPSAkczEwID4+IDIxOwogICAgICAgICRzMTEgKz0gJGNhcnJ5MTA7CiAgICAgICAgJHMxMCAtPSAkY2FycnkxMCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTEgKi8KICAgICAgICAkY2FycnkxMSA9ICRzMTEgPj4gMjE7CiAgICAgICAgJHMxMiArPSAkY2FycnkxMTsKICAgICAgICAkczExIC09ICRjYXJyeTExIDw8IDIxOwoKICAgICAgICAkczAgKz0gc2VsZjo6bXVsKCRzMTIsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczEgKz0gc2VsZjo6bXVsKCRzMTIsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczIgKz0gc2VsZjo6bXVsKCRzMTIsICA2NTQxODMsIDIwKTsKICAgICAgICAkczMgLT0gc2VsZjo6bXVsKCRzMTIsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczQgKz0gc2VsZjo6bXVsKCRzMTIsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczUgLT0gc2VsZjo6bXVsKCRzMTIsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gJHMwID4+IDIxOwogICAgICAgICRzMSArPSAkY2FycnkwOwogICAgICAgICRzMCAtPSAkY2FycnkwIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxICovCiAgICAgICAgJGNhcnJ5MSA9ICRzMSA+PiAyMTsKICAgICAgICAkczIgKz0gJGNhcnJ5MTsKICAgICAgICAkczEgLT0gJGNhcnJ5MSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MiAqLwogICAgICAgICRjYXJyeTIgPSAkczIgPj4gMjE7CiAgICAgICAgJHMzICs9ICRjYXJyeTI7CiAgICAgICAgJHMyIC09ICRjYXJyeTIgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTMgKi8KICAgICAgICAkY2FycnkzID0gJHMzID4+IDIxOwogICAgICAgICRzNCArPSAkY2FycnkzOwogICAgICAgICRzMyAtPSAkY2FycnkzIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk0ICovCiAgICAgICAgJGNhcnJ5NCA9ICRzNCA+PiAyMTsKICAgICAgICAkczUgKz0gJGNhcnJ5NDsKICAgICAgICAkczQgLT0gJGNhcnJ5NCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAkczUgPj4gMjE7CiAgICAgICAgJHM2ICs9ICRjYXJyeTU7CiAgICAgICAgJHM1IC09ICRjYXJyeTUgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gJHM2ID4+IDIxOwogICAgICAgICRzNyArPSAkY2Fycnk2OwogICAgICAgICRzNiAtPSAkY2Fycnk2IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICRzNyA+PiAyMTsKICAgICAgICAkczggKz0gJGNhcnJ5NzsKICAgICAgICAkczcgLT0gJGNhcnJ5NyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAkczggPj4gMjE7CiAgICAgICAgJHM5ICs9ICRjYXJyeTg7CiAgICAgICAgJHM4IC09ICRjYXJyeTggPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gJHM5ID4+IDIxOwogICAgICAgICRzMTAgKz0gJGNhcnJ5OTsKICAgICAgICAkczkgLT0gJGNhcnJ5OSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTAgKi8KICAgICAgICAkY2FycnkxMCA9ICRzMTAgPj4gMjE7CiAgICAgICAgJHMxMSArPSAkY2FycnkxMDsKICAgICAgICAkczEwIC09ICRjYXJyeTEwIDw8IDIxOwoKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICAgICAqLwogICAgICAgICRhcnIgPSBhcnJheSgKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHMwID4+IDApKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHMwID4+IDgpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzMCA+PiAxNikgfCAkczEgPDwgNSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczEgPj4gMykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczEgPj4gMTEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzMSA+PiAxOSkgfCAkczIgPDwgMikpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczIgPj4gNikpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgoJHMyID4+IDE0KSB8ICRzMyA8PCA3KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRzMyA+PiAxKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRzMyA+PiA5KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkczMgPj4gMTcpIHwgJHM0IDw8IDQpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHM0ID4+IDQpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHM0ID4+IDEyKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkczQgPj4gMjApIHwgJHM1IDw8IDEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHM1ID4+IDcpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzNSA+PiAxNSkgfCAkczYgPDwgNikpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczYgPj4gMikpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczYgPj4gMTApKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzNiA+PiAxOCkgfCAkczcgPDwgMykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczcgPj4gNSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczcgPj4gMTMpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHM4ID4+IDApKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHM4ID4+IDgpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzOCA+PiAxNikgfCAkczkgPDwgNSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczkgPj4gMykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczkgPj4gMTEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRzOSA+PiAxOSkgfCAkczEwIDw8IDIpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHMxMCA+PiA2KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkczEwID4+IDE0KSB8ICRzMTEgPDwgNykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkczExID4+IDEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJHMxMSA+PiA5KSksCiAgICAgICAgICAgIDB4ZmYgJiAoJHMxMSA+PiAxNykKICAgICAgICApOwogICAgICAgIHJldHVybiBzZWxmOjppbnRBcnJheVRvU3RyaW5nKCRhcnIpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjX3JlZHVjZSgkcykKICAgIHsKICAgICAgICAvKiogQHZhciBpbnQgJHMwICovCiAgICAgICAgJHMwID0gMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDAsIDMpKTsKICAgICAgICAvKiogQHZhciBpbnQgJHMxICovCiAgICAgICAgJHMxID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCAyLCA0KSkgPj4gNSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzMiAqLwogICAgICAgICRzMiA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgNSwgMykpID4+IDIpOwogICAgICAgIC8qKiBAdmFyIGludCAkczMgKi8KICAgICAgICAkczMgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHMsIDcsIDQpKSA+PiA3KTsKICAgICAgICAvKiogQHZhciBpbnQgJHM0ICovCiAgICAgICAgJHM0ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCAxMCwgNCkpID4+IDQpOwogICAgICAgIC8qKiBAdmFyIGludCAkczUgKi8KICAgICAgICAkczUgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDEzLCAzKSkgPj4gMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzNiAqLwogICAgICAgICRzNiA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMTUsIDQpKSA+PiA2KTsKICAgICAgICAvKiogQHZhciBpbnQgJHM3ICovCiAgICAgICAgJHM3ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAxOCwgNCkpID4+IDMpOwogICAgICAgIC8qKiBAdmFyIGludCAkczggKi8KICAgICAgICAkczggPSAyMDk3MTUxICYgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMjEsIDMpKTsKICAgICAgICAvKiogQHZhciBpbnQgJHM5ICovCiAgICAgICAgJHM5ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCAyMywgNCkpID4+IDUpOwogICAgICAgIC8qKiBAdmFyIGludCAkczEwICovCiAgICAgICAgJHMxMCA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMjYsIDMpKSA+PiAyKTsKICAgICAgICAvKiogQHZhciBpbnQgJHMxMSAqLwogICAgICAgICRzMTEgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHMsIDI4LCA0KSkgPj4gNyk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzMTIgKi8KICAgICAgICAkczEyID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCAzMSwgNCkpID4+IDQpOwogICAgICAgIC8qKiBAdmFyIGludCAkczEzICovCiAgICAgICAgJHMxMyA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMzQsIDMpKSA+PiAxKTsKICAgICAgICAvKiogQHZhciBpbnQgJHMxNCAqLwogICAgICAgICRzMTQgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHMsIDM2LCA0KSkgPj4gNik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzMTUgKi8KICAgICAgICAkczE1ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAzOSwgNCkpID4+IDMpOwogICAgICAgIC8qKiBAdmFyIGludCAkczE2ICovCiAgICAgICAgJHMxNiA9IDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCA0MiwgMykpOwogICAgICAgIC8qKiBAdmFyIGludCAkczE3ICovCiAgICAgICAgJHMxNyA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgNDQsIDQpKSA+PiA1KTsKICAgICAgICAvKiogQHZhciBpbnQgJHMxOCAqLwogICAgICAgICRzMTggPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDQ3LCAzKSkgPj4gMik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzMTkgKi8KICAgICAgICAkczE5ID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA0OSwgNCkpID4+IDcpOwogICAgICAgIC8qKiBAdmFyIGludCAkczIwICovCiAgICAgICAgJHMyMCA9IDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgNTIsIDQpKSA+PiA0KTsKICAgICAgICAvKiogQHZhciBpbnQgJHMyMSAqLwogICAgICAgICRzMjEgPSAyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDU1LCAzKSkgPj4gMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzMjIgKi8KICAgICAgICAkczIyID0gMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA1NywgNCkpID4+IDYpOwogICAgICAgIC8qKiBAdmFyIGludCAkczIzICovCiAgICAgICAgJHMyMyA9IChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA2MCwgNCkpID4+IDMpOwoKICAgICAgICAkczExICs9IHNlbGY6Om11bCgkczIzLCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMxMiArPSBzZWxmOjptdWwoJHMyMywgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMTMgKz0gc2VsZjo6bXVsKCRzMjMsICA2NTQxODMsIDIwKTsKICAgICAgICAkczE0IC09IHNlbGY6Om11bCgkczIzLCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHMxNSArPSBzZWxmOjptdWwoJHMyMywgIDEzNjY1NywgMTgpOwogICAgICAgICRzMTYgLT0gc2VsZjo6bXVsKCRzMjMsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHMxMCArPSBzZWxmOjptdWwoJHMyMiwgIDY2NjY0MywgMjApOwogICAgICAgICRzMTEgKz0gc2VsZjo6bXVsKCRzMjIsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczEyICs9IHNlbGY6Om11bCgkczIyLCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMxMyAtPSBzZWxmOjptdWwoJHMyMiwgIDk5NzgwNSwgMjApOwogICAgICAgICRzMTQgKz0gc2VsZjo6bXVsKCRzMjIsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczE1IC09IHNlbGY6Om11bCgkczIyLCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzOSAgKz0gc2VsZjo6bXVsKCRzMjEsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczEwICs9IHNlbGY6Om11bCgkczIxLCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHMxMSArPSBzZWxmOjptdWwoJHMyMSwgIDY1NDE4MywgMjApOwogICAgICAgICRzMTIgLT0gc2VsZjo6bXVsKCRzMjEsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczEzICs9IHNlbGY6Om11bCgkczIxLCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHMxNCAtPSBzZWxmOjptdWwoJHMyMSwgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczggICs9IHNlbGY6Om11bCgkczIwLCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHM5ICArPSBzZWxmOjptdWwoJHMyMCwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMTAgKz0gc2VsZjo6bXVsKCRzMjAsICA2NTQxODMsIDIwKTsKICAgICAgICAkczExIC09IHNlbGY6Om11bCgkczIwLCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHMxMiArPSBzZWxmOjptdWwoJHMyMCwgIDEzNjY1NywgMTgpOwogICAgICAgICRzMTMgLT0gc2VsZjo6bXVsKCRzMjAsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHM3ICArPSBzZWxmOjptdWwoJHMxOSwgIDY2NjY0MywgMjApOwogICAgICAgICRzOCAgKz0gc2VsZjo6bXVsKCRzMTksICA0NzAyOTYsIDE5KTsKICAgICAgICAkczkgICs9IHNlbGY6Om11bCgkczE5LCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHMxMCAtPSBzZWxmOjptdWwoJHMxOSwgIDk5NzgwNSwgMjApOwogICAgICAgICRzMTEgKz0gc2VsZjo6bXVsKCRzMTksICAxMzY2NTcsIDE4KTsKICAgICAgICAkczEyIC09IHNlbGY6Om11bCgkczE5LCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzNiAgKz0gc2VsZjo6bXVsKCRzMTgsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczcgICs9IHNlbGY6Om11bCgkczE4LCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHM4ICArPSBzZWxmOjptdWwoJHMxOCwgIDY1NDE4MywgMjApOwogICAgICAgICRzOSAgLT0gc2VsZjo6bXVsKCRzMTgsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczEwICs9IHNlbGY6Om11bCgkczE4LCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHMxMSAtPSBzZWxmOjptdWwoJHMxOCwgIDY4MzkwMSwgMjApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NiAqLwogICAgICAgICRjYXJyeTYgPSAoJHM2ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczcgKz0gJGNhcnJ5NjsKICAgICAgICAkczYgLT0gJGNhcnJ5NiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAoJHM4ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczkgKz0gJGNhcnJ5ODsKICAgICAgICAkczggLT0gJGNhcnJ5OCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTAgKi8KICAgICAgICAkY2FycnkxMCA9ICgkczEwICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczExICs9ICRjYXJyeTEwOwogICAgICAgICRzMTAgLT0gJGNhcnJ5MTAgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEyICovCiAgICAgICAgJGNhcnJ5MTIgPSAoJHMxMiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMyArPSAkY2FycnkxMjsKICAgICAgICAkczEyIC09ICRjYXJyeTEyIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxNCAqLwogICAgICAgICRjYXJyeTE0ID0gKCRzMTQgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTUgKz0gJGNhcnJ5MTQ7CiAgICAgICAgJHMxNCAtPSAkY2FycnkxNCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTYgKi8KICAgICAgICAkY2FycnkxNiA9ICgkczE2ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczE3ICs9ICRjYXJyeTE2OwogICAgICAgICRzMTYgLT0gJGNhcnJ5MTYgPDwgMjE7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICgkczcgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzOCArPSAkY2Fycnk3OwogICAgICAgICRzNyAtPSAkY2Fycnk3IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk5ICovCiAgICAgICAgJGNhcnJ5OSA9ICgkczkgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTAgKz0gJGNhcnJ5OTsKICAgICAgICAkczkgLT0gJGNhcnJ5OSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTEgKi8KICAgICAgICAkY2FycnkxMSA9ICgkczExICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczEyICs9ICRjYXJyeTExOwogICAgICAgICRzMTEgLT0gJGNhcnJ5MTEgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEzICovCiAgICAgICAgJGNhcnJ5MTMgPSAoJHMxMyArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxNCArPSAkY2FycnkxMzsKICAgICAgICAkczEzIC09ICRjYXJyeTEzIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxNSAqLwogICAgICAgICRjYXJyeTE1ID0gKCRzMTUgKyAoMSA8PCAyMCkpID4+IDIxOwogICAgICAgICRzMTYgKz0gJGNhcnJ5MTU7CiAgICAgICAgJHMxNSAtPSAkY2FycnkxNSA8PCAyMTsKCiAgICAgICAgJHM1ICArPSBzZWxmOjptdWwoJHMxNywgIDY2NjY0MywgMjApOwogICAgICAgICRzNiAgKz0gc2VsZjo6bXVsKCRzMTcsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczcgICs9IHNlbGY6Om11bCgkczE3LCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHM4ICAtPSBzZWxmOjptdWwoJHMxNywgIDk5NzgwNSwgMjApOwogICAgICAgICRzOSAgKz0gc2VsZjo6bXVsKCRzMTcsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczEwIC09IHNlbGY6Om11bCgkczE3LCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzNCArPSBzZWxmOjptdWwoJHMxNiwgIDY2NjY0MywgMjApOwogICAgICAgICRzNSArPSBzZWxmOjptdWwoJHMxNiwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzNiArPSBzZWxmOjptdWwoJHMxNiwgIDY1NDE4MywgMjApOwogICAgICAgICRzNyAtPSBzZWxmOjptdWwoJHMxNiwgIDk5NzgwNSwgMjApOwogICAgICAgICRzOCArPSBzZWxmOjptdWwoJHMxNiwgIDEzNjY1NywgMTgpOwogICAgICAgICRzOSAtPSBzZWxmOjptdWwoJHMxNiwgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczMgKz0gc2VsZjo6bXVsKCRzMTUsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczQgKz0gc2VsZjo6bXVsKCRzMTUsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczUgKz0gc2VsZjo6bXVsKCRzMTUsICA2NTQxODMsIDIwKTsKICAgICAgICAkczYgLT0gc2VsZjo6bXVsKCRzMTUsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczcgKz0gc2VsZjo6bXVsKCRzMTUsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczggLT0gc2VsZjo6bXVsKCRzMTUsICA2ODM5MDEsIDIwKTsKCiAgICAgICAgJHMyICs9IHNlbGY6Om11bCgkczE0LCAgNjY2NjQzLCAyMCk7CiAgICAgICAgJHMzICs9IHNlbGY6Om11bCgkczE0LCAgNDcwMjk2LCAxOSk7CiAgICAgICAgJHM0ICs9IHNlbGY6Om11bCgkczE0LCAgNjU0MTgzLCAyMCk7CiAgICAgICAgJHM1IC09IHNlbGY6Om11bCgkczE0LCAgOTk3ODA1LCAyMCk7CiAgICAgICAgJHM2ICs9IHNlbGY6Om11bCgkczE0LCAgMTM2NjU3LCAxOCk7CiAgICAgICAgJHM3IC09IHNlbGY6Om11bCgkczE0LCAgNjgzOTAxLCAyMCk7CgogICAgICAgICRzMSArPSBzZWxmOjptdWwoJHMxMywgIDY2NjY0MywgMjApOwogICAgICAgICRzMiArPSBzZWxmOjptdWwoJHMxMywgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMyArPSBzZWxmOjptdWwoJHMxMywgIDY1NDE4MywgMjApOwogICAgICAgICRzNCAtPSBzZWxmOjptdWwoJHMxMywgIDk5NzgwNSwgMjApOwogICAgICAgICRzNSArPSBzZWxmOjptdWwoJHMxMywgIDEzNjY1NywgMTgpOwogICAgICAgICRzNiAtPSBzZWxmOjptdWwoJHMxMywgIDY4MzkwMSwgMjApOwoKICAgICAgICAkczAgKz0gc2VsZjo6bXVsKCRzMTIsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczEgKz0gc2VsZjo6bXVsKCRzMTIsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczIgKz0gc2VsZjo6bXVsKCRzMTIsICA2NTQxODMsIDIwKTsKICAgICAgICAkczMgLT0gc2VsZjo6bXVsKCRzMTIsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczQgKz0gc2VsZjo6bXVsKCRzMTIsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczUgLT0gc2VsZjo6bXVsKCRzMTIsICA2ODM5MDEsIDIwKTsKICAgICAgICAkczEyID0gMDsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gKCRzMCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxICs9ICRjYXJyeTA7CiAgICAgICAgJHMwIC09ICRjYXJyeTAgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gKCRzMiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMzICs9ICRjYXJyeTI7CiAgICAgICAgJHMyIC09ICRjYXJyeTIgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gKCRzNCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM1ICs9ICRjYXJyeTQ7CiAgICAgICAgJHM0IC09ICRjYXJyeTQgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gKCRzNiArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM3ICs9ICRjYXJyeTY7CiAgICAgICAgJHM2IC09ICRjYXJyeTYgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRzOCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHM5ICs9ICRjYXJyeTg7CiAgICAgICAgJHM4IC09ICRjYXJyeTggPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEwICovCiAgICAgICAgJGNhcnJ5MTAgPSAoJHMxMCArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMSArPSAkY2FycnkxMDsKICAgICAgICAkczEwIC09ICRjYXJyeTEwIDw8IDIxOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MSAqLwogICAgICAgICRjYXJyeTEgPSAoJHMxICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczIgKz0gJGNhcnJ5MTsKICAgICAgICAkczEgLT0gJGNhcnJ5MSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAoJHMzICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczQgKz0gJGNhcnJ5MzsKICAgICAgICAkczMgLT0gJGNhcnJ5MyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAoJHM1ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczYgKz0gJGNhcnJ5NTsKICAgICAgICAkczUgLT0gJGNhcnJ5NSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJHM3ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczggKz0gJGNhcnJ5NzsKICAgICAgICAkczcgLT0gJGNhcnJ5NyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OSAqLwogICAgICAgICRjYXJyeTkgPSAoJHM5ICsgKDEgPDwgMjApKSA+PiAyMTsKICAgICAgICAkczEwICs9ICRjYXJyeTk7CiAgICAgICAgJHM5IC09ICRjYXJyeTkgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTExICovCiAgICAgICAgJGNhcnJ5MTEgPSAoJHMxMSArICgxIDw8IDIwKSkgPj4gMjE7CiAgICAgICAgJHMxMiArPSAkY2FycnkxMTsKICAgICAgICAkczExIC09ICRjYXJyeTExIDw8IDIxOwoKICAgICAgICAkczAgKz0gc2VsZjo6bXVsKCRzMTIsICA2NjY2NDMsIDIwKTsKICAgICAgICAkczEgKz0gc2VsZjo6bXVsKCRzMTIsICA0NzAyOTYsIDE5KTsKICAgICAgICAkczIgKz0gc2VsZjo6bXVsKCRzMTIsICA2NTQxODMsIDIwKTsKICAgICAgICAkczMgLT0gc2VsZjo6bXVsKCRzMTIsICA5OTc4MDUsIDIwKTsKICAgICAgICAkczQgKz0gc2VsZjo6bXVsKCRzMTIsICAxMzY2NTcsIDE4KTsKICAgICAgICAkczUgLT0gc2VsZjo6bXVsKCRzMTIsICA2ODM5MDEsIDIwKTsKICAgICAgICAkczEyID0gMDsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gJHMwID4+IDIxOwogICAgICAgICRzMSArPSAkY2FycnkwOwogICAgICAgICRzMCAtPSAkY2FycnkwIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxICovCiAgICAgICAgJGNhcnJ5MSA9ICRzMSA+PiAyMTsKICAgICAgICAkczIgKz0gJGNhcnJ5MTsKICAgICAgICAkczEgLT0gJGNhcnJ5MSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MiAqLwogICAgICAgICRjYXJyeTIgPSAkczIgPj4gMjE7CiAgICAgICAgJHMzICs9ICRjYXJyeTI7CiAgICAgICAgJHMyIC09ICRjYXJyeTIgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTMgKi8KICAgICAgICAkY2FycnkzID0gJHMzID4+IDIxOwogICAgICAgICRzNCArPSAkY2FycnkzOwogICAgICAgICRzMyAtPSAkY2FycnkzIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk0ICovCiAgICAgICAgJGNhcnJ5NCA9ICRzNCA+PiAyMTsKICAgICAgICAkczUgKz0gJGNhcnJ5NDsKICAgICAgICAkczQgLT0gJGNhcnJ5NCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAkczUgPj4gMjE7CiAgICAgICAgJHM2ICs9ICRjYXJyeTU7CiAgICAgICAgJHM1IC09ICRjYXJyeTUgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gJHM2ID4+IDIxOwogICAgICAgICRzNyArPSAkY2Fycnk2OwogICAgICAgICRzNiAtPSAkY2Fycnk2IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk3ICovCiAgICAgICAgJGNhcnJ5NyA9ICRzNyA+PiAyMTsKICAgICAgICAkczggKz0gJGNhcnJ5NzsKICAgICAgICAkczcgLT0gJGNhcnJ5NyA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OCAqLwogICAgICAgICRjYXJyeTggPSAkczggPj4gMjE7CiAgICAgICAgJHM5ICs9ICRjYXJyeTg7CiAgICAgICAgJHM4IC09ICRjYXJyeTggPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gJHM5ID4+IDIxOwogICAgICAgICRzMTAgKz0gJGNhcnJ5OTsKICAgICAgICAkczkgLT0gJGNhcnJ5OSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MTAgKi8KICAgICAgICAkY2FycnkxMCA9ICRzMTAgPj4gMjE7CiAgICAgICAgJHMxMSArPSAkY2FycnkxMDsKICAgICAgICAkczEwIC09ICRjYXJyeTEwIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMSAqLwogICAgICAgICRjYXJyeTExID0gJHMxMSA+PiAyMTsKICAgICAgICAkczEyICs9ICRjYXJyeTExOwogICAgICAgICRzMTEgLT0gJGNhcnJ5MTEgPDwgMjE7CgogICAgICAgICRzMCArPSBzZWxmOjptdWwoJHMxMiwgIDY2NjY0MywgMjApOwogICAgICAgICRzMSArPSBzZWxmOjptdWwoJHMxMiwgIDQ3MDI5NiwgMTkpOwogICAgICAgICRzMiArPSBzZWxmOjptdWwoJHMxMiwgIDY1NDE4MywgMjApOwogICAgICAgICRzMyAtPSBzZWxmOjptdWwoJHMxMiwgIDk5NzgwNSwgMjApOwogICAgICAgICRzNCArPSBzZWxmOjptdWwoJHMxMiwgIDEzNjY1NywgMTgpOwogICAgICAgICRzNSAtPSBzZWxmOjptdWwoJHMxMiwgIDY4MzkwMSwgMjApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MCAqLwogICAgICAgICRjYXJyeTAgPSAkczAgPj4gMjE7CiAgICAgICAgJHMxICs9ICRjYXJyeTA7CiAgICAgICAgJHMwIC09ICRjYXJyeTAgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTEgKi8KICAgICAgICAkY2FycnkxID0gJHMxID4+IDIxOwogICAgICAgICRzMiArPSAkY2FycnkxOwogICAgICAgICRzMSAtPSAkY2FycnkxIDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkyICovCiAgICAgICAgJGNhcnJ5MiA9ICRzMiA+PiAyMTsKICAgICAgICAkczMgKz0gJGNhcnJ5MjsKICAgICAgICAkczIgLT0gJGNhcnJ5MiA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAkczMgPj4gMjE7CiAgICAgICAgJHM0ICs9ICRjYXJyeTM7CiAgICAgICAgJHMzIC09ICRjYXJyeTMgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gJHM0ID4+IDIxOwogICAgICAgICRzNSArPSAkY2Fycnk0OwogICAgICAgICRzNCAtPSAkY2Fycnk0IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk1ICovCiAgICAgICAgJGNhcnJ5NSA9ICRzNSA+PiAyMTsKICAgICAgICAkczYgKz0gJGNhcnJ5NTsKICAgICAgICAkczUgLT0gJGNhcnJ5NSA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NiAqLwogICAgICAgICRjYXJyeTYgPSAkczYgPj4gMjE7CiAgICAgICAgJHM3ICs9ICRjYXJyeTY7CiAgICAgICAgJHM2IC09ICRjYXJyeTYgPDwgMjE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTcgKi8KICAgICAgICAkY2Fycnk3ID0gJHM3ID4+IDIxOwogICAgICAgICRzOCArPSAkY2Fycnk3OwogICAgICAgICRzNyAtPSAkY2Fycnk3IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2Fycnk4ICovCiAgICAgICAgJGNhcnJ5OCA9ICRzOCA+PiAyMTsKICAgICAgICAkczkgKz0gJGNhcnJ5ODsKICAgICAgICAkczggLT0gJGNhcnJ5OCA8PCAyMTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OSAqLwogICAgICAgICRjYXJyeTkgPSAkczkgPj4gMjE7CiAgICAgICAgJHMxMCArPSAkY2Fycnk5OwogICAgICAgICRzOSAtPSAkY2Fycnk5IDw8IDIxOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkxMCAqLwogICAgICAgICRjYXJyeTEwID0gJHMxMCA+PiAyMTsKICAgICAgICAkczExICs9ICRjYXJyeTEwOwogICAgICAgICRzMTAgLT0gJGNhcnJ5MTAgPDwgMjE7CgogICAgICAgIC8qKgogICAgICAgICAqIEB2YXIgYXJyYXk8aW50LCBpbnQ+CiAgICAgICAgICovCiAgICAgICAgJGFyciA9IGFycmF5KAogICAgICAgICAgICAoaW50KSAoJHMwID4+IDApLAogICAgICAgICAgICAoaW50KSAoJHMwID4+IDgpLAogICAgICAgICAgICAoaW50KSAoKCRzMCA+PiAxNikgfCAkczEgPDwgNSksCiAgICAgICAgICAgIChpbnQpICgkczEgPj4gMyksCiAgICAgICAgICAgIChpbnQpICgkczEgPj4gMTEpLAogICAgICAgICAgICAoaW50KSAoKCRzMSA+PiAxOSkgfCAkczIgPDwgMiksCiAgICAgICAgICAgIChpbnQpICgkczIgPj4gNiksCiAgICAgICAgICAgIChpbnQpICgoJHMyID4+IDE0KSB8ICRzMyA8PCA3KSwKICAgICAgICAgICAgKGludCkgKCRzMyA+PiAxKSwKICAgICAgICAgICAgKGludCkgKCRzMyA+PiA5KSwKICAgICAgICAgICAgKGludCkgKCgkczMgPj4gMTcpIHwgJHM0IDw8IDQpLAogICAgICAgICAgICAoaW50KSAoJHM0ID4+IDQpLAogICAgICAgICAgICAoaW50KSAoJHM0ID4+IDEyKSwKICAgICAgICAgICAgKGludCkgKCgkczQgPj4gMjApIHwgJHM1IDw8IDEpLAogICAgICAgICAgICAoaW50KSAoJHM1ID4+IDcpLAogICAgICAgICAgICAoaW50KSAoKCRzNSA+PiAxNSkgfCAkczYgPDwgNiksCiAgICAgICAgICAgIChpbnQpICgkczYgPj4gMiksCiAgICAgICAgICAgIChpbnQpICgkczYgPj4gMTApLAogICAgICAgICAgICAoaW50KSAoKCRzNiA+PiAxOCkgfCAkczcgPDwgMyksCiAgICAgICAgICAgIChpbnQpICgkczcgPj4gNSksCiAgICAgICAgICAgIChpbnQpICgkczcgPj4gMTMpLAogICAgICAgICAgICAoaW50KSAoJHM4ID4+IDApLAogICAgICAgICAgICAoaW50KSAoJHM4ID4+IDgpLAogICAgICAgICAgICAoaW50KSAoKCRzOCA+PiAxNikgfCAkczkgPDwgNSksCiAgICAgICAgICAgIChpbnQpICgkczkgPj4gMyksCiAgICAgICAgICAgIChpbnQpICgkczkgPj4gMTEpLAogICAgICAgICAgICAoaW50KSAoKCRzOSA+PiAxOSkgfCAkczEwIDw8IDIpLAogICAgICAgICAgICAoaW50KSAoJHMxMCA+PiA2KSwKICAgICAgICAgICAgKGludCkgKCgkczEwID4+IDE0KSB8ICRzMTEgPDwgNyksCiAgICAgICAgICAgIChpbnQpICgkczExID4+IDEpLAogICAgICAgICAgICAoaW50KSAoJHMxMSA+PiA5KSwKICAgICAgICAgICAgKGludCkgJHMxMSA+PiAxNwogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmludEFycmF5VG9TdHJpbmcoJGFycik7CiAgICB9CgogICAgLyoqCiAgICAgKiBtdWx0aXBseSBieSB0aGUgb3JkZXIgb2YgdGhlIG1haW4gc3ViZ3JvdXAgbCA9IDJeMjUyKzI3NzQyMzE3Nzc3MzcyMzUzNTM1ODUxOTM3NzkwODgzNjQ4NDkzCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRBCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfbXVsX2woUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMgJEEpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRhc2xpZGUgKi8KICAgICAgICAkYXNsaWRlID0gYXJyYXkoCiAgICAgICAgICAgIDEzLCAwLCAwLCAwLCAwLCAtMSwgMCwgMCwgMCwgMCwgLTExLCAwLCAwLCAwLCAwLCAwLCAwLCAtNSwgMCwgMCwgMCwKICAgICAgICAgICAgMCwgMCwgMCwgLTMsIDAsIDAsIDAsIDAsIC0xMywgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMywgMCwKICAgICAgICAgICAgMCwgMCwgMCwgLTEzLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMSwgMCwgMCwgMCwKICAgICAgICAgICAgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIC0xMywgMCwgMCwgMCwgMCwgMCwgMCwgLTMsIDAsIDAsIDAsIDAsIDAsIC0xLAogICAgICAgICAgICAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAtMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1LCAwLCAwLCAwLAogICAgICAgICAgICAwLCAwLCAtMSwgMCwgMCwgMCwgMCwgLTEsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX0NhY2hlZD4gJEFpIHNpemUgOCAqLwogICAgICAgICRBaSA9IGFycmF5KCk7CgogICAgICAgICMgZ2VfcDNfdG9fY2FjaGVkKCZBaVswXSwgQSk7CiAgICAgICAgJEFpWzBdID0gc2VsZjo6Z2VfcDNfdG9fY2FjaGVkKCRBKTsKICAgICAgICAjIGdlX3AzX2RibCgmdCwgQSk7CiAgICAgICAgJHQgPSBzZWxmOjpnZV9wM19kYmwoJEEpOwogICAgICAgICMgZ2VfcDFwMV90b19wMygmQTIsICZ0KTsKICAgICAgICAkQTIgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKCiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgODsgKyskaSkgewogICAgICAgICAgICAjIGdlX2FkZCgmdCwgJkEyLCAmQWlbMF0pOwogICAgICAgICAgICAkdCA9IHNlbGY6OmdlX2FkZCgkQTIsICRBaVskaSAtIDFdKTsKICAgICAgICAgICAgIyBnZV9wMXAxX3RvX3AzKCZ1LCAmdCk7CiAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICMgZ2VfcDNfdG9fY2FjaGVkKCZBaVtpXSwgJnUpOwogICAgICAgICAgICAkQWlbJGldID0gc2VsZjo6Z2VfcDNfdG9fY2FjaGVkKCR1KTsKICAgICAgICB9CgogICAgICAgICRyID0gc2VsZjo6Z2VfcDNfMCgpOwogICAgICAgIGZvciAoJGkgPSAyNTI7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9wM19kYmwoJHIpOwogICAgICAgICAgICBpZiAoJGFzbGlkZVskaV0gPiAwKSB7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsICZ0KTsKICAgICAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICAgICAjIGdlX2FkZCgmdCwgJnUsICZBaVthc2xpZGVbaV0gLyAyXSk7CiAgICAgICAgICAgICAgICAkdCA9IHNlbGY6OmdlX2FkZCgkdSwgJEFpWyhpbnQpKCRhc2xpZGVbJGldIC8gMildKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRhc2xpZGVbJGldIDwgMCkgewogICAgICAgICAgICAgICAgIyBnZV9wMXAxX3RvX3AzKCZ1LCAmdCk7CiAgICAgICAgICAgICAgICAkdSA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHQpOwogICAgICAgICAgICAgICAgIyBnZV9zdWIoJnQsICZ1LCAmQWlbKC1hc2xpZGVbaV0pIC8gMl0pOwogICAgICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9zdWIoJHUsICRBaVsoaW50KSgtJGFzbGlkZVskaV0gLyAyKV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdlX3AxcDFfdG9fcDMociwgJnQpOwogICAgICAgIHJldHVybiBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Fe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogKgogKiBUaGlzIHJlcHJlc2VudHMgYSBGaWVsZCBFbGVtZW50CiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSBpbXBsZW1lbnRzIEFycmF5QWNjZXNzCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbnRhaW5lciA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJHNpemUgPSAxMDsKCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5CiAgICAgKiBAcGFyYW0gYm9vbCAkc2F2ZV9pbmRleGVzCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQXJyYXkoJGFycmF5LCAkc2F2ZV9pbmRleGVzID0gbnVsbCkKICAgIHsKICAgICAgICAkY291bnQgPSBjb3VudCgkYXJyYXkpOwogICAgICAgIGlmICgkc2F2ZV9pbmRleGVzKSB7CiAgICAgICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkYXJyYXkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRrZXlzID0gcmFuZ2UoMCwgJGNvdW50IC0gMSk7CiAgICAgICAgfQogICAgICAgICRhcnJheSA9IGFycmF5X3ZhbHVlcygkYXJyYXkpOwoKICAgICAgICAkb2JqID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgaWYgKCRzYXZlX2luZGV4ZXMpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGNvdW50OyArKyRpKSB7CiAgICAgICAgICAgICAgICAkb2JqLT5vZmZzZXRTZXQoJGtleXNbJGldLCAkYXJyYXlbJGldKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgKyskaSkgewogICAgICAgICAgICAgICAgJG9iai0+b2Zmc2V0U2V0KCRpLCAkYXJyYXlbJGldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWlzX2ludCgkdmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGludGVnZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX251bGwoJG9mZnNldCkpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbnRhaW5lcltdID0gJHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbJG9mZnNldF0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdKQogICAgICAgICAgICA/ICR0aGlzLT5jb250YWluZXJbJG9mZnNldF0KICAgICAgICAgICAgOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVidWdJbmZvKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoaW1wbG9kZSgnLCAnLCAkdGhpcy0+Y29udGFpbmVyKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgppZiAoY2xhc3NfZXhpc3RzKCdQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfQ2FjaGVkCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWXBsdXNYOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFltaW51c1g7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWjsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRUMmQ7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9DYWNoZWQgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZXxudWxsICRZcGx1c1gKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZXxudWxsICRZbWludXNYCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmV8bnVsbCAkWgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlfG51bGwgJFQyZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJFlwbHVzWCA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJFltaW51c1ggPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRaID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkVDJkID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCRZcGx1c1ggPT09IG51bGwpIHsKICAgICAgICAgICAgJFlwbHVzWCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WXBsdXNYID0gJFlwbHVzWDsKICAgICAgICBpZiAoJFltaW51c1ggPT09IG51bGwpIHsKICAgICAgICAgICAgJFltaW51c1ggPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlltaW51c1ggPSAkWW1pbnVzWDsKICAgICAgICBpZiAoJFogPT09IG51bGwpIHsKICAgICAgICAgICAgJFogPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlogPSAkWjsKICAgICAgICBpZiAoJFQyZCA9PT0gbnVsbCkgewogICAgICAgICAgICAkVDJkID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5UMmQgPSAkVDJkOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P1p1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AxcDEnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDFwMQogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDFwMQp7CiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRYOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFk7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWjsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRUOwoKICAgIC8qKgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDFwMSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHgKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZXxudWxsICR5CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmV8bnVsbCAkegogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICR4ID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeSA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHogPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICR0ID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCR4ID09PSBudWxsKSB7CiAgICAgICAgICAgICR4ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5YID0gJHg7CiAgICAgICAgaWYgKCR5ID09PSBudWxsKSB7CiAgICAgICAgICAgICR5ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5ZID0gJHk7CiAgICAgICAgaWYgKCR6ID09PSBudWxsKSB7CiAgICAgICAgICAgICR6ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5aID0gJHo7CiAgICAgICAgaWYgKCR0ID09PSBudWxsKSB7CiAgICAgICAgICAgICR0ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5UID0gJHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AyJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMgogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWDsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRZOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFo7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMiBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHgKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZXxudWxsICR5CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmV8bnVsbCAkegogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHggPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICR5ID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeiA9IG51bGwKICAgICkgewogICAgICAgIGlmICgkeCA9PT0gbnVsbCkgewogICAgICAgICAgICAkeCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WCA9ICR4OwogICAgICAgIGlmICgkeSA9PT0gbnVsbCkgewogICAgICAgICAgICAkeSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WSA9ICR5OwogICAgICAgIGlmICgkeiA9PT0gbnVsbCkgewogICAgICAgICAgICAkeiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WiA9ICR6OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMwogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDMKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWDsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRZOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFo7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkVDsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmV8bnVsbCAkeAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHkKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZXxudWxsICR6CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmV8bnVsbCAkdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHggPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICR5ID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeiA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHQgPSBudWxsCiAgICApIHsKICAgICAgICBpZiAoJHggPT09IG51bGwpIHsKICAgICAgICAgICAgJHggPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlggPSAkeDsKICAgICAgICBpZiAoJHkgPT09IG51bGwpIHsKICAgICAgICAgICAgJHkgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlkgPSAkeTsKICAgICAgICBpZiAoJHogPT09IG51bGwpIHsKICAgICAgICAgICAgJHogPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlogPSAkejsKICAgICAgICBpZiAoJHQgPT09IG51bGwpIHsKICAgICAgICAgICAgJHQgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlQgPSAkdDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Precomp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkeXBsdXN4OwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJHltaW51c3g7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkeHkyZDsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeXBsdXN4CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHltaW51c3gKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkeHkyZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHlwbHVzeCA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJHltaW51c3ggPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICR4eTJkID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCR5cGx1c3ggPT09IG51bGwpIHsKICAgICAgICAgICAgJHlwbHVzeCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+eXBsdXN4ID0gJHlwbHVzeDsKICAgICAgICBpZiAoJHltaW51c3ggPT09IG51bGwpIHsKICAgICAgICAgICAgJHltaW51c3ggPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnltaW51c3ggPSAkeW1pbnVzeDsKICAgICAgICBpZiAoJHh5MmQgPT09IG51bGwpIHsKICAgICAgICAgICAgJHh5MmQgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnh5MmQgPSAkeHkyZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/H.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0gnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0gKICoKICogVGhpcyBqdXN0IGNvbnRhaW5zIHRoZSBjb25zdGFudHMgaW4gdGhlIHJlZjEwL2Jhc2UuaCBmaWxlCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9IIGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWwKewogICAgLyoqCiAgICAgKiBTZWU6IGxpYnNvZGl1bSdzIGNyeXB0b19jb3JlL2N1cnZlMjU1MTkvcmVmMTAvYmFzZS5oCiAgICAgKgogICAgICogQHZhciBhcnJheTxpbnQsIGFycmF5PGludCwgYXJyYXk8aW50LCBhcnJheTxpbnQsIGludD4+Pj4gQmFzaWNhbGx5LCBpbnRbMzJdWzhdWzNdWzEwXQogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRiYXNlID0gYXJyYXkoCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjU5Njc0OTMsIC0xNDM1NjAzNSwgMjk1NjY0NTYsIDM2NjA4OTYsIC0xMjY5NDM0NSwgNDAxNDc4NywgMjc1NDQ2MjYsIC0xMTc1NDI3MSwgLTYwNzkxNTYsIDIwNDc2MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyNTQ1NzExLCA5MzQyNjIsIC0yNzIyOTEwLCAzMDQ5OTkwLCAtNzI3NDI4LCA5NDA2OTg2LCAxMjcyMDY5MiwgNTA0MzM4NCwgMTk1MDA5MjksIC0xNTQ2OTM3OCksCiAgICAgICAgICAgICAgICBhcnJheSgtODczODE4MSwgNDQ4OTU3MCwgOTY4ODQ0MSwgLTE0Nzg1MTk0LCAxMDE4NDYwOSwgLTEyMzYzMzgwLCAyOTI4NzkxOSwgMTE4NjQ4OTksIC0yNDUxNDM2MiwgLTQ0Mzg1NDYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMjgxNTg5NCwgLTEyOTc2MzQ3LCAtMjE1ODEyNDMsIDExNzg0MzIwLCAtMjUzNTU2NTgsIC0yNzUwNzE3LCAtMTE3MTc5MDMsIC0zODE0NTcxLCAtMzU4NDQ1LCAtMTAyMTEzMDMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxNzAzMjM3LCA2OTAzODI1LCAyNzE4NTQ5MSwgNjQ1MTk3MywgLTI5NTc3NzI0LCAtOTU1NDAwNSwgLTE1NjE2NTUxLCAxMTE4OTI2OCwgLTI2ODI5Njc4LCAtNTMxOTA4MSksCiAgICAgICAgICAgICAgICBhcnJheSgyNjk2NjY0MiwgMTExNTI2MTcsIDMyNDQyNDk1LCAxNTM5NjA1NCwgMTQzNTM4MzksIC0xMjc1MjMzNSwgLTMxMjg4MjYsIC05NTQxMTE4LCAtMTU0NzIwNDcsIC00MTY2Njk3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTYzNjI5MSwgLTk2ODg1NTcsIDI0MjA0NzczLCAtNzkxMjM5OCwgNjE2OTc3LCAtMTY2ODUyNjIsIDI3Nzg3NjAwLCAtMTQ3NzIxODksIDI4OTQ0NDAwLCAtMTU1MDAyNCksCiAgICAgICAgICAgICAgICBhcnJheSgxNjU2ODkzMywgNDcxNzA5NywgLTExNTU2MTQ4LCAtMTEwMjMyMiwgMTU2ODI4OTYsIC0xMTgwNzA0MywgMTYzNTQ1NzcsIC0xMTc3NTk2MiwgNzY4OTY2MiwgMTExOTk1NzQpLAogICAgICAgICAgICAgICAgYXJyYXkoMzA0NjQxNTYsIC01OTc2MTI1LCAtMTE3Nzk0MzQsIC0xNTY3MDg2NSwgMjMyMjAzNjUsIDE1OTE1ODUyLCA3NTEyNzc0LCAxMDAxNzMyNiwgLTE3NzQ5MDkzLCAtOTkyMDM1NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MDM2ODc4LCAxMzkyMTg5MiwgMTA5NDU4MDYsIC02MDMzNDMxLCAyNzEwNTA1MiwgLTE2MDg0Mzc5LCAtMjg5MjYyMTAsIDE1MDA2MDIzLCAzMjg0NTY4LCAtNjI3NjU0MCksCiAgICAgICAgICAgICAgICBhcnJheSgyMzU5OTI5NSwgLTgzMDYwNDcsIC0xMTE5MzY2NCwgLTc2ODc0MTYsIDEzMjM2Nzc0LCAxMDUwNjM1NSwgNzQ2NDU3OSwgOTY1NjQ0NSwgMTMwNTkxNjIsIDEwMzc0Mzk3KSwKICAgICAgICAgICAgICAgIGFycmF5KDc3OTg1NTYsIDE2NzEwMjU3LCAzMDMzOTIyLCAyODc0MDg2LCAyODk5Nzg2MSwgMjgzNTYwNCwgMzI0MDY2NjQsIC0zODM5MDQ1LCAtNjQxNzA4LCAtMTAxMzI1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMDg2MTM2MywgMTE0NzMxNTQsIDI3Mjg0NTQ2LCAxOTgxMTc1LCAtMzAwNjQzNDksIDEyNTc3ODYxLCAzMjg2Nzg4NSwgMTQ1MTUxMDcsIC0xNTQzODMwNCwgMTA4MTkzODApLAogICAgICAgICAgICAgICAgYXJyYXkoNDcwODAyNiwgNjMzNjc0NSwgMjAzNzc1ODYsIDkwNjY4MDksIC0xMTI3MjEwOSwgNjU5NDY5NiwgLTI1NjUzNjY4LCAxMjQ4MzY4OCwgLTEyNjY4NDkxLCA1NTgxMzA2KSwKICAgICAgICAgICAgICAgIGFycmF5KDE5NTYzMTYwLCAxNjE4NjQ2NCwgLTI5Mzg2ODU3LCA0MDk3NTE5LCAxMDIzNzk4NCwgLTQzNDgxMTUsIDI4NTQyMzUwLCAxMzg1MDI0MywgLTIzNjc4MDIxLCAtMTU4MTU5NDIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNTM3MTk2NCwgLTEyODYyNzU0LCAzMjU3MzI1MCwgNDcyMDE5NywgLTI2NDM2NTIyLCA1ODc1NTExLCAtMTkxODg2MjcsIC0xNTIyNDgxOSwgLTk4MTg5NDAsIC0xMjA4NTc3NyksCiAgICAgICAgICAgICAgICBhcnJheSgtODU0OTIxMiwgMTA5OTgzLCAxNTE0OTM2MywgMjE3ODcwNSwgMjI5MDA2MTgsIDQ1NDM0MTcsIDMwNDQyNDAsIC0xNTY4OTg4NywgMTc2MjMyOCwgMTQ4NjY3MzcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE4MTk5Njk1LCAtMTU5NTE0MjMsIC0xMDQ3MzI5MCwgMTcwNzI3OCwgLTE3MTg1OTIwLCAzOTE2MTAxLCAtMjgyMzY0MTIsIDM5NTk0MjEsIDI3OTE0NDU0LCA0MzgzNjUyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg1MTUzNzQ2LCA5OTA5Mjg1LCAxNzIzNzQ3LCAtMjc3Nzg3NCwgMzA1MjM2MDUsIDU1MTY4NzMsIDE5NDgwODUyLCA1MjMwMTM0LCAtMjM5NTI0MzksIC0xNTE3NTc2NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAyNjkwMDcsIC0zNDYzNTA5LCA3NjY1NDg2LCAxMDA4Mzc5MywgMjg0NzU1MjUsIDE2NDk3MjIsIDIwNjU0MDI1LCAxNjUyMDEyNSwgMzA1OTg0NDksIDc3MTU3MDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjg4ODE4NDUsIDE0MzgxNTY4LCA5NjU3OTA0LCAzNjgwNzU3LCAtMjAxODE2MzUsIDc4NDMzMTYsIC0zMTQwMDY2MCwgMTM3MDcwOCwgMjk3OTQ1NTMsIC0xNDA5MzAwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDQ5OTQ3MSwgLTI3Mjk1OTksIC0zMzE5MTExMywgLTQyNTQ2NTIsIDI4NDk0ODYyLCAxNDI3MTI2NywgMzAyOTA3MzUsIDEwODc2NDU0LCAtMzMxNTQwOTgsIDIzODE3MjYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTcxOTU0MzEsIC0yNjU1MzYzLCAtMTQ3MzAxNTUsIDQ2MjI1MSwgLTI3NzI0MzI2LCAzOTQxMzcyLCAtNjIzNjYxNywgMzY5NjAwNSwgLTMyMzAwODMyLCAxNTM1MTk1NSksCiAgICAgICAgICAgICAgICBhcnJheSgyNzQzMTE5NCwgODIyMjMyMiwgMTY0NDg3NjAsIC0zOTA3OTk1LCAtMTg3MDcwMDIsIDExOTM4MzU1LCAtMzI5NjE0MDEsIC0yOTcwNTE1LCAyOTU1MTgxMywgMTAxMDk0MjUpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEzNjU3MDQwLCAtMTMxNTU0MzEsIC0zMTI4Mzc1MCwgMTE3NzcwOTgsIDIxNDQ3Mzg2LCA2NTE5Mzg0LCAtMjM3ODI4NCwgLTE2Mjc1NTYsIDEwMDkyNzgzLCAtNDc2NDE3MSksCiAgICAgICAgICAgICAgICBhcnJheSgyNzkzOTE2NiwgMTQyMTAzMjIsIDQ2NzcwMzUsIDE2Mjc3MDQ0LCAtMjI5NjQ0NjIsIC0xMjM5ODEzOSwgLTMyNTA4NzU0LCAxMjAwNTUzOCwgLTE3ODEwMTI3LCAxMjgwMzUxMCksCiAgICAgICAgICAgICAgICBhcnJheSgxNzIyODk5OSwgLTE1NjYxNjI0LCAtMTIzMzUyNywgMzAwMTQwLCAtMTIyNDg3MCwgLTExNzE0Nzc3LCAzMDM2NDIxMywgLTkwMzgxOTQsIDE4MDE2MzU3LCA0Mzk3NjYwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTA5NTg4NDMsIC03NjkwMjA3LCA0Nzc2MzQxLCAtMTQ5NTQyMzgsIDI3ODUwMDI4LCAtMTU2MDIyMTIsIC0yNjYxOTEwNiwgMTQ1NDQ1MjUsIC0xNzQ3NzUwNCwgOTgyNjM5KSwKICAgICAgICAgICAgICAgIGFycmF5KDI5MjUzNTk4LCAxNTc5NjcwMywgLTI4NjM5ODIsIC05OTA4ODg0LCAxMDA1NzAyMywgMzE2MzUzNiwgNzMzMjg5OSwgLTQxMjAxMjgsIC0yMTA0NzY5NiwgOTkzNDk2MyksCiAgICAgICAgICAgICAgICBhcnJheSg1NzkzMzAzLCAxNjI3MTkyMywgLTI0MTMxNjE0LCAtMTAxMTY0MDQsIDI5MTg4NTYwLCAxMjA2NTE3LCAtMTQ3NDc5MzAsIDQ1NTk4OTUsIC0zMDEyMzkyMiwgLTEwODk3OTUwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjc2NDM5NTIsIC0xMTQ5MzAwNiwgMTYyODI2NTcsIC0xMTAzNjQ5MywgMjg0MTQwMjEsIC0xNTAxMjI2NCwgMjQxOTEwMzQsIDQ1NDE2OTcsIC0xMzMzODMwOSwgNTUwMDU2OCksCiAgICAgICAgICAgICAgICBhcnJheSgxMjY1MDU0OCwgLTE0OTcxMTMsIDkwNTI4NzEsIDExMzU1MzU4LCAtMTc2ODAwMzcsIC04NDAwMTY0LCAtMTc0MzA1OTIsIDEyMjY0MzQzLCAxMDg3NDA1MSwgMTM1MjQzMzUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjU1NTY5NDgsIC0zMDQ1OTkwLCA3MTQ2NTEsIDI1MTA0MDAsIDIzMzk0NjgyLCAtMTA0MTUzMzAsIDMzMTE5MDM4LCA1MDgwNTY4LCAtMjI1MjgwNTksIDUzNzY2MjgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNjA4ODI2NCwgLTQwMTEwNTIsIC0xNzAxMzY5OSwgLTM1Mzc2MjgsIC02NzI2NzkzLCAxOTIwODk3LCAtMjIzMjEzMDUsIC05NDQ3NDQzLCA0NTM1NzY4LCAxNTY5MDA3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjU1NDIyLCAxNDYwNjYzMCwgLTIxNjkyNDQwLCAtODAzOTgxOCwgMjg0MzA2NDksIDg3NzU4MTksIC0zMDQ5NDU2MiwgMzA0NDI5MCwgMzE4NDgyODAsIDEyNTQzNzcyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjAyODU3OSwgMjk0Mzg5MywgLTMxODU3NTEzLCA2Nzc3MzA2LCAxMzc4NDQ2MiwgLTQyOTIyMDMsIC0yNzM3NzE5NSwgLTIwNjI3MzEsIDc3MTg0ODIsIDE0NDc0NjUzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMzg1MzE1LCAyNDU0MjEzLCAtMjI2MzEzMjAsIDQ2NjAzLCAtNDQzNzkzNSwgLTE1NjgwNDE1LCA2NTY5NjUsIC03MjM2NjY1LCAyNDMxNjE2OCwgLTUyNTM1NjcpLAogICAgICAgICAgICAgICAgYXJyYXkoMTM3NDE1MjksIDEwOTExNTY4LCAtMzMyMzM0MTcsIC04NjAzNzM3LCAtMjAxNzc4MzAsIC0xMDMzMjk3LCAzMzA0MDY1MSwgLTEzNDI0NTMyLCAtMjA3Mjk0NTYsIDgzMjE2ODYpLAogICAgICAgICAgICAgICAgYXJyYXkoMjEwNjA0OTAsIC0yMjEyNzQ0LCAxNTcxMjc1NywgLTQzMzYwOTksIDE2MzkwNDAsIDEwNjU2MzM2LCAyMzg0NTk2NSwgLTExODc0ODM4LCAtOTk4NDQ1OCwgNjA4MzcyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTM2NzI3MzIsIC0xNTA4NzU4NiwgLTEwODg5NjkzLCAtNzU1NzA1OSwgLTYwMzY5MDksIDExMzA1NTQ3LCAxMTIzOTY4LCAtNjc4MDU3NywgMjcyMjkzOTksIDIzODg3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzI0NDE0MCwgLTI5NDIwNSwgLTExNzQ0NzI4LCAxNDcxMjU3MSwgLTI5NDY1Njk5LCAtMjAyOTYxNywgMTI3OTcwMjQsIC02NDQwMzA4LCAtMTYzMzQwNSwgMTY2Nzg5NTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI5NTAwNjIwLCA0NzcwNjYyLCAtMTYwNTQzODcsIDE0MDAxMzM4LCA3ODMwMDQ3LCA5NTY0ODA1LCAtMTUwODE0NCwgLTQ3OTUwNDUsIC0xNzE2OTI2NSwgNDkwNDk1MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjQwNTk1NTcsIDE0NjE3MDAzLCAxOTAzNzE1NywgLTE1MDM5OTA4LCAxOTc2NjA5MywgLTE0OTA2NDI5LCA1MTY5MjExLCAxNjE5MTg4MCwgMjEyODIzNiwgLTQzMjY4MzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2OTgxMTUyLCA0MTI0OTY2LCAtODU0MDYxMCwgLTEwNjUzNzk3LCAzMDMzNjUyMiwgLTE0MTA1MjQ3LCAtMjk4MDYzMzYsIDkxNjAzMywgLTY4ODI1NDIsIC0yOTg2NTMyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjYzMDkwNywgMTI0MTkzNzIsIC03MTM0MjI5LCAtNzQ3MzM3MSwgLTE2NDc4OTA0LCAxNjczOTE3NSwgMjg1NDMxLCAyNzYzODI5LCAxNTczNjMyMiwgNDE0Mzg3NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjM3OTM1MiwgMTE4MzkzNDUsIC00MTEwNDAyLCAtNTk4ODY2NSwgMTEyNzQyOTgsIDc5NDk1NywgMjEyODAxLCAtMTQ1OTQ2NjMsIDIzNTI3MDg0LCAtMTY0NTgyNjgpLAogICAgICAgICAgICAgICAgYXJyYXkoMzM0MzExMjcsIC0xMTEzMDQ3OCwgLTE3ODM4OTY2LCAtMTU2MjY5MDAsIDg5MDk0OTksIDgzNzY1MzAsIC0zMjYyNTM0MCwgNDA4Nzg4MSwgLTE1MTg4OTExLCAtMTQ0MTYyMTQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTc2NzY4MywgNzE5Nzk4NywgLTEzMjA1MjI2LCAtMjAyMjYzNSwgLTEzMDkxMzUwLCA0NDg4MjYsIDU3OTkwNTUsIDQzNTc4NjgsIC00Nzc0MTkxLCAtMTYzMjMwMzgpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNjcyMTk2NiwgMTM4MzM4MjMsIC0yMzUyMzM4OCwgLTE1NTEzMTQsIDI2MzU0MjkzLCAtMTE4NjMzMjEsIDIzMzY1MTQ3LCAtMzk0OTczMiwgNzM5MDg5MCwgMjc1OTgwMCksCiAgICAgICAgICAgICAgICBhcnJheSg0NDA5MDQxLCAyMDUyMzgxLCAyMzM3Mzg1MywgMTA1MzAyMTcsIDc2NzY3NzksIC0xMjg4NTk1NCwgMjEzMDIzNTMsIC00MjY0MDU3LCAxMjQ0MzgwLCAtMTI5MTk2NDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ0MjEyMzksIDcxNjk2MTksIDQ5ODIzNjgsIC0yOTU3NTkwLCAzMDI1NjgyNSwgLTI3Nzc1NDAsIDE0MDg2NDEzLCA5MjA4MjM2LCAxNTg4NjQyOSwgMTY0ODk2NjQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE5OTYwNzUsIDEwMzc1NjQ5LCAxNDM0NjM2NywgMTMzMTEyMDIsIC02ODc0MTM1LCAtMTY0Mzg0MTEsIC0xMzY5MzE5OCwgMzk4MzY5LCAtMzA2MDY0NTUsIC03MTI5MzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1MzA3NDY1LCA5Nzk1ODgwLCAtMjc3NzQxNCwgMTQ4Nzg4MDksIC0zMzUzMTgzNSwgMTQ3ODAzNjMsIDEzMzQ4NTUzLCAxMjA3Njk0NywgLTMwODM2NDYyLCA1MTEzMTgyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzc3MDc4NCwgMTE3OTc3OTYsIDMxOTUwODQzLCAxMzkyOTEyMywgLTI1ODg4MzAyLCAxMjI4ODM0NCwgLTMwMzQxMTAxLCAtNzMzNjM4NiwgMTM4NDc3MTEsIDUzODcyMjIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xODU4MjE2MywgLTM0MTYyMTcsIDE3ODI0ODQzLCAtMjM0MDk2NiwgMjI3NDQzNDMsIC0xMDQ0MjYxMSwgODc2MzA2MSwgMzYxNzc4NiwgLTE5NjAwNjYyLCAxMDM3MDk5MSksCiAgICAgICAgICAgICAgICBhcnJheSgyMDI0NjU2NywgLTE0MzY5Mzc4LCAyMjM1ODIyOSwgLTU0MzcxMiwgMTg1MDcyODMsIC0xMDQxMzk5NiwgMTQ1NTQ0MzcsIC04NzQ2MDkyLCAzMjIzMjkyNCwgMTY3NjM4ODApLAogICAgICAgICAgICAgICAgYXJyYXkoOTY0ODUwNSwgMTAwOTQ1NjMsIDI2NDE2NjkzLCAxNDc0NTkyOCwgLTMwMzc0MzE4LCAtNjQ3MjYyMSwgMTEwOTQxNjEsIDE1Njg5NTA2LCAzMTQwMDM4LCAtMTY1MTAwOTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNjE2MDA3MiwgNTQ3MjY5NSwgMzE4OTU1ODgsIDQ3NDQ5OTQsIDg4MjM1MTUsIDEwMzY1Njg1LCAtMjcyMjQ4MDAsIDk0NDg2MTMsIC0yODc3NDQ1NCwgMzY2Mjk1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE5MTUzNDUwLCAxMTUyMzk3MiwgLTExMDk2NDkwLCAtNjUwMzE0MiwgLTI0NjQ3NjMxLCA1NDIwNjQ3LCAyODM0NDU3MywgODA0MTExMywgNzE5NjA1LCAxMTY3MTc4OCksCiAgICAgICAgICAgICAgICBhcnJheSg4Njc4MDI1LCAyNjk0NDQwLCAtNjgwODAxNCwgMjUxNzM3MiwgNDk2NDMyNiwgMTExNTIyNzEsIC0xNTQzMjkxNiwgLTE1MjY2NTE2LCAyNzAwMDgxMywgLTEwMTk1NTUzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTUxNTc5MDQsIDcxMzQzMTIsIDg2MzkyODcsIC0yODE0ODc3LCAtNzIzNTY4OCwgMTA0MjE3NDIsIDU2NDA2NSwgNTMzNjA5NywgNjc1MDk3NywgLTE0NTIxMDI2KSwKICAgICAgICAgICAgICAgIGFycmF5KDExODM2NDEwLCAtMzk3OTQ4OCwgMjYyOTc4OTQsIDE2MDgwNzk5LCAyMzQ1NTA0NSwgMTU3MzU5NDQsIDE2OTU4MjMsIC04ODE5MTIyLCA4MTY5NzIwLCAxNjIyMDM0NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTgxMTU4MzgsIDg2NTM2NDcsIDE3NTc4NTY2LCAtNjA5MjYxOSwgLTgwMjU3NzcsIC0xNjAxMjc2MywgLTExMTQ0MzA3LCAtMjYyNzY2NCwgLTU5OTA3MDgsIC0xNDE2NjAzMyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMzA4NDk4LCAtMTA5NjgzMTIsIDE1MjEzMjI4LCAtMTAwODEyMTQsIC0zMDg1MzYwNSwgLTExMDUwMDA0LCAyNzg4NDMyOSwgMjg0NzI4NCwgMjY1NTg2MSwgMTczODM5NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjc1Mzc0MzMsIC0xNDI1MzAyMSwgLTI1MzM2MzAxLCAtODAwMjc4MCwgLTkzNzA3NjIsIDgxMjk4MjEsIDIxNjUxNjA4LCAtMzIzOTMzNiwgLTE5MDg3NDQ5LCAtMTEwMDUyNzgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTUzMzExMCwgMzQzNzg1NSwgMjM3MzU4ODksIDQ1OTI3NiwgMjk5NzA1MDEsIDExMzM1Mzc3LCAyNjAzMDA5MiwgNTgyMTQwOCwgMTA0NzgxOTYsIDg1NDQ4OTApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMyMTczMTIxLCAtMTYxMjkzMTEsIDI0ODk2MjA3LCAzOTIxNDk3LCAyMjU3OTA1NiwgLTM0MTA4NTQsIDE5MjcwNDQ5LCAxMjIxNzQ3MywgMTc3ODkwMTcsIC0zMzk1OTk1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDU1Mjk2MSwgLTIyMjg0MDEsIC0xNTU3ODgyOSwgLTEwMTQ3MjAxLCAxMzI0Mzg4OSwgNTE3MDI0LCAxNTQ3OTQwMSwgLTM4NTMyMzMsIDMwNDYwNTIwLCAxMDUyNTk2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTYxNDg3NSwgMTMzMjM2MTgsIDMyNjE4NzkzLCA4MTc1OTA3LCAtMTUyMzAxNzMsIDEyNTk2Njg3LCAyNzQ5MTU5NSwgLTQ2MTIzNTksIDMxNzkyNjgsIC05NDc4ODkxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMTk0NzA2OSwgLTE0MzY2NjUxLCAtNDY0MDU4MywgLTE1MzM5OTIxLCAtMTUxMjU5NzcsIC02MDM5NzA5LCAtMTQ3NTY3NzcsIC0xNjQxMTc0MCwgMTkwNzI2NDAsIC05NTExMDYwKSwKICAgICAgICAgICAgICAgIGFycmF5KDExNjg1MDU4LCAxMTgyMjQxMCwgMzE1ODAwMywgLTEzOTUyNTk0LCAzMzQwMjE5NCwgLTQxNjUwNjYsIDU5Nzc4OTYsIC01MjE1MDE3LCA0NzMwOTksIDUwNDA2MDgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMjkwODYzLCA4MTk4NjQyLCAtMjc0MTAxMzIsIDExNjAyMTIzLCAxMjkwMzc1LCAtMjc5OTc2MCwgMjgzMjY4NjIsIDE3MjEwOTIsIC0xOTU1ODY0MiwgLTMxMzE2MDYpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNzg4MTUzMiwgMTA2ODc5MzcsIDc1Nzg3MjMsIDc3MzgzNzgsIC0xODk1MTAxMiwgLTI1NTM5NTIsIDIxODIwNzg2LCA4MDc2MTQ5LCAtMjc4Njg0OTYsIDExNTM4Mzg5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xOTkzNTY2NiwgMzg5OTg2MSwgMTgyODM0OTcsIC02ODAxNTY4LCAtMTU3Mjg2NjAsIC0xMTI0OTIxMSwgODc1NDUyNSwgNzQ0NjcwMiwgLTU2NzYwNTQsIDU3OTcwMTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExMjk1NjAwLCAtMzc5MzU2OSwgLTE1NzgyMTEwLCAtNzk2NDU3MywgMTI3MDg4NjksIC04NDU2MTk5LCAyMDE0MDk5LCAtOTA1MDU3NCwgLTIzNjkxNzIsIC01ODc3MzQxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjI0NzIzNzYsIC0xMTU2ODc0MSwgLTI3NjgyMDIwLCAxMTQ2Mzc1LCAxODk1NjY5MSwgMTY2NDA1NTksIDExOTI3MzAsIC0zNzE0MTk5LCAxNTEyMzYxOSwgMTA4MTE1MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQzNTIwOTgsIC0zNDE5NzE1LCAtMTg5NDIwNDQsIDEwODIyNjU1LCAzMjc1MDU5NiwgNDY5OTAwNywgLTcwMzYzLCAxNTc3NjM1NiwgLTI4ODg2Nzc5LCAtMTE5NzQ1NTMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4MjQxMTY0LCAtODA3MjQ3NSwgLTQ5Nzg5NjIsIC01MzE1MzE3LCAyOTQxNjkzMSwgMTg0NzU2OSwgLTIwNjU0MTczLCAtMTY0ODQ4NTUsIDQ3MTQ1NDcsIC05NjAwNjU1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTIwMDMzMiwgODM2ODU3MiwgMTk2NzkxMDEsIDE1OTcwMDc0LCAtMzE4NzI2NzQsIDE5NTk0NTEsIDI0NjExNTk5LCAtNDU0MzgzMiwgLTExNzQ1ODc2LCAxMjM0MDIyMCksCiAgICAgICAgICAgICAgICBhcnJheSgxMjg3NjkzNywgLTEwNDgwMDU2LCAzMzEzNDM4MSwgNjU5MDk0MCwgLTYzMDc3NzYsIDE0ODcyNDQwLCA5NjEzOTUzLCA4MjQxMTUyLCAxNTM3MDk4NywgOTYwODYzMSksCiAgICAgICAgICAgICAgICBhcnJheSgtNDE0MzI3NywgLTEyMDE0NDA4LCA4NDQ2MjgxLCAtMzkxNjAzLCA0NDA3NzM4LCAxMzYyOTAzMiwgLTc3MjQ4NjgsIDE1ODY2MDc0LCAtMjgyMTA2MjEsIC04ODE0MDk5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNjY2MDYyOCwgLTE1Njc3NjU1LCA4MzkzNzM0LCAzNTgwNDcsIC03NDAxMjkxLCA5OTI5ODgsIC0yMzkwNDIzMywgODU4Njk3LCAyMDU3MTIyMywgODQyMDU1NiksCiAgICAgICAgICAgICAgICBhcnJheSgxNDYyMDcxNSwgMTMwNjcyMjcsIC0xNTQ0NzI3NCwgODI2NDQ2NywgMTQxMDYyNjksIDE1MDgwODE0LCAzMzUzMTgyNywgMTI1MTY0MDYsIC0yMTU3NDQzNSwgLTEyNDc2NzQ5KSwKICAgICAgICAgICAgICAgIGFycmF5KDIzNjg4MSwgMTA0NzYyMjYsIDU3MjU4LCAtMTQ2NzcwMjQsIDY0NzI5OTgsIDI0NjY5ODQsIDE3MjU4NTE5LCA3MjU2NzQwLCA4NzkxMTM2LCAxNTA2OTkzMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTI3NjQxMCwgLTkzNzE5MTgsIDIyOTQ5NjM1LCAtMTYzMjI4MDcsIC0yMzQ5MzAzOSwgLTU3MDIxODYsIDE0NzExODc1LCA0ODc0MjI5LCAtMzA2NjMxNDAsIC0yMzMxMzkxKSwKICAgICAgICAgICAgICAgIGFycmF5KDU4NTU2NjYsIDQ5OTAyMDQsIC0xMzcxMTg0OCwgNzI5NDI4NCwgLTc4MDQyODIsIDE5MjQ2NDcsIC0xNDIzMTc1LCAtNzkxMjM3OCwgLTMzMDY5MzM3LCA5MjM0MjUzKSwKICAgICAgICAgICAgICAgIGFycmF5KDIwNTkwNTAzLCAtOTAxODk4OCwgMzE1Mjk3NDQsIC03MzUyNjY2LCAtMjcwNjgzNCwgMTA2NTA1NDgsIDMxNTU5MDU1LCAtMTE2MDk1ODcsIDE4OTc5MTg2LCAxMzM5NjA2NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjQ0NzQyODcsIDQ5NjgxMDMsIDIyMjY3MDgyLCA0NDA3MzU0LCAyNDA2Mzg4MiwgLTgzMjUxODAsIC0xODgxNjg4NywgMTM1OTQ3ODIsIDMzNTE0NjUwLCA3MDIxOTU4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTU2NjkwNiwgLTY1NjU1MDUsIC0yMTM2NTA4NSwgMTU5Mjg4OTIsIC0yNjE1ODMwNSwgNDMxNTQyMSwgLTI1OTQ4NzI4LCAtMzkxNjY3NywgLTIxNDgwNDgwLCAxMjg2ODA4MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjg2MzUwMTMsIDEzNTA0NjYxLCAxOTk4ODAzNywgLTIxMzI3NjEsIDIxMDc4MjI1LCA2NDQzMjA4LCAtMjE0NDYxMDcsIDIyNDQ1MDAsIC0xMjQ1NTc5NywgLTgwODkzODMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMDU5NTUyOCwgMTM3OTM0NzksIC01ODUyODIwLCAzMTkxMzYsIC0yNTcyMzE3MiwgLTYyNjM4OTksIDMzMDg2NTQ2LCA4OTU3OTM3LCAtMTUyMzM2NDgsIDU1NDA1MjEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNjMwMTc2LCAtMTE1MDM5MDIsIC04MTE5NTAwLCAtNzY0MzA3MywgMjYyMDA1NiwgMTAyMjkwOCwgLTIzNzEwNzQ0LCAtMTU2ODk4NCwgLTE2MTI4NTI4LCAtMTQ5NjI4MDcpLAogICAgICAgICAgICAgICAgYXJyYXkoMjMxNTI5NzEsIDc3NTM4NiwgMjczOTU0NjMsIDE0MDA2NjM1LCAtOTcwMTExOCwgNDY0OTUxMiwgMTY4OTgxOSwgODkyMTg1LCAtMTE1MTMyNzcsIC0xNTIwNTk0OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoOTc3MDEyOSwgOTU4NjczOCwgMjY0OTYwOTQsIDQzMjQxMjAsIDE1NTY1MTEsIC0zNTUwMDI0LCAyNzQ1MzgxOSwgNDc2MzEyNywgLTE5MTc5NjE0LCA1ODY3MTM0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMjc2NTAyNSwgMTkyNzU5MCwgMzE3MjY0MDksIC00NzUzMjk1LCAyMzk2MjQzNCwgLTE2MDE5NTAwLCAyNzg0NjU1OSwgNTkzMTI2MywgLTI5NzQ5NzAzLCAtMTYxMDg0NTUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjc0NjE4ODUsIC0yOTc3NTM2LCAyMjM4MDgxMCwgMTgxNTg1NCwgLTIzMDMzNzUzLCAtMzAzMTkzOCwgNzI4MzQ5MCwgLTE1MTQ4MDczLCAtMTk1MjY3MDAsIDc3MzQ2MjkpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTgwMTAyNjQsIC05NTkwODE3LCAtMTExMjA0MDMsIDYxOTYwMzgsIDI5MzQ0MTU4LCAtMTM0MzA4ODUsIDc1ODUyOTUsIC0zMTc2NjI2LCAxODU0OTQ5NywgMTUzMDIwNjkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMyNjU4MzM3LCAtNjE3MTIyMiwgLTc2NzI3OTMsIC0xMTA1MTY4MSwgNjI1ODg3OCwgMTM1MDQzODEsIDEwNDU4NzkwLCAtNjQxODQ2MSwgLTg4NzIyNDIsIDg0MjQ3NDYpLAogICAgICAgICAgICAgICAgYXJyYXkoMjQ2ODcyMDUsIDg2MTMyNzYsIC0zMDY2NzA0NiwgLTMyMzM1NDUsIDE4NjM4OTIsIC0xODMwNTQ0LCAxOTIwNjIzNCwgNzEzNDkxNywgLTExMjg0NDgyLCAtODI4OTE5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTMzNDg5OSwgLTkyMTgwMjIsIDgwMjUyOTMsIDEyNzA3NTE5LCAxNzUyMzg5MiwgLTEwNDc2MDcxLCAxMDI0MzczOCwgLTE0Njg1NDYxLCAtNTA2NjAzNCwgMTY0OTg4MzcpLAogICAgICAgICAgICAgICAgYXJyYXkoODkxMTU0MiwgNjg4NzE1OCwgLTk1ODQyNjAsIC02OTU4NTkwLCAxMTE0NTY0MSwgLTk1NDM2ODAsIDE3MzAzOTI1LCAtMTQxMjQyMzgsIDY1MzY2NDEsIDEwNTQzOTA2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODk0NjM4NCwgMTU0Nzk3NjMsIC0xNzQ2NjgzNSwgNTY4ODc2LCAtMTQ5NzY4MywgMTEyMjM0NTQsIC0yNjY5MTkwLCAtMTY2MjU1NzQsIC0yNzIzNTcwOSwgODg3Njc3MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NzQyODk5LCAtMTI1NjY4NjQsIC0xNTY0OTk2NiwgLTg0NjYwNywgLTMzMDI2Njg2LCAtNzk2Mjg4LCAtMzM0ODE4MjIsIDE1ODI0NDc0LCAtNjA0NDI2LCAtOTAzOTgxNyksCiAgICAgICAgICAgICAgICBhcnJheSgxMDMzMDA1NiwgNzAwNTEsIDc5NTczODgsIC05MDAyNjY3LCA5NzY0OTAyLCAxNTYwOTc1NiwgMjc2OTg2OTcsIC00ODkwMDM3LCAxNjU3Mzk0LCAzMDg0MDk4KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwNDc3OTYzLCAtNzQ3MDI2MCwgMTIxMTk1NjYsIC0xMzI1MDgwNSwgMjkwMTYyNDcsIC01MzY1NTg5LCAzMTI4MDMxOSwgMTQzOTYxNTEsIC0zMDIzMzU3NSwgMTUyNzI0MDkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMjI4ODMwOSwgMzE2OTQ2MywgMjg4MTMxODMsIDE2NjU4NzUzLCAyNTExNjQzMiwgLTU2MzA0NjYsIC0yNTE3Mzk1NywgLTEyNjM2MTM4LCAtMjUwMTQ3NTcsIDE5NTA1MDQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI2MTgwMzU4LCA5NDg5MTg3LCAxMTA1MzQxNiwgLTE0NzQ2MTYxLCAtMzEwNTM3MjAsIDU4MjU2MzAsIC04Mzg0MzA2LCAtODc2NzUzMiwgMTUzNDEyNzksIDgzNzM3MjcpLAogICAgICAgICAgICAgICAgYXJyYXkoMjg2ODU4MjEsIDc3NTk1MDUsIC0xNDM3ODUxNiwgLTEyMDAyODYwLCAtMzE5NzE4MjAsIDQwNzkyNDIsIDI5ODEzNiwgLTEwMjMyNjAyLCAtMjg3ODIwNywgMTUxOTA0MjApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMjkzMjg3NiwgMTM4MDYzMzYsIC0xNDMzNzQ4NSwgLTE1Nzk0NDMxLCAtMjQwMDQ2MjAsIDEwOTQwOTI4LCA4NjY5NzE4LCAyNzQyMzkzLCAtMjYwMzMzMTMsIC02ODc1MDAzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTgwMzg4LCAtMTE3Mjk0MTcsIC0yNTk3OTY1OCwgLTExNDQ1MDIzLCAtMTc0MTE4NzQsIC0xMDkxMjg1NCwgOTI5MTU5NCwgLTE2MjQ3Nzc5LCAtMTIxNTQ3NDIsIDYwNDg2MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMwMzA1MzE1LCAxNDg0MzQ0NCwgMTUzOTMwMSwgMTE4NjQzNjYsIDIwMjAxNjc3LCAxOTAwMTYzLCAxMzkzNDIzMSwgNTEyODMyMywgMTEyMTMyNjIsIDkxNjgzODQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNjI4MDUxMywgMTEwMDc4NDcsIDE5NDA4OTYwLCAtOTQwNzU4LCAtMTg1OTI5NjUsIC00MzI4NTgwLCAtNTA4ODA2MCwgLTExMTA1MTUwLCAyMDQ3MDE1NywgLTE2Mzk4NzAxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzEzNjA1MywgOTI4MjE5MiwgMTQ4NTUxNzksIC0xNTM5MDA3OCwgLTczNjI4MTUsIC0xNDQwODU2MCwgLTIyNzgzOTUyLCAxNDQ2MTYwOCwgMTQwNDI5NzgsIDUyMzA2ODMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjk5Njk1NjcsIC0yNzQxNTk0LCAtMTY3MTE4NjcsIC04NTUyNDQyLCA5MTc1NDg2LCAtMjQ2ODk3NCwgMjE1NTY5NTEsIDM1MDYwNDIsIC01OTMzODkxLCAtMTI0NDk3MDgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMTQ0NzQ2LCA4NzQ0NjYxLCAxOTcwNDAwMywgNDU4MTI3OCwgLTIwNDMwNjg2LCA2ODMwNjgzLCAtMjEyODQxNzAsIDg5NzE1MTMsIC0yODUzOTE4OSwgMTUzMjY1NjMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5NDY0NjI5LCAxMDExMDI4OCwgLTE3MjYyNTI4LCAtMzUwMzg5MiwgLTIzNTAwMzg3LCAxMzU1NjY5LCAtMTU1MjMwNTAsIDE1MzAwOTg4LCAtMjA1MTQxMTgsIDkxNjgyNjApLAogICAgICAgICAgICAgICAgYXJyYXkoLTUzNTMzMzUsIDQ0ODg2MTMsIC0yMzgwMzI0OCwgMTYzMTQzNDcsIDc3ODA0ODcsIC0xNTYzODkzOSwgLTI4OTQ4MzU4LCA5NjAxNjA1LCAzMzA4NzEwMywgLTkwMTEzODcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xOTQ0MzE3MCwgLTE1NTEyOTAwLCAtMjA3OTc0NjcsIC0xMjQ0NTMyMywgLTI5ODI0NDQ3LCAxMDIyOTQ2MSwgLTI3NDQ0MzI5LCAtMTUwMDA1MzEsIC01OTk2ODcwLCAxNTY2NDY3MiksCiAgICAgICAgICAgICAgICBhcnJheSgyMzI5NDU5MSwgLTE2NjMyNjEzLCAtMjI2NTA3ODEsIC04NDcwOTc4LCAyNzg0NDIwNCwgMTE0NjExOTUsIDEzMDk5NzUwLCAtMjQ2MDM1NiwgMTgxNTE2NzYsIDEzNDE3Njg2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNDcyMjkxMywgLTQxNzY1MTcsIC0zMTE1MDY3OSwgNTk4ODkxOSwgLTI2ODU4Nzg1LCA2Njg1MDY1LCAxNjYxNTk3LCAtMTI1NTE0NDEsIDE1MjcxNjc2LCAtMTU0NTI2NjUpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTE0MzMwNDIsIC0xMzIyODY2NSwgODIzOTYzMSwgLTUyNzk1MTcsIC0xOTg1NDM2LCAtNzI1NzE4LCAtMTg2OTg3NjQsIDIxNjc1NDQsIC02OTIxMzAxLCAtMTM0NDAxODIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxNDM2MTcxLCAxNTU3NTE0NiwgMzA0MzY4MTUsIDEyMTkyMjI4LCAtMjI0NjMzNTMsIDkzOTUzNzksIC05OTE3NzA4LCAtODYzODk5NywgMTIyMTUxMTAsIDEyMDI4Mjc3KSwKICAgICAgICAgICAgICAgIGFycmF5KDE0MDk4NDAwLCA2NTU1OTQ0LCAyMzAwNzI1OCwgNTc1NzI1MiwgLTE1NDI3ODMyLCAtMTI5NTA1MDIsIDMwMTIzNDQwLCA0NjE3NzgwLCAtMTY5MDAwODksIC02NTU2MjgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC00MDI2MjAxLCAtMTUyNDA4MzUsIDExODkzMTY4LCAxMzcxODY2NCwgLTE0ODA5NDYyLCAxODQ3Mzg1LCAtMTU4MTk5OTksIDEwMTU0MDA5LCAyMzk3MzI2MSwgLTEyNjg0NDc0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjUzMTgyMCwgLTM2OTU5OTAsIC0xOTA4ODk4LCAyNTM0MzAxLCAtMzE4NzA1NTcsIC0xNjU1MDM1NSwgMTgzNDEzOTAsIC0xMTQxOTk1MSwgMzIwMTMxNzQsIC0xMDEwMzUzOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjU0NzkzMDEsIDEwODc2NDQzLCAtMTE3NzEwODYsIC0xNDYyNTE0MCwgLTEyMzY5NTY3LCAxODM4MTA0LCAyMTkxMTIxNCwgNjM1NDc1MiwgNDQyNTYzMiwgLTgzNzgyMiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEwNDMzMzg5LCAtMTQ2MTI5NjYsIDIyMjI5ODU4LCAtMzA5MTA0NywgLTEzMTkxMTY2LCA3NzY3MjksIC0xNzQxNTM3NSwgLTEyMDIwNDYyLCA0NzI1MDA1LCAxNDA0NDk3MCksCiAgICAgICAgICAgICAgICBhcnJheSgxOTI2ODY1MCwgLTczMDQ0MjEsIDE1NTUzNDksIDg2OTI3NTQsIC0yMTQ3NDA1OSwgLTk5MTA2NjQsIDYzNDczOTAsIC0xNDExNzg0LCAtMTk1MjIyOTEsIC0xNjEwOTc1NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ4NjQwODksIDEyOTg2MDA4LCAtMTA4OTg4NzgsIC01NTU4NTg0LCAtMTEzMTIzNzEsIC0xNDg1MjYsIDE5NTQxNDE4LCA4MTgwMTA2LCA5MjgyMjYyLCAxMDI4MjUwOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI2MjA1MDgyLCA0NDI4NTQ3LCAtODY2MTE5NiwgLTEzMTk0MjYzLCA0MDk4NDAyLCAtMTQxNjUyNTcsIDE1NTIyNTM1LCA4MzcyMjE1LCA1NTQyNTk1LCAtMTA3MDI2ODMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEwNTYyNTQxLCAxNDg5NTYzMywgMjY4MTQ1NTIsIC0xNjY3Mzg1MCwgLTE3NDgwNzU0LCAtMjQ4OTM2MCwgLTI3ODE4OTEsIDY5OTM3NjEsIC0xODA5Mzg4NSwgMTAxMTQ2NTUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMTA3MDU1LCAtOTI5NDE4LCAzMTQyMjcwNCwgMTA0Mjc4NjEsIC03MTEwNzQ5LCA2MTUwNjY5LCAtMjkwOTE3NTUsIC0xMTUyOTE0NiwgMjU5NTM3MjUsIC0xMDYxNTgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC00MjM0Mzk3LCAtODAzOTI5MiwgLTkxMTkxMjUsIDMwNDYwMDAsIDIxMDE2MDksIC0xMjYwNzI5NCwgMTkzOTAwMjAsIDYwOTQyOTYsIC0zMzE1Mjc5LCAxMjgzMTEyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU5OTg2NzgsIDc1NzgxNTIsIDUzMTAyMTcsIDE0NDA4MzU3LCAtMzM1NDg2MjAsIC0yMjQ3MzksIDMxNTc1OTU0LCA2MzI2MTk2LCA3MzgxNzkxLCAtMjQyMTgzOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjA5MDI3NzksIDMyOTY4MTEsIDI0NzM2MDY1LCAtMTYzMjgzODksIDE4Mzc0MjU0LCA3MzE4NjQwLCA2Mjk1MzAzLCA4MDgyNzI0LCAtMTUzNjI0ODksIDEyMzM5NjY0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNzcyNDczNiwgMjI5MTE1NywgNjA4ODIwMSwgLTE0MTg0Nzk4LCAxNzkyNzI3LCA1ODU3NjM0LCAxMzg0ODQxNCwgMTU3Njg5MjIsIDI1MDkxMTY3LCAxNDg1NjI5NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTg4NjY2NTIsIDgzMzEwNDMsIDI0MzczNDc5LCA4NTQxMDEzLCAtNzAxOTk4LCAtOTI2OTQ1NywgMTI5MjczMDAsIC0xMjY5NTQ5MywgLTIyMTgyNDczLCAtOTAxMjg5OSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE0MjM0MjksIC01NDIxNTkwLCAxMTYzMjg0NSwgMzQwNTAyMCwgMzA1MzY3MzAsIC0xMTY3NDAzOSwgLTI3MjYwNzY1LCAxMzg2NjM5MCwgMzAxNDYyMDYsIDkxNDIwNzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDM5MjQxMjksIC0xNTMwNzUxNiwgLTEzODE3MTIyLCAtMTAwNTQ5NjAsIDEyMjkxODIwLCAtNjY4MzY2LCAtMjc3MDI3NzQsIDkzMjYzODQsIC04MjM3ODU4LCA0MTcxMjk0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTkyMTk0MCwgMTYwMzc5MzcsIDY3MTM3ODcsIDE2NjA2NjgyLCAtMjE2MTIxMzUsIDI3OTA5NDQsIDI2Mzk2MTg1LCAzNzMxOTQ5LCAzNDUyMjgsIC01NDYyOTQ5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTMyNzUzOCwgMTM0NDgyNTksIDI1Mjg0NTcxLCAxMTQzNjYxLCAyMDYxNDk2NiwgLTg4NDkzODcsIDIwMzE1MzksIC0xMjM5MTIzMSwgLTE2MjUzMTgzLCAtMTM1ODIwODMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMxMDE2MjExLCAtMTY3MjI0MjksIDI2MzcxMzkyLCAtMTQ0NTEyMzMsIC01MDI3MzQ5LCAxNDg1NDEzNywgMTc0Nzc2MDEsIDM4NDI2NTcsIDI4MDEyNjUwLCAtMTY0MDU0MjApLAogICAgICAgICAgICAgICAgYXJyYXkoLTUwNzU4MzUsIDkzNjg5NjYsIC04NTYyMDc5LCAtNDYwMDkwMiwgLTE1MjQ5OTUzLCA2OTcwNTYwLCAtOTE4OTg3MywgMTYyOTIwNTcsIC04ODY3MTU3LCAzNTA3OTQwKSwKICAgICAgICAgICAgICAgIGFycmF5KDI5NDM5NjY0LCAzNTM3OTE0LCAyMzMzMzU4OSwgNjk5Nzc5NCwgLTE3NTU1NTYxLCAtMTEwMTgwNjgsIC0xNTIwOTIwMiwgLTE1MDUxMjY3LCAtOTE2NDkyOSwgNjU4MDM5NiksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTIxODU4NjEsIC03Njc5Nzg4LCAxNjQzODI2OSwgMTA4MjYxNjAsIC04Njk2ODE3LCAtNjIzNTYxMSwgMTc4NjA0NDQsIC05MjczODQ2LCAtMjA5NTgwMiwgOTMwNDU2NyksCiAgICAgICAgICAgICAgICBhcnJheSgyMDcxNDU2NCwgLTQzMzY5MTEsIDI5MDg4MTk1LCA3NDA2NDg3LCAxMTQyNjk2NywgLTUwOTU3MDUsIDE0NzkyNjY3LCAtMTQ2MDg2MTcsIDUyODk0MjEsIC00NzcxMjcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2NjY1NTMzLCAtMTA2NTA3OTAsIC02MTYwMzQ1LCAtMTMzMDU3NjAsIDkxOTIwMjAsIC0xODAyNDYyLCAxNzI3MTQ5MCwgMTIzNDkwOTQsIDI2OTM5NjY5LCAtMzc1MjI5NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEyODg5ODk4LCA5MzczNDU4LCAzMTU5NTg0OCwgMTYzNzQyMTUsIDIxNDcxNzIwLCAxMzIyMTUyNSwgLTI3MjgzNDk1LCAtMTIzNDg1NTksIC0zNjk4ODA2LCAxMTc4ODcpLAogICAgICAgICAgICAgICAgYXJyYXkoMjIyNjMzMjUsIC02NTYwMDUwLCAzOTg0NTcwLCAtMTExNzQ2NDYsIC0xNTExNDAwOCwgLTU2Njc4NSwgMjgzMTEyNTMsIDUzNTgwNTYsIC0yMzMxOTc4MCwgNTQxOTY0KSwKICAgICAgICAgICAgICAgIGFycmF5KDE2MjU5MjE5LCAzMjYxOTcwLCAyMzA5MjU0LCAtMTU1MzQ0NzQsIC0xNjg4NTcxMSwgLTQ1ODE5MTYsIDI0MTM0MDcwLCAtMTY3MDU4MjksIC0xMzMzNzA2NiwgLTEzNTUyMTk1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg5Mzc4MTYwLCAtMTMxNDAxODYsIC0yMjg0NTk4MiwgLTEyNzQ1MjY0LCAyODE5ODI4MSwgLTcyNDQwOTgsIC0yMzk5Njg0LCAtNzE3MzUxLCA2OTA0MjYsIDE0ODc2MjQ0KSwKICAgICAgICAgICAgICAgIGFycmF5KDI0OTc3MzUzLCAtMzE0Mzg0LCAtODIyMzk2OSwgLTEzNDY1MDg2LCAyODQzMjM0MywgLTExNzYzNTMsIC0xMzA2ODgwNCwgLTEyMjk3MzQ4LCAtMjIzODA5ODQsIDY2MTg5OTkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MzgxNzQsIDExNjg1NjQ2LCAxMjk0NDM3OCwgMTM2ODIzMTQsIC0yNDM4OTUxMSwgLTE0NDEzMTkzLCA4MDQ0ODI5LCAtMTM4MTczMjgsIDMyMjM5ODI5LCAtNTY1Mjc2MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE4NjAzMDY2LCA0NzYyOTkwLCAtOTI2MjUwLCA4ODg1MzA0LCAtMjg0MTI0ODAsIC0zMTg3MzE1LCA5NzgxNjQ3LCAtMTAzNTAwNTksIDMyNzc5MzU5LCA1MDk1Mjc0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMzAwODEzMCwgLTUyMTQ1MDYsIC0zMjI2NDg4NywgLTM2ODUyMTYsIDk0NjA0NjEsIC05MzI3NDIzLCAtMjQ2MDE2NTYsIDE0NTA2NzI0LCAyMTYzOTU2MSwgLTI2MzAyMzYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2NDAwOTQzLCAtMTMxMTIyMTUsIDI1MjM5MzM4LCAxNTUzMTk2OSwgMzk4Nzc1OCwgLTQ0OTkzMTgsIC0xMjg5NTAyLCAtNjg2MzUzNSwgMTc4NzQ1NzQsIDU1ODYwNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEzNjAwMTI5LCAxMDI0MDA4MSwgOTE3MTg4MywgMTYxMzEwNTMsIC0yMDg2OTI1NCwgOTU5OTcwMCwgMzM0OTk0ODcsIDUwODAxNTEsIDIwODU4OTIsIDUxMTk3NjEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyMjA1MTQ1LCAtMjUxOTUyOCwgLTE2MzgxNjAxLCA0MTQ2OTEsIC0yNTAxOTU1MCwgMjE3MDQzMCwgMzA2MzQ3NjAsIC04MzYzNjE0LCAtMzE5OTk5OTMsIC01NzU5ODg0KSwKICAgICAgICAgICAgICAgIGFycmF5KC02ODQ1NzA0LCAxNTc5MTIwMiwgODU1MDA3NCwgLTEzMTI2NTQsIDI5OTI4ODA5LCAtMTIwOTIyNTYsIDI3NTM0NDMwLCAtNzE5MjE0NSwgLTIyMzUxMzc4LCAxMjk2MTQ4MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI0NDkyMDYwLCAtOTU3MDc3MSwgMTAzNjgxOTQsIDExNTgyMzQxLCAtMjMzOTcyOTMsIC0yMjQ1Mjg3LCAxNjUzMzkzMCwgODIwNjk5NiwgLTMwMTk0NjUyLCAtNTE1OTYzOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTExMjE0OTYsIC0zMzgyMjM0LCAyMzA3MzY2LCA2MzYyMDMxLCAtMTM1NDU1LCA4ODY4MTc3LCAtMTY4MzU2MzAsIDcwMzEyNzUsIDc1ODk2NDAsIDg5NDU0OTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTMyMTUyNzQ4LCA4OTE3OTY3LCA2NjYxMjIwLCAtMTE2Nzc2MTYsIC0xMTkyMDYwLCAtMTU3OTMzOTMsIDcyNTE0ODksIC0xMTE4MjE4MCwgMjQwOTkxMDksIC0xNDQ1NjE3MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNTAxOTU1OCwgLTc5MDc0NzAsIDQyNDQxMjcsIC0xNDcxNDM1NiwgLTI2OTMzMjcyLCA2NDUzMTY1LCAtMTkxMTgxODIsIC0xMzI4OTAyNSwgLTYyMzE4OTYsIC0xMDI4MDczNiksCiAgICAgICAgICAgICAgICBhcnJheSgxMDg1MzU5NCwgMTA3MjE2ODcsIDI2NDgwMDg5LCA1ODYxODI5LCAtMjI5OTU4MTksIDE5NzIxNzUsIC0xODY2NjQ3LCAtMTA1NTc4OTgsIC0zMzYzNDUxLCAtNjQ0MTEyNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTcwMDI0MDgsIDU5MDY3OTAsIDIyMTU5OSwgLTY1NjMxNDcsIDc4MjgyMDgsIC0xMzI0ODkxOCwgMjQzNjI2NjEsIC0yMDA4MTY4LCAtMTM4NjY0MDgsIDc0MjEzOTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDgxMzk5MjcsIC02NTQ2NDk3LCAzMjI1NzY0NiwgLTU4OTA1NDYsIDMwMzc1NzE5LCAxODg2MTgxLCAtMjExNzUxMDgsIDE1NDQxMjUyLCAyODgyNjM1OCwgLTQxMjMwMjkpLAogICAgICAgICAgICAgICAgYXJyYXkoNjI2NzA4NiwgOTY5NTA1MiwgNzcwOTEzNSwgLTE2NjAzNTk3LCAtMzI4NjkwNjgsIC0xODg2MTM1LCAxNDc5NTE2MCwgLTc4NDAxMjQsIDEzNzQ2MDIxLCAtMTc0MjA0OCksCiAgICAgICAgICAgICAgICBhcnJheSgyODU4NDkwMiwgNzc4NzEwOCwgLTY3MzI5NDIsIC0xNTA1MDcyOSwgMjI4NDYwNDEsIC03NTcxMjM2LCAtMzE4MTkzNiwgLTM2MzUyNCwgNDc3MTM2MiwgLTg0MTk5NTgpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjQ5NDkyNTYsIDYzNzYyNzksIC0yNzQ2NjQ4MSwgLTgxNzQ2MDgsIC0xODY0NjE1NCwgLTk5MzA2MDYsIDMzNTQzNTY5LCAtMTIxNDE2OTUsIDM1Njk2MjcsIDExMzQyNTkzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI2NTE0OTg5LCA0NzQwMDg4LCAyNzkxMjY1MSwgMzY5NzU1MCwgMTkzMzE1NzUsIC0xMTQ3MjMzOSwgNjgwOTg4NiwgNDYwODYwOCwgNzMyNTk3NSwgLTE0ODAxMDcxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTYxODM5OSwgLTE0NTU0NDMwLCAtMjQzMjEyMTIsIDc2NTUxMjgsIC0xMzY5Mjc0LCA1MjE0MzEyLCAtMjc0MDA1NDAsIDEwMjU4MzkwLCAtMTc2NDY2OTQsIC04MTg2NjkyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTQzMTIwNCwgMTU4MjMwMDcsIDI2NTcwMjQ1LCAxNDMyOTEyNCwgMTgwMjk5OTAsIDQ3OTYwODIsIC0zMTQ0NjE3OSwgMTU1ODA2NjQsIDkyODAzNTgsIC0zOTczNjg3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNjA3ODMsIC0xMDMyNjI1NywgLTIyODU1MzE2LCAtNDMwNDk5NywgLTIwODYxMzY3LCAtMTM2MjEwMDIsIC0zMjgxMDkwMSwgLTExMTgxNjIyLCAtMTU1NDUwOTEsIDQzODc0NDEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwNzk5Mzc4LCAxMjE5NDUxMiwgMzkzNzYxNywgLTU4MDU4OTIsIC0yNzE1NDgyMCwgOTM0MDM3MCwgLTI0NTEzOTkyLCA4NTQ4MTM3LCAyMDYxNzA3MSwgLTc0ODIwMDEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05Mzg4MjUsIC0zOTMwNTg2LCAtODcxNDMxMSwgMTYxMjQ3MTgsIDI0NjAzMTI1LCAtNjIyNTM5MywgLTEzNzc1MzUyLCAtMTE4NzU4MjIsIDI0MzQ1NjgzLCAxMDMyNTQ2MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTk4NTUyNzcsIC0xNTY4ODg1LCAtMjIyMDI3MDgsIDg3MTQwMzQsIDE0MDA3NzY2LCA2OTI4NTI4LCAxNjMxODE3NSwgLTEwMTA2ODksIDQ3NjY3NDMsIDM1NTIwMDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxNzUxMzY0LCAtMTY3MzA5MTYsIDEzNTE3NjMsIC04MDM0MjEsIC00MDA5NjcwLCAzOTUwOTM1LCAzMjE3NTE0LCAxNDQ4MTkwOSwgMTA5ODg4MjIsIC0zOTk0NzYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTU2NDMwNywgLTE0MzExNTcwLCAzMTAxMjQzLCA1Njg0MTQ4LCAzMDQ0Njc4MCwgLTgwNTEzNTYsIDEyNjc3MTI3LCAtNjUwNTM0MywgLTgyOTU4NTIsIDEzMjk2MDA1KSwKICAgICAgICAgICAgICAgIGFycmF5KC05NDQyMjkwLCA2NjI0Mjk2LCAtMzAyOTg5NjQsIC0xMTkxMzY3NywgLTQ2NzA5ODEsIC0yMDU3Mzc5LCAzMTUyMTIwNCwgOTYxNDA1NCwgLTMwMDAwODI0LCAxMjA3NDY3NCksCiAgICAgICAgICAgICAgICBhcnJheSg0NzcxMTkxLCAtMTM1MjM5LCAxNDI5MDc0OSwgLTEzMDg5ODUyLCAyNzk5MjI5OCwgMTQ5OTgzMTgsIC0xNDEzOTM2LCAtMTU1NjcxNiwgMjk4MzI2MTMsIC0xNjM5MTAzNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNzA2NDg4NCwgLTc1NDExNzQsIC0xOTE2MTk2MiwgLTUwNjc1MzcsIC0xODg5MTI2OSwgLTI5MTI3MzYsIDI1ODI1MjQyLCA1MjkzMjk3LCAtMjcxMjI2NjAsIDEzMTAxNTkwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjk4NTYzLCAyNDM5NjcwLCAtNzQ2NjYxMCwgMTcxOTk2NSwgLTI3MjY3NTQxLCAtMTYzMjg0NDUsIDMyNTEyNDY5LCAtNTMxNzU5MywgLTMwMzU2MDcwLCAtNDE5MDk1NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAwMDY1NDAsIDEwMTYyMzE2LCAtMzMxODAxNzYsIDM5ODE3MjMsIC0xNjQ4MjEzOCwgLTEzMDcwMDQ0LCAxNDQxMzk3NCwgOTUxNTg5NiwgMTk1Njg5NzgsIDk2Mjg4MTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMzMDUzODAzLCAxOTkzNTcsIDE1ODk0NTkxLCAxNTgzMDU5LCAyNzM4MDI0MywgLTQ1ODA0MzUsIC0xNzgzODg5NCwgLTYxMDY4MzksIC02MjkxNzg2LCAzNDM3NzQwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xODk3ODg3NywgMzg4NDQ5MywgMTk0Njk4NzcsIDEyNzI2NDkwLCAxNTkxMzU1MiwgMTM2MTQyOTAsIC0yMjk2MTczMywgNzAxMDQsIDc0NjMzMDQsIDQxNzYxMjIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI3MTI0MDAxLCAxMDY1OTkxNywgMTE0ODI0MjcsIC0xNjA3MDM4MSwgMTI3NzE0NjcsIC02NjM1MTE3LCAtMzI3MTk0MDQsIC01MzIyNzUxLCAyNDIxNjg4MiwgNTk0NDE1OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoODg5NDEyNSwgNzQ1MDk3NCwgLTI2NjQxNDksIC05NzY1NzUyLCAtMjgwODA1MTcsIC0xMjM4OTExNSwgMTkzNDU3NDYsIDE0NjgwNzk2LCAxMTYzMjk5MywgNTg0Nzg4NSksCiAgICAgICAgICAgICAgICBhcnJheSgyNjk0Mjc4MSwgLTIzMTUzMTcsIDkxMjk1NjQsIC00OTA2NjA3LCAyNjAyNDEwNSwgMTE3NjkzOTksIC0xMTUxODgzNywgNjM2NzE5NCwgLTk3MjcyMzAsIDQ3ODIxNDApLAogICAgICAgICAgICAgICAgYXJyYXkoMTk5MTY0NjEsIC00ODI4NDEwLCAtMjI5MTA3MDQsIC0xMTQxNDM5MSwgMjU2MDYzMjQsIC01OTcyNDQxLCAzMzI1Mzg1MywgODIyMDkxMSwgNjM1ODg0NywgLTE4NzM4NTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDgwMTQyOCwgLTIwODE3MDIsIDE2NTY5NDI4LCAxMTA2NTE2NywgMjk4NzU3MDQsIDk2NjI3LCA3OTA4Mzg4LCAtNDQ4MDQ4MCwgLTEzNTM4NTAzLCAxMzg3MTU1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE5NjQ2MDU4LCA1NzIwNjMzLCAtMTE0MTY3MDYsIDEyODE0MjA5LCAxMTYwNzk0OCwgMTI3NDk3ODksIDE0MTQ3MDc1LCAxNTE1NjM1NSwgLTIxODY2ODMxLCAxMTgzNTI2MCksCiAgICAgICAgICAgICAgICBhcnJheSgxOTI5OTUxMiwgMTE1NTkxMCwgMjg3MDM3MzcsIDE0ODkwNzk0LCAyOTI1MDI2LCA3MjY5Mzk5LCAyNjEyMTUyMywgMTU0Njc4NjksIC0yNjU2MDU1MCwgNTA1MjQ4MyksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzAxNzQzMiwgMTAwNTgyMDYsIDE5ODA4MzcsIDM5NjQyNDMsIDIyMTYwOTY2LCAxMjMyMjUzMywgLTY0MzExMjMsIC0xMjYxODE4NSwgMTIyMjg1NTcsIC03MDAzNjc3KSwKICAgICAgICAgICAgICAgIGFycmF5KDMyOTQ0MzgyLCAxNDkyMjIxMSwgLTIyODQ0ODk0LCA1MTg4NTI4LCAyMTkxMzQ1MCwgLTg3MTk5NDMsIDQwMDE0NjUsIDEzMjM4NTY0LCAtNjExNDgwMywgODY1MzgxNSksCiAgICAgICAgICAgICAgICBhcnJheSgyMjg2NTU2OSwgLTQ2NTI3MzUsIDI3NjAzNjY4LCAtMTI1NDUzOTUsIDE0MzQ4OTU4LCA4MjM0MDA1LCAyNDgwODQwNSwgNTcxOTg3NSwgMjg0ODMyNzUsIDI4NDE3NTEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNjQyMDk2OCwgLTExMTMzMDUsIC0zMjc3MTksIC0xMjEwNzg1NiwgMjE4ODYyODIsIC0xNTU1Mjc3NCwgLTE4ODc5NjYsIC0zMTU2NTgsIDE5OTMyMDU4LCAtMTI3MzkyMDMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNjU2MDg2LCAxMDA4NzUyMSwgLTg4NjQ4ODgsIC01NTM2MTQzLCAtMTkyNzg1NzMsIC0zMDU1OTEyLCAzOTk5MjI4LCAxMzIzOTEzNCwgLTQ3Nzc0NjksIC0xMzkxMDIwOCksCiAgICAgICAgICAgICAgICBhcnJheSgxMzgyMTc0LCAtMTE2OTQ3MTksIDE3MjY2NzkwLCA5MTk0NjkwLCAtMTMzMjQzNTYsIDk3MjAwODEsIDIwNDAzOTQ0LCAxMTI4NDcwNSwgLTE0MDEzODE4LCAzMDkzMjMwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNjY1MDkyMSwgLTExMDM3OTMyLCAtMTA2NDE3OCwgMTU3MDYyOSwgLTgzMjk3NDYsIDczNTI3NTMsIC0zMDI0MjQsIDE2MjcxMjI1LCAtMjQwNDk0MjEsIC02NjkxODUwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTkxMTA3NywgLTU5Mjc5NDEsIC00NjExMzE2LCAtNTU2MDE1NiwgLTMxNzQ0MTAzLCAtMTA3ODUyOTMsIDI0MTIzNjE0LCAxNTE5MzYxOCwgLTIxNjUyMTE3LCAtMTY3MzkzODkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk5MzU5MzQsIC00Mjg5NDQ3LCAtMjUyNzk4MjMsIDQzNzI4NDIsIDIwODc0NzMsIDEwMzk5NDg0LCAzMTg3MDkwOCwgMTQ2OTA3OTgsIDE3MzYxNjIwLCAxMTg2NDk2OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTExMzA3NjEwLCA2MjEwMzcyLCAxMzIwNjU3NCwgNTgwNjMyMCwgLTI5MDE3NjkyLCAtMTM5NjcyMDAsIC0xMjMzMTIwNSwgLTc0ODY2MDEsIC0yNTU3ODQ2MCwgLTE2MjQwNjg5KSwKICAgICAgICAgICAgICAgIGFycmF5KDE0NjY4NDYyLCAtMTIyNzAyMzUsIDI2MDM5MDM5LCAxNTMwNTIxMCwgMjU1MTU2MTcsIDQ1NDI0ODAsIDEwNDUzODkyLCA2NTc3NTI0LCA5MTQ1NjQ1LCAtNjQ0Mzg4MCksCiAgICAgICAgICAgICAgICBhcnJheSg1OTc0ODc0LCAzMDUzODk1LCAtOTQzMzA0OSwgLTEwMzg1MTkxLCAtMzE4NjUxMjQsIDMyMjUwMDksIC03OTcyNjQyLCAzOTM2MTI4LCAtNTY1MjI3MywgLTMwNTAzMDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwNjI1Mzg2LCAtNDcyOTQwMCwgLTI1NTU1OTYxLCAtMTI3OTI4NjYsIC0yMDQ4NDU3NSwgNzY5NTA5OSwgMTcwOTcxODgsIC0xNjMwMzQ5NiwgLTI3OTk5Nzc5LCAxODAzNjMyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zNTUzMDkxLCA5ODY1MDk5LCAtNTIyODU2NiwgNDI3MjcwMSwgLTU2NzM4MzIsIC0xNjY4OTcwMCwgMTQ5MTEzNDQsIDEyMTk2NTE0LCAtMjE0MDU0ODksIDcwNDc0MTIpLAogICAgICAgICAgICAgICAgYXJyYXkoMjAwOTMyNzcsIDk5MjA5NjYsIC0xMTEzODE5NCwgLTUzNDM4NTcsIDEzMTYxNTg3LCAxMjA0NDgwNSwgLTMyODU2ODUxLCA0MTI0NjAxLCAtMzIzNDM4MjgsIC0xMDI1NzU2NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIwNzg4ODI0LCAxNDA4NDY1NCwgLTEzNTMxNzEzLCA3ODQyMTQ3LCAxOTExOTAzOCwgLTEzODIyNjA1LCA0NzUyMzc3LCAtODcxNDY0MCwgLTIxNjc5NjU4LCAyMjg4MDM4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjgxOTIzNiwgLTMyODM3MTUsIDI5OTY1MDU5LCAzMDM5Nzg2LCAtMTQ0NzM3NjUsIDI1NDA0NTcsIDI5NDU3NTAyLCAxNDYyNTY5MiwgLTI0ODE5NjE3LCAxMjU3MDIzMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTA2MzU1OCwgLTExNTUxODIzLCAxNjkyMDMxOCwgMTI0OTQ4NDIsIDEyNzgyOTIsIC01ODY5MTA5LCAtMjExNTk5NDMsIC0zNDk4NjgwLCAtMTE5NzQ3MDQsIDQ3MjQ5NDMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE3OTYwOTcwLCAtMTE3NzU1MzQsIC00MTQwOTY4LCAtOTcwMjUzMCwgLTg4NzY1NjIsIC0xNDEwNjE3LCAtMTI5MDczODMsIC04NjU5OTMyLCAtMjk1NzYzMDAsIDE5MDM4NTYpLAogICAgICAgICAgICAgICAgYXJyYXkoMjMxMzQyNzQsIC0xNDI3OTEzMiwgLTEwNjgxOTk3LCAtMTYxMTkzNiwgMjA2ODQ0ODUsIDE1NzcwODE2LCAtMTI5ODk3NTAsIDMxOTAyOTYsIDI2OTU1MDk3LCAxNDEwOTczOCksCiAgICAgICAgICAgICAgICBhcnJheSgxNTMwODc4OCwgNTMyMDcyNywgLTMwMTEzODA5LCAtMTQzMTg4NzcsIDIyOTAyMDA4LCA3NzY3MTY0LCAyOTQyNTMyNSwgLTExMjc3NTYyLCAzMTk2MDk0MiwgMTE5MzQ5NzEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNzM5NTcxMSwgODQzNTc5NiwgNDEwOTY0NCwgMTIyMjI2MzksIC0yNDYyNzg2OCwgMTQ4MTg2NjksIDIwNjM4MTczLCA0ODc1MDI4LCAxMDQ5MTM5MiwgMTM3OTcxOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTMxNTk0MTUsIDkxOTc4NDEsIDM4NzU1MDMsIC04OTM2MTA4LCAtMTM4MzcxMiwgLTU4Nzk4MDEsIDMzNTE4NDU5LCAxNjE3NjY1OCwgMjE0MzIzMTQsIDEyMTgwNjk3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTc4NzMwOCwgMTE1MDA4MzgsIDEzNzg3NTgxLCAtMTM4MzI1OTAsIC0yMjQzMDY3OSwgMTAxNDAyMDUsIDE0NjU0MjUsIDEyNjg5NTQwLCAtMTAzMDEzMTksIC0xMzg3Mjg4MyksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg1NDE0MDkxLCAtMTUzODYwNDEsIC0yMTAwNzY2NCwgOTY0MzU3MCwgMTI4MzQ5NzAsIDExODYxNDksIC0yNjIyOTE2LCAtMTM0MjIzMSwgMjYxMjgyMzEsIDYwMzI5MTIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI2MzM3Mzk1LCAtMTM3NjYxNjIsIDMyNDk2MDI1LCAtMTM2NTM5MTksIDE3ODQ3ODAxLCAtMTI2NjkxNTYsIDM2MDQwMjUsIDgzMTY4OTQsIC0yNTg3NTAzNCwgLTEwNDM3MzU4KSwKICAgICAgICAgICAgICAgIGFycmF5KDMyOTY0ODQsIDYyMjMwNDgsIDI0NjgwNjQ2LCAtMTIyNDY0NjAsIC0yMzA1MjAyMCwgNTkwMzIwNSwgLTg4NjIyOTcsIC00NjM5MTY0LCAxMjM3NjYxNywgMzE4ODg0OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjkxOTA0ODgsIC0xNDY1OTA0NiwgMjc1NDkxMTMsIC0xMTgzNTE2LCAzNTIwMDY2LCAtMTA2OTczMDEsIDMyMDQ5NTE1LCAtNzMwOTExMywgLTE2MTA5MjM0LCAtOTg1MjMwNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTQ3NDQ0ODYsIC05MzA5MTU2LCA3MzU4MTgsIC01OTg5NzgsIC0yMDQwNzY4NywgLTUwNTc5MDQsIDI1MjQ2MDc4LCAtMTU3OTU2NjksIDE4NjQwNzQxLCAtOTYwOTc3KSwKICAgICAgICAgICAgICAgIGFycmF5KC02OTI4ODM1LCAtMTY0MzA3OTUsIDEwMzYxMzc0LCA1NjQyOTYxLCA0OTEwNDc0LCAxMjM0NTI1MiwgLTMxNjM4Mzg2LCAtNDk0NDMwLCAxMDUzMDc0NywgMTA1MzMzNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI5MjY1OTY3LCAtMTQxODY4MDUsIC0xMzUzODIxNiwgLTEyMTE3MzczLCAtMTk0NTcwNTksIC0xMDY1NTM4NCwgLTMxNDYyMzY5LCAtMjk0ODk4NSwgMjQwMTg4MzEsIDE1MDI2NjQ0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjU5MjUzNSwgLTMxNDUyNzcsIC0yMjg5Mjc2LCA1OTUzODQzLCAtMTM0NDAxODksIDk0MjU2MzEsIDI1MzEwNjQzLCAxMzAwMzQ5NywgLTIzMTQ3OTEsIC0xNTE0NTYxNiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjc0MTk5ODUsIC02MDMzMjEsIC04MDQzOTg0LCAtMTY2OTExNywgLTI2MDkyMjY1LCAxMzk4NzgxOSwgLTI3Mjk3NjIyLCAxODc4OTksIC0yMzE2NjQxOSwgLTI1MzE3MzUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMTc0NDM5OCwgLTEzODEwNDc1LCAxODQ0ODQwLCA1MDIxNDI4LCAtMTA0MzQzOTksIC0xNTkxMTQ3MywgOTcxNjY2NywgMTYyNjY5MjIsIC01MDcwMjE3LCA3MjYwOTkpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkzNzA5MjIsIC02MDUzOTk4LCA3MzM0MDcxLCAtMTUzNDIyNTksIDkzODUyODcsIDIyNDc3MDcsIC0xMzY2MTk2MiwgLTQ4Mzk0NjEsIDMwMDA3Mzg4LCAtMTU4MjMzNDEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTkzNjM3OSwgMTYwODY2OTEsIDIzNzUxOTQ1LCAtNTQzMzE4LCAtMTE2NzUzOCwgLTUxODkwMzYsIDkxMzcxMDksIDczMDY2MywgOTgzNTg0OCwgNDU1NTMzNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMzc2NDM1LCAxNDEwNDQ2LCAtMjIyNTM3NTMsIC0xMjg5OTYxNCwgMzA4Njc2MzUsIDE1ODI2OTc3LCAxNzY5MzkzMCwgNTQ0Njk2LCAtMTE5ODUyOTgsIDEyNDIyNjQ2KSwKICAgICAgICAgICAgICAgIGFycmF5KDMxMTE3MjI2LCAtMTIyMTU3MzQsIC0xMzUwMjgzOCwgNjU2MTk0NywgLTk4NzY4NjcsIC0xMjc1NzY3MCwgLTUxMTg2ODUsIC00MDk2NzA2LCAyOTEyMDE1MywgMTM5MjQ0MjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3NDAwODc5LCAtMTQyMzMyMDksIDE5Njc1Nzk5LCAtMjczNDc1NiwgLTExMDA2OTYyLCAtNTg1ODgyMCwgLTkzODM5MzksIC0xMTMxNzcwMCwgNzI0MDkzMSwgLTIzNzM4OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMxMzYxNzM5LCAtMTEzNDY3ODAsIC0xNTAwNzQ0NywgLTU4NTYyMTgsIC0yMjQ1MzM0MCwgLTEyMTUyNzcxLCAxMjIyMzM2LCA0Mzg5NDgzLCAzMjkzNjM3LCAtMTU1NTE3NDMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2Njg0ODAxLCAtMTQ0NDQyNDUsIDExMDM4NTQ0LCAxMTA1NDk1OCwgLTEzODAxMTc1LCAtMzMzODUzMywgLTI0MzE5NTgwLCA3NzMzNTQ3LCAxMjc5NjkwNSwgLTYzMzU4MjIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTg3NTk0MTQsIC0xMDgxNzgzNiwgLTI1NDE4ODY0LCAxMDc4Mzc2OSwgLTMwNjE1NTU3LCAtOTc0NjgxMSwgLTI4MjUzMzM5LCAzNjQ3ODM2LCAzMjIyMjMxLCAtMTExNjA0NjIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE4NjA2MTEzLCAxNjkzMTAwLCAtMjU0NDgzODYsIC0xNTE3MDI3MiwgNDExMjM1MywgMTAwNDUwMjEsIDIzNjAzODkzLCAtMjA0ODIzNCwgLTc1NTA3NzYsIDI0ODQ5ODUpLAogICAgICAgICAgICAgICAgYXJyYXkoOTI1NTMxNywgLTMxMzExOTcsIC0xMjE1NjE2MiwgLTEwMDQyNTYsIDEzMDk4MDEzLCAtOTIxNDg2NiwgMTYzNzcyMjAsIC0yMTAyODEyLCAtMTk4MDIwNzUsIC0zMDM0NzAyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjcyOTI4OSwgNzQ5NjE2MCwgLTU3NDIxOTksIDExMzI5MjQ5LCAxOTk5MTk3MywgLTMzNDc1MDIsIC0zMTcxODE0OCwgOTkzNjk2NiwgLTMwMDk3Njg4LCAtMTA2MTg3OTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIxODc4NTkwLCAtNTAwMTI5NywgNDMzODMzNiwgMTM2NDM4OTcsIC0zMDM2ODY1LCAxMzE2MDk2MCwgMTk3MDg4OTYsIDU0MTU0OTcsIC03MzYwNTAzLCAtNDEwOTI5MyksCiAgICAgICAgICAgICAgICBhcnJheSgyNzczNjg2MSwgMTAxMDM1NzYsIDEyNTAwNTA4LCA4NTAyNDEzLCAtMzQxMzAxNiwgLTk2MzM1NTgsIDEwNDM2OTE4LCAtMTU1MDI3NiwgLTIzNjU5MTQzLCAtODEzMjEwMCksCiAgICAgICAgICAgICAgICBhcnJheSgxOTQ5MjU1MCwgLTEyMTA0MzY1LCAtMjk2ODE5NzYsIC04NTI2MzAsIC0zMjA4MTcxLCAxMjQwMzQzNywgMzAwNjYyNjYsIDgzNjczMjksIDEzMjQzOTU3LCA4NzA5Njg4KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEyMDE1MTA1LCAyODAxMjYxLCAyODE5ODEzMSwgMTAxNTEwMjEsIDI0ODE4MTIwLCAtNDc0MzEzMywgLTExMTk0MTkxLCAtNTY0NTczNCwgNTE1MDk2OCwgNzI3NDE4NiksCiAgICAgICAgICAgICAgICBhcnJheSgyODMxMzY2LCAtMTI0OTIxNDYsIDE0Nzg5NzUsIDYxMjIwNTQsIDIzODI1MTI4LCAtMTI3MzM1ODYsIDMxMDk3Mjk5LCA2MDgzMDU4LCAzMTAyMTYwMywgLTk3OTM2MTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1Mjk5MzIsIC0yMjI5NjQ2LCA0NDU2MTMsIDEwNzIwODI4LCAtMTM4NDk1MjcsIC0xMTUwNTkzNywgLTIzNTA3NzMxLCAxNjM1NDQ2NSwgMTUwNjcyODUsIC0xNDE0NzcwNyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNzg0MDk0MiwgMTQwMzc4NzMsIC0zMzM2NDg2MywgMTU5MzQwMTYsIC03MjgyMTMsIC0zNjQyNzA2LCAyMTQwMzk4OCwgMTA1NzU4NiwgLTE5Mzc5NDYyLCAtMTI0MDMyMjApLAogICAgICAgICAgICAgICAgYXJyYXkoOTE1ODY1LCAtMTY0NjkyNzQsIDE1NjA4Mjg1LCAtODc4OTEzMCwgLTI0MzU3MDI2LCA2MDYwMDMwLCAtMTczNzEzMTksIDg0MTA5OTcsIC03MjIwNDYxLCAxNjUyNzAyNSksCiAgICAgICAgICAgICAgICBhcnJheSgzMjkyMjU5NywgLTU1Njk4NywgMjAzMzYwNzQsIC0xNjE4NDU2OCwgMTA5MDM3MDUsIC01Mzg0NDg3LCAxNjk1NzU3NCwgNTI5OTIsIDIzODM0MzAxLCA2NTg4MDQ0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMjc1MjAzMCwgMTEyMzI5NTAsIDMzODE5OTUsIC04NzE0ODY2LCAyMjY1Mjk4OCwgLTEwNzQ0MTAzLCAxNzE1OTY5OSwgMTY2ODkxMDcsIC0yMDMxNDU4MCwgLTEzMDU5OTIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ2ODk2NDksIDkxNjY3NzYsIC0yNTcxMDI5NiwgLTEwODQ3MzA2LCAxMTU3Njc1MiwgMTI3MzM5NDMsIDc5MjQyNTEsIC0yNzUyMjgxLCAxOTc2MTIzLCAtNzI0OTAyNyksCiAgICAgICAgICAgICAgICBhcnJheSgyMTI1MTIyMiwgMTYzMDk5MDEsIC0yOTgzMDE1LCAtNjc4MzEyMiwgMzA4MTA1OTcsIDEyOTY3MzAzLCAxNTYwNDEsIC0zMzcxMjUyLCAxMjMzMTM0NSwgLTgyMzcxOTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDg2NTE2MTQsIC00NDc3MDMyLCAtMTYwODU2MzYsIC00OTk2OTk0LCAxMzAwMjUwNywgMjk1MDgwNSwgMjkwNTQ0MjcsIC01MTA2OTcwLCAxMDAwODEzNiwgLTQ2Njc5MDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE0ODYwODAsIDE1MTE0NTkzLCAtMTQyNjEyNTAsIDEyOTUxMzU0LCAxNDM2OTQzMSwgLTczODc4NDUsIDE2MzQ3MzIxLCAtMTM2NjIwODksIDg2ODQxNTUsIC0xMDUzMjk1MiksCiAgICAgICAgICAgICAgICBhcnJheSgxOTQ0MzgyNSwgMTEzODUzMjAsIDI0NDY4OTQzLCAtOTY1OTA2OCwgLTIzOTE5MjU4LCAyMTg3NTY5LCAtMjYyNjMyMDcsIC02MDg2OTIxLCAzMTMxNjM0OCwgMTQyMTk4NzgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODU5NDQ5MCwgMTE5Mzc4NSwgMzIyNDUyMTksIDExMzkyNDg1LCAzMTA5MjE2OSwgMTU3MjI4MDEsIDI3MTQ2MDE0LCA2OTkyNDA5LCAyOTEyNjU1NSwgOTIwNzM5MCksCiAgICAgICAgICAgICAgICBhcnJheSgzMjM4MjkzNSwgMTExMDA5MywgMTg0Nzc3ODEsIDExMDI4MjYyLCAtMjc0MTE3NjMsIC03NTQ4MTExLCAtNDk4MDUxNywgMTA4NDM3ODIsIC03OTU3NjAwLCAtMTQ0MzU3MzApLAogICAgICAgICAgICAgICAgYXJyYXkoMjgxNDkxOCwgNzgzNjQwMywgMjc1MTk4NzgsIC03ODY4MTU2LCAtMjA4OTQwMTUsIC0xMTU1MzY4OSwgLTIxNDk0NTU5LCA4NTUwMTMwLCAyODM0NjI1OCwgMTk5NDczMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE5NTc4Mjk5LCA4MDg1NTQ1LCAtMTQwMDA1MTksIC0zOTQ4NjIyLCAyNzg1ODM4LCAtMTYyMzEzMDcsIC0xOTUxNjk1MSwgNzE3NDg5NCwgMjI2MjgxMDIsIDgxMTUxODApLAogICAgICAgICAgICAgICAgYXJyYXkoLTMwNDA1MTMyLCA5NTU1MTEsIC0xMTEzMzgzOCwgLTE1MDc4MDY5LCAtMzI0NDcwODcsIC0xMzI3ODA3OSwgLTI1NjUxNTc4LCAzMzE3MTYwLCAtOTk0MzAxNywgOTMwMjcyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTMwMzY4MSwgLTY4MzM3NjksIDI4ODU2NDkwLCAxMzU3NDQ2LCAyMzQyMTk5MywgMTA1NzE3NywgMjQwOTEyMTIsIC0xMzg4OTcwLCAtMjI3NjUzNzYsIC0xMDY1MDcxNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNzUxMjMxLCAtNTMwMzk5NywgLTEyOTA3NjA3LCAtMTI3Njg4NjYsIC0xNTgxMTUxMSwgLTc3OTcwNTMsIC0xNDgzOTAxOCwgLTE2NTU0MjIwLCAtMTg2NzAxOCwgODM5ODk3MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzE5NjkzMTAsIDIxMDY0MDMsIC00NzM2MzYwLCAxMzYyNTAxLCAxMjgxMzc2MywgMTYyMDA2NzAsIDIyOTgxNTQ1LCAtNjI5MTI3MywgMTgwMDk0MDgsIC0xNTc3Mjc3MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTcyMjA5MjMsIC05NTQ1MjIxLCAtMjc3ODQ2NTQsIDE0MTY2ODM1LCAyOTgxNTM5NCwgNzQ0NDQ2OSwgMjk1NTE3ODcsIC0zNzI3NDE5LCAxOTI4ODU0OSwgMTMyNTg2NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTUxMDAxNTcsIC0xNTgzNTc1MiwgLTIzOTIzOTc4LCAtMTAwNTA5OCwgLTI2NDUwMTkyLCAxNTUwOTQwOCwgMTIzNzY3MzAsIC0zNDc5MTQ2LCAzMzE2NjEwNywgLTgwNDI3NTApLAogICAgICAgICAgICAgICAgYXJyYXkoMjA5MDkyMzEsIDEzMDIzMTIxLCAtOTIwOTc1MiwgMTYyNTE3NzgsIC01Nzc4NDE1LCAtODA5NDkxNCwgMTI0MTIxNTEsIDEwMDE4NzE1LCAyMjEzMjYzLCAtMTM4NzgzNzMpLAogICAgICAgICAgICAgICAgYXJyYXkoMzI1Mjk4MTQsIC0xMTA3NDY4OSwgMzAzNjE0MzksIC0xNjY4OTc1MywgLTkxMzU5NDAsIDE1MTMyMjYsIDIyOTIyMTIxLCA2MzgyMTM0LCAtNTc2NjkyOCwgODM3MTM0OCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg5OTIzNDYyLCAxMTI3MTUwMCwgMTI2MTY3OTQsIDM1NDQ3MjIsIC0yOTk5ODM2OCwgLTE3MjE2MjYsIDEyODkxNjg3LCAtODE5MzEzMiwgLTI2NDQyOTQzLCAxMDQ4NjE0NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjI1OTcyMDcsIC03MDEyNjY1LCA4NTg3MDAzLCAtODI1Nzg2MSwgNDA4NDMwOSwgLTEyOTcwMDYyLCAzNjE3MjYsIDI2MTA1OTYsIC0yMzkyMTUzMCwgLTExNDU1MTk1KSwKICAgICAgICAgICAgICAgIGFycmF5KDU0MDg0MTEsIC0xMTM2NjkxLCAtNDk2OTEyMiwgMTA1NjE2NjgsIDI0MTQ1OTE4LCAxNDI0MDU2NiwgMzEzMTk3MzEsIC00MjM1NTQxLCAxOTk4NTE3NSwgLTM0MzYwODYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMzk5NDQ1NywgMTY2MTY4MjEsIDE0NTQ5MjQ2LCAzMzQxMDk5LCAzMjE1NTk1OCwgMTM2NDg5NzYsIC0xNzU3NzA2OCwgODg0OTI5NywgNjUwMzAsIDgzNzA2ODQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTgzMjA5MjYsIC0xMjA0OTYyNiwgMzEyMDQ1NjMsIDU4Mzk0MDAsIC0yMDYyNzI4OCwgLTEwNTcyNzcsIC0xOTQ0Mjk0MiwgNjkyMjE2NCwgMTI3NDM0ODIsIC05ODAwNTE4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzYxMzcxLCAxMjY3ODc4NSwgMjg4MTUwNTAsIDQ3NTk5NzQsIC0yMzg5MzA0NywgNDg4NDcxNywgMjM3ODMxNDUsIDExMDM4NTY5LCAxODgwMDcwNCwgMjU1MjMzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNTI2OTY1OCwgLTE3NzM4ODYsIDEzOTU3ODg2LCA3OTkwNzE1LCAyMzEzMjk5NSwgNzI4NzczLCAxMzM5Mzg0NywgOTA2Njk1NywgMTkyNTg2ODgsIC0xNDc1Mzc5MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjkzNjY1NCwgLTEwODI3NTM1LCAtMTA0MzIwODksIDE0NTE2NzkzLCAtMzY0MDc4NiwgNDM3MjU0MSwgLTMxOTM0OTIxLCAyMjA5MzkwLCAtMTUyNDA1MywgMjA1NTc5NCksCiAgICAgICAgICAgICAgICBhcnJheSg1ODA4ODIsIDE2NzA1MzI3LCA1NDY4NDE1LCAtMjY4MzAxOCwgLTMwOTI2NDE5LCAtMTQ2OTYwMDAsIC03MjAzMzQ2LCAtODk5NDM4OSwgLTMwMDIxMDE5LCA3Mzk0NDM1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMzgzODgwOSwgMTgyMjcyOCwgLTE1NzM4NDQzLCAxNTI0MjcyNywgODMxODA5MiwgLTM3MzMxMDQsIC0yMTY3MjE4MCwgLTM0OTIyMDUsIC00ODIxNzQxLCAxNDc5OTkyMSksCiAgICAgICAgICAgICAgICBhcnJheSgxMzM0NTYxMCwgOTc1OTE1MSwgMzM3MTAzNCwgLTE2MTM3NzkxLCAxNjM1MzAzOSwgODU3Nzk0MiwgMzExMjk4MDQsIDEzNDk2ODU2LCAtOTA1NjAxOCwgNzQwMjUxOCksCiAgICAgICAgICAgICAgICBhcnJheSgyMjg2ODc0LCAtNDQzNTkzMSwgLTIwMDQyNDU4LCAtMjAwODMzNiwgLTEzNjk2MjI3LCA1MDM4MTIyLCAxMTAwNjkwNiwgLTE1NzYwMzUyLCA4MjA1MDYxLCAxNjA3NTYzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDQxNDA4NiwgLTgwMDIxMzIsIDMzMzE4MzAsIC0zMjA4MjE3LCAyMjI0OTE1MSwgLTU1OTQxODgsIDE4MzY0NjYxLCAtMjkwNjk1OCwgMzAwMTk1ODcsIC05MDI5Mjc4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNzY4ODA1MSwgMTU4NTk1MywgLTEwNzc1MDUzLCA5MzEwNjksIC0yOTEyMDIyMSwgLTExMDAyMzE5LCAtMTQ0MTA4MjksIDEyMDI5MDkzLCA5OTQ0Mzc4LCA4MDI0KSwKICAgICAgICAgICAgICAgIGFycmF5KDQzNjg3MTUsIC0zNzA5NjMwLCAyOTg3NDIwMCwgLTE1MDIyOTgzLCAtMjAyMzAzODYsIC0xMTQxMDcwNCwgLTE2MTE0NTk0LCAtOTk5MDg1LCAtODE0MjM4OCwgNTY0MDAzMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTAyOTk2MTAsIDEzNzQ2NDgzLCAxMTY2MTgyNCwgMTYyMzQ4NTQsIDc2MzAyMzgsIDU5OTgzNzQsIDk4MDk4ODcsIC0xNjY5NDU2NCwgMTUyMTk3OTgsIC0xNDMyNzc4MyksCiAgICAgICAgICAgICAgICBhcnJheSgyNzQyNTUwNSwgLTU3MTkwODEsIDMwNTUwMDYsIDEwNjYwNjY0LCAyMzQ1ODAyNCwgNTk1NTc4LCAtMTUzOTg2MDUsIC0xMTczMTk1LCAtMTgzNDIxODMsIDk3NDI3MTcpLAogICAgICAgICAgICAgICAgYXJyYXkoNjc0NDA3NywgMjQyNzI4NCwgMjYwNDI3ODksIDI3MjA3NDAsIC04NDc5MDYsIDExMTg5NzQsIDMyMzI0NjE0LCA3NDA2NDQyLCAxMjQyMDE1NSwgMTk5NDg0NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTQwMTI1MjEsIC01MDI0NzIwLCAtMTgzODQ0NTMsIC05NTc4NDY5LCAtMjY0ODUzNDIsIC0zOTM2NDM5LCAtMTMwMzM0NzgsIC0xMDkwOTgwMywgMjQzMTk5MjksIC02NDQ2MzMzKSwKICAgICAgICAgICAgICAgIGFycmF5KDE2NDEyNjkwLCAtNDUwNzM2NywgMTA3NzI2NDEsIDE1OTI5MzkxLCAtMTcwNjg3ODgsIC00NjU4NjIxLCAxMDU1NTk0NSwgLTEwNDg0MDQ5LCAtMzAxMDIzNjgsIC00NzM5MDQ4KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyMzk3MzgyLCAtNzc2NzY4NCwgLTkyOTMxNjEsIC0xMjc5Mjg2OCwgMTcxNjYyODcsIC05NzU1MTM2LCAtMjczMzMwNjUsIDYxOTkzNjYsIDIxODgwMDIxLCAtMTIyNTA3NjApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC00MjgzMzA3LCA1MzY4NTIzLCAtMzExMTcwMTgsIDgxNjMzODksIC0zMDMyMzA2MywgMzIwOTEyOCwgMTY1NTcxNTEsIDg4OTA3MjksIDg4NDA0NDUsIDQ5NTc3NjApLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1NDQ3NzI3LCA3MDkzMjcsIC02OTE5NDQ2LCAtMTA4NzAxNzgsIC0yOTc3NzkyMiwgNjUyMjMzMiwgLTIxNzIwMTgxLCAxMjEzMDA3MiwgLTE0Nzk2NTAzLCA1MDA1NzU3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTE0NzUxLCAtMTQzMDgxMjgsIDIzMDE5MDQyLCAxNTc2NTczNSwgLTI1MjY5NjgzLCA2MDAyNzUyLCAxMDE4MzE5NywgLTEzMjM5MzI2LCAtMTYzOTUyODYsIC0yMTc2MTEyKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xOTAyNTc1NiwgMTYzMjAwNSwgMTM0NjYyOTEsIC03OTk1MTAwLCAtMjM2NDA0NTEsIDE2NTczNTM3LCAtMzIwMTM5MDgsIC0zMDU3MTA0LCAyMjIwODY2MiwgMjAwMDQ2OCksCiAgICAgICAgICAgICAgICBhcnJheSgzMDY1MDczLCAtMTQxMjc2MSwgLTI1NTk4Njc0LCAtMzYxNDMyLCAtMTc2ODMwNjUsIC01NzAzNDE1LCAtODE2NDIxMiwgMTEyNDg1MjcsIC0zNjkxMjE0LCAtNzQxNDE4NCksCiAgICAgICAgICAgICAgICBhcnJheSgxMDM3OTIwOCwgLTYwNDU1NTQsIDg4NzczMTksIDE0NzM2NDcsIC0yOTI5MTI4NCwgLTEyNTA3NTgwLCAxNjY5MDkxNSwgMjU1MzMzMiwgLTMxMzI2ODgsIDE2NDAwMjg5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTcxNjY2OCwgMTI1NDI2NiwgLTE4NDcyNjkwLCA3NDQ2Mjc0LCAtODQ0ODkxOCwgNjM0NDE2NCwgLTIyMDk3MjcxLCAtNzI4NTU4MCwgMjY4OTQ5MzcsIDkxMzIwNjYpLAogICAgICAgICAgICAgICAgYXJyYXkoMjQxNTg4ODcsIDEyOTM4ODE3LCAxMTA4NTI5NywgLTgxNzc1OTgsIC0yODA2MzQ3OCwgLTQ0NTcwODMsIC0zMDU3NjQ2MywgNjQ0NTIsIC02ODE3MDg0LCAtMjY5Mjg4MiksCiAgICAgICAgICAgICAgICBhcnJheSgxMzQ4ODUzNCwgNzc5NDcxNiwgMjIyMzYyMzEsIDU5ODkzNTYsIDI1NDI2NDc0LCAtMTI1NzgyMDgsIDIzNTA3MTAsIC0zNDE4NTExLCAtNDY4ODAwNiwgMjM2NDIyNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTYzMzUwNTIsIDkxMzI0MzQsIDI1NjQwNTgyLCA2Njc4ODg4LCAxNzI1NjI4LCA4NTE3OTM3LCAtMTE4MDcwMjQsIC0xMTY5NzQ1NywgMTU0NDU4NzUsIC03Nzk4MTAxKSwKICAgICAgICAgICAgICAgIGFycmF5KDI5MDA0MjA3LCAtNzg2NzA4MSwgMjg2NjE0MDIsIC02NDA0MTIsIC0xMjc5NDAwMywgLTc5NDMwODYsIDMxODYzMjU1LCAtNDEzNTU0MCwgLTI3ODA1MCwgLTE1NzU5Mjc5KSwKICAgICAgICAgICAgICAgIGFycmF5KC02MTIyMDYxLCAtMTQ4NjY2NjUsIC0yODYxNDkwNSwgMTQ1Njk5MTksIC0xMDg1Nzk5OSwgLTM1OTE4MjksIDEwMzQzNDEyLCAtNjk3NjI5MCwgLTI5ODI4Mjg3LCAtMTA4MTU4MTEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI3MDgxNjUwLCAzNDYzOTg0LCAxNDA5OTA0MiwgLTQ1MTc2MDQsIDE2MTYzMDMsIC02MjA1NjA0LCAyOTU0MjYzNiwgMTUzNzIxNzksIDE3MjkzNzk3LCA5NjA3MDkpLAogICAgICAgICAgICAgICAgYXJyYXkoMjAyNjM5MTUsIDExNDM0MjM3LCAtNTc2NTQzNSwgMTEyMzY4MTAsIDEzNTA1OTU1LCAtMTA4NTcxMDIsIC0xNjExMTM0NSwgNjQ5MzEyMiwgLTE5Mzg0NTExLCA3NjM5NzE0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODMwNzk4LCAtMTQ4MzkyMzIsIDI1NDAzMDM4LCAtODIxNTE5NiwgLTgzMTcwMTIsIC0xNjE3MzY5OSwgMTgwMDYyODcsIC0xNjA0Mzc1MCwgMjk5OTQ2NzcsIC0xNTgwODEyMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoOTc2OTgyOCwgNTIwMjY1MSwgLTI0MTU3Mzk4LCAtMTM2MzEzOTIsIC0yODA1MTAwMywgLTExNTYxNjI0LCAtMjQ2MTMxNDEsIC0xMzg2MDc4MiwgLTMxMTg0NTc1LCA3MDk0NjQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTIyODYzOTUsIDEzMDc2MDY2LCAtMjE3NzUxODksIC0xMTc2NjIyLCAtMjUwMDMxOTgsIDQwNTc2NTIsIC0zMjAxODEyOCwgLTg4OTA4NzQsIDE2MTAyMDA3LCAxMzIwNTg0NyksCiAgICAgICAgICAgICAgICBhcnJheSgxMzczMzM2MiwgNTU5OTk0NiwgMTA1NTcwNzYsIDMxOTU3NTEsIC01NTU3OTkxLCA4NTM2OTcwLCAtMjU1NDAxNzAsIDg1MjU5NzIsIDEwMTUxMzc5LCAxMDM5NDQwMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNDAyNDY2MCwgLTE2MTM3NTUxLCAyMjQzNjI2MiwgMTIyNzY1MzQsIC05MDk5MDE1LCAtMjY4NjA5OSwgMTk2OTgyMjksIDExNzQzMDM5LCAtMzMzMDIzMzQsIDg5MzQ0MTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1ODc5ODAwLCAtNDUyNTI0MCwgLTg1ODA3NDcsIC0yOTM0MDYxLCAxNDYzNDg0NSwgLTY5ODI3OCwgLTk0NDkwNzcsIDMxMzcwOTQsIC0xMTUzNjg4NiwgMTE3MjExNTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTc1NTU5MzksIC01MDEzOTM4LCA4MjY4NjA2LCAyMzMxNzUxLCAtMjI3Mzg4MTUsIDk3NjEwMTMsIDkzMTkyMjksIDg4MzUxNTMsIC05MjA1NDg5LCAtMTI4MDA0NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQ2MTQwOSwgLTc4MzAwMTQsIDIwNjE0MTE4LCAxNjY4ODI4OCwgLTc1MTQ3NjYsIC00ODA3MTE5LCAyMjMwMDMwNCwgNTA1NDI5LCA2MTA4NDYyLCAtNjE4MzQxNSksCiAgICAgICAgICAgICAgICBhcnJheSgtNTA3MDI4MSwgMTIzNjc5MTcsIC0zMDY2MzUzNCwgMzIzNDQ3MywgMzI2MTcwODAsIC04NDIyNjQyLCAyOTg4MDU4MywgLTEzNDgzMzMxLCAtMjY4OTg0OTAsIC03ODY3NDU5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTk3NTI4MywgNTcyNjUzOSwgMjY5MzQxMzQsIDEwMjM3Njc3LCAtMzE3MzcxNywgLTYwNTA1MywgMjQxOTkzMDQsIDM3OTUwOTUsIDc1OTI2ODgsIC0xNDk5MjA3OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjE1OTQ0MzIsIC0xNDk2NDIyOCwgMTc0NjY0MDgsIC00MDc3MjIyLCAzMjUzNzA4NCwgMjczOTg5OCwgNjQwNzcyMywgMTIwMTg4MzMsIC0yODI1NjA1MiwgNDI5ODQxMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjA2NTA1MDMsIC0xMTk2MTQ5NiwgLTI3MjM2Mjc1LCA1NzA0OTgsIDM3NjcxNDQsIC0xNzE3NTQwLCAxMzg5MTk0MiwgLTE1NjkxOTQsIDEzNzE3MTc0LCAxMDgwNTc0MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTQ2NzY2MzAsIC0xNTY0NDI5NiwgMTUyODcxNzQsIDExOTI3MTIzLCAyNDE3Nzg0NywgLTgxNzU1NjgsIC03OTY0MzEsIDE0ODYwNjA5LCAtMjY5Mzg5MzAsIC01ODYzODM2KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEyOTYyNTQxLCA1MzExNzk5LCAtMTAwNjA3NjgsIDExNjU4MjgwLCAxODg1NTI4NiwgLTc5NTQyMDEsIDEzMjg2MjYzLCAtMTI4MDg3MDQsIC00MzgxMDU2LCA5ODgyMDIyKSwKICAgICAgICAgICAgICAgIGFycmF5KDE4NTEyMDc5LCAxMTMxOTM1MCwgLTIwMTIzMTI0LCAxNTA5MDMwOSwgMTg4MTg1OTQsIDUyNzE3MzYsIC0yMjcyNzkwNCwgMzY2Njg3OSwgLTIzOTY3NDMwLCAtMzI5OTQyOSksCiAgICAgICAgICAgICAgICBhcnJheSgtNjc4OTAyMCwgLTMxNDYwNDMsIDE2MTkyNDI5LCAxMzI0MTA3MCwgMTU4OTg2MDcsIC0xNDIwNjExNCwgLTEwMDg0ODgwLCAtNjY2MTExMCwgLTI0MDMwOTksIDUyNzYwNjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwMTY5ODA4LCAtNTMxNzY0OCwgMjYzMDYyMDYsIC0xMTc1MDg1OSwgMjc4MTQ5NjQsIDcwNjkyNjcsIDcxNTI4NTEsIDM2ODQ5ODIsIDE0NDkyMjQsIDEzMDgyODYxKSwKICAgICAgICAgICAgICAgIGFycmF5KDEwMzQyODI2LCAzMDk4NTA1LCAyMTE5MzExLCAxOTMyMjIsIDI1NzAyNjEyLCAxMjIzMzgyMCwgMjM2OTczODIsIDE1MDU2NzM2LCAtMjEwMTY0MzgsIC04MjAyMDAwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMzE1MDExMCwgMzI2MTYwOCwgMjI3NDU4NTMsIDc5NDg2ODgsIDE5MzcwNTU3LCAtMTUxNzc2NjUsIC0yNjE3MTk3NiwgNjQ4MjgxNCwgLTEwMzAwMDgwLCAtMTEwNjAxMDEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMyODY5NDU4LCAtNTQwODU0NSwgMjU2MDk3NDMsIDE1Njc4NjcwLCAtMTA2ODc3NjksIC0xNTQ3MTA3MSwgMjYxMTI0MjEsIDI1MjEwMDgsIC0yMjY2NDI4OCwgNjkwNDgxNSksCiAgICAgICAgICAgICAgICBhcnJheSgyOTUwNjkyMywgNDQ1NzQ5NywgMzM3NzkzNSwgLTk3OTY0NDQsIC0zMDUxMDA0NiwgMTI5MzUwODAsIDE1NjE3MzcsIDM4NDEwOTYsIC0yOTAwMzYzOSwgLTY2NTc2NDIpLAogICAgICAgICAgICAgICAgYXJyYXkoMTAzNDA4NDQsIC02NjMwMzc3LCAtMTg2NTY2MzIsIC0yMjc4NDMwLCAxMjYyMTE1MSwgLTEzMzM5MDU1LCAzMDg3ODQ5NywgLTExODI0MzcwLCAtMjU1ODQ1NTEsIDUxODE5NjYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI1OTQwMTE1LCAtMTI2NTgwMjUsIDE3MzI0MTg4LCAtMTAzMDczNzQsIC04NjcxNDY4LCAxNTAyOTA5NCwgMjQzOTYyNTIsIC0xNjQ1MDkyMiwgLTIzMjI4NTIsIC0xMjM4ODU3NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjE3NjU2ODQsIDk5MTY4MjMsIC0xMzAwNDA5LCA0MDc5NDk4LCAtMTAyODM0NiwgMTE5MDk1NTksIDE3ODIzOTAsIDEyNjQxMDg3LCAyMDYwMzc3MSwgLTY1NjE3NDIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE4ODgyMjg3LCAtMTE2NzMzODAsIDI0ODQ5NDIyLCAxMTUwMTcwOSwgMTMxNjE3MjAsIC00NzY4ODc0LCAxOTI1NTIzLCAxMTkxNDM5MCwgNDY2Mjc4MSwgNzgyMDY4OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTIyNDEwNTAsIC00MjU5ODIsIDgxMzI2OTEsIDkzOTM5MzQsIDMyODQ2NzYwLCAtMTU5OTYyMCwgMjk3NDk0NTYsIDEyMTcyOTI0LCAxNjEzNjc1MiwgMTUyNjQwMjApLAogICAgICAgICAgICAgICAgYXJyYXkoLTEwMzQ5OTU1LCAtMTQ2ODA1NjMsIC04MjExOTc5LCAyMzMwMjIwLCAtMTc2NjI1NDksIC0xNDU0NTc4MCwgMTA2NTgyMTMsIDY2NzE4MjIsIDE5MDEyMDg3LCAzNzcyNzcyKSwKICAgICAgICAgICAgICAgIGFycmF5KDM3NTM1MTEsIC0zNDIxMDY2LCAxMDYxNzA3NCwgMjAyODcwOSwgMTQ4NDEwMzAsIC02NzIxNjY0LCAyODcxODczMiwgLTE1NzYyODg0LCAyMDUyNzc3MSwgMTI5ODg5ODIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNDgyMjQ4NSwgLTU3OTcyNjksIC0zNzA3OTg3LCAxMjY4OTc3MywgLTg5ODk4MywgLTEwOTE0ODY2LCAtMjQxODMwNDYsIC0xMDU2NDk0MywgMzI5OTY2NSwgLTEyNDI0OTUzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNjc3NzcwMywgLTE1MjUzMzAxLCAtOTY0MjQxNywgNDk3ODk4MywgMzMwODc4NSwgODc1NTQzOSwgNjk0MzE5NywgNjQ2MTMzMSwgLTI1NTgzMTQ3LCA4OTkxMjE4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzIyNjI2MywgMTgxNjM2MiwgLTE2NzMyODgsIC02MDg2NDM5LCAzMTc4Mzg4OCwgLTgxNzU5OTEsIC0zMjk0ODE0NSwgNzQxNzk1MCwgLTMwMjQyMjg3LCAxNTA3MjY1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyOTY5MjY2MywgNjgyOTg5MSwgLTEwNDk4ODAwLCA0MzM0ODk2LCAyMDk0NTk3NSwgLTExOTA2NDk2LCAtMjg4ODc2MDgsIDgyMDkzOTEsIDE0NjA2MzYyLCAtMTA2NDcwNzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTM0ODE1NzAsIDg3MDcwODEsIDMyMTg4MTAyLCA1NjcyMjk0LCAyMjA5NjcwMCwgMTcxMTI0MCwgLTMzMDIwNjk1LCA5NzYxNDg3LCA0MTcwNDA0LCAtMjA4NTMyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE1ODc0NzAsIDE0ODU1OTQ1LCAtNDEyNzc3OCwgLTE1MzE4NTcsIC0yNjY0OTA4OSwgMTUwODQwNDYsIDIyMTg2NTIyLCAxNjAwMjAwMCwgLTE0Mjc2ODM3LCAtODQwMDc5OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQ4MTE0NTYsIDEzNzYxMDI5LCAtMzE3MDM4NzcsIC0yNDgzOTE5LCAtMzMxMjQ3MSwgNzg2OTA0NywgLTcxMTM1NzIsIC05NjIwMDkyLCAxMzI0MDg0NSwgMTA5NjU4NzApLAogICAgICAgICAgICAgICAgYXJyYXkoLTc3NDI1NjMsIC04MjU2NzYyLCAtMTQ3NjgzMzQsIC0xMzY1NjI2MCwgLTIzMjMyMzgzLCAxMjM4NzE2NiwgNDQ5ODk0NywgMTQxNDc0MTEsIDI5NTE0MzkwLCA0MzAyODYzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzQxMzQwNSwgLTEyNDA3ODU5LCAyMDc1NzMwMiwgLTEzODAxODMyLCAxNDc4NTE0MywgODk3NjM2OCwgLTUwNjEyNzYsIC0yMTQ0MzczLCAxNzg0Njk4OCwgLTEzOTcxOTI3KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMjQ0NDUyLCAtNzU0NzI4LCAtNDU5NzAzMCwgLTEwNjYzMDksIC02MjQ3MTcyLCAxNDU1Mjk5LCAtMjE2NDc3MjgsIC05MjE0Nzg5LCAtNTIyMjcwMSwgMTI2NTAyNjcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk5MDY3OTcsIC0xNjA3MDMxMCwgMjExMzQxNjAsIDEyMTk4MTY2LCAtMjcwNjQ1NzUsIDcwODEyNiwgMzg3ODEzLCAxMzc3MDI5MywgLTE5MTM0MzI2LCAxMDk1ODY2MyksCiAgICAgICAgICAgICAgICBhcnJheSgyMjQ3MDk4NCwgMTIzNjk1MjYsIDIzNDQ2MDE0LCAtNTQ0MTEwOSwgLTIxNTIwODAyLCAtOTY5ODcyMywgLTExNzcyNDk2LCAtMTE1NzQ0NTUsIC0yNTA4MzgzMCwgNDI3MTg2MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1MTY5NTY1LCAtMTAwNTM2NDIsIC0xOTkwOTMzMiwgMTUzNjE1OTUsIC01OTg0MzU4LCAyMTU5MTkyLCA3NTM3NSwgLTQyNzg1MjksIC0zMjUyNjIyMSwgODQ2OTY3MyksCiAgICAgICAgICAgICAgICBhcnJheSgxNTg1NDk3MCwgNDE0ODMxNCwgLTg4OTM4OTAsIDcyNTkwMDIsIDExNjY2NTUxLCAxMzgyNDczNCwgLTMwNTMxMTk4LCAyNjk3MzcyLCAyNDE1NDc5MSwgLTk0NjA5NDMpLAogICAgICAgICAgICAgICAgYXJyYXkoMTU0NDYxMzcsIC0xNTgwNjY0NCwgMjk3NTk3NDcsIDE0MDE5MzY5LCAzMDgxMTIyMSwgLTk2MTAxOTEsIC0zMTU4MjAwOCwgMTI4NDAxMDQsIDI0OTEzODA5LCA5ODE1MDIwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNDcwOTI4NiwgLTU2MTQyNjksIC0zMTg0MTQ5OCwgLTEyMjg4ODkzLCAtMTQ0NDM1MzcsIDEwNzk5NDE0LCAtOTEwMzY3NiwgMTM0Mzg3NjksIDE4NzM1MTI4LCA5NDY2MjM4KSwKICAgICAgICAgICAgICAgIGFycmF5KDExOTMzMDQ1LCA5MjgxNDgzLCA1MDgxMDU1LCAtNTE4MzgyNCwgLTI2MjgxNjIsIC00OTA1NjI5LCAtNzcyNzgyMSwgLTEwODk2MTAzLCAtMjI3Mjg2NTUsIDE2MTk5MDY0KSwKICAgICAgICAgICAgICAgIGFycmF5KDE0NTc2ODEwLCAzNzk0NzIsIC0yNjc4NjUzMywgLTgzMTcyMzYsIC0yOTQyNjUwOCwgLTEwODEyOTc0LCAtMTAyNzY2LCAxODc2Njk5LCAzMDgwMTExOSwgMjE2NDc5NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTU5OTUwODYsIDMxOTk4NzMsIDEzNjcyNTU1LCAxMzcxMjI0MCwgLTE5Mzc4ODM1LCAtNDY0NzY0NiwgLTEzMDgxNjEwLCAtMTU0OTYyNjksIC0xMzQ5MjgwNywgMTI2ODA1MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTAyOTA2MTQsIC0zNjU5MDM5LCAtMzI4NjU5MiwgMTA5NDg4MTgsIDIzMDM3MDI3LCAzNzk0NDc1LCAtMzQ3MDMzOCwgLTEyNjAwMjIxLCAtMTcwNTUzNjksIDM1NjU5MDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkyMTAwODgsIC05NDE5MzM3LCAtNTkxOTc5MiwgLTQ5NTI3ODUsIDEwODM0ODExLCAtMTMzMjc3MjYsIC0xNjUxMjEwMiwgLTEwODIwNzEzLCAtMjcxNjIyMjIsIC0xNDAzMDUzMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEzMTYxODkwLCAxNTUwODU4OCwgMTY2NjM3MDQsIC04MTU2MTUwLCAtMjgzNDk5NDIsIDkwMTkxMjMsIC0yOTE4MzQyMSwgLTM3Njk0MjMsIDIyNDQxMTEsIC0xNDAwMTk3OSksCiAgICAgICAgICAgICAgICBhcnJheSgtNTE1Mjg3NSwgLTM4MDA5MzYsIC05MzA2NDc1LCAtNjA3MTU4MywgMTYyNDMwNjksIDE0Njg0NDM0LCAtMjU2NzMwODgsIC0xNjE4MDgwMCwgMTM0OTE1MDYsIDQ2NDE4NDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTA4MTM0MTcsIDY0MzMzMCwgLTE5MTg4NTE1LCAtNzI4OTE2LCAzMDI5MjA2MiwgLTE2NjAwMDc4LCAyNzU0ODQ0NywgLTc3MjEyNDIsIDE0NDc2OTg5LCAtMTI3Njc0MzEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEwMjkyMDc5LCA5OTg0OTQ1LCA2NDgxNDM2LCA4Mjc5OTA1LCAtNzI1MTUxNCwgNzAzMjc0MywgMjcyODI5MzcsIC0xNjQ0MjU5LCAtMjc5MTI4MTAsIDEyNjUxMzI0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTE4NTUxMywgLTgxMzM4MywgMjIyNzEyMDQsIDExODM1MzA4LCAxMDIwMTU0NSwgMTUzNTEwMjgsIDE3MDk5NjYyLCAzOTg4MDM1LCAyMTcyMTUzNiwgLTMxNDg5NDApLAogICAgICAgICAgICAgICAgYXJyYXkoMTAyMDIxNzcsIC02NTQ1ODM5LCAtMzEzNzMyMzIsIC05NTc0NjM4LCAtMzIxNTA2NDIsIC04MTE5NjgzLCAtMTI5MDYzMjAsIDM4NTI2OTQsIDEzMjE2MjA2LCAxNDg0MjMyMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE1ODE1NjQwLCAtMTA2MDEwNjYsIC02NTM4OTUyLCAtNzI1ODk5NSwgLTY5ODQ2NTksIC02NTgxNzc4LCAtMzE1MDA4NDcsIDEzNzY1ODI0LCAtMjc0MzQzOTcsIDk5MDAxODQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQ0NjU1MDUsIC0xMzgzMzMzMSwgLTMyMTMzOTg0LCAtMTQ3Mzg4NzMsIC0yNzQ0MzE4NywgMTI5OTA0OTIsIDMzMDQ2MTkzLCAxNTc5NjQwNiwgLTcwNTE4NjYsIC04MDQwMTE0KSwKICAgICAgICAgICAgICAgIGFycmF5KDMwOTI0NDE3LCAtODI3OTYyMCwgNjM1OTAxNiwgLTEyODE2MzM1LCAxNjUwODM3NywgOTA3MTczNSwgLTI1NDg4NjAxLCAxNTQxMzYzNSwgOTUyNDM1NiwgLTcwMTg4NzgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEyMjc0MjAxLCAtMTMxNzU1NDcsIDMyNjI3NjQxLCAtMTc4NTMyNiwgNjczNjYyNSwgMTMyNjczMDUsIDUyMzc2NTksIC01MTA5NDgzLCAxNTY2MzUxNiwgNDAzNTc4NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjk1MTMwOSwgODkwMzk4NSwgMTczNDk5NDYsIDYwMTYzNSwgLTE2NDMyODE1LCAtNDYxMjU1NiwgLTEzNzMyNzM5LCAtMTU4ODkzMzQsIC0yMjI1ODQ3OCwgNDY1OTA5MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTY5MTYyNjMsIC00OTUyOTczLCAtMzAzOTM3MTEsIC0xNTE1ODgyMSwgMjA3NzQ4MTIsIDE1ODk3NDk4LCA1NzM2MTg5LCAxNTAyNjk5NywgLTIxNzgyNTYsIC0xMzQ1NTU4NSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtODg1ODk4MCwgLTIyMTkwNTYsIDI4NTcxNjY2LCAtMTAxNTU1MTgsIC00NzQ0NjcsIC0xMDEwNTY5OCwgLTM4MDE0OTYsIDI3ODA5NSwgMjM0NDA1NjIsIC0yOTAyMDgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTAyMjYyNDEsIC01OTI4NzAyLCAxNTEzOTk1NiwgMTIwODE4LCAtMTQ4Njc2OTMsIDUyMTg2MDMsIDMyOTM3Mjc1LCAxMTU1MTQ4MywgLTE2NTcxOTYwLCAtNzQ0Mjg2NCksCiAgICAgICAgICAgICAgICBhcnJheSgxNzkzMjczOSwgLTEyNDM3Mjc2LCAtMjQwMzk1NTcsIDEwNzQ5MDYwLCAxMTMxNjgwMywgNzUzNTg5NywgMjI1MDM3NjcsIDU1NjE1OTQsIC0zNjQ2NjI0LCAzODk4NjYxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg3NzQ5OTA3LCAtOTY5NTY3LCAtMTYzMzk3MzEsIC0xNjQ2NCwgLTI1MDE4MTExLCAxNTEyMjE0MywgLTE1NzM1MzEsIDcxNTI1MzAsIDIxODMxMTYyLCAxMjQ1MjMzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI2OTU4NDU5LCAtMTQ2NTgwMjYsIDQzMTQ1ODYsIDgzNDY5OTEsIC01Njc3NzY0LCAxMTk2MDA3MiwgLTMyNTg5Mjk1LCAtNjIwMDM1LCAtMzA0MDIwOTEsIC0xNjcxNjIxMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTIxNjU4OTYsIDkxNjY5NDcsIDMzNDkxMzg0LCAxMzY3MzQ3OSwgMjk3ODcwODUsIDEzMDk2NTM1LCA2MjgwODM0LCAxNDU4NzM1NywgLTIyMzM4MDI1LCAxMzk4NzUyNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI0MzQ5OTA5LCA3Nzc4Nzc1LCAyMTExNjAwMCwgMTU1NzI1OTcsIC00ODMzMjY2LCAtNTM1Nzc3OCwgLTQzMDA4OTgsIC01MTI0NjM5LCAtNzQ2OTc4MSwgLTI4NTgwNjgpLAogICAgICAgICAgICAgICAgYXJyYXkoOTY4MTkwOCwgLTY3MzcxMjMsIC0zMTk1MTY0NCwgMTM1OTE4MzgsIC02ODgzODIxLCAzODY5NTAsIDMxNjIyNzgxLCA2NDM5MjQ1LCAtMTQ1ODEwMTIsIDQwOTEzOTcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTg0MjY0MjcsIDE0NzA3MjcsIC0yODEwOTY3OSwgLTE1OTY5OTAsIDM5Nzg2MjcsIC01MTIzNjIzLCAtMTk2MjI2ODMsIDEyMDkyMTYzLCAyOTA3Nzg3NywgLTE0NzQxOTg4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg1MjY5MTY4LCAtNjg1OTcyNiwgLTEzMjMwMjExLCAtODAyMDcxNSwgMjU5MzI1NjMsIDE3NjM1NTIsIC01NjA2MTEwLCAtNTUwNTg4MSwgLTIwMDE3ODQ3LCAyMzU3ODg5KSwKICAgICAgICAgICAgICAgIGFycmF5KDMyMjY0MDA4LCAtMTU0MDc2NTIsIC01Mzg3NzM1LCAtMTE2MDA5MywgLTIwOTEzMjIsIC0zOTQ2OTAwLCAyMzEwNDgwNCwgLTEyODY5OTA4LCA1NzI3MzM4LCAxODkwMzgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQ2MDkxMjMsIC04OTU0NDcwLCAtNjAwMDU2NiwgLTE2NjIyNzgxLCAtMTQ1NzczODcsIC03NzQzODk4LCAtMjY3NDUxNjksIDEwOTQyMTE1LCAtMjU4ODg5MzEsIC0xNDg4NDY5NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjA1MTM1MDAsIDU1NTc5MzEsIC0xNTYwNDYxMywgNzgyOTUzMSwgMjY0MTM5NDMsIC0yMDE5NDA0LCAtMjEzNzg5NjgsIDc0NzE3ODEsIDEzOTEzNjc3LCAtNTEzNzg3NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjU1NzQzNzYsIDExOTY3ODI2LCAyOTIzMzI0MiwgMTI5NDgyMzYsIC02NzU0NDY1LCA0NzEzMjI3LCAtODk0MDk3MCwgMTQwNTkxODAsIDEyODc4NjUyLCA4NTExOTA1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTY1NjgwMSwgMzM5MzYzMSwgLTI5NTU0MTUsIC03MDc1NTI2LCAtMjI1MDcwOSwgOTM2NjkwOCwgLTMwMjIzNDE4LCA2ODEyOTc0LCA1NTY4Njc2LCAtMzEyNzY1NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTE2MzAwMDQsIDEyMTQ0NDU0LCAyMTE2MzM5LCAxMzYwNjAzNywgMjczNzg4ODUsIDE1Njc2OTE3LCAtMTc0MDg3NTMsIC0xMzUwNDM3MywgLTE0Mzk1MTk2LCA4MDcwODE4KSwKICAgICAgICAgICAgICAgIGFycmF5KDI3MTE3Njk2LCAtMTAwMDczNzgsIC0zMTI4Mjc3MSwgLTU1NzAwODgsIDExMjcyODIsIDEyNzcyNDg4LCAtMjk4NDU5MDYsIDEwNDgzMzA2LCAtMTE1NTI3NDksIC0xMDI4NzE0KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwNjM3NDY3LCAtNTY4ODA2NCwgNTY3NDc4MSwgMTA3MjcwOCwgLTI2MzQzNTg4LCAtNjk4MjMwMiwgLTE2ODM5NzUsIDkxNzc4NTMsIC0yNzQ5MzE2MiwgMTU0MzEyMDMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIwNTI1MTQ1LCAxMDg5MjU2NiwgLTEyNzQyNDcyLCAxMjc3OTQ0MywgLTI5NDkzMDM0LCAxNjE1MDA3NSwgLTI4MjQwNTE5LCAxNDk0MzE0MiwgLTE1MDU2NzkwLCAtNzkzNTkzMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAwMjQ0NjIsIDU2MjY5MjYsIC01NTE1NjcsIC05OTgxMDg3LCA3NTM1OTgsIDExOTgxMTkxLCAyNTI0NDc2NywgLTMyMzk3NjYsIC0zMzU2NTUwLCA5NTk0MDI0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzc1MjY0NCwgMjYzNjg3MCwgLTUxNjM5MTAsIC0xMDEwMzgxOCwgNTg1MTM0LCA3ODc3MzgzLCAxMTM0NTY4MywgLTY0OTIyOTAsIDEzMzUyMzM1LCAtMTA5NzcwODQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xOTMxNzk5LCAtNTQwNzQ1OCwgMzMwNDY0OSwgLTEyODg0ODY5LCAxNzAxNTgwNiwgLTQ4NzcwOTEsIC0yOTc4Mzg1MCwgLTc3NTI0ODIsIC0xMzIxNTUzNywgLTMxOTIwNCksCiAgICAgICAgICAgICAgICBhcnJheSgyMDIzOTkzOSwgNjYwNzA1OCwgNjIwMzk4NSwgMzQ4Mzc5MywgLTE4Mzg2OTc2LCAtNzc5MjI5LCAtMjA3MjM3NDIsIDE1MDc3ODcwLCAtMjI3NTA3NTksIDE0NTIzODE3KSwKICAgICAgICAgICAgICAgIGFycmF5KDI3NDA2MDQyLCAtNjA0MTY1NywgMjc0MjM1OTYsIC00NDk3Mzk0LCA0OTk2MjE0LCAxMDAwMjM2MCwgLTI4ODQyMDMxLCAtNDU0NTQ5NCwgLTMwMTcyNzQyLCAtNDgwNTY2NyksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTM3NDI0MiwgMTI2NjA3MTUsIDE3ODYxMzgzLCAtMTI1NDA4MzMsIDEwOTM1NTY4LCAxMDk5MjI3LCAtMTM4ODYwNzYsIC05MDkxNzQwLCAtMjc3MjcwNDQsIDExMzU4NTA0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMjczMDgwOSwgMTAzMTE4NjcsIDE1MTAzNzUsIDEwNzc4MDkzLCAtMjExOTQ1NSwgLTkxNDU3MDIsIDMyNjc2MDAzLCAxMTE0OTMzNiwgLTI2MTIzNjUxLCA0OTg1NzY4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xOTA5NjMwMywgMzQxMTQ3LCAtNjE5NzQ4NSwgLTIzOTAzMywgMTU3NTY5NzMsIC04Nzk2NjYyLCAtOTgzMDQzLCAxMzc5NDExNCwgLTE5NDE0MzA3LCAtMTU2MjEyNTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDY0OTAwODEsIDExOTQwMjg2LCAyNTQ5NTkyMywgLTc3MjYzNjAsIDg2NjgzNzMsIC04NzUxMzE2LCAzMzY3NjAzLCA2OTcwMDA1LCAtMTY5MTA2NSwgLTkwMDQ3OTApLAogICAgICAgICAgICAgICAgYXJyYXkoMTY1NjQ5NywgMTM0NTczMTcsIDE1MzcwODA3LCA2MzY0OTEwLCAxMzYwNTc0NSwgODM2MjMzOCwgLTE5MTc0NjIyLCAtNTQ3NTcyMywgLTE2Nzk2NTk2LCAtNTAzMTQzOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjIyNzMzMTUsIC0xMzUyNDQyNCwgLTY0Njg1LCAtNDMzNDIyMywgLTE4NjA1NjM2LCAtMTA5MjE5NjgsIC0yMDU3MTA2NSwgLTcwMDc5NzgsIC05OTg1MywgLTEwMjM3MzMzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNzc0NzQ2NSwgMTAwMzkyNjAsIDE5MzY4Mjk5LCAtNDA1MDU5MSwgLTIwNjMwNjM1LCAtMTYwNDEyODYsIDMxOTkyNjgzLCAtMTU4NTc5NzYsIC0yOTI2MDM2MywgLTU1MTE5NzEpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE5MzIwMjcsIC00OTg2MTQxLCAtMTk2MTIzODIsIDE2MzY2NTgwLCAyMjAyMzYxNCwgODg0NTAsIDExMzcxOTk5LCAtMzc0NDI0NywgNDg4MjI0MiwgLTEwNjI2OTA1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI5Nzk2NTA3LCAzNzE4NiwgMTk4MTgwNTIsIDEwMTE1NzU2LCAtMTE4MjkwMzIsIDMzNTI3MzYsIDE4NTUxMTk4LCAzMjcyODI4LCAtNTE5MDkzMiwgLTQxNjI0MDkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEyNTAxMjg2LCA0MDQ0MzgzLCAtODYxMjk1NywgLTEzMzkyMzg1LCAtMzI0MzAwNTIsIDUxMzY1OTksIC0xOTIzMDM3OCwgLTM1Mjk2OTcsIDMzMDA3MCwgLTM2NTk0MDkpLAogICAgICAgICAgICAgICAgYXJyYXkoNjM4NDg3NywgMjg5OTUxMywgMTc4MDc0NzcsIDc2NjM5MTcsIC0yMzU4ODg4LCAxMjM2MzE2NSwgMjUzNjY1MjIsIC04NTczODkyLCAtMjcxMjk1LCAxMjA3MTQ5OSksCiAgICAgICAgICAgICAgICBhcnJheSgtODM2NTUxNSwgLTQwNDI1MjEsIDI1MTMzNDQ4LCAtNDUxNzM1NSwgLTYyMTEwMjcsIDIyNjU5MjcsIC0zMjc2OTYxOCwgMTkzNjY3NSwgLTUxNTk2OTcsIDM4MjkzNjMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI4NDI1OTY2LCAtNTgzNTQzMywgLTU3NzA5MCwgLTQ2OTcxOTgsIC0xNDIxNzU1NSwgNjg3MDkzMCwgNzkyMTU1MCwgLTY1Njc3ODcsIDI2MzMzMTQwLCAxNDI2NzY2NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTEwNjcyMTksIDExODcxMjMxLCAyNzM4NTcxOSwgLTEwNTU5NTQ0LCAtNDU4NTkxNCwgLTExMTg5MzEyLCAxMDAwNDc4NiwgLTg3MDk0ODgsIC0yMTc2MTIyNCwgODkzMDMyNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjExOTc3ODUsIC0xNjM5NjAzNSwgMjU2NTQyMTYsIC0xNzI1Mzk3LCAxMjI4MjAxMiwgMTEwMDg5MTksIDE1NDE5NDAsIDQ3NTc5MTEsIC0yNjQ5MTUwMSwgLTE2NDA4OTQwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMzUzNzI2MiwgLTc3NTk0OTAsIC0yMDYwNDg0MCwgMTA5NjE5MjcsIC01OTIyODIwLCAtMTMyMTgwNjUsIC0xMzE1NjU4NCwgNjIxNzI1NCwgLTE1OTQzNjk5LCAxMzgxNDk5MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTc0MjI1NzMsIDE1MTU3NzkwLCAxODcwNTU0MywgMjk2MTksIDI0NDA5NzE3LCAtMjYwNDc2LCAyNzM2MTY4MSwgOTI1NzgzMywgLTE5NTY1MjYsIC0xNzc2OTE0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTA0NTMwMCwgLTEwMTkxOTY2LCAxNTM2NjU4NSwgMTUxNjY1MDksIC0xMzEwNTA4NiwgODQyMzU1NiwgLTI5MTcxNTQwLCAxMjM2MTEzNSwgLTE4Njg1OTc4LCA0NTc4MjkwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNDU3OTc2OCwgMzcxMTU3MCwgMTM0MjMyMiwgLTExMTgwMTI2LCAtMjcwMDUxMzUsIDE0MTI0OTU2LCAtMjI1NDQ1MjksIDE0MDc0OTE5LCAyMTk2NDQzMiwgODIzNTI1NyksCiAgICAgICAgICAgICAgICBhcnJheSgtNjUyODYxMywgLTI0MTE0OTcsIDk0NDI5NjYsIC01OTI1NTg4LCAxMjAyNTY0MCwgLTE0ODc0MjAsIC0yOTgxNTE0LCAtMTY2OTIwNiwgMTMwMDY4MDYsIDIzNTU0MzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2MzA0ODk5LCAtMTM2MDUyNTksIC02NjMyNDI3LCAtNTE0MjM0OSwgMTY5NzQzNTksIC0xMDkxMTA4MywgMjcyMDIwNDQsIDE3MTkzNjYsIDExNDE2NDgsIC0xMjc5NjIzNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEyODYzOTQ0LCAtMTMyMTk5ODYsIC04MzE4MjY2LCAtMTEwMTgwOTEsIC02ODEwMTQ1LCAtNDg0Mzg5NCwgMTM0NzUwNjYsIC0zMTMzOTcyLCAzMjY3NDg5NSwgMTM3MTUwNDUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTE0MjMzMzUsIC01NDY4MDU5LCAzMjM0NDIxNiwgODk2Mjc1MSwgMjQ5ODk4MDksIDkyNDE3NTIsIC0xMzI2NTI1MywgMTYwODYyMTIsIC0yODc0MDg4MSwgLTE1NjQyMDkzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNDA5NjY4LCAxMjUzMDcyOCwgLTYzNjg3MjYsIDEwODQ3Mzg3LCAxOTUzMTE4NiwgLTE0MTMyMTYwLCAtMTE3MDkxNDgsIDc3OTE3OTQsIC0yNzI0NTk0MywgNDM4MzM0NyksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjg5NzA4OTgsIDUyNzE0NDcsIC0xMjY2MDA5LCAtOTczNjk4OSwgLTEyNDU1MjM2LCAxNjczMjU5OSwgLTQ4NjI0MDcsIC00OTA2NDQ5LCAyNzE5MzU1NywgNjI0NTE5MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTUxOTM5NTYsIDUzNjIyNzgsIC0xNzgzODkzLCAyNjk1ODM0LCA0OTYwMjI3LCAxMjg0MDcyNSwgMjMwNjE4OTgsIDMyNjA0OTIsIDIyNTEwNDUzLCA4NTc3NTA3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMjYzMjQ1MSwgMTEyNTczNDYsIC0zMjY5Mjk5NCwgMTM1NDgxNzcsIC03MjEwMDQsIDEwODc5MDExLCAzMTE2ODAzMCwgMTM5NTIwOTIsIC0yOTU3MTQ5MiwgLTM2MzU5MDYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDM4NzczMjEsIC05NTcyNzM5LCAzMjQxNjY5MiwgNTQwNTMyNCwgLTExMDA0NDA3LCAtMTM2NTY2MzUsIDM3NTk3NjksIDExOTM1MzIwLCA1NjExODYwLCA4MTY0MDE4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNjI3NTgwMiwgMTQ2Njc3OTcsIDE1OTA2NDYwLCAxMjE1NTI5MSwgLTIyMTExMTQ5LCAtOTAzOTcxOCwgMzIwMDMwMDIsIC04ODMyMjg5LCA1NzczMDg1LCAtODQyMjEwOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjM3ODgxMTgsIC04MjU0MzAwLCAxOTUwODc1LCA4OTM3NjMzLCAxODY4NjcyNywgMTY0NTkxNzAsIC05MDU3MjUsIDEyMzc2MzIwLCAzMTYzMjk1MywgMTkwOTI2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ1OTM2MDcsIC0xNjEzODg4NSwgLTg0MjM5OTEsIDEzMzc4NzQ2LCAxNDE2MjQwNywgNjkwMTMyOCwgLTgyODg3NDksIDQ1MDg1NjQsIC0yNTM0MTU1NSwgLTM2Mjc1MjgpLAogICAgICAgICAgICAgICAgYXJyYXkoODg4NDQzOCwgLTU4ODQwMDksIDYwMjM5NzQsIDEwMTA0MzQxLCAtNjg4MTU2OSwgLTQ5NDE1MzMsIDE4NzIyOTQxLCAtMTQ3ODYwMDUsIC0xNjcyNDg4LCA4Mjc2MjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMyNzIwNTgzLCAtMTYyODkyOTYsIC0zMjUwMzU0NywgNzEwMTIxMCwgMTMzNTQ2MDUsIDI2NTkwODAsIC0xODAwNTc1LCAtMTQxMDgwMzYsIC0yNDg3ODQ3OCwgMTU0MTI4NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjkwMTM0NywgLTExMTc2ODcsIDM4ODAzNzYsIC0xMDA1OTM4OCwgLTE3NjIwOTQwLCAtMzYxMjc4MSwgLTIxODAyMTE3LCAtMzU2NzQ4MSwgMjA0NTY4NDUsIC0xODg1MDMzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI3MDE5NjEwLCAxMjI5OTQ2NywgLTEzNjU4Mjg4LCAtMTYwMzIzNCwgLTEyODYxNjYwLCAtNDg2MTQ3MSwgLTE5NTQwMTUwLCAtNTAxNjA1OCwgMjk0Mzk2NDEsIDE1MTM4ODY2KSwKICAgICAgICAgICAgICAgIGFycmF5KDIxNTM2MTA0LCAtNjYyNjQyMCwgLTMyNDQ3ODE4LCAtMTA2OTAyMDgsIC0yMjQwODA3NywgNTE3NTgxNCwgLTU0MjAwNDAsIC0xNjM2MTE2MywgNzc3OTMyOCwgMTA5ODk2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDI3OTc0NCwgMTQ2NDg3NTAsIC04MDQ0ODcxLCA2NDI1NTU4LCAxMzYzOTYyMSwgLTc0MzUwOSwgMjg2OTgzOTAsIDEyMTgwMTE4LCAyMzE3NzcxOSwgLTU1NDA3NSksCiAgICAgICAgICAgICAgICBhcnJheSgyNjU3Mjg0NywgMzQwNTkyNywgLTMxNzAxNzAwLCAxMjg5MDkwNSwgLTE5MjY1NjY4LCA1MzM1ODY2LCAtNjQ5Mzc2OCwgMjM3ODQ5MiwgNDQzOTE1OCwgLTEzMjc5MzQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjcxNjcwNiwgMzQ4OTA3MCwgLTkyMjUyNjYsIC0zMzI3NTMsIDE4ODc1NzIyLCAtMTE0MDA5NSwgMTQ4MTk0MzQsIC0xMjczMTUyNywgLTE3NzE3NzU3LCAtNTQ2MTQzNyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTUwNTY0ODMsIDE2NTY2NTUxLCAxNTk1MzY2MSwgMzc2Nzc1MiwgLTEwNDM2NDk5LCAxNTYyNzA2MCwgLTgyMDk1NCwgMjE3NzIyNSwgODU1MDA4MiwgLTE1MTE0MTY1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xODQ3MzMwMiwgMTY1OTY3NzUsIC0zODE2NjAsIDE1NjYzNjExLCAyMjg2MDk2MCwgMTU1ODU1ODEsIC0yNzg0NDEwOSwgLTM1ODI3MzksIC0yMzI2MDQ2MCwgLTg0Mjg1ODgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMyNDgwNTUxLCAxNTcwNzI3NSwgLTgyMDU5MTIsIC01NjUyMDgxLCAyOTQ2NDU1OCwgMjcxMzgxNSwgLTIyNzI1MTM3LCAxNTg2MDQ4MiwgLTIxOTAyNTcwLCAxNDk0MTkzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTk1NjIwOTEsIC0xNDA4NzM5MywgLTI1NTgzODcyLCAtOTI5OTU1MiwgMTMxMjc4NDIsIDc1OTcwOSwgMjE5MjM0ODIsIDE2NTI5MTEyLCA4NzQyNzA0LCAxMjk2NzAxNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjg0NjQ4OTksIDE1NTMyMDUsIDMyNTM2ODU2LCAtMTA0NzM3MjksIC0yNDY5MTYwNSwgLTQwNjE3NCwgLTg5MTQ2MjUsIC0yOTMzODk2LCAtMjk5MDM3NTgsIDE1NTUzODgzKSwKICAgICAgICAgICAgICAgIGFycmF5KDIxODc3OTA5LCAzMjMwMDA4LCA5ODgxMTc0LCAxMDUzOTM1NywgLTQ3OTcxMTUsIDI4NDEzMzIsIDExNTQzNTcyLCAxNDUxMzI3NCwgMTkzNzU5MjMsIC0xMjY0Nzk2MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoODgzMjI2OSwgLTE0NDk1NDg1LCAxMzI1MzUxMSwgNTEzNzU3NSwgNTAzNzg3MSwgNDA3ODc3NywgMjQ4ODA4MTgsIC02MjIyNzE2LCAyODYyNjUzLCA5NDU1MDQzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI5MzA2NzUxLCA1MTIzMTA2LCAyMDI0NTA0OSwgLTE0MTQ5ODg5LCA5NTkyNTY2LCA4NDQ3MDU5LCAtMjA3NzEyNCwgLTI5OTAwODAsIDE1NTExNDQ5LCA0Nzg5NjYzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMDY3OTc1NiwgNzAwNDU0NywgODgyNDgzMSwgLTk0MzQ5NzcsIC00MDQ1NzA0LCAtMzc1MDczNiwgLTU3NTQ3NjIsIDEwODg5MywgMjM1MTMyMDAsIDE2NjUyMzYyKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMzI1NjE3MywgNDE0NDc4MiwgLTQ0NzYwMjksIC02NTc5MTIzLCAxMDc3MDAzOSwgLTcxNTU1NDIsIC02NjUwNDE2LCAtMTI5MzYzMDAsIC0xODMxOTE5OCwgMTAyMTI4NjApLAogICAgICAgICAgICAgICAgYXJyYXkoMjc1NjA4MSwgODU5ODExMCwgNzM4MzczMSwgLTY4NTk4OTIsIDIyMzEyNzU5LCAtMTEwNTAxMiwgMjExNzk4MDEsIDI2MDA5NDAsIC05OTg4Mjk4LCAtMTI1MDY0NjYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI0NjQ1NjkyLCAxMzMxNzQ2MiwgLTMwNDQ5MjU5LCAtMTU2NTM5MjgsIDIxMzY1NTc0LCAtMTA4Njk2NTcsIDExMzQ0NDI0LCA4NjQ0NDAsIC0yNDk5Njc3LCAtMTY3MTAwNjMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNjQzMjgwMywgNjE0ODMyOSwgLTE3MTg0NDEyLCAtMTQ0NzQxNTQsIDE4NzgyOTI5LCAtMjc1OTk3LCAtMjI1NjE1MzQsIDIxMTMwMCwgMjcxOTc1NywgNDk0MDk5NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTMyMzg4MiwgMzkxMTMxMywgLTY5NDg3NDQsIDE0NzU5NzY1LCAtMzAwMjcxNTAsIDc4NTEyMDcsIDIxNjkwMTI2LCA4NTE4NDYzLCAyNjY5OTg0MywgNTI3NjI5NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTMxNDk4NzMsIC02NDI5MDY3LCA5Mzk2MjQ5LCAzNjUwMTMsIDI0NzAzMzAxLCAtMTA0ODg5MzksIDEzMjE1ODYsIDE0OTYzNSwgLTE1NDUyNzc0LCA3MTU5MzY5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg5OTg3NzgwLCAtMzQwNDc1OSwgMTc1MDc5NjIsIDk1MDU1MzAsIDk3MzE1MzUsIC0yMTY1NTE0LCAyMjM1NjAwOSwgODMxMjE3NiwgMjI0NzcyMTgsIC04NDAzMzg1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4MTU1ODU3LCAtMTY1MDQ5OTAsIDE5NzQ0NzE2LCA5MDA2OTIzLCAxNTE1NDE1NCwgLTEwNTM4OTc2LCAyNDI1NjQ2MCwgLTQ4NjQ5OTUsIC0yMjU0ODE3MywgOTMzNDEwOSksCiAgICAgICAgICAgICAgICBhcnJheSgyOTg2MDg4LCAtNDkxMTg5MywgMTA3NzY2MjgsIC0zNDczODQ0LCAxMDYyMDU5MCwgLTcwODMyMDMsIC0yMTQxMzg0NSwgMTQyNTM1NDUsIC0yMjU4NzE0OSwgNTM2OTA2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg0Mzc3NzU2LCA4MTE1ODM2LCAyNDU2NzA3OCwgMTU0OTUzMTQsIDExNjI1MDc0LCAxMzA2NDU5OSwgNzM5MDU1MSwgMTA1ODk2MjUsIDEwODM4MDYwLCAtMTU0MjA0MjQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5MzQyNDA0LCA4Njc4ODAsIDkyNzcxNzEsIC0zMjE4NDU5LCAtMTQ0MzE1NzIsIC0xOTg2NDQzLCAxOTI5NTgyNiwgLTE1Nzk2OTUwLCA2Mzc4MjYwLCA2OTkxODUpLAogICAgICAgICAgICAgICAgYXJyYXkoNzg5NTAyNiwgNDA1NzExMywgLTcwODE3NzIsIC0xMzA3Nzc1NiwgLTE3ODg2ODMxLCAtMzIzMTI2LCAtNzE2MDM5LCAxNTY5MzE1NSwgLTUwNDUwNjQsIC0xMzM3Mzk2MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTc3Mzc1NjMsIC01ODY5NDAyLCAtMTQ1NjYzMTksIC03NDA2OTE5LCAxMTM4NTY1NCwgMTMyMDE2MTYsIDMxNzMwNjc4LCAtMTA5NjI4NDAsIC0zOTE4NjM2LCAtOTY2OTMyNSksCiAgICAgICAgICAgICAgICBhcnJheSgxMDE4ODI4NiwgLTE1NzcwODM0LCAtNzMzNjM2MSwgMTM0Mjc1NDMsIDIyMjIzNDQzLCAxNDg5NjI4NywgMzA3NDM0NTUsIDcxMTY1NjgsIC0yMTc4NjUwNywgNTQyNzU5MyksCiAgICAgICAgICAgICAgICBhcnJheSg2OTYxMDIsIDEzMjA2ODk5LCAyNzA0NzY0NywgLTEwNjMyMDgyLCAxNTI4NTMwNSwgLTk4NTMxNzksIDEwNzk4NDkwLCAtNDU3ODcyMCwgMTkyMzYyNDMsIDEyNDc3NDA0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTEyMjk0MzksIDExMjQzNzk2LCAtMTcwNTQyNzAsIC04MDQwODY1LCAtNzg4MjI4LCAtODE2Nzk2NywgLTM4OTc2NjksIDExMTgwNTA0LCAtMjMxNjk1MTYsIDc3MzM2NDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTc4MDA3OTAsIC0xNDAzNjE3OSwgLTI3MDAwNDI5LCAtMTE3NjY2NzEsIDIzODg3ODI3LCAzMTQ5NjcxLCAyMzQ2NjE3NywgLTEwNTM4MTcxLCAxMDMyMjAyNywgMTUzMTM4MDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjYyNDYyMzQsIDExOTY4ODc0LCAzMjI2MzM0MywgLTU0Njg3MjgsIDY4MzA3NTUsIC0xMzMyMzAzMSwgLTE1Nzk0NzA0LCAtMTAxOTgyLCAtMjQ0NDkyNDIsIDEwODkwODA0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzEzNjU2NDcsIDEwMjcxMzYzLCAtMTI2NjA2MjUsIC02MjY3MjY4LCAxNjY5MDIwNywgLTEzMDYyNTQ0LCAtMTQ5ODIyMTIsIDE2NDg0OTMxLCAyNTE4MDc5NywgLTUzMzQ4ODQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTU4NjU3NCwgMTAzNzY0NDQsIC0zMjU4NjQxNCwgLTExMjg2MzU2LCAxOTgwMTg5MywgMTA5OTc2MTAsIDIyNzY2MzIsIDk0ODI4ODMsIDMxNjg3OCwgMTM4MjA1NzcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk4ODI4MDgsIC00NTEwMzY3LCAtMjExNTUwNiwgMTY0NTcxMzYsIC0xMTEwMDA4MSwgMTE2NzQ5OTYsIDMwNzU2MTc4LCAtNzUxNTA1NCwgMzA2OTY5MzAsIC0zNzEyODQ5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMjk4ODkxNywgLTk2MDM0MTIsIDEyNDk5MzY2LCA3OTEwNzg3LCAtMTA2MTcyNTcsIC0xMTkzMTUxNCwgLTczNDI4MTYsIC05OTg1Mzk3LCAtMzIzNDk1MTcsIDczOTI0NzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTg4NTU2NjEsIDE1OTI3ODYxLCA5ODY2NDA2LCAtMzY0OTQxMSwgLTIzOTY5MTQsIC0xNjY1NTc4MSwgLTMwNDA5NDc2LCAtOTEzNDk5NSwgMjUxMTI5NDcsIC0yOTI2NjQ0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTA0MDQ0LCAtNDM2OTY2LCAyNTYyMTc3NCwgLTU2Nzg3NzIsIDE1MDg1MDQyLCAtNTQ3OTg3NywgLTI0ODg0ODc4LCAtMTM1MjYxOTQsIDU1Mzc0MzgsIC0xMzkxNDMxOSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTEyMjU1ODQsIDIzMjAyODUsIC05NTg0MjgwLCAxMDE0OTE4NywgLTMzNDQ0NjYzLCA1ODA4NjQ4LCAtMTQ4NzYyNTEsIC0xNzI5NjY3LCAzMTIzNDU5MCwgNjA5MDU5OSksCiAgICAgICAgICAgICAgICBhcnJheSgtOTYzMzMxNiwgMTE2NDI2LCAyNjA4MzkzNCwgMjg5NzQ0NCwgLTYzNjQ0MzcsIC0yNjg4MDg2LCA2MDk3MjEsIDE1ODc4NzUzLCAtNjk3MDQwNSwgLTkwMzQ3NjgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI3NzU3ODU3LCAyNDc3NDQsIC0xNTE5NDc3NCwgLTkwMDI1NTEsIDIzMjg4MTYxLCAtMTAwMTE5MzYsIC0yMzg2OTU5NSwgNjUwMzY0NiwgMjA2NTA0NzQsIDE4MDQwODQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNzU4OTc4NiwgMTU0NTY0MjQsIDg5NzI1MTcsIDg0Njk2MDgsIDE1NjQwNjIyLCA0NDM5ODQ3LCAzMTIxOTk1LCAtMTAzMjk3MTMsIDI3ODQyNjE2LCAtMjAyMzI4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTMwNjk3MywgMjgzOTY0NCwgMjI1MzAwNzQsIDEwMDI2MzMxLCA0NjAyMDU4LCA1MDQ4NDYyLCAyODI0ODY1NiwgNTAzMTkzMiwgLTExMzc1MDgyLCAxMjcxNDM2OSksCiAgICAgICAgICAgICAgICBhcnJheSgyMDgwNzY5MSwgLTcyNzA4MjUsIDI5Mjg2MTQxLCAxMTQyMTcxMSwgLTI3ODc2NTIzLCAtMTM4NjgyMzAsIC0yMTIyNzQ3NSwgMTAzNTU0NiwgLTE5NzMzMjI5LCAxMjc5NjkyMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTIwNzY4OTksIC0xNDMwMTI4NiwgLTg3ODUwMDEsIC0xMTg0ODkyMiwgLTI1MDEyNzkxLCAxNjQwMDY4NCwgLTE3NTkxNDk1LCAtMTI4OTk0MzgsIDM0ODA2NjUsIC0xNTE4MjgxNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzIzNjE1NDksIDU0NTc1OTcsIDI4NTQ4MTA3LCA3ODMzMTg2LCA3MzAzMDcwLCAtMTE5NTM1NDUsIC0yNDM2MzA2NCwgLTE1OTIxODc1LCAtMzMzNzQwNTQsIDI3NzEwMjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxMzg5MjY2LCA0MjE5MzIsIDI2NTk3MjY2LCA2ODYwODI2LCAyMjQ4NjA4NCwgLTY3MzcxNzIsIC0xNzEzNzQ4NSwgLTQyMTAyMjYsIC0yNDU1MjI4MiwgMTU2NzMzOTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMDE4NDYyMiwgMjMzODIxNiwgMTk3ODg2ODUsIC05NjIwOTU2LCAtNDAwMTI2NSwgLTg3NDA4OTMsIC0yMDI3MTE4NCwgNDczMzI1NCwgMzcyNzE0NCwgLTEyOTM0NDQ4KSwKICAgICAgICAgICAgICAgIGFycmF5KDYxMjAxMTksIDgxNDg2MywgLTExNzk0NDAyLCAtNjIyNzE2LCA2ODEyMjA1LCAtMTU3NDc3NzEsIDIwMTk1OTQsIDc5NzU2ODMsIDMxMTIzNjk3LCAtMTA5NTg5ODEpLAogICAgICAgICAgICAgICAgYXJyYXkoMzAwNjkyNTAsIC0xMTQzNTMzMiwgMzA0MzQ2NTQsIDI5NTg0MzksIDE4Mzk5NTY0LCAtOTc2Mjg5LCAxMjI5Njg2OSwgOTIwNDI2MCwgLTE2NDMyNDM4LCA5NjQ4MTY1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMjcwNTQzMiwgLTE1NTA5NzcsIDMwNzA1NjU4LCA3NDUxMDY1LCAtMTE4MDU2MDYsIDk2MzE4MTMsIDMzMDUyNjYsIDUyNDg2MDQsIC0yNjAwODMzMiwgLTExMzc3NTAxKSwKICAgICAgICAgICAgICAgIGFycmF5KDE3MjE5ODY1LCAyMzc1MDM5LCAtMzE1NzA5NDcsIC01NTc1NjE1LCAtMTk0NTk2NzksIDkyMTk5MDMsIDI5NDcxMSwgMTUyOTg2MzksIDI2NjI1MDksIC0xNjI5NzA3MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE3MjkyNywgLTc1NTg2OTUsIC00MzY2NzcwLCAtNDI4Nzc0NCwgLTIxMzQ2NDEzLCAtODQzNDMyNiwgMzIwODc1MjksIC0xMjIyNzc3LCAzMjI0NzI0OCwgLTE0Mzg5ODYxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDMxMjYyOCwgMTIyMTU1NiwgMTczOTUzOTAsIC04NzAwMTQzLCAtNDk0NTc0MSwgLTg2ODQ2MzUsIC0yODE5Nzc0NCwgLTk2Mzc4MTcsIC0xNjAyNzYyMywgLTEzMzc4ODQ1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNDI4ODI1LCAtOTY3ODk5MCwgLTkyMzU2ODEsIDY1NDk2ODcsIC03MzgzMDY5LCAtNDY4NjY0LCAyMzA0NjUwMiwgOTgwMzEzNywgMTc1OTc5MzQsIDIzNDYyMTEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTg1MTA4MDAsIDE1MzM3NTc0LCAyNjE3MTUwNCwgOTgxMzkyLCAtMjIyNDE1NTIsIDc4Mjc1NTYsIC0yMzQ5MTEzNCwgLTExMzIzMzUyLCAzMDU5ODMzLCAtMTE3ODI4NzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEwMTQxNTk4LCA2MDgyOTA3LCAxNzgyOTI5MywgLTE5NDc2NDMsIDk4MzAwOTIsIDEzNjEzMTM2LCAtMjU1NTY2MzYsIC01NTQ0NTg2LCAtMzM1MDIyMTIsIDM1OTIwOTYpLAogICAgICAgICAgICAgICAgYXJyYXkoMzMxMTQxNjgsIC0xNTg4OTM1MiwgLTI2NTI1Njg2LCAtMTMzNDMzOTcsIDMzMDc2NzA1LCA4NzE2MTcxLCAxMTUxNDYyLCAxNTIxODk3LCAtOTgyNjY1LCAtNjgzNzgwMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMzI5MzkxNjUsIC00MjU1ODE1LCAyMzk0NzE4MSwgLTMyNDE3OCwgLTMzMDcyOTc0LCAtMTIzMDU2MzcsIC0xNjYzNzY4NiwgMzg5MTcwNCwgMjYzNTMxNzgsIDY5MzE2OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzAzNzQyMzksIDE1OTU1ODAsIC0xNjg4NDAzOSwgMTMxODY5MzEsIDQ2MDAzNDQsIDQwNjkwNCwgOTU4NTI5NCwgLTQwMDY2OCwgMzEzNzU0NjQsIDE0MzY5OTY1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNDM3MDY1NCwgLTc3NzI1MjksIDE1MTAzMDEsIDY0MzQxNzMsIC0xODc4NDc4OSwgLTYyNjI3MjgsIDMyNzMyMjMwLCAtMTMxMDg4MzksIDE3OTAxNDQxLCAxNjAxMTUwNSksCiAgICAgICAgICAgICAgICBhcnJheSgxODE3MTIyMywgLTExOTM0NjI2LCAtMTI1MDA0MDIsIDE1MTk3MTIyLCAtMTEwMzgxNDcsIC0xNTIzMDAzNSwgLTE5MTcyMjQwLCAtMTYwNDYzNzYsIDg3NjQwMzUsIDEyMzA5NTk4KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDU5NzU5MDgsIC01MjQzMTg4LCAtMTk0NTkzNjIsIC05NjgxNzQ3LCAtMTE1NDEyNzcsIDE0MDE1NzgyLCAtMjM2NjU3NTcsIDEyMjgzMTksIDE3NTQ0MDk2LCAtMTA1OTM3ODIpLAogICAgICAgICAgICAgICAgYXJyYXkoNTgxMTkzMiwgLTE3MTUyOTMsIDM0NDI4ODcsIC0yMjY5MzEwLCAtMTgzNjczNDgsIC04MzU5NTQxLCAtMTgwNDQwNDMsIC0xNTQxMDEyNywgLTU1NjUzODEsIDEyMzQ4OTAwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTM5OTY2MCwgMTE0MDc1NTUsIDI1NzU1MzYzLCA2ODkxMzk5LCAtMzI1NjkzOCwgMTQ4NzIyNzQsIC0yNDg0OTM1MywgODE0MTI5NSwgLTEwNjMyNTM0LCAtNTg1NDc5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTI2NzUzMDQsIDY5NDAyNiwgLTUwNzYxNDUsIDEzMzAwMzQ0LCAxNDAxNTI1OCwgLTE0NDUxMzk0LCAtOTY5ODY3MiwgLTExMzI5MDUwLCAzMDk0NDU5MywgMTEzMDIwOCksCiAgICAgICAgICAgICAgICBhcnJheSg4MjQ3NzY2LCAtNjcxMDk0MiwgLTI2NTYyMzgxLCAtNzcwOTMwOSwgLTE0NDAxOTM5LCAtMTQ2NDg5MTAsIDQ2NTIxNTIsIDI0ODg1NDAsIDIzNTUwMTU2LCAtMjcxMjMyKSwKICAgICAgICAgICAgICAgIGFycmF5KDE3Mjk0MzE2LCAtMzc4ODQzOCwgNzAyNjc0OCwgMTU2MjY4NTEsIDIyOTkwMDQ0LCAxMTM0ODEsIDIyNjc3MzcsIC01OTA4MTQ2LCAtNDA4ODE4LCAtMTM3NzE5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNjA5MTA4NSwgLTE2MjUzOTI2LCAxODU5OTI1MiwgNzM0MDY3OCwgMjEzNzYzNywgLTEyMjE2NTcsIC0zMzY0MTYxLCAxNDU1MDkzNiwgMzI2MDUyNSwgLTcxNjYyNzEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ5MTAxMDQsIC0xMzMzMjg4NywgMTg1NTA4ODcsIDEwODY0ODkzLCAtMTY0NTkzMjUsIC03MjkxNTk2LCAtMjMwMjg4NjksIC0xMzIwNDkwNSwgLTEyNzQ4NzIyLCAyNzAxMzI2KSwKICAgICAgICAgICAgICAgIGFycmF5KC04NTc0Njk1LCAxNjA5OTQxNSwgNDYyOTk3NCwgLTE2MzQwNTI0LCAtMjA3ODYyMTMsIC02MDA1NDMyLCAtMTAwMTgzNjMsIDkyNzY5NzEsIDExMzI5OTIzLCAxODYyMTMyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDc2MzA3NiwgLTE1OTAzNjA4LCAtMzA5MTgyNzAsIDM2ODk4NjcsIDM1MTE4OTIsIDEwMzEzNTI2LCAtMjE5NTEwODgsIDEyMjE5MjMxLCAtOTAzNzk2MywgLTk0MDMwMCksCiAgICAgICAgICAgICAgICBhcnJheSg4ODk0OTg3LCAtMzQ0NjA5NCwgNjE1MDc1MywgMzAxMzkzMSwgMzAxMjIwLCAxNTY5MzQ1MSwgLTMxOTgxMjE2LCAtMjkwOTcxNywgLTE1NDM4MTY4LCAxMTU5NTU3MCksCiAgICAgICAgICAgICAgICBhcnJheSgxNTIxNDk2MiwgMzUzNzYwMSwgLTI2MjM4NzIyLCAtMTQwNTg4NzIsIDQ0MTg2NTcsIC0xNTIzMDc2MSwgMTM5NDcyNzYsIDEwNzMwNzk0LCAtMTM0ODk0NjIsIC00MzYzNjcwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjUzODMwNiwgNzY4Mjc5MywgMzI3NTkwMTMsIDI2MzEwOSwgLTI5OTg0NzMxLCAtNzk1NTQ1MiwgLTIyMzMyMTI0LCAtMTAxODg2MzUsIDk3NzEwOCwgNjk5OTk0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMjQ2NjQ3MiwgNDE5NTA4NCwgLTkyMTE1MzIsIDU1MDkwNCwgLTE1NTY1MzM3LCAxMjkxNzkyMCwgMTkxMTgxMTAsIC00Mzk4NDEsIC0zMDUzNDUzMywgLTE0MzM3OTEzKSwKICAgICAgICAgICAgICAgIGFycmF5KDMxNzg4NDYxLCAtMTQ1MDc2NTcsIDQ3OTk5ODksIDczNzIyMzcsIDg4MDg1ODUsIC0xNDc0Nzk0MywgOTQwODIzNywgLTEwMDUxNzc1LCAxMjQ5MzkzMiwgLTU0MDkzMTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNTY4MDYwNiwgNTI2MDc0NCwgLTE5MjM1ODA5LCAtNjI4NDQ3MCwgLTM2OTU5NDIsIDE2NTY2MDg3LCAyNzIxODI4MCwgMjYwNzEyMSwgMjkzNzU5NTUsIDYwMjQ3MzApLAogICAgICAgICAgICAgICAgYXJyYXkoODQyMTMyLCAtMjc5NDY5MywgLTQ3NjMzODEsIC04NzIyODE1LCAyNjMzMjAxOCwgLTEyNDA1NjQxLCAxMTgzMTg4MCwgNjk4NTE4NCwgLTk5NDAzNjEsIDI4NTQwOTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ4NDcyNjIsIC03OTY5MzMxLCAyNTE2MjQyLCAtNTg0NzcxMywgOTY5NTY5MSwgLTcyMjExODYsIDE2NTEyNjQ1LCA5NjA3NzAsIDEyMTIxODY5LCAxNjY0ODA3OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MjE4NjUyLCAxNDY2NzA5NiwgLTEzMzM2MjI5LCAyMDEzNzE3LCAzMDU5ODI4NywgLTQ2NDEzNywgLTMxNTA0OTIyLCAtNzg4MjA2NCwgMjAyMzc4MDYsIDI4Mzg0MTEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5Mjg4MDQ3LCA0NDUzMTUyLCAxNTI5ODU0NiwgLTE2MTc4Mzg4LCAyMjExNTA0MywgLTE1OTcyNjA0LCAxMjU0NDI5NCwgLTEzNDcwNDU3LCAxMDY4ODgxLCAtMTI0OTk5MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk1NTg4ODMsIC0xNjUxODgzNSwgMzMyMzg0OTgsIDEzNTA2OTU4LCAzMDUwNTg0OCwgLTExMTQ1OTYsIC04NDg2OTA3LCAtMjYzMDA1MywgMTI1MjEzNzgsIDQ4NDU2NTQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODE5ODUyMSwgMTA3NDQxMDgsIC0yOTU4MzgwLCAxMDE5OTY2NCwgNzc1OTMxMSwgLTEzMDg4NjAwLCAzNDA5MzQ4LCAtODczNDAwLCAtNjQ4MjMwNiwgLTEyODg1ODcwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzU2MTgyMiwgNjIzMDE1NiwgLTIwMzgyMDEzLCAxMDY1NTMxNCwgLTI0MDQwNTg1LCAtMTE2MjExNzIsIDEwNDc3NzM0LCAtMTI0MDIxNiwgLTMxMTMyMjcsIDEzOTc0NDk4KSwKICAgICAgICAgICAgICAgIGFycmF5KDEyOTY2MjYxLCAxNTU1MDYxNiwgLTMyMDM4OTQ4LCAtMTYxNTM0NiwgMjEwMjU5ODAsIC02Mjk0NDQsIDU2NDIzMjUsIDcxODg3MzcsIDE4ODk1NzYyLCAxMjYyOTU3OSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDc0MTg3OSwgLTE0OTQ2ODg3LCAyMjE3NzIwOCwgLTExNzIxMjM3LCAxMjc5NzQxLCA4MDU4NjAwLCAxMTc1ODE0MCwgNzg5NDQzLCAzMjE5NTE4MSwgMzg5NTY3NyksCiAgICAgICAgICAgICAgICBhcnJheSgxMDc1ODIwNSwgMTU3NTU0MzksIC00NTA5OTUwLCA5MjQzNjk4LCAtNDg3OTQyMiwgNjg3OTg3OSwgLTIyMDQ1NzUsIC0zNTY2MTE5LCAtODk4MjA2OSwgNDQyOTY0NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ1Mzg5NCwgMTU3MjU5NzMsIC0yMDQzNjM0MiwgLTEwNDEwNjcyLCAtNTgwMzkwOCwgLTExMDQwMjIwLCAtNzEzNTg3MCwgLTExNjQyODk1LCAxODA0NzQzNiwgLTE1MjgxNzQzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjUxNzMwMDEsIC0xMTMwNzE2NSwgMjk3NTk5NTYsIDExNzc2Nzg0LCAtMjIyNjIzODMsIC0xNTgyMDQ1NSwgMTA5OTMxMTQsIC0xMjg1MDgzNywgLTE3NjIwNzAxLCAtOTQwODQ2OCksCiAgICAgICAgICAgICAgICBhcnJheSgyMTk4NzIzMywgNzAwMzY0LCAtMjQ1MDUwNDgsIDE0OTcyMDA4LCAtNzc3NDI2NSwgLTU3MTgzOTUsIDMyMTU1MDI2LCAyNTgxNDMxLCAtMjk5NTg5ODUsIDg3NzMzNzUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NTY4MzUwLCA0NTQ0NjMsIC0xMzIxMTkzNSwgMTYxMjY3MTUsIDI1MjQwMDY4LCA4NTk0NTY3LCAyMDY1Njg0NiwgMTIwMTc5MzUsIC03ODc0Mzg5LCAtMTM5MjAxNTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDYwMjgxODIsIDYyNjMwNzgsIC0zMTAxMTgwNiwgLTExMzAxNzEwLCAtODE4OTE5LCAyNDYxNzcyLCAtMzE4NDExNzQsIC01NDY4MDQyLCAtMTcyMTc4OCwgLTI3NzY3MjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyMjc4OTk0LCAxNjYyNDI3NywgOTg3NTc5LCAtNTkyMjU5OCwgMzI5MDgyMDMsIDEyNDg2MDgsIDc3MTk4NDUsIC00MTY2Njk4LCAyODQwODgyMCwgNjgxNjYxMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTAzNTgwOTQsIC04MjM3ODI5LCAxOTU0OTY1MSwgLTEyMTY5MjIyLCAyMjA4MjYyMywgMTYxNDc4MTcsIDIwNjEzMTgxLCAxMzk4MjcwMiwgLTEwMzM5NTcwLCA1MDY3OTQzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzA1MDU5NjcsIC0zODIxNzY3LCAxMjA3NDY4MSwgMTM1ODI0MTIsIC0xOTg3Nzk3MiwgMjQ0Mzk1MSwgLTE5NzE5Mjg2LCAxMjc0NjEzMiwgNTMzMTIxMCwgLTEwMTA1OTQ0KSwKICAgICAgICAgICAgICAgIGFycmF5KDMwNTI4ODExLCAzNjAxODk5LCAtMTk1NzA5MCwgNDYxOTc4NSwgLTI3MzYxODIyLCAtMTU0MzYzODgsIDI0MTgwNzkzLCAtMTI1NzAzOTQsIDI3Njc5OTA4LCAtMTY0ODkyOCksCiAgICAgICAgICAgICAgICBhcnJheSg5NDAyNDA0LCAtMTM5NTcwNjUsIDMyODM0MDQzLCAxMDgzODYzNCwgLTI2NTgwMTUwLCAtMTMyMzcxOTUsIDI2NjUzMjc0LCAtODY4NTU2NSwgMjI2MTE0NDQsIC0xMjcxNTQwNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjIxOTA1OTAsIDExMTgwMjksIDIyNzM2NDQxLCAxNTEzMDQ2MywgLTMwNDYwNjkyLCAtNTk5MTMyMSwgMTkxODk2MjUsIC00NjQ4OTQyLCA0ODU0ODU5LCA2NjIyMTM5KSwKICAgICAgICAgICAgICAgIGFycmF5KC04MzEwNzM4LCAtMjk1MzQ1MCwgLTgyNjI1NzksIC0zMzg4MDQ5LCAtMTA0MDE3MzEsIC0yNzE5MjksIDEzNDI0NDI2LCAtMzU2NzIyNywgMjY0MDQ0MDksIDEzMDAxOTYzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTI0MTgzOCwgLTE1NDE1NzAwLCAtMjk5NDI1MCwgODkzOTM0NiwgMTE1NjIyMzAsIC0xMjg0MDY3MCwgLTI2MDY0MzY1LCAtMTE2MjE3MjAsIC0xNTQwNTE1NSwgMTEwMjA2OTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE4NjYwNDIsIC03OTQ5NDg5LCAtNzg5ODY0OSwgLTEwMzAxMDEwLCAxMjQ4MzMxNSwgMTM0Nzc1NDcsIDMxNzU2MzYsIC0xMjQyNDE2MywgMjg3NjE3NjIsIDE0MDY3MzQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ0ODU1NSwgLTE3Nzc2NjYsIDEzMDE4NTUxLCAzMTk0NTAxLCAtOTU4MDQyMCwgLTExMTYxNzM3LCAyNDc2MDU4NSwgLTQzNDcwODgsIDI1NTc3NDExLCAtMTMzNzg2ODApLAogICAgICAgICAgICAgICAgYXJyYXkoLTI0MjkwMzc4LCA0NzU5MzQ1LCAtNjkwNjUzLCAtMTg1MjgxNiwgMjA2Njc0NywgMTA2OTM3NjksIC0yOTU5NTc5MCwgOTg4NDkzNiwgLTkzNjg5MjYsIDQ3NDU0MTApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05MTQxMjg0LCA2MDQ5NzE0LCAtMTk1MzEwNjEsIC00MzQxNDExLCAtMzEyNjA3OTgsIDk5NDQyNzYsIC0xNTQ2MjAwOCwgLTExMzExODUyLCAxMDkzMTkyNCwgLTExOTMxOTMxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNjU2MTUxMywgMTQxMTI2ODAsIC04MDEyNjQ1LCA0ODE3MzE4LCAtODA0MDQ2NCwgLTExNDE0NjA2LCAtMjI4NTM0MjksIDEwODU2NjQxLCAtMjA0NzA3NzAsIDEzNDM0NjU0KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyNzU5NDg5LCAtMTAwNzM0MzQsIC0xNjc2NjI2NCwgLTE4NzE0MjIsIDEzNjM3NDQyLCAtMTAxNjgwOTEsIDE3NjUxNDQsIC0xMjY1NDMyNiwgMjg0NDUzMDcsIC01MzY0NzEwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyOTg3NTA2MywgMTI0OTM2MTMsIDI3OTU1MzYsIC0zNzg2MzMwLCAxNzEwNjIwLCAxNTE4MTE4MiwgLTEwMTk1NzE3LCAtODc4ODY3NSwgOTA3NDIzNCwgMTE2NzE4MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjYyMDU2ODMsIDExMDE0MjMzLCAtOTg0MjY1MSwgLTI2MzU0ODUsIC0yNjkwODEyMCwgNzUzMjI5NCwgLTE4NzE2ODg4LCAtOTUzNTQ5OCwgMzg0MzkwMywgOTM2NzY4NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTA5Njk1OTUsIC02NDAzNzExLCA5NTkxMTM0LCA5NTgyMzEwLCAxMTM0OTI1NiwgMTA4ODc5LCAxNjIzNTEyMywgODYwMTY4NCwgLTEzOTE5NywgNDI0Mjg5NSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMjA5Mjk1NCwgLTEzMTkxMTIzLCAtMjA0Mjc5MywgLTExOTY4NTEyLCAzMjE4Njc1MywgLTExNTE3Mzg4LCAtNjU3NDM0MSwgMjQ3MDY2MCwgLTI3NDE3MzY2LCAxNjYyNTUwMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTEwNTc3MjIsIDMwNDIwMTYsIDEzNzcwMDgzLCAtOTI1NzkyMiwgNTg0MjM2LCAtNTQ0ODU1LCAtNzc3MDg1NywgMjYwMjcyNSwgLTI3MzUxNjE2LCAxNDI0NzQxMyksCiAgICAgICAgICAgICAgICBhcnJheSg2MzE0MTc1LCAtMTAyNjQ4OTIsIC0zMjc3MjUwMiwgMTU5NTc1NTcsIC0xMDE1NzczMCwgMTY4NzUwLCAtODYxODgwNywgMTQyOTAwNjEsIDI3MTA4ODc3LCAtMTE4MDg4MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTg1ODY1OTcsIC03MTcwOTY2LCAxMzI0MTc4MiwgMTA5NjAxNTYsIC0zMjk5MTAxNSwgLTEzNzk0NTk2LCAzMzU0Nzk3NiwgLTExMDU4ODg5LCAtMjcxNDg0NTEsIDk4MTg3NCksCiAgICAgICAgICAgICAgICBhcnJheSgyMjgzMzQ0MCwgOTI5MzU5NCwgLTMyNjQ5NDQ4LCAtMTM2MTg2NjcsIC05MTM2OTY2LCAxNDc1NjgxOSwgLTIyOTI4ODU5LCAtMTM5NzA3ODAsIC0xMDQ3OTgwNCwgLTE2MTk3OTYyKSwKICAgICAgICAgICAgICAgIGFycmF5KC03NzY4NTg3LCAzMzI2Nzg2LCAtMjgxMTE3OTcsIDEwNzgzODI0LCAxOTE3ODc2MSwgMTQ5MDUwNjAsIDIyNjgwMDQ5LCAxMzkwNjk2OSwgLTE1OTMzNjkwLCAzNzk3ODk5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMTcyMTM1NiwgLTQyMTI3NDYsIC0xMjIwNjEyMywgOTMxMDE4MiwgLTM4ODIyMzksIC0xMzY1MzExMCwgMjM3NDAyMjQsIC0yNzA5MjMyLCAyMDQ5MTk4MywgLTgwNDIxNTIpLAogICAgICAgICAgICAgICAgYXJyYXkoOTIwOTI3MCwgLTE1MTM1MDU1LCAtMTMyNTY1NTcsIC02MTY3Nzk4LCAtNzMxMDE2LCAxNTI4OTY3MywgMjU5NDc4MDUsIDE1Mjg2NTg3LCAzMDk5NzMxOCwgLTY3MDMwNjMpLAogICAgICAgICAgICAgICAgYXJyYXkoNzM5MjAzMiwgMTY2MTgzODYsIDIzOTQ2NTgzLCAtODAzOTg5MiwgLTEzMjY1MTY0LCAtMTUzMzg1OCwgLTE0MTk3NDQ1LCAtMjMyMTU3NiwgMTc2NDk5OTgsIC0yNTAwODApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05MzAxMDg4LCAtMTQxOTM4MjcsIDMwNjA5NTI2LCAtMzA0OTU0MywgLTI1MTc1MDY5LCAtMTI4Mzc1MiwgLTE1MjQxNTY2LCAtOTUyNTcyNCwgLTIyMzMyNTMsIDc2NjIxNDYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3NTU4NjczLCAxNzYzNTk0LCAtMzMxMTQzMzYsIDE1OTA4NjEwLCAtMzAwNDA4NzAsIC0xMjE3NDI5NSwgNzMzNTA4MCwgLTg0NzIxOTksIC0zMTc0Njc0LCAzNDQwMTgzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xOTg4OTcwMCwgLTU5NzcwMDgsIC0yNDExMTI5MywgLTk2ODg4NzAsIDEwNzk5NzQzLCAtMTY1NzE5NTcsIDQwNDUwLCAtNDQzMTgzNSwgNDg2MjQwMCwgMTEzMyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMyODU2MjA5LCAtNzg3Mzk1NywgLTU0MjIzODksIDE0ODYwOTUwLCAtMTYzMTkwMzEsIDc5NTYxNDIsIDcyNTgwNjEsIDMxMTg2MSwgLTMwNTk0OTkxLCAtNzM3OTQyMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzc3MzQyOCwgLTE1NjU5MzYsIDI4OTg1MzQwLCA3NDk5NDQwLCAyNDQ0NTgzOCwgOTMyNTkzNywgMjk3Mjc3NjMsIDE2NTI3MTk2LCAxODI3ODQ1MywgMTU0MDU2MjIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQzODE5MDYsIDg1MDg2NTIsIC0xOTg5ODM2NiwgLTM2NzQ0MjQsIC01OTg0NDUzLCAxNTE0OTk3MCwgLTEzMzEzNTk4LCA4NDM1MjMsIC0yMTg3NTA2MiwgMTM2MjYxOTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIyODE0NDgsIC0xMzQ4NzA1NSwgLTEwOTE1NDE4LCAtMjYwOTkxMCwgMTg3OTM1OCwgMTYxNjQyMDcsIC0xMDc4Mzg4MiwgMzk1Mzc5MiwgMTMzNDA4MzksIDE1OTI4NjYzKSwKICAgICAgICAgICAgICAgIGFycmF5KDMxNzI3MTI2LCAtNzE3OTg1NSwgLTE4NDM3NTAzLCAtODI4MzY1MiwgMjg3NTc5MywgLTE2MzkwMzMwLCAtMjUyNjk4OTQsIC03MDE0ODI2LCAtMjM0NTIzMDYsIDU5NjQ3NTMpLAogICAgICAgICAgICAgICAgYXJyYXkoNDEwMDQyMCwgLTU5NTk0NTIsIC0xNzE3OTMzNywgNjAxNzcxNCwgLTE4NzA1ODM3LCAxMjIyNzE0MSwgLTI2Njg0ODM1LCAxMTM0NDE0NCwgMjUzODIxNSwgLTc1NzA3NTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05NDMzNjA1LCA2MTIzMTEzLCAxMTE1OTgwMywgLTIxNTY2MDgsIDMwMDE2MjgwLCAxNDk2NjI0MSwgLTIwNDc0OTgzLCAxNDg1NDIxLCAtNjI5MjU2LCAtMTU5NTg4NjIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI2ODA0NTU4LCA0MjYwOTE5LCAxMTg1MTM4OSwgOTY1ODU1MSwgLTMyMDE3MTA3LCAxNjM2NzQ5MiwgLTIwMjA1NDI1LCAtMTMxOTEyODgsIDExNjU5OTIyLCAtMTExMTUxMTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMjYxODAzOTYsIDEwMDE1MDA5LCAtMzA4NDQyMjQsIC04NTgxMjkzLCA1NDE4MTk3LCA5NDgwNjYzLCAyMjMxNTY4LCAtMTAxNzAwODAsIDMzMTAwMzcyLCAtMTMwNjE3MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTUxMjExMTMsIC01MjAxODcxLCAtMTAzODk5MDUsIDE1NDI3ODIxLCAtMjc1MDk5MzcsIC0xNTk5MjUwNywgMjE2NzA5NDcsIDQ0ODY2NzUsIC01OTMxODEwLCAtMTQ0NjYzODApLAogICAgICAgICAgICAgICAgYXJyYXkoMTYxNjY0ODYsIC05NDgzNzMzLCAtMTExMDQxMzAsIDYwMjM5MDgsIC0zMTkyNjc5OCwgLTEzNjQ5MjMsIDIzNDAwNjAsIC0xNjI1NDk2OCwgLTEwNzM1NzcwLCAtMTAwMzk4MjQpLAogICAgICAgICAgICAgICAgYXJyYXkoMjgwNDI4NjUsIC0zNTU3MDg5LCAtMTIxMjY1MjYsIDEyMjU5NzA2LCAtMzcxNzQ5OCwgLTY5NDU4OTksIDY3NjY0NTMsIC04Njg5NTk5LCAxODAzNjQzNiwgNTgwMzI3MCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtODE3NTgxLCA2NzYzOTEyLCAxMTgwMzU2MSwgMTU4NTU4NSwgMTA5NTg0NDcsIC0yNjcxMTY1LCAyMzg1NTM5MSwgNDU5ODMzMiwgLTYxNTk0MzEsIC0xNDExNzQzOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzEwMzEzMDYsIC0xNDI1NjE5NCwgMTczMzIwMjksIC0yMzgzNTIwLCAzMTMxMjY4MiwgLTU5NjcxODMsIDY5NjMwOSwgNTAyOTIsIC0yMDA5NTczOSwgMTE3NjM1ODQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTU5NDU2MywgLTI1MTQyODMsIC0zMjIzNDE1MywgMTI2NDM5ODAsIDEyNjUwNzYxLCAxNDgxMTQ4OSwgNjY1MTE3LCAtMTI2MTM2MzIsIC0xOTc3MzIxMSwgLTEwNzEzNTYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDQ2NDU5MCwgLTExMjYyODcyLCAtNDEyNzQ3NiwgLTEyNzM0NDc4LCAxOTgzNTMyNywgLTcxMDU2MTMsIC0yNDM5NjE3NSwgMjA3NTc3MywgLTE3MDIwMTU3LCA5OTI0NzEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTgzNTcxODUsIC02OTk0NDMzLCA3NzY2MzgyLCAxNjM0MjQ3NSwgLTI5MzI0OTE4LCA0MTExNzQsIDE0NTc4ODQxLCA4MDgwMDMzLCAtMTE1NzQzMzUsIC0xMDYwMTYxMCksCiAgICAgICAgICAgICAgICBhcnJheSgxOTU5ODM5NywgMTAzMzQ2MTAsIDEyNTU1MDU0LCAyNTU1NjY0LCAxODgyMTg5OSwgLTEwMzM5NzgwLCAyMTg3MzI2MywgMTYwMTQyMzQsIDI2MjI0NzgwLCAxNjQ1MjI2OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMwMjIzOTI1LCA1MTQ1MTk2LCA1OTQ0NTQ4LCAxNjM4NTk2NiwgMzk3NjczNSwgMjAwOTg5NywgLTExMzc3ODA0LCAtNzYxODE4NiwgLTIwNTMzODI5LCAzNjk4NjUwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE0MTg3NDQ5LCAzNDQ4NTY5LCAtMTA2MzYyMzYsIC0xMDgxMDkzNSwgLTIyNjYzODgwLCAtMzQzMzU5NiwgNzI2ODQxMCwgLTEwODkwNDQ0LCAyNzM5NDMwMSwgMTIwMTUzNjkpLAogICAgICAgICAgICAgICAgYXJyYXkoMTk2OTU3NjEsIDE2MDg3NjQ2LCAyODAzMjA4NSwgMTI5OTk4MjcsIDY4MTc3OTIsIDExNDI3NjE0LCAyMDI0NDE4OSwgLTEzMTI3NzcsIC0xMzI1OTEyNywgLTM0MDI0NjEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwODYwMTAzLCAxMjczNTIwOCwgLTE4ODgyNDUsIC00Njk5NzM0LCAtMTY5NzQ5MDYsIDIyNTY5NDAsIC04MTY2MDEzLCAxMjI5ODMxMiwgLTg1NTA1MjQsIC0xMDM5MzQ2MiksCiAgICAgICAgICAgICAgICBhcnJheSgtNTcxOTgyNiwgLTExMjQ1MzI1LCAtMTkxMDY0OSwgMTU1NjkwMzUsIDI2NjQyODc2LCAtNzU4Nzc2MCwgLTU3ODkzNTQsIC0xNTExODY1NCwgLTQ5NzYxNjQsIDEyNjUxNzkzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODQ4Mzk1LCA5OTUzNDIxLCAxMTUzMTMxMywgLTUyODI4NzksIDI2ODk1MTIzLCAtMTI2OTcwODksIC0xMzExODgyMCwgLTE2NTE3OTAyLCA5NzY4Njk4LCAtMjUzMzIxOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI0NzE5NDU5LCAxODk0NjUxLCAtMjg3Njk4LCAtNDcwNDA4NSwgMTUzNDg3MTksIC04MTU2NTMwLCAzMjc2NzUxMywgMTI3NjU0NTAsIDQ5NDAwOTUsIDEwNjc4MjI2KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4ODYwMjI0LCAxNTk4MDE0OSwgLTE4OTg3MjQwLCAtMTU2MjU3MCwgLTI2MjMzMDEyLCAtMTEwNzE4NTYsIC03ODQzODgyLCAxMzk0NDAyNCwgLTI0MzcyMzQ4LCAxNjU4MjAxOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU1MDQyNjAsIDQ5NzAyNjgsIC0yOTg5MzA0NCwgNDE3NTU5MywgLTIwOTkzMjEyLCAtMjE5OTc1NiwgLTExNzA0MDU0LCAxNTQ0NDU2MCwgLTExMDAzNzYxLCA3OTg5MDM3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMTQ5MDQ1MiwgNTU2ODA2MSwgLTI0MTI4MDMsIDIxODIzODMsIC0zMjMzNjg0NywgNDUzMTY4NiwgLTMyMDc4MjY5LCA2MjAwMjA2LCAtMTk2ODYxMTMsIC0xNDgwMDE3MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTczMDg2NjgsIC0xNTg3OTk0MCwgLTMxNTIyNzc3LCAtMjgzMSwgLTMyODg3MzgyLCAxNjM3NTU0OSwgODY4MDE1OCwgLTE2MzcxNzEzLCAyODU1MDA2OCwgLTY4NTcxMzIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4MTI2ODg3LCAtNTY4ODA5MSwgMTY4Mzc4NDUsIC0xODIwNDU4LCAtNjg1MDY4MSwgMTI3MDAwMTYsIC0zMDAzOTk4MSwgNDM2NDAzOCwgMTE1NTYwMiwgNTk4ODg0MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjE4OTA0MzUsIC0xMzI3MjkwNywgLTEyNjI0MDExLCAxMjE1NDM0OSwgLTc4MzE4NzMsIDE1MzAwNDk2LCAyMzE0ODk4MywgLTQ0NzA0ODEsIDI0NjE4NDA3LCA4MjgzMTgxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMzEzNjEwNywgLTEwNTEyNzUxLCA5OTc1NDE2LCA2ODQxMDQxLCAtMzE1NTk3OTMsIDE2MzU2NTM2LCAzMDcwMTg3LCAtNzAyNTkyOCwgMTQ2NjE2OSwgMTA3NDAyMTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MDkzOTksIC0xNTQ4ODE4NSwgLTEzNTAzMzg1LCAtMTA2NTU5MTYsIDMyNzk5MDQ0LCA5MDkzOTQsIC0xMzkzODkwMywgLTU3Nzk3MTksIC0zMjE2NDY0OSwgLTE1MzI3MDQwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzOTYwODIzLCAtMTQyNjc4MDMsIC0yODAyNjA5MCwgLTE1OTE4MDUxLCAtMTk0MDQ4NTgsIDEzMTQ2ODY4LCAxNTU2NzMyNywgOTUxNTA3LCAtMzI2MDMyMSwgLTU3MzkzNSksCiAgICAgICAgICAgICAgICBhcnJheSgyNDc0MDg0MSwgNTA1MjI1MywgLTMwMDk0MTMxLCA4OTYxMzYxLCAyNTg3NzQyOCwgNjE2NTEzNSwgLTI0MzY4MTgwLCAxNDM5NzM3MiwgLTczODAzNjksIC02MTQ0MTA1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODg4ODM2NSwgMzUxMDgwMywgLTI4MTAzMjc4LCAtMTE1ODQ3OCwgLTExMjM4MTI4LCAtMTA2MzE0NTQsIC0xNTQ0MTQ2MywgLTE0NDUzMTI4LCAtMTYyNTQ4NiwgLTY0OTQ4MTQpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNzkzMjk5LCAtOTIzMDQ3OCwgODgzNjMwMiwgLTYyMzU3MDcsIC0yNzM2MDkwOCwgLTIzNjk1OTMsIDMzMTUyODQzLCAtNDg4NTI1MSwgLTk5MDYyMDAsIC02MjE4NTIpLAogICAgICAgICAgICAgICAgYXJyYXkoNTY2NjIzMywgNTI1NTgyLCAyMDc4MjU3NSwgLTgwMzg0MTksIC0yNDUzODQ5OSwgMTQ2NTc3NDAsIDE2MDk5Mzc0LCAxNDY4ODI2LCAtNjE3MTQyOCwgLTE1MTg2NTgxKSwKICAgICAgICAgICAgICAgIGFycmF5KC00ODU5MjU1LCAtMzc3OTM0MywgLTI5MTc3NTgsIC02NzQ4MDE5LCA3Nzc4NzUwLCAxMTY4ODI4OCwgLTMwNDA0MzUzLCAtOTg3MTIzOCwgLTE1NTg5MjMsIC05ODYzNjQ2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMDg5NjMzMiwgLTc3MTk3MDQsIDgyNDI3NSwgNDcyNjAxLCAtMTk0NjAzMDgsIDMwMDk1ODcsIDI1MjQ4OTU4LCAxNDc4MzMzOCwgLTMwNTgxNDc2LCAtMTU3NTc4NDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTA1NjY5MjksIDEyNjEyNTcyLCAtMzE5NDQyMTIsIDExMTE4NzAzLCAtMTI2MzMzNzYsIDEyMzYyODc5LCAyMTc1MjQwMiwgODgyMjQ5NiwgMjQwMDM3OTMsIDE0MjY0MDI1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI3NzEzODYyLCAtNzM1NTk3MywgLTExMDA4MjQwLCA5MjI3NTMwLCAyNzA1MDEwMSwgMjUwNDcyMSwgMjM4ODY4NzUsIC0xMzExNzUyNSwgMTM5NTg0OTUsIC01NzMyNDUzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjM0ODE2MTAsIDQ4NjcyMjYsIC0yNzI0NzEyOCwgMzkwMDUyMSwgMjk4MzgzNjksIC04MjEyMjkxLCAtMzE4ODkzOTksIC0xMDA0MTc4MSwgNzM0MDUyMSwgLTE1NDEwMDY4KSwKICAgICAgICAgICAgICAgIGFycmF5KDQ2NDY1MTQsIC04MDExMTI0LCAtMjI3NjYwMjMsIC0xMTUzMjY1NCwgMjMxODQ1NTMsIDg1NjY2MTMsIDMxMzY2NzI2LCAtMTM4MTA2MSwgLTE1MDY2Nzg0LCAtMTAzNzUxOTIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MjcwNTE3LCAxMjcyMzAzMiwgLTE2OTkzMDYxLCAxNDg3ODc5NCwgMjE2MTk2NTEsIC02MTk3NTc2LCAyNzU4NDgxNywgMzA5Mzg4OCwgLTg4NDM2OTQsIDM4NDk5MjEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05MDY0OTEyLCAyMTAzMTcyLCAyNTU2MTY0MCwgLTE1MTI1NzM4LCAtNTIzOTgyNCwgOTU4Mjk1OCwgMzI0NzcwNDUsIC05MDE3OTU1LCA1MDAyMjk0LCAtMTU1NTAyNTkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyMDU3NTUzLCAtMTExNzc5MDYsIDIxMTE1NTg1LCAtMTMzNjUxNTUsIDg4MDg3MTIsIC0xMjAzMDcwOCwgMTY0ODk1MzAsIDEzMzc4NDQ4LCAtMjU4NDU3MTYsIDEyNzQxNDI2KSwKICAgICAgICAgICAgICAgIGFycmF5KC01OTQ2MzY3LCAxMDY0NTEwMywgLTMwOTExNTg2LCAxNTM5MDI4NCwgLTMyODY5ODIsIC03MTE4Njc3LCAyNDMwNjQ3MiwgMTU4NTI0NjQsIDI4ODM0MTE4LCAtNzY0NjA3MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MzM1NzQ4LCAtOTEwNzA1NywgLTI0NTMxMjc5LCA5NDM0OTUzLCAtODQ3MjA4NCwgLTU4MzM2MiwgLTEzMDkwNzcxLCA0NTU4NDEsIDIwNDYxODU4LCA1NDkxMzA1KSwKICAgICAgICAgICAgICAgIGFycmF5KDEzNjY5MjQ4LCAtMTYwOTU0ODIsIC0xMjQ4MTk3NCwgLTEwMjAzMDM5LCAtMTQ1Njk3NzAsIC0xMTg5MzE5OCwgLTI0OTk1OTg2LCAxMTI5MzgwNywgLTI4NTg4MjA0LCAtOTQyMTgzMiksCiAgICAgICAgICAgICAgICBhcnJheSgyODQ5NzkyOCwgNjI3Mjc3NywgLTMzMDIyOTk0LCAxNDQ3MDU3MCwgODkwNjE3OSwgLTEyMjU2MzAsIDE4NTA0Njc0LCAtMTQxNjUxNjYsIDI5ODY3NzQ1LCAtODc5NTk0MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE2MjA3MDIzLCAxMzUxNzE5NiwgLTI3Nzk5NjMwLCAtMTM2OTc3OTgsIDI0MDA5MDY0LCAtNjM3Mzg5MSwgLTYzNjc2MDAsIC0xMzE3NTM5MiwgMjI4NTM0MjksIC00MDEyMDExKSwKICAgICAgICAgICAgICAgIGFycmF5KDI0MTkxMzc4LCAxNjcxMjE0NSwgLTEzOTMxNzk3LCAxNTIxNzgzMSwgMTQ1NDIyMzcsIDE2NDYxMzEsIDE4NjAzNTE0LCAtMTEwMzc4ODcsIDEyODc2NjIzLCAtMjExMjQ0NyksCiAgICAgICAgICAgICAgICBhcnJheSgxNzkwMjY2OCwgNDUxODIyOSwgLTQxMTcwMiwgLTI4MjkyNDcsIDI2ODc4MjE3LCA1MjU4MDU1LCAtMTI4NjA3NTMsIDYwODM5NywgMTYwMzE4NDQsIDM3MjM0OTQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODYzMjc3MywgMTI3NjM3MjgsIC0yMDQ0NjQ0NiwgNzU3NzUwNCwgMzMwMDEzNDgsIC0xMzAxNzc0NSwgMTc1NTg4NDIsIC03ODcyODkwLCAyMzg5Njk1NCwgLTQzMTQyNDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMDA1MzgxLCAtMTIwMTE5NTIsIDMxNTIwNDY0LCA2MDUyMDEsIDI1NDM1MjEsIDU5OTE4MjEsIC0yOTQ1MDY0LCA3MjI5MDY0LCAtOTkxOTY0NiwgLTg4MjY4NTkpLAogICAgICAgICAgICAgICAgYXJyYXkoMjg4MTYwNDUsIDI5ODg3OSwgLTI4MTY1MDE2LCAtMTU5MjA5MzgsIDE5MDAwOTI4LCAtMTY2NTg5MCwgLTEyNjgwODMzLCAtMjk0OTMyNSwgLTE4MDUxNzc4LCAtMjA4MjkxNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTYwMDA4ODIsIC0zNDQ4OTYsIDM0OTMwOTIsIC0xMTQ0NzE5OCwgLTI5NTA0NTk1LCAtMTMxNTk3ODksIDEyNTc3NzQwLCAxNjA0MTI2OCwgLTE5NzE1MjQwLCA3ODQ3NzA3KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwMTUxODY4LCAxMDU3MjA5OCwgMjczMTI0NzYsIDc5MjI2ODIsIDE0ODI1MzM5LCA0NzIzMTI4LCAtMzI4NTU5MzEsIC02NTE5MDE4LCAtMTAwMjA1NjcsIDM4NTI4NDgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNDMwNDcwLCAxNTY5NzU5NiwgLTIxMTIxNTU3LCAtNDQyMDY0NywgNTM4NjMxNCwgMTUwNjM1OTgsIDE2NTE0NDkzLCAtMTU5MzIxMTAsIDI5MzMwODk5LCAtMTUwNzYyMjQpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NDk5NzM1LCAtNDM3ODc5NCwgLTE1MjIyOTA4LCAtNjkwMTIxMSwgMTY2MTU3MzEsIDIwNTE3ODQsIDMzMDM3MDIsIDE1NDkwLCAtMjc1NDg3OTYsIDEyMzE0MzkxKSwKICAgICAgICAgICAgICAgIGFycmF5KDE1NjgzNTIwLCAtNjAwMzA0MywgMTgxMDkxMjAsIC05OTgwNjQ4LCAxNTMzNzk2OCwgLTU5OTc4MjMsIC0xNjcxNzQzNSwgMTU5MjE4NjYsIDE2MTAzOTk2LCAtMzczMTIxNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjMxNjk4MjQsIC0xMDc4MTI0OSwgMTM1ODgxOTIsIC0xNjI4ODA3LCAtMzc5ODU1NywgLTEwNzQ5MjksIC0xOTI3MzYwNywgNTQwMjY5OSwgLTI5ODE1NzEzLCAtOTg0MTEwMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjMxOTA2NzYsIDIzODQ1ODMsIC0zMjcxNDM0MCwgMzQ2MjE1NCwgLTI5OTAzNjU1LCAtMTUyOTEzMiwgLTExMjY2ODU2LCA4OTExNTE3LCAtMjUyMDU4NTksIDI3Mzk3MTMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjEzNzQxMDEsIC0zNTU0MjUwLCAtMzM1MjQ2NDksIDk4NzQ0MTEsIDE1Mzc3MTc5LCAxMTgzMTI0MiwgLTMzNTI5OTA0LCA2MTM0OTA3LCA0OTMxMjU1LCAxMTk4Nzg0OSksCiAgICAgICAgICAgICAgICBhcnJheSgtNzczMiwgLTI5Nzg4NTgsIC0xNjIyMzQ4NiwgNzI3NzU5NywgMTA1NTI0LCAtMzIyMDUxLCAtMzE0ODA1MzksIDEzODYxMzg4LCAtMzAwNzYzMTAsIDEwMTE3OTMwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjk1MDExNzAsIC0xMDc0NDg3MiwgLTI2MTYzNzY4LCAxMzA1MTUzOSwgLTI1NjI1NTY0LCA1MDg5NjQzLCAtNjMyNTUwMywgNjcwNDA3OSwgMTI4OTAwMTksIDE1NzI4OTQwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTk3MjM2MCwgLTExNzcxMzc5LCAtOTUxMDU5LCAtNDQxODg0MCwgMTQ3MDQ4NDAsIDI2OTUxMTYsIDkwMzM3NiwgLTEwNDI4MTM5LCAxMjg4NTE2NywgODMxMTAzMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTc1MTY0ODIsIDUzNTIxOTQsIDEwMzg0MjEzLCAtMTM4MTE2NTgsIDc1MDY0NTEsIDEzNDUzMTkxLCAyNjQyMzI2NywgNDM4NDczMCwgMTg4ODc2NSwgLTU0MzU0MDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNTgxNzMzOCwgLTMxMDczMTIsIC0xMzQ5NDU5OSwgLTMxODI1MDYsIDMwODk2NDU5LCAtMTM5MjE3MjksIC0zMjI1MTY0NCwgLTEyNzA3ODY5LCAtMTk0NjQ0MzQsIC0zMzQwMjQzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzYwNzk3NywgLTI2NjU3NzQsIC01MjYwOTEsIDQ2NTExMzYsIDU3NjUwODksIDQ2MTgzMzAsIDYwOTIyNDUsIDE0ODQ1MTk3LCAxNzE1MTI3OSwgLTk4NTQxMTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI0ODMwNDU4LCAtMTI3MzM3MjAsIC0xNTE2NTk3OCwgMTAzNjcyNTAsIC0yOTUzMDkwOCwgLTI2NTM1NiwgMjI4MjU4MDUsIC03MDg3Mjc5LCAtMTY4NjY0ODQsIDE2MTc2NTI1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjM1ODMyNTYsIDY1NjQ5NjEsIDIwMDYzNjg5LCAzNzk4MjI4LCAtNDc0MDE3OCwgNzM1OTIyNSwgMjAwNjE4MiwgLTEwMzYzNDI2LCAtMjg3NDYyNTMsIC0xMDE5NzUwOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTA2MjY2MDAsIC00NDg2NDAyLCAtMTMzMjA1NjIsIC01MTI1MzE3LCAzNDMyMTM2LCAtNjM5MzIyOSwgMjM2MzIwMzcsIC0xOTQwNjEwLCAzMjgwODMxMCwgMTA5OTg4MyksCiAgICAgICAgICAgICAgICBhcnJheSgxNTAzMDk3NywgNTc2ODgyNSwgLTI3NDUxMjM2LCAtMjg4NzI5OSwgLTY0MjczNzgsIC0xNTM2MTM3MSwgLTE1Mjc3ODk2LCAtNjgwOTM1MCwgMjA1MTQ0MSwgLTE1MjI1ODY1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzM2MjMyMywgLTcyMzkzNzIsIDc1MTc4OTAsIDk4MjQ5OTIsIDIzNTU1ODUwLCAyOTUzNjksIDUxNDgzOTgsIC0xNDE1NDE4OCwgLTIyNjg2MzU0LCAxNjYzMzY2MCksCiAgICAgICAgICAgICAgICBhcnJheSg0NTc3MDg2LCAtMTY3NTIyODgsIDEzMjQ5ODQxLCAtMTUzMDQzMjgsIDE5OTU4NzYzLCAtMTQ1MzcyNzQsIDE4NTU5NjcwLCAtMTA3NTk1NDksIDg0MDI0NzgsIC05ODY0MjczKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODQwNjMzMCwgLTEwNTE1ODEsIC0yNjc5MDE1NSwgLTkwNzY5OCwgLTE3MjEyNDE0LCAtMTEwMzA3ODksIDk0NTM0NTEsIC0xNDk4MDA3MiwgMTc5ODMwMTAsIDk5NjcxMzgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNTc2MjQ5NCwgNjUyNDcyMiwgMjY1ODU0ODgsIDk5NjkyNzAsIDI0NzA5Mjk4LCAxMjIwMzYwLCAtMTY3Nzk5MCwgNzgwNjMzNywgMTc1MDczOTYsIDM2NTE1NjApLAogICAgICAgICAgICAgICAgYXJyYXkoLTEwNDIwNDU3LCAtNDExODExMSwgMTQ1ODQ2MzksIDE1OTcxMDg3LCAtMTU3NjgzMjEsIDg4NjEwMTAsIDI2NTU2ODA5LCAtNTU3NDU1NywgLTE4NTUzMzIyLCAtMTEzNTcxMzUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjgzOTEwMSwgMTQyODQxNDIsIDQwMjk4OTUsIDM0NzI2ODYsIDE0NDAyOTU3LCAxMjY4OTM2MywgLTI2NjQyMTIxLCA4NDU5NDQ3LCAtNTYwNTQ2MywgLTc2MjE5NDEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC00ODM5Mjg5LCAtMzUzNTQ0NCwgOTc0NDk2MSwgMjg3MTA0OCwgMjUxMTM5NzgsIDMxODcwMTgsIC0yNTExMDgxMywgLTg0OTA2NiwgMTcyNTgwODQsIC03OTc3NzM5KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4MTY0NTQxLCAtMTA1OTUxNzYsIC0xNzE1NDg4MiwgLTE1NDI0MTcsIDE5MjM3MDc4LCAtOTc0NTI5NSwgMjMzNTc1MzMsIC0xNTIxNzAwOCwgMjY5MDgyNzAsIDEyMTUwNzU2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDI2NDg3MCwgLTc2NDc4NjUsIDUxMTIyNDksIC03MDM2NjcyLCAtMTQ5OTgwNywgLTY5NzQyNTcsIDQzMTY4LCAtNTUzNzcwMSwgLTMyMzAyMDc0LCAxNjIxNTgxOSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNjg5ODkwNSwgOTgyNDM5NCwgLTEyMzA0Nzc5LCAtNDQwMTA4OSwgLTMxMzk3MTQxLCAtNjI3NjgzNSwgMzI1NzQ0ODksIDEyNTMyOTA1LCAtNzUwMzA3MiwgLTg2NzUzNDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI3MzQzNTIyLCAtMTY1MTU0NjgsIC0yNzE1MTUyNCwgLTEwNzIyOTUxLCA5NDYzNDYsIDE2MjkxMDkzLCAyNTQ5NjgsIDcxNjgwODAsIDIxNjc2MTA3LCAtMTk0MzAyOCksCiAgICAgICAgICAgICAgICBhcnJheSgyMTI2MDk2MSwgLTg0MjQ3NTIsIC0xNjgzMTg4NiwgLTExOTIwODIyLCAtMjM2Nzc5NjEsIDM5NjgxMjEsIC0zNjUxOTQ5LCAtNjIxNTQ2NiwgLTM1NTYxOTEsIC03OTEzMDc1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNjU0NDc1NCwgMTMyNTAzNjYsIC0xNjgwNDQyOCwgMTU1NDYyNDIsIC00NTgzMDAzLCAxMjc1NzI1OCwgLTI0NjIzMDgsIC04NjgwMzM2LCAtMTg5MDcwMzIsIC05NjYyNzk5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNDE1MjM5LCAtMTU1Nzc3MjgsIDE4MzEyMzAzLCA0OTY0NDQzLCAtMTUyNzI1MzAsIC0xMjY1MzU2NCwgMjY4MjA2NTEsIDE2NjkwNjU5LCAyNTQ1OTQzNywgLTQ1NjQ2MDkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1MTQ0NjkwLCAxMTQyNTAyMCwgMjg0MjMwMDIsIC0xMTAyMDU1NywgLTYxNDQ5MjEsIC0xNTgyNjIyNCwgOTE0Mjc5NSwgLTIzOTE2MDIsIC02NDMyNDE4LCAtMTY0NDgxNyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMTA0NjUyLCA2MjUzNDc2LCAxNjk2NDE0NywgLTM3Njg4NzIsIC0yNTExMzk3MiwgLTEyMjk2NDM3LCAtMjc0NTcyMjUsIC0xNjM0NDY1OCwgNjMzNTY5MiwgNzI0OTk4OSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAzMzMyMjcsIDEzOTc5Njc1LCA3NTAzMjIyLCAtMTIzNjgzMTQsIC0xMTk1NjcyMSwgLTQ2MjE2OTMsIC0zMDI3MjI2OSwgMjY4MjI0MiwgMjU5OTMxNzAsIC0xMjQ3ODUyMyksCiAgICAgICAgICAgICAgICBhcnJheSg0MzY0NjI4LCA1OTMwNjkxLCAzMjMwNDY1NiwgLTEwMDQ0NTU0LCAtODA1NDc4MSwgMTUwOTExMzEsIDIyODU3MDE2LCAtMTA1OTg5NTUsIDMxODIwMzY4LCAxNTA3NTI3OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzE4NzkxMzQsIC04OTE4NjkzLCAxNzI1ODc2MSwgOTA2MjYsIC04MDQxODM2LCAtNDkxNzcwOSwgMjQxNjI3ODgsIC05NjUwODg2LCAtMTc5NzAyMzgsIDEyODMzMDQ1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE5MDczNjgzLCAxNDg1MTQxNCwgLTI0NDAzMTY5LCAtMTE4NjAxNjgsIDc2MjUyNzgsIDExMDkxMTI1LCAtMTk2MTkxOTAsIDIwNzQ0NDksIC05NDEzOTM5LCAxNDkwNTM3NyksCiAgICAgICAgICAgICAgICBhcnJheSgyNDQ4MzY2NywgLTExOTM1NTY3LCAtMjUxODg2NiwgLTExNTQ3NDE4LCAtMTU1MzEzMCwgMTUzNTU1MDYsIC0yNTI4MjA4MCwgOTI1MzEyOSwgMjc2Mjg1MzAsIC03NTU1NDgwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNzU5NzYwNywgODM0MDYwMywgMTkzNTU2MTcsIDU1MjE4NywgMjYxOTg0NzAsIC0zMTc2NTgzLCA0NTkzMzI0LCAtOTE1NzU4MiwgLTE0MTEwODc1LCAxNTI5NzAxNiksCiAgICAgICAgICAgICAgICBhcnJheSg1MTA4ODYsIDE0MzM3MzkwLCAtMzE3ODUyNTcsIDE2NjM4NjMyLCA2MzI4MDk1LCAyNzEzMzU1LCAtMjAyMTc0MTcsIC0xMTg2NDIyMCwgODY4MzIyMSwgMjkyMTQyNiksCiAgICAgICAgICAgICAgICBhcnJheSgxODYwNjc5MSwgMTE4NzQxOTYsIDI3MTU1MzU1LCAtNTI4MTQ4MiwgLTI0MDMxNzQyLCA2MjY1NDQ2LCAtMjUxNzgyNDAsIC0xMjc4OTI0LCA0Njc0NjkwLCAxMzg5MDUyNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTM2MDk2MjQsIDEzMDY5MDIyLCAtMjczNzIzNjEsIC0xMzA1NTkwOCwgMjQzNjA1ODYsIDk1OTI5NzQsIDE0OTc3MTU3LCA5ODM1MTA1LCA0Mzg5Njg3LCAyODgzOTYpLAogICAgICAgICAgICAgICAgYXJyYXkoOTkyMjUwNiwgLTUxOTM5NCwgMTM2MTMxMDcsIDU4ODM1OTQsIC0xODc1ODM0NSwgLTQzNDI2MywgLTEyMzA0MDYyLCA4MzE3NjI4LCAyMzM4ODA3MCwgMTYwNTIwODApLAogICAgICAgICAgICAgICAgYXJyYXkoMTI3MjAwMTYsIDExOTM3NTk0LCAtMzE5NzAwNjAsIC01MDI4Njg5LCAyNjkwMDEyMCwgODU2MTMyOCwgLTIwMTU1Njg3LCAtMTE2MzI5NzksIC0xNDc1NDI3MSwgLTEwODEyODkyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTk2MTg1OCwgMTQxNTA0MDksIDI2NzE2OTMxLCAtNjY1ODMyLCAtMjI3OTQzMjgsIDEzNjAzNTY5LCAxMTgyOTU3MywgNzQ2Nzg0NCwgLTI4ODIyMTI4LCA5MjkyNzUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTEwMzgyMzEsIC0xMTU4MjM5NiwgLTI3MzEwNDgyLCAtNzMxNjU2MiwgLTEwNDk4NTI3LCAtMTYzMDc4MzEsIC0yMzQ3OTUzMywgLTkzNzE4NjksIC0yMTM5MzE0MywgMjQ2NTA3NCksCiAgICAgICAgICAgICAgICBhcnJheSgyMDAxNzE2MywgLTQzMjMyMjYsIDI3OTE1MjQyLCAxNTI5MTQ4LCAxMjM5NjM2MiwgMTU2NzU3NjQsIDEzODE3MjYxLCAtOTY1ODA2NiwgMjQ2MzM5MSwgLTQ2MjIxNDApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNjM1ODg3OCwgLTEyNjYzOTExLCAtMTIwNjUxODMsIDQ5OTY0NTQsIC0xMjU2NDIyLCAxMDczNTcyLCA5NTgzNTU4LCAxMjg1MTEwNywgNDAwMzg5NiwgMTI2NzM3MTcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MzE1ODksIC0xNTE1NTg3MCwgLTMyNjI5MzAsIDE2MTQzMDgyLCAxOTI5NDEzNSwgMTMzODUzMjUsIDE0NzQxNTE0LCAtOTEwMzcyNiwgNzkwMzg4NiwgMjM0ODEwMSksCiAgICAgICAgICAgICAgICBhcnJheSgyNDUzNjAxNiwgLTE2NTE1MjA3LCAxMjcxNTU5MiwgLTM4NjIxNTUsIDE1MTEyOTMsIDEwMDQ3Mzg2LCAtMzg0MjM0NiwgLTcxMjkxNTksIC0yODM3NzUzOCwgMTAwNDgxMjcpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEyNjIyMjI2LCAtNjIwNDgyMCwgMzA3MTg4MjUsIDI1OTEzMTIsIC0xMDYxNzAyOCwgMTIxOTI4NDAsIDE4ODczMjk4LCAtNzI5NzA5MCwgLTMyMjk3NzU2LCAxNTIyMTYzMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjY0NzgxMjIsIC0xMTEwMzg2NCwgMTE1NDYyNDQsIC0xODUyNDgzLCA5MTgwODgwLCA3NjU2NDA5LCAtMjEzNDM5NTAsIDIwOTU3NTUsIDI5NzY5NzU4LCA2NTkzNDE1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTk5NDIwOCwgLTI5MDc0NjEsIDQxNzY5MTIsIDMyNjQ3NjYsIDEyNTM4OTY1LCAtODY4MTExLCAyNjMxMjM0NSwgLTYxMTg2NzgsIDMwOTU4MDU0LCA4MjkyMTYwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMTQyOTgyMiwgLTEzOTU5MTE2LCAyOTE3MzUzMiwgMTU2MzI0NDgsIDEyMTc0NTExLCAtMjc2MDA5NCwgMzI4MDg4MzEsIDM5NzcxODYsIDI2MTQzMTM2LCAtMzE0ODg3NiksCiAgICAgICAgICAgICAgICBhcnJheSgyMjY0ODkwMSwgMTQwMjE0MywgLTIyNzk5OTg0LCAxMzc0NjA1OSwgNzkzNjM0NywgMzY1MzQ0LCAtODY2ODYzMywgLTE2NzQ0MzMsIC0zNzU4MjQzLCAtMjMwNDYyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU0OTE5MTcsIDgwMTIzMTMsIC0yNTE0NzMwLCAtMTI3MDI0NjIsIC0yMzk2NTg0NiwgLTEwMjU0MDI5LCAtMTYxMjcxMywgLTE1MzU1NjksIC0xNjY2NDQ3NSwgODE5NDQ3OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjczMzgwNjYsIC03NTA3NDIwLCAtNzQxNDIyNCwgMTAxNDA0MDUsIC0xOTAyNjQyNywgLTY1ODk4ODksIDI3Mjc3MTkxLCA4ODU1Mzc2LCAyODU3MjI4NiwgMzAwNTE2NCksCiAgICAgICAgICAgICAgICBhcnJheSgyNjI4NzEyNCwgNDgyMTc3NiwgMjU0NzY2MDEsIC00MTQ1OTAzLCAtMzc2NDUxMywgLTE1Nzg4OTg0LCAtMTgwMDg1ODIsIDExODI0NzksIC0yNjA5NDgyMSwgLTEzMDc5NTk1KSwKICAgICAgICAgICAgICAgIGFycmF5KC03MTcxMTU0LCAzMTc4MDgwLCAyMzk3MDA3MSwgNjIwMTg5MywgLTE3MTk1NTc3LCAtNDQ4OTE5MiwgLTIxODc2Mjc1LCAtMTM5ODI2MjcsIDMyMjA4NjgzLCAtMTE5ODI0OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE2NjU3NzAyLCAyODE3NjQzLCAtMTAyODYzNjIsIDE0ODExMjk4LCA2MDI0NjY3LCAxMzM0OTUwNSwgLTI3MzE1NTA0LCAtMTA0OTc4NDIsIC0yNzY3MjU4NSwgLTExNTM5ODU4KSwKICAgICAgICAgICAgICAgIGFycmF5KDE1OTQxMDI5LCAtOTQwNTkzMiwgLTIxMzY3MDUwLCA4MDYyMDU1LCAzMTg3NjA3MywgLTIzODYyOSwgLTE1Mjc4MzkzLCAtMTQ0NDQyOSwgMTUzOTczMzEsIC00MTMwMTkzKSwKICAgICAgICAgICAgICAgIGFycmF5KDg5MzQ0ODUsIC0xMzQ4NTQ2NywgLTIzMjg2Mzk3LCAtMTM0MjMyNDEsIC0zMjQ0NjA5MCwgMTQwNDc5ODYsIDMxMTcwMzk4LCAtMTQ0MTAyMSwgLTI3NTA1NTY2LCAxNTA4NzE4NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE4MzU3MjQzLCAtMjE1NjQ5MSwgMjQ1MjQ5MTMsIC0xNjY3Nzg2OCwgMTU1MjA0MjcsIC02MzYwNzc2LCAtMTU1MDI0MDYsIDExNDYxODk2LCAxNjc4ODUyOCwgLTU4Njg5NDIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5NDczODYsIDE2MDEzNzczLCAyMTc1MDY2NSwgMzcxNDU1MiwgLTE3NDAxNzgyLCAtMTYwNTU0MzMsIC0zNzcwMjg3LCAtMTAzMjMzMjAsIDMxMzIyNTE0LCAtMTE2MTU2MzUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjE0MjY2NTUsIC01NjUwMjE4LCAtMTM2NDgyODcsIC01MzQ3NTM3LCAtMjg4MTIxODksIC00OTIwOTcwLCAtMTgyNzUzOTEsIC0xNDYyMTQxNCwgMTMwNDA4NjIsIC0xMjExMjk0OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTEyOTM4OTUsIDEyNDc4MDg2LCAtMjcxMzY0MDEsIDE1MDgzNzUwLCAtMjkzMDc0MjEsIDE0NzQ4ODcyLCAxNDU1NTU1OCwgLTEzNDE3MTAzLCAxNjEzNzExLCA0ODk2OTM1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTg5NDg4MywgMTUzMjMyOTQsIC04NDg5NzkxLCAtODA1NzkwMCwgMjU5NjcxMjYsIC0xMzQyNTQ2MCwgMjgyNTk2MCwgLTQ4OTcwNDUsIC0yMzk3MTc3NiwgLTExMjY3NDE1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTkyNDc2NiwgLTUyMjk4ODAsIC0xNzQ0MzUzMiwgNjQxMDY2NCwgMzYyMjg0NywgMTAyNDM2MTgsIDIwNjE1NDAwLCAxMjQwNTQzMywgLTIzNzUzMDMwLCAtODQzNjQxNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTcwOTEyOTUsIDEyNTU2MjA4LCAtMjAxOTEzNTIsIDkwMjUxODcsIC0xNzA3MjQ3OSwgNDMzMzgwMSwgNDM3ODQzNiwgMjQzMjAzMCwgMjMwOTc5NDksIC01NjYwMTgpLAogICAgICAgICAgICAgICAgYXJyYXkoNDU2NTgwNCwgLTE2MDI1NjU0LCAyMDA4NDQxMiwgLTc4NDI4MTcsIDE3MjQ5OTksIDE4OTI1NCwgMjQ3NjcyNjQsIDEwMTAzMjIxLCAtMTg1MTIzMTMsIDI0MjQ3NzgpLAogICAgICAgICAgICAgICAgYXJyYXkoMzY2NjMzLCAtMTE5NzY4MDYsIDgxNzMwOTAsIC02ODkwMTE5LCAzMDc4ODYzNCwgNTc0NTcwNSwgLTcxNjg2NzgsIDEzNDQxMDksIC0zNjQyNTUzLCAxMjQxMjY1OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI0MDAxNzkxLCA3NjkwMjg2LCAxNDkyOTQxNiwgLTE2ODI1NywgLTMyMjEwODM1LCAtMTM0MTI5ODYsIDI0MTYyNjk3LCAtMTUzMjY1MDQsIC0zMTQxNTAxLCAxMTE3OTM4NSksCiAgICAgICAgICAgICAgICBhcnJheSgxODI4OTUyMiwgLTE0NzI0OTU0LCA4MDU2OTQ1LCAxNjQzMDA1NiwgLTIxNzI5NzI0LCA3ODQyNTE0LCAtNjAwMTQ0MSwgLTE0ODY4OTcsIC0xODY4NDY0NSwgLTExNDQzNTAzKSwKICAgICAgICAgICAgICAgIGFycmF5KDQ3NjIzOSwgNjYwMTA5MSwgLTYxNTI3OTAsIC05NzIzMzc1LCAxNzUwMzU0NSwgLTQ4NjM5MDAsIDI3NjcyOTU5LCAxMzQwMzgxMywgMTEwNTI5MDQsIDUyMTkzMjkpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjA2Nzg1NDYsIC04Mzc1NzM4LCAtMzI2NzE4OTgsIDg4NDkxMjMsIC01MDA5NzU4LCAxNDU3NDc1MiwgMzExODY5NzEsIC0zOTczNzMwLCA5MDE0NzYyLCAtODU3OTA1NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTM2NDQwNTAsIC0xMDM1MDIzOSwgLTE1OTYyNTA4LCA1MDc1ODA4LCAtMTUxNDY2MSwgLTExNTM0NjAwLCAtMzMxMDI1MDAsIDkxNjAyODAsIDg0NzM1NTAsIC0zMjU2ODM4KSwKICAgICAgICAgICAgICAgIGFycmF5KDI0OTAwNzQ5LCAxNDQzNTcyMiwgMTcyMDkxMjAsIC0xNTI5MjU0MSwgLTIyNTkyMjc1LCA5ODc4OTgzLCAtNzY4OTMwOSwgLTE2MzM1ODIxLCAtMjQ1Njg0ODEsIDExNzg4OTQ4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzExODE1NSwgLTExMzk1MTk0LCAtMTM4MDIwODksIDE0Nzk3NDQxLCA5NjUyNDQ4LCAtNjg0NTkwNCwgLTIwMDM3NDM3LCAxMDQxMDczMywgLTI0NTY4NDcwLCAtMTQ1ODY5MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU2NTkxNjEsIDE2NzM2NzA2LCAtMjI0NjcxNTAsIDEwMjE1ODc4LCAtOTA5NzE3NywgNzU2MzkxMSwgMTE4NzE4NDEsIC0xMjUwNTE5NCwgLTE4NTEzMzI1LCA4NDY0MTE4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzQwMDYxMiwgODM0ODUwNywgLTE0NTg1OTUxLCAtODYxNzE0LCAtMzk1MDIwNSwgLTYzNzM0MTksIDE0MzI1Mjg5LCA4NjI4NjEyLCAzMzMxMzg4MSwgLTgzNzA1MTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMDE4Njk3MywgLTQ5Njc5MzUsIDIyMzY3MzU2LCA1MjcxNTQ3LCAtMTA5NzExNywgLTQ3ODg4MzgsIC0yNDgwNTY2NywgLTEwMjM2ODU0LCAtODk0MDczNSwgLTU4MTgyNjkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTY5NDg3ODUsIC0xNzk1MjEyLCAtMzI2MjU2ODMsIC0xNjAyMTE3OSwgMzI2MzU0MTQsIC03Mzc0MjQ1LCAxNTk4OTE5NywgLTEyODM4MTg4LCAyODM1ODE5MiwgLTQyNTM5MDQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNTYxNzgxLCAtMjc5OTA1OSwgLTMyMzUxNjgyLCAtMTY2MTk2MywgLTkxNDc3MTksIDEwNDI5MjY3LCAtMTY2Mzc2ODQsIDQwNzIwMTYsIC01MzUxNjY0LCA1NTk2NTg5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjgyMzY1OTgsIC0zMzkwMDQ4LCAxMjMxMjg5NiwgNjIxMzE3OCwgMzExNzE0MiwgMTYwNzg1NjUsIDI5MjY2MjM5LCAyNTU3MjIxLCAxNzY4MzAxLCAxNTM3MzE5MyksCiAgICAgICAgICAgICAgICBhcnJheSgtNzI0MzM1OCwgLTMyNDY5NjAsIC00NTkzNDY3LCAtNzU1MzM1MywgLTEyNzkyNywgLTkxMjI0NSwgLTEwOTA5MDIsIC00NTA0OTkxLCAtMjQ2NjA0OTEsIDM0NDI5MTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTMwMjEwNTcxLCA1MTI0MDQzLCAxNDE4MTc4NCwgODE5Nzk2MSwgMTg5NjQ3MzQsIC0xMTkzOTA5MywgMjI1OTc5MzEsIDcxNzY0NTUsIC0xODU4NTQ3OCwgMTMzNjU5MzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC03ODc3MzkwLCAtMTQ5OTk1OCwgODMyNDY3MywgNDY5MDA3OSwgNjI2MTg2MCwgODkwNDQ2LCAyNDUzODEwNywgLTg1NzAxODYsIC05Njg5NTk5LCAtMzAzMTY2NyksCiAgICAgICAgICAgICAgICBhcnJheSgyNTAwODkwNCwgLTEwNzcxNTk5LCAtNDMwNTAzMSwgLTk2MzgwMTAsIDE2MjY1MDM2LCAxNTcyMTYzNSwgNjgzNzkzLCAtMTE4MjM3ODQsIDE1NzIzNDc5LCAtMTUxNjM0ODEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk2NjA2MjUsIDEyMzc0Mzc5LCAtMjcwMDY5OTksIC03MDI2MTQ4LCAtNzcyNDExNCwgLTEyMzE0NTE0LCAxMTg3OTY4MiwgNTQwMDE3MSwgNTE5NTI2LCAtMTIzNTg3NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjIyNTgzOTcsIC0xNjMzMjIzMywgLTc4Njk4MTcsIDE0NjEzMDE2LCAtMjI1MjAyNTUsIC0yOTUwOTIzLCAtMjAzNTM4ODEsIDczMTU5NjcsIDE2NjQ4Mzk3LCA3NjA1NjQwKSwKICAgICAgICAgICAgICAgIGFycmF5KC04MDgxMzA4LCAtODQ2NDU5NywgLTgyMjMzMTEsIDk3MTk3MTAsIDE5MjU5NDU5LCAtMTUzNDgyMTIsIDIzOTk0OTQyLCAtNTI4MTU1NSwgLTk0Njg4NDgsIDQ3NjMyNzgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxNjk5MjQ0LCA5MjIwOTY5LCAtMTU3MzA2MjQsIDEwODQxMzcsIC0yNTQ3NjEwNywgLTI4NTIzOTAsIDMxMDg4NDQ3LCAtNzc2NDUyMywgLTExMzU2NTI5LCA3MjgxMTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI2MDQ3MjIwLCAtMTE3NTE0NzEsIC02OTAwMzIzLCAtMTY1MjE3OTgsIDI0MDkyMDY4LCA5MTU4MTE5LCAtNDI3MzU0NSwgLTEyNTU1NTU4LCAtMjkzNjU0MzYsIC01NDk4MjcyKSwKICAgICAgICAgICAgICAgIGFycmF5KDE3NTEwMzMxLCAtMzIyODU3LCA1ODU0Mjg5LCA4NDAzNTI0LCAxNzEzMzkxOCwgLTMxMTI2MTIsIC0yODExMTAwNywgMTIzMjc5NDUsIDEwNzUwNDQ3LCAxMDAxNDAxMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTAzMTI3NjgsIDM5MzY5NTIsIDkxNTYzMTMsIC04ODk3NjgzLCAxNjQ5ODY5MiwgLTk5NDY0NywgLTI3NDgxMDUxLCAtNjY2NzMyLCAzNDI0NjkxLCA3NTQwMjIxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDMyMjM2MSwgLTY5NjQxMTAsIDExMzYxMDA1LCAtNDE0MzMxNywgNzQzMzMwNCwgNDk4OTc0OCwgLTcwNzE0MjIsIC0xNjMxNzIxOSwgLTkyNDQyNjUsIDE1MjU4MDQ2KSwKICAgICAgICAgICAgICAgIGFycmF5KDEzMDU0NTYyLCAtMjc3OTQ5NywgMTkxNTU0NzQsIDQ2OTA0NSwgLTEyNDgyNzk3LCA0NTY2MDQyLCA1NjMxNDA2LCAyNzExMzk1LCAxMDYyOTE1LCAtNTEzNjM0NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTkyNDAyNDgsIC0xMTI1NDU5OSwgLTI5NTA5MDI5LCAtNzQ5OTk2NSwgLTU4MzU3NjMsIDEzMDA1NDExLCAtNjA2NjQ4OSwgMTIxOTQ0OTcsIDMyOTYwMzgwLCAxNDU5MzEwKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE5ODUyMDM0LCA3MDI3OTI0LCAyMzY2OTM1MywgMTAwMjAzNjYsIDg1ODY1MDMsIC02NjU3OTA3LCAzOTQxOTcsIC02MTAxODg1LCAxODYzODAwMywgLTExMTc0OTM3KSwKICAgICAgICAgICAgICAgIGFycmF5KDMxMzk1NTM0LCAxNTA5ODEwOSwgMjY1ODEwMzAsIDgwMzA1NjIsIC0xNjUyNzkxNCwgLTUwMDcxMzQsIDkwMTI0ODYsIC03NTg0MzU0LCAtNjY0MzA4NywgLTU0NDI2MzYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTkxOTIxNjUsIC0yMzQ3Mzc3LCAtMTk5NzA5OSwgNDUyOTUzNCwgMjU3NjY4NDQsIDYwNzk4NiwgLTEzMjIyLCA5Njc3NTQzLCAtMzIyOTQ4ODksIC02NDU2MDA4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ0NDQ5NiwgLTE0OTkzNywgMjkzNDg5MDIsIDgxODY2NjUsIDE4NzM3NjAsIDEyNDg5ODYzLCAtMzA5MzQ1NzksIC03ODM5NjkyLCAtNzg1Mjg0NCwgLTgxMzg0MjkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MjM2MzU2LCAtMTU0MzM1MDksIDc3NjY0NzAsIDc0Njg2MCwgMjYzNDY5MzAsIC0xMDIyMTc2MiwgLTI3MzMzNDUxLCAxMDc1NDU4OCwgLTk0MzE0NzYsIDUyMDM1NzYpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE4MzQzMTQsIDE0MTM1NDk2LCAtNzcwMDA3LCA1MTU5MTE4LCAyMDkxNzY3MSwgLTE2NzY4MDk2LCAtNzQ2Nzk3MywgLTczMzc1MjQsIDMxODA5MjQzLCA3MzQ3MDY2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtOTYwNjcyMywgLTExODc0MjQwLCAyMDQxNDQ1OSwgMTMwMzM5ODYsIDEzNzE2NTI0LCAtMTE2OTE4ODEsIDE5Nzk3OTcwLCAtMTIyMTEyNTUsIDE1MTkyODc2LCAtMjA4NzQ5MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTI2NjM1NjMsIC0yMTgxNzE5LCAxMTY4MTYyLCAtMzgwNDgwOSwgMjY3NDc4NzcsIC0xNDEzODA5MSwgMTA2MDkzMzAsIDEyNjk0NDIwLCAzMzQ3MzI0MywgLTEzMzgyMTA0KSwKICAgICAgICAgICAgICAgIGFycmF5KDMzMTg0OTk5LCAxMTE4MDM1NSwgMTU4MzIwODUsIC0xMTM4NTQzMCwgLTE2MzM2NzEsIDIyNTg4NCwgMTUwODkzMzYsIC0xMTAyMzkwMywgLTYxMzU2NjIsIDE0NDgwMDUzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMTMwODcxNywgLTU2MTk5OTgsIDMxMDMwODQwLCAtMTg5NzA5OSwgMTU2NzQ1NDcsIC02NTgyODgzLCA1NDk2MjA4LCAxMzY4NTIyNywgMjc1OTUwNTAsIDg3MzcyNzUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMzE4ODUyLCAtMTUxNTAyMzksIDEwOTMzODQzLCAtMTYxNzgwMjIsIDgzMzUzNTIsIC03NTQ2MDIyLCAtMzEwMDgzNTEsIC0xMjYxMDYwNCwgMjY0OTgxMTQsIDY2NTExKSwKICAgICAgICAgICAgICAgIGFycmF5KDIyNjQ0NDU0LCAtODc2MTcyOSwgLTE2NjcxNzc2LCA0ODg0NTYyLCAtMzEwNTYxNCwgLTEzNTU5MzY2LCAzMDU0MDc2NiwgLTQyODY3NDcsIC0xMzMyNzc4NywgLTc1MTUwOTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODAxNzg0NywgOTgzNDg0NSwgMTg2MTcyMDcsIC0yNjgxMzEyLCAtMzQwMTk1NiwgLTEzMzA3NTA2LCA4MjA1NTQwLCAxMzU4NTQzNywgLTE3MTI3NDY1LCAxNTExNTQzOSksCiAgICAgICAgICAgICAgICBhcnJheSgyMzcxMTU0MywgLTY3MjkxNSwgMzEyMDY1NjEsIC04MzYyNzExLCA2MTY0NjQ3LCAtOTcwOTk4NywgLTMzNTM1ODgyLCAtMTQyNjA5NiwgODIzNjkyMSwgMTY0OTI5MzkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzOTEwNTU5LCAtMTM1MTU1MjYsIC0yNjI5OTQ4MywgLTQ1MDM4NDEsIDI1MDA1NTkwLCAtNzY4NzI3MCwgMTk1NzQ5MDIsIDEwMDcxNTYyLCA2NzA4MzgwLCAtNjIyMjQyNCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjEwMTM5MSwgLTQ5MzAwNTQsIDE5NzAyNzMxLCAyMzY3NTc1LCAtMTU0MjcxNjcsIDEwNDc2NzUsIDUzMDEwMTcsIDkzMjg3MDAsIDI5OTU1NjAxLCAtMTE2NzgzMTApLAogICAgICAgICAgICAgICAgYXJyYXkoMzA5NjM1OSwgOTI3MTgxNiwgLTIxNjIwODY0LCAtMTU1MjE4NDQsIC0xNDg0Nzk5NiwgLTc1OTI5MzcsIC0yNTg5MjE0MiwgLTEyNjM1NTk1LCAtOTkxNzU3NSwgNjIxNjYwOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzI2MTU4NDksIDMzODY2MywgLTI1MTk1NjExLCAyNTEwNDIyLCAtMjkyMTM1NjYsIC0xMzgyMDIxMywgMjQ4MjI4MzAsIC02MTQ2NTY3LCAtMjY3Njc0ODAsIDc1MjUwNzkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMzA2NjY0OSwgLTEzOTg1NjIzLCAxNjEzMzQ4NywgLTc4OTYxNzgsIC0zMzg5NTY1LCA3Nzg3ODgsIC05MTAzMzYsIC0yNzgyNDk1LCAtMTkzODY2MzMsIDExOTk0MTAxKSwKICAgICAgICAgICAgICAgIGFycmF5KDIxNjkxNTAwLCAtMTM2MjQ2MjYsIC02NDEzMzEsIC0xNDM2NzAyMSwgMzI4NTg4MSwgLTM0ODM1OTYsIC0yNTA2NDY2NiwgOTcxODI1OCwgLTc0Nzc0MzcsIDEzMzgxNDE4KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4NDQ1MzkwLCAtNDIwMjIzNiwgMTQ5Nzk4NDYsIDExNjIyNDU4LCAtMTcyNzExMCwgLTM1ODI5ODAsIDIzMTExNjQ4LCAtNjM3NTI0NywgMjg1MzUyODIsIDE1Nzc5NTc2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDA5ODA1MywgMzA4OTY2MiwgLTkyMzQzODcsIDE2NjYyMTM1LCAtMjEzMDY5NDAsIDExMzA4NDExLCAtMTQwNjg0NTQsIDEyMDIxNzMwLCA5OTU1Mjg1LCAtMTYzMDMzNTYpLAogICAgICAgICAgICAgICAgYXJyYXkoOTczNDg5NCwgLTE0NTc2ODMwLCAtNzQ3MzYzMywgLTkxMzg3MzUsIDIwNjAzOTIsIDExMzEzNDk2LCAtMTg0MjYwMjksIDk5MjQzOTksIDIwMTk0ODYxLCAxMzM4MDk5NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjYzNzgxMDIsIC03OTY1MjA3LCAtMjIxNjc4MjEsIDE1Nzg5Mjk3LCAtMTgwNTUzNDIsIC02MTY4NzkyLCAtMTk4NDkxNCwgMTU3MDc3NzEsIDI2MzQyMDIzLCAxMDE0NjA5OSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjYwMTY4NzQsIC0yMTk5NDMsIDIxMzM5MTkxLCAtNDEzODgsIDE5NzQ1MjU2LCAtMjg3ODcwMCwgLTI5NjM3MjgwLCAyMjI3MDQwLCAyMTYxMjMyNiwgLTU0NTcyOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTMwNzczODcsIDExODQyMjgsIDIzNTYyODE0LCAtNTk3MDQ0MiwgLTIwMzUxMjQ0LCAtNjM0ODcxNCwgMjU3NjQ0NjEsIDEyMjQzNzk3LCAtMjA4NTY1NjYsIDExNjQ5NjU4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDAzMTQ5NCwgMTEyNjI2MjYsIDI3Mzg0MTcyLCAyMjcxOTAyLCAyNjk0NzUwNCwgLTE1OTk3NzcxLCAzOTk0NCwgNjExNDA2NCwgMzM1MTQxOTAsIDIzMzMyNDIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMTQzMzU4OCwgLTEyNDIxODIxLCA4MTE5NzgyLCA3MjE5OTEzLCAtMjE4MzA1MjIsIC05MDE2MTM0LCAtNjY3OTc1MCwgLTEyNjcwNjM4LCAyNDM1MDU3OCwgLTEzNDUwMDAxKSwKICAgICAgICAgICAgICAgIGFycmF5KC00MTE2MzA3LCAtMTEyNzE1MzMsIC0yMzg4NjE4NiwgNDg0MzYxNSwgLTMwMDg4MzM5LCA2OTA2MjMsIC0zMTUzNjA4OCwgLTEwNDA2ODM2LCA4MzE3ODYwLCAxMjM1Mjc2NiksCiAgICAgICAgICAgICAgICBhcnJheSgxODIwMDEzOCwgLTE0NDc1OTExLCAtMzMwODc3NTksIC0yNjk2NjE5LCAtMjM3MDI1MjEsIC05MTAyNTExLCAtMjM1NTIwOTYsIC0yMjg3NTUwLCAyMDcxMjE2MywgNjcxOTM3MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjY2NTYyMDgsIDYwNzUyNTMsIC03ODU4NTU2LCAxODg2MDcyLCAtMjgzNDQwNDMsIDQyNjIzMjYsIDExMTE3NTMwLCAtMzc2MzIxMCwgMjYyMjQyMzUsIC0zMjk3NDU4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzE2ODkzOCwgLTE0ODU0MDk3LCAtMzM5NTY3NiwgLTE2MzY5ODc3LCAtMTk5NTQwNDUsIDE0MDUwNDIwLCAyMTcyODM1MiwgOTQ5MzYxMCwgMTg2MjA2MTEsIC0xNjQyODYyOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTMzMjMzMjEsIDEzMzI1MzQ5LCAxMTQzMjEwNiwgNTk2NDgxMSwgMTg2MDkyMjEsIDYwNjI5NjUsIC01MjY5NDcxLCAtOTcyNTU1NiwgLTMwNzAxNTczLCAtMTY0Nzk2NTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMzg2MDUzOCwgLTExMjMzMTU5LCAyNjk2MTM1NywgMTY0MDg2MSwgLTMyNDEzMTEyLCAtMTY3Mzc5NDAsIDEyMjQ4NTA5LCAtNTI0MDYzOSwgMTM3MzUzNDIsIDE5MzQwNjIpLAogICAgICAgICAgICAgICAgYXJyYXkoMjUwODk3NjksIDY3NDI1ODksIDE3MDgxMTQ1LCAtMTM0MDYyNjYsIDIxOTA5MjkzLCAtMTYwNjc5ODEsIC0xNTEzNjI5NCwgLTM3NjUzNDYsIC0yMTI3Nzk5NywgNTQ3MzYxNiksCiAgICAgICAgICAgICAgICBhcnJheSgzMTg4MzY3NywgLTc5NjExMDEsIDEwODM0MzIsIC0xMTU3MjQwMywgMjI4Mjg0NzEsIDEzMjkwNjczLCAtNzEyNTA4NSwgMTI0Njk2NTYsIDI5MTExMjEyLCAtNTQ1MTAxNCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjQyNDQ5NDcsIC0xNTA1MDQwNywgLTI2MjYyOTc2LCAyNzkxNTQwLCAtMTQ5OTc1OTksIDE2NjY2Njc4LCAyNDM2NzQ2NiwgNjM4ODgzOSwgLTEwMjk1NTg3LCA0NTIzODMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NjQwNzgyLCAtMzQxNzg0MSwgNTIxNzkxNiwgMTYyMjQ2MjQsIDE5OTg3MDM2LCAtNDA4MjI2OSwgLTI0MjM2MjUxLCAtNTkxNTI0OCwgMTU3NjYwNjIsIDg0MDc4MTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwNDA2OTk5LCAxMzk5MDIzMSwgMTU0OTU0MjUsIDE2Mzk1NTI1LCA1Mzc3MTY4LCAxNTE2NjQ5NSwgLTg5MTcwMjMsIC00Mzg4OTUzLCAtODA2NzkwOSwgMjI3NjcxOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzAxNTc5MTgsIDEyOTI0MDY2LCAtMTc3MTIwNTAsIDkyNDU3NTMsIDE5ODk1MDI4LCAzMzY4MTQyLCAtMjM4Mjc1ODcsIDUwOTYyMTksIDIyNzQwMzc2LCAtNzMwMzQxNyksCiAgICAgICAgICAgICAgICBhcnJheSgyMDQxMTM5LCAtMTQyNTYzNTAsIDc3ODM2ODcsIDEzODc2Mzc3LCAtMjU5NDY5ODUsIC0xMzM1MjQ1OSwgMjQwNTExMjQsIDEzNzQyMzgzLCAtMTU2Mzc1OTksIDEzMjk1MjIyKSwKICAgICAgICAgICAgICAgIGFycmF5KDMzMzM4MjM3LCAtODUwNTczMywgMTI1MzIxMTMsIDc5Nzc1MjcsIDkxMDYxODYsIC0xNzE1MjUxLCAtMTc3MjAxOTUsIC00NjEyOTcyLCAtNDQ1MTM1NywgLTE0NjY5NDQ0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjAwNDUyODEsIDU0NTQwOTcsIC0xNDM0NjU0OCwgNjQ0NzE0NiwgMjg4NjIwNzEsIDE4ODM2NTEsIC0yNDY5MjY2LCAtNDE0MTg4MCwgNzc3MDU2OSwgOTYyMDU5NyksCiAgICAgICAgICAgICAgICBhcnJheSgyMzIwODA2OCwgNzk3OTcxMiwgMzMwNzE0NjYsIDgxNDkyMjksIDE3NTgyMzEsIC0xMDgzNDk5NSwgMzA5NDU1MjgsIC0xNjk0MzIzLCAtMzM1MDIzNDAsIC0xNDc2Nzk3MCksCiAgICAgICAgICAgICAgICBhcnJheSgxNDM5OTU4LCAtMTYyNzA0ODAsIC0xMDc5OTg5LCAtNzkzNzgyLCA0NjI1NDAyLCAxMDY0Nzc2NiwgLTUwNDM4MDEsIDEyMjAxMTgsIDMwNDk0MTcwLCAtMTE0NDA3OTkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC01MDM3NTgwLCAtMTMwMjgyOTUsIC0yOTcwNTU5LCAtMzA2MTc2NywgMTU2NDA5NzQsIC02NzAxNjY2LCAtMjY3MzkwMjYsIDkyNjA1MCwgLTE2ODQzMzksIC0xMzMzMzY0NyksCiAgICAgICAgICAgICAgICBhcnJheSgxMzkwODQ5NSwgLTM1NDkyNzIsIDMwOTE5OTI4LCAtNjI3MzgyNSwgLTIxNTIxODYzLCA3OTg5MDM5LCA5MDIxMDM0LCA5MDc4ODY1LCAzMzUzNTA5LCA0MDMzNTExKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yOTY2MzQzMSwgLTE1MTEzNjEwLCAzMjI1OTk5MSwgLTM0NDQ4MiwgMjQyOTU4NDksIC0xMjkxMjEyMywgMjMxNjExNjMsIDg4MzkxMjcsIDI3NDg1MDQxLCA3MzU2MDMyKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDk2NjEwMjcsIDcwNTQ0MywgMTE5ODAwNjUsIC01MzcwMTU0LCAtMTYyODU0MywgMTQ2NjExNzMsIC02MzQ2MTQyLCAyNjI1MDE1LCAyODQzMTAzNiwgLTE2NzcxODM0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzgzOTIzMywgLTgzMTE0MTUsIC0yNTk0NTUxMSwgNzQ4MDk1OCwgLTE3NjgxNjY5LCAtODM1NDE4MywgLTIyNTQ1OTcyLCAxNDE1MDU2NSwgMTU5NzA3NjIsIDQwOTk0NjEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkyNjI1NzYsIDE2NzU2NTkwLCAyNjM1MDU5MiwgLTg3OTM1NjMsIDg1Mjk2NzEsIC0xMTIwODA1MCwgMTM2MTcyOTMsIC05OTM3MTQzLCAxMTQ2NTczOSwgODMxNzA2MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NDkzMDgxLCAtNjk2MjkyOCwgMzI1MDAyMDAsIC05NDE5MDUxLCAtMjMwMzg3MjQsIC0yMzAyMjIyLCAxNDg5ODYzNywgMzg0ODQ1NSwgMjA5NjkzMzQsIC01MTU3NTE2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMDM4NDQ1MCwgLTE0MzQ3NzEzLCAtMTgzMzY0MDUsIDEzODg0NzIyLCAtMzMwMzk0NTQsIDI4NDIxMTQsIC0yMTYxMDgyNiwgLTM2NDk4ODgsIDExMTc3MDk1LCAxNDk4OTU0NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ0OTY3MjEsIC0xMTcxNjAxNiwgMTY5NTk4OTYsIDIyNzg0NjMsIDEyMDY2MzA5LCAxMDEzNzc3MSwgMTM1MTU2NDEsIDI1ODEyODYsIC0yODQ4NzUwOCwgOTkzMDI0MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE3NzUxNjIyLCAtMjA5NzgyNiwgMTY1NDQzMDAsIC0xMzAwOTMwMCwgLTE1OTE0ODA3LCAtMTQ5NDkwODEsIDE4MzQ1NzY3LCAtMTM0MDM3NTMsIDE2MjkxNDgxLCAtNTMxNDAzOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzMyMjkxOTQsIDI1NTMyODgsIDMyNjc4MjEzLCA5ODc1OTg0LCA4NTM0MTI5LCA2ODg5Mzg3LCAtOTY3Njc3NCwgNjk1NzYxNywgNDM2ODg5MSwgOTc4ODc0MSksCiAgICAgICAgICAgICAgICBhcnJheSgxNjY2MDc1NiwgNzI4MTA2MCwgLTEwODMwNzU4LCAxMjkxMTgyMCwgMjAxMDg1ODQsIC04MTAxNjc2LCAtMjE3MjI1MzYsIC04NjEzMTQ4LCAxNjI1MDU1MiwgLTExMTExMTAzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTk3NjU1MDcsIDIzOTA1MjYsIC0xNjU1MTAzMSwgMTQxNjE5ODAsIDE5MDUyODYsIDY0MTQ5MDcsIDQ2ODk1ODQsIDEwNjA0ODA3LCAtMzAxOTA0MDMsIDQ3ODI3NDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEzNTQ1MzksIDE0NzM2OTQxLCAtNzM2NzQ0MiwgLTEzMjkyODg2LCA3NzEwNTQyLCAtMTQxNTU1OTAsIC05OTgxNTcxLCA0MzgzMDQ1LCAyMjU0NjQwMywgNDM3MzIzKSwKICAgICAgICAgICAgICAgIGFycmF5KDMxNjY1NTc3LCAtMTIxODA0NjQsIC0xNjE4NjgzMCwgMTQ5MTMzOSwgLTE4MzY4NjI1LCAzMjk0NjgyLCAyNzM0MzA4NCwgMjc4NjI2MSwgLTMwNjMzNTkwLCAtMTQwOTcwMTYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNDQ2NzI3OSwgLTY4MzcxNSwgLTMzMzc0MTA3LCA3NDQ4NTUyLCAxOTI5NDM2MCwgMTQzMzQzMjksIC0xOTY5MDYzMSwgMjM1NTMxOSwgLTE5Mjg0NjcxLCAtNjExNDM3MyksCiAgICAgICAgICAgICAgICBhcnJheSgxNTEyMTMxMiwgLTE1Nzk2MTYyLCA2Mzc3MDIwLCAtNjAzMTM2MSwgLTEwNzk4MTExLCAtMTI5NTc4NDUsIDE4OTUyMTc3LCAxNTQ5NjQ5OCwgLTI5MzgwMTMzLCAxMTc1NDIyOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjYzNzI3NywgLTEzNDgzMDc1LCA4NDg4NzI3LCAtMTQzMDM4OTYsIDEyNzI4NzYxLCAtMTYyMjQ5MywgNzE0MTU5NiwgMTE3MjQ1NTYsIDIyNzYxNjE1LCAtMTAxMzQxNDEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE2OTE4NDE2LCAxMTcyOTY2MywgLTE4MDgzNTc5LCAzMDIyOTg3LCAtMzEwMTU3MzIsIC0xMzMzOTY1OSwgLTI4NzQxMTg1LCAtMTIyMjczOTMsIDMyODUxMjIyLCAxMTcxNzM5OSksCiAgICAgICAgICAgICAgICBhcnJheSgxMTE2NjYzNCwgNzMzODA0OSwgLTY3MjI1MjMsIDQ1MzE1MjAsIC0yOTQ2ODY3MiwgLTczMDIwNTUsIDMxNDc0ODc5LCAzNDgzNjMzLCAtMTE5MzE3NSwgLTQwMzA4MzEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE4NTYzNSwgOTkyMTMwNSwgMzE0NTY2MDksIC0xMzUzNjQzOCwgLTEyMDEzODE4LCAxMzM0ODkyMywgMzMxNDI2NTIsIDY1NDY2NjAsIC0xOTk4NTI3OSwgLTM5NDgzNzYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMjQ2MDU5NiwgMTEyNjY3MTIsIC0xMTE5NzEwNywgLTc4OTkxMDMsIDMxNzAzNjk0LCAzODU1OTAzLCAtODUzNzEzMSwgLTEyODMzMDQ4LCAtMzA3NzIwMzQsIC0xNTQ4NjMxMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTgwMDY0NzcsIDEyNzA5MDY4LCAzOTkxNzQ2LCAtNjQ3OTE4OCwgLTIxNDkxNTIzLCAtMTA1NTA0MjUsIC0zMTEzNTM0NywgLTE2MDQ5ODc5LCAxMDkyODkxNywgMzAxMTk1OCksCiAgICAgICAgICAgICAgICBhcnJheSgtNjk1Nzc1NywgLTE1NTk0MzM3LCAzMTY5NjA1OSwgMzM0MjQwLCAyOTU3NjcxNiwgMTQ3OTYwNzUsIC0zMDgzMTA1NiwgLTEyODA1MTgwLCAxODAwODAzMSwgMTAyNTg1NzcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMjQ0ODY0NCwgMTU2NTU1NjksIDcwMTg0NzksIC00NDEwMDAzLCAtMzAzMTQyNjYsIC0xMjAxNTkxLCAtMTg1MzQ2NSwgMTM2NzEyMCwgMjUxMjc4NzQsIDY2NzE3NDMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjk3MDExNjYsIC0xNDM3MzkzNCwgLTEwODc4MTIwLCA5Mjc5Mjg4LCAtMTc1NjgsIDEzMTI3MjEwLCAyMTM4MjkxMCwgMTEwNDIyOTIsIDI1ODM4Nzk2LCA0NjQyNjg0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMDQzMDIzNCwgMTQ5NTU1MzcsIC0yNDEyNjM0NywgODEyNDYxOSwgLTUzNjkyODgsIC01OTkwNDcwLCAzMDQ2ODE0NywgLTEzOTAwNjQwLCAxODQyMzI4OSwgNDE3NzQ3NiksCiAgICAgICAgICAgICksCiAgICAgICAgKQogICAgKTsKCiAgICAvKioKICAgICAqIFNlZTogbGlic29kaXVtJ3MgY3J5cHRvX2NvcmUvY3VydmUyNTUxOS9yZWYxMC9iYXNlMi5oCiAgICAgKgogICAgICogQHZhciBhcnJheSBiYXNpY2FsbHkgaW50WzhdWzNdCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGJhc2UyID0gYXJyYXkoCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KDI1OTY3NDkzLCAtMTQzNTYwMzUsIDI5NTY2NDU2LCAzNjYwODk2LCAtMTI2OTQzNDUsIDQwMTQ3ODcsIDI3NTQ0NjI2LCAtMTE3NTQyNzEsIC02MDc5MTU2LCAyMDQ3NjA1KSwKICAgICAgICAgICAgYXJyYXkoLTEyNTQ1NzExLCA5MzQyNjIsIC0yNzIyOTEwLCAzMDQ5OTkwLCAtNzI3NDI4LCA5NDA2OTg2LCAxMjcyMDY5MiwgNTA0MzM4NCwgMTk1MDA5MjksIC0xNTQ2OTM3OCksCiAgICAgICAgICAgIGFycmF5KC04NzM4MTgxLCA0NDg5NTcwLCA5Njg4NDQxLCAtMTQ3ODUxOTQsIDEwMTg0NjA5LCAtMTIzNjMzODAsIDI5Mjg3OTE5LCAxMTg2NDg5OSwgLTI0NTE0MzYyLCAtNDQzODU0NiksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoMTU2MzYyOTEsIC05Njg4NTU3LCAyNDIwNDc3MywgLTc5MTIzOTgsIDYxNjk3NywgLTE2Njg1MjYyLCAyNzc4NzYwMCwgLTE0NzcyMTg5LCAyODk0NDQwMCwgLTE1NTAwMjQpLAogICAgICAgICAgICBhcnJheSgxNjU2ODkzMywgNDcxNzA5NywgLTExNTU2MTQ4LCAtMTEwMjMyMiwgMTU2ODI4OTYsIC0xMTgwNzA0MywgMTYzNTQ1NzcsIC0xMTc3NTk2MiwgNzY4OTY2MiwgMTExOTk1NzQpLAogICAgICAgICAgICBhcnJheSgzMDQ2NDE1NiwgLTU5NzYxMjUsIC0xMTc3OTQzNCwgLTE1NjcwODY1LCAyMzIyMDM2NSwgMTU5MTU4NTIsIDc1MTI3NzQsIDEwMDE3MzI2LCAtMTc3NDkwOTMsIC05OTIwMzU3KSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgxMDg2MTM2MywgMTE0NzMxNTQsIDI3Mjg0NTQ2LCAxOTgxMTc1LCAtMzAwNjQzNDksIDEyNTc3ODYxLCAzMjg2Nzg4NSwgMTQ1MTUxMDcsIC0xNTQzODMwNCwgMTA4MTkzODApLAogICAgICAgICAgICBhcnJheSg0NzA4MDI2LCA2MzM2NzQ1LCAyMDM3NzU4NiwgOTA2NjgwOSwgLTExMjcyMTA5LCA2NTk0Njk2LCAtMjU2NTM2NjgsIDEyNDgzNjg4LCAtMTI2Njg0OTEsIDU1ODEzMDYpLAogICAgICAgICAgICBhcnJheSgxOTU2MzE2MCwgMTYxODY0NjQsIC0yOTM4Njg1NywgNDA5NzUxOSwgMTAyMzc5ODQsIC00MzQ4MTE1LCAyODU0MjM1MCwgMTM4NTAyNDMsIC0yMzY3ODAyMSwgLTE1ODE1OTQyKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSg1MTUzNzQ2LCA5OTA5Mjg1LCAxNzIzNzQ3LCAtMjc3Nzg3NCwgMzA1MjM2MDUsIDU1MTY4NzMsIDE5NDgwODUyLCA1MjMwMTM0LCAtMjM5NTI0MzksIC0xNTE3NTc2NiksCiAgICAgICAgICAgIGFycmF5KC0zMDI2OTAwNywgLTM0NjM1MDksIDc2NjU0ODYsIDEwMDgzNzkzLCAyODQ3NTUyNSwgMTY0OTcyMiwgMjA2NTQwMjUsIDE2NTIwMTI1LCAzMDU5ODQ0OSwgNzcxNTcwMSksCiAgICAgICAgICAgIGFycmF5KDI4ODgxODQ1LCAxNDM4MTU2OCwgOTY1NzkwNCwgMzY4MDc1NywgLTIwMTgxNjM1LCA3ODQzMzE2LCAtMzE0MDA2NjAsIDEzNzA3MDgsIDI5Nzk0NTUzLCAtMTQwOTMwMCksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoLTIyNTE4OTkzLCAtNjY5MjE4MiwgMTQyMDE3MDIsIC04NzQ1NTAyLCAtMjM1MTA0MDYsIDg4NDQ3MjYsIDE4NDc0MjExLCAtMTM2MTQ1MCwgLTEzMDYyNjk2LCAxMzgyMTg3NyksCiAgICAgICAgICAgIGFycmF5KC02NDU1MTc3LCAtNzgzOTg3MSwgMzM3NDcwMiwgLTQ3NDA4NjIsIC0yNzA5ODYxNywgLTEwNTcxNzA3LCAzMTY1NTAyOCwgLTcyMTIzMjcsIDE4ODUzMzIyLCAtMTQyMjA5NTEpLAogICAgICAgICAgICBhcnJheSg0NTY2ODMwLCAtMTI5NjM4NjgsIC0yODk3NDg4OSwgLTEyMjQwNjg5LCAtNzYwMjY3MiwgLTI4MzA1NjksIC04NTE0MzU4LCAtMTA0MzExMzcsIDIyMDc3NTMsIC0zMjA5Nzg0KSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgtMjUxNTQ4MzEsIC00MTg1ODIxLCAyOTY4MTE0NCwgNzg2ODgwMSwgLTY4NTQ2NjEsIC05NDIzODY1LCAtMTI0MzczNjQsIC02NjMwMDAsIC0zMTExMTQ2MywgLTE2MTMyNDM2KSwKICAgICAgICAgICAgYXJyYXkoMjU1NzYyNjQsIC0yNzAzMjE0LCA3MzQ5ODA0LCAtMTE4MTQ4NDQsIDE2NDcyNzgyLCA5MzAwODg1LCAzODQ0Nzg5LCAxNTcyNTY4NCwgMTcxMzU2LCA2NDY2OTE4KSwKICAgICAgICAgICAgYXJyYXkoMjMxMDM5NzcsIDEzMzE2NDc5LCA5NzM5MDEzLCAtMTYxNDk0ODEsIDgxNzg3NSwgLTE1MDM4OTQyLCA4OTY1MzM5LCAtMTQwODgwNTgsIC0zMDcxNDkxMiwgMTYxOTM4NzcpLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KC0zMzUyMTgxMSwgMzE4MDcxMywgLTIzOTQxMzAsIDE0MDAzNjg3LCAtMTY5MDM0NzQsIC0xNjI3MDg0MCwgMTcyMzgzOTgsIDQ3Mjk0NTUsIC0xODA3NDUxMywgOTI1NjgwMCksCiAgICAgICAgICAgIGFycmF5KC0yNTE4MjMxNywgLTQxNzQxMzEsIDMyMzM2Mzk4LCA1MDM2OTg3LCAtMjEyMzY4MTcsIDExMzYwNjE3LCAyMjYxNjQwNSwgOTc2MTY5OCwgLTE5ODI3MTk4LCA2MzAzMDUpLAogICAgICAgICAgICBhcnJheSgtMTM3MjA2OTMsIDI2Mzk0NTMsIC0yNDIzNzQ2MCwgLTc0MDY0ODEsIDk0OTQ0MjcsIC01Nzc0MDI5LCAtNjU1NDU1MSwgLTE1OTYwOTk0LCAtMjQ0OTI1NiwgLTE0MjkxMzAwKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgtMzE1MTE4MSwgLTUwNDYwNzUsIDkyODI3MTQsIDY4NjYxNDUsIC0zMTkwNzA2MiwgLTg2MzAyMywgLTE4OTQwNTc1LCAxNTAzMzc4NCwgMjUxMDUxMTgsIC03ODk0ODc2KSwKICAgICAgICAgICAgYXJyYXkoLTI0MzI2MzcwLCAxNTk1MDIyNiwgLTMxODAxMjE1LCAtMTQ1OTI4MjMsIC0xMTY2MjczNywgLTUwOTA5MjUsIDE1NzM4OTIsIC0yNjI1ODg3LCAyMTk4NzkwLCAtMTU4MDQ2MTkpLAogICAgICAgICAgICBhcnJheSgtMzA5OTM1MSwgMTAzMjQ5NjcsIC0yMjQxNjEzLCA3NDUzMTgzLCAtNTQ0Njk3OSwgLTI3MzU1MDMsIC0xMzgxMjAyMiwgLTE2MjM2NDQyLCAtMzI0NjEyMzQsIC0xMjI5MDY4MyksCiAgICAgICAgKQogICAgKTsKCiAgICAvKioKICAgICAqIDM3MDk1NzA1OTM0NjY5NDM5MzQzMTM4MDgzNTA4NzU0NTY1MTg5NTQyMTEzODc5ODQzMjE5MDE2Mzg4Nzg1NTMzMDg1OTQwMjgzNTU1CiAgICAgKgogICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkZCA9IGFycmF5KAogICAgICAgIC0xMDkxMzYxMCwKICAgICAgICAxMzg1NzQxMywKICAgICAgICAtMTUzNzI2MTEsCiAgICAgICAgNjk0OTM5MSwKICAgICAgICAxMTQ3MjksCiAgICAgICAgLTg3ODc4MTYsCiAgICAgICAgLTYyNzU5MDgsCiAgICAgICAgLTMyNDc3MTksCiAgICAgICAgLTE4Njk2NDQ4LAogICAgICAgIC0xMjA1NTExNgogICAgKTsKCiAgICAvKioKICAgICAqIDIgKiBkID0gMTYyOTUzNjcyNTA2ODA3ODA5NzQ0OTA2NzQ1MTMxNjUxNzY0NTI0NDkyMzU0MjY4NjYxNTYwMTMwNDg3NzkwNjIyMTUzMTU3NDcxNjEKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRkMiA9IGFycmF5KAogICAgICAgIC0yMTgyNzIzOSwKICAgICAgICAtNTgzOTYwNiwKICAgICAgICAtMzA3NDUyMjEsCiAgICAgICAgMTM4OTg3ODIsCiAgICAgICAgMjI5NDU4LAogICAgICAgIDE1OTc4ODAwLAogICAgICAgIC0xMjU1MTgxNywKICAgICAgICAtNjQ5NTQzOCwKICAgICAgICAyOTcxNTk2OCwKICAgICAgICA5NDQ0MTk5CiAgICApOwoKICAgIC8qKgogICAgICogc3FydCgtMSkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRzcXJ0bTEgPSBhcnJheSgKICAgICAgICAtMzI1OTU3OTIsCiAgICAgICAgLTc5NDM3MjUsCiAgICAgICAgOTM3Nzk1MCwKICAgICAgICAzNTAwNDE1LAogICAgICAgIDEyMzg5NDcyLAogICAgICAgIC0yNzI0NzMsCiAgICAgICAgLTI1MTQ2MjA5LAogICAgICAgIC0yMDA1NjU0LAogICAgICAgIDMyNjY4NiwKICAgICAgICAxMTQwNjQ4MgogICAgKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Curve25519/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDdXJ2ZTI1NTE5IERhdGEgU3RydWN0dXJlcwoKVGhlc2UgYXJlIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW3N0cnVjdHMgdXNlZCBpbiB0aGUgcmVmMTAgY3VydmUyNTUxOSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vamVkaXNjdDEvbGlic29kaXVtL2Jsb2IvbWFzdGVyL3NyYy9saWJzb2RpdW0vaW5jbHVkZS9zb2RpdW0vcHJpdmF0ZS9jdXJ2ZTI1NTE5X3JlZjEwLmgpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Ed25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5JywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOQogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTkgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOQp7CiAgICBjb25zdCBLRVlQQUlSX0JZVEVTID0gOTY7CiAgICBjb25zdCBTRUVEX0JZVEVTID0gMzI7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgKDk2IGJ5dGVzKQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGtleXBhaXIoKQogICAgewogICAgICAgICRzZWVkID0gcmFuZG9tX2J5dGVzKHNlbGY6OlNFRURfQllURVMpOwogICAgICAgICRwayA9ICcnOwogICAgICAgICRzayA9ICcnOwogICAgICAgIHNlbGY6OnNlZWRfa2V5cGFpcigkcGssICRzaywgJHNlZWQpOwogICAgICAgIHJldHVybiAkc2sgLiAkcGs7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VlZF9rZXlwYWlyKCYkcGssICYkc2ssICRzZWVkKQogICAgewogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJHNlZWQpICE9PSBzZWxmOjpTRUVEX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignY3J5cHRvX3NpZ24ga2V5cGFpciBzZWVkIG11c3QgYmUgMzIgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRwayAqLwogICAgICAgICRwayA9IHNlbGY6OnB1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2VlZCk7CiAgICAgICAgJHNrID0gJHNlZWQgLiAkcGs7CiAgICAgICAgcmV0dXJuICRzazsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5cGFpcikgIT09IHNlbGY6OktFWVBBSVJfQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdjcnlwdG9fc2lnbiBrZXlwYWlyIG11c3QgYmUgOTYgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6c3Vic3RyKCRrZXlwYWlyLCAwLCA2NCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHVibGlja2V5KCRrZXlwYWlyKQogICAgewogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJGtleXBhaXIpICE9PSBzZWxmOjpLRVlQQUlSX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignY3J5cHRvX3NpZ24ga2V5cGFpciBtdXN0IGJlIDk2IGJ5dGVzIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OnN1YnN0cigka2V5cGFpciwgNjQsIDMyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHB1YmxpY2tleV9mcm9tX3NlY3JldGtleSgkc2spCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzayAqLwogICAgICAgICRzayA9IGhhc2goJ3NoYTUxMicsIHNlbGY6OnN1YnN0cigkc2ssIDAsIDMyKSwgdHJ1ZSk7CiAgICAgICAgJHNrWzBdID0gc2VsZjo6aW50VG9DaHIoCiAgICAgICAgICAgIHNlbGY6OmNoclRvSW50KCRza1swXSkgJiAyNDgKICAgICAgICApOwogICAgICAgICRza1szMV0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgKHNlbGY6OmNoclRvSW50KCRza1szMV0pICYgNjMpIHwgNjQKICAgICAgICApOwogICAgICAgIHJldHVybiBzZWxmOjpza190b19waygkc2spOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwa190b19jdXJ2ZTI1NTE5KCRwaykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c21hbGxfb3JkZXIoJHBrKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdQdWJsaWMga2V5IGlzIG9uIGEgc21hbGwgb3JkZXInKTsKICAgICAgICB9CiAgICAgICAgJEEgPSBzZWxmOjpnZV9mcm9tYnl0ZXNfbmVnYXRlX3ZhcnRpbWUoc2VsZjo6c3Vic3RyKCRwaywgMCwgMzIpKTsKICAgICAgICAkcDEgPSBzZWxmOjpnZV9tdWxfbCgkQSk7CiAgICAgICAgaWYgKCFzZWxmOjpmZV9pc25vbnplcm8oJHAxLT5YKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdVbmV4cGVjdGVkIHplcm8gcmVzdWx0Jyk7CiAgICAgICAgfQoKICAgICAgICAjIGZlXzEob25lX21pbnVzX3kpOwogICAgICAgICMgZmVfc3ViKG9uZV9taW51c195LCBvbmVfbWludXNfeSwgQS5ZKTsKICAgICAgICAjIGZlX2ludmVydChvbmVfbWludXNfeSwgb25lX21pbnVzX3kpOwogICAgICAgICRvbmVfbWludXhfeSA9IHNlbGY6OmZlX2ludmVydCgKICAgICAgICAgICAgc2VsZjo6ZmVfc3ViKAogICAgICAgICAgICAgICAgc2VsZjo6ZmVfMSgpLAogICAgICAgICAgICAgICAgJEEtPlkKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgICMgZmVfMSh4KTsKICAgICAgICAjIGZlX2FkZCh4LCB4LCBBLlkpOwogICAgICAgICMgZmVfbXVsKHgsIHgsIG9uZV9taW51c195KTsKICAgICAgICAkeCA9IHNlbGY6OmZlX211bCgKICAgICAgICAgICAgc2VsZjo6ZmVfYWRkKHNlbGY6OmZlXzEoKSwgJEEtPlkpLAogICAgICAgICAgICAkb25lX21pbnV4X3kKICAgICAgICApOwoKICAgICAgICAjIGZlX3RvYnl0ZXMoY3VydmUyNTUxOV9waywgeCk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZlX3RvYnl0ZXMoJHgpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2tfdG9fcGsoJHNrKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZV9wM190b2J5dGVzKAogICAgICAgICAgICBzZWxmOjpnZV9zY2FsYXJtdWx0X2Jhc2UoCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJHNrLCAwLCAzMikKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKCRtZXNzYWdlLCAkc2spCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzaWduYXR1cmUgKi8KICAgICAgICAkc2lnbmF0dXJlID0gc2VsZjo6c2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKTsKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZSAuICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgQSBzaWduZWQgbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsgICAgICBQdWJsaWMga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgIE1lc3NhZ2UgKHdpdGhvdXQgc2lnbmF0dXJlKQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbl9vcGVuKCRtZXNzYWdlLCAkcGspCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzaWduYXR1cmUgKi8KICAgICAgICAkc2lnbmF0dXJlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAwLCA2NCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbWVzc2FnZSAqLwogICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2NCk7CgogICAgICAgIGlmIChzZWxmOjp2ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1lc3NhZ2UsICRwaykpIHsKICAgICAgICAgICAgcmV0dXJuICRtZXNzYWdlOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKQogICAgewogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyKGF6LCBzaywgMzIpOwogICAgICAgICRheiA9ICBoYXNoKCdzaGE1MTInLCBzZWxmOjpzdWJzdHIoJHNrLCAwLCAzMiksIHRydWUpOwoKICAgICAgICAjIGF6WzBdICY9IDI0ODsKICAgICAgICAjIGF6WzMxXSAmPSA2MzsKICAgICAgICAjIGF6WzMxXSB8PSA2NDsKICAgICAgICAkYXpbMF0gPSBzZWxmOjppbnRUb0NocihzZWxmOjpjaHJUb0ludCgkYXpbMF0pICYgMjQ4KTsKICAgICAgICAkYXpbMzFdID0gc2VsZjo6aW50VG9DaHIoKHNlbGY6OmNoclRvSW50KCRhelszMV0pICYgNjMpIHwgNjQpOwoKICAgICAgICAjIGNyeXB0b19oYXNoX3NoYTUxMl9pbml0KCZocyk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgYXogKyAzMiwgMzIpOwogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyX3VwZGF0ZSgmaHMsIG0sIG1sZW4pOwogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyX2ZpbmFsKCZocywgbm9uY2UpOwogICAgICAgICRocyA9IGhhc2hfaW5pdCgnc2hhNTEyJyk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJGF6LCAzMiwgMzIpKTsKICAgICAgICBoYXNoX3VwZGF0ZSgkaHMsICRtZXNzYWdlKTsKICAgICAgICAkbm9uY2VIYXNoID0gaGFzaF9maW5hbCgkaHMsIHRydWUpOwoKICAgICAgICAjIG1lbW1vdmUoc2lnICsgMzIsIHNrICsgMzIsIDMyKTsKICAgICAgICAkcGsgPSBzZWxmOjpzdWJzdHIoJHNrLCAzMiwgMzIpOwoKICAgICAgICAjIHNjX3JlZHVjZShub25jZSk7CiAgICAgICAgIyBnZV9zY2FsYXJtdWx0X2Jhc2UoJlIsIG5vbmNlKTsKICAgICAgICAjIGdlX3AzX3RvYnl0ZXMoc2lnLCAmUik7CiAgICAgICAgJG5vbmNlID0gc2VsZjo6c2NfcmVkdWNlKCRub25jZUhhc2gpIC4gc2VsZjo6c3Vic3RyKCRub25jZUhhc2gsIDMyKTsKICAgICAgICAkc2lnID0gc2VsZjo6Z2VfcDNfdG9ieXRlcygKICAgICAgICAgICAgc2VsZjo6Z2Vfc2NhbGFybXVsdF9iYXNlKCRub25jZSkKICAgICAgICApOwoKICAgICAgICAjIGNyeXB0b19oYXNoX3NoYTUxMl9pbml0KCZocyk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgc2lnLCA2NCk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgbSwgbWxlbik7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfZmluYWwoJmhzLCBocmFtKTsKICAgICAgICAkaHMgPSBoYXNoX2luaXQoJ3NoYTUxMicpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJHBrLCAwLCAzMikpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgJG1lc3NhZ2UpOwogICAgICAgICRocmFtSGFzaCA9IGhhc2hfZmluYWwoJGhzLCB0cnVlKTsKCiAgICAgICAgIyBzY19yZWR1Y2UoaHJhbSk7CiAgICAgICAgIyBzY19tdWxhZGQoc2lnICsgMzIsIGhyYW0sIGF6LCBub25jZSk7CiAgICAgICAgJGhyYW0gPSBzZWxmOjpzY19yZWR1Y2UoJGhyYW1IYXNoKTsKICAgICAgICAkc2lnQWZ0ZXIgPSBzZWxmOjpzY19tdWxhZGQoJGhyYW0sICRheiwgJG5vbmNlKTsKICAgICAgICAkc2lnID0gc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSAuIHNlbGY6OnN1YnN0cigkc2lnQWZ0ZXIsIDAsIDMyKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGF6KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRheiA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZwogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyaWZ5X2RldGFjaGVkKCRzaWcsICRtZXNzYWdlLCAkcGspCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc2lnKSA8IDY0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1NpZ25hdHVyZSBpcyB0b28gc2hvcnQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OmNoZWNrX1NfbHRfTChzZWxmOjpzdWJzdHIoJHNpZywgMzIsIDMyKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignUyA8IEwgLSBJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c21hbGxfb3JkZXIoJHNpZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignU2lnbmF0dXJlIGlzIG9uIHRvbyBzbWFsbCBvZiBhbiBvcmRlcicpOwogICAgICAgIH0KICAgICAgICBpZiAoKHNlbGY6OmNoclRvSW50KCRzaWdbNjNdKSAmIDIyNCkgIT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignSW52YWxpZCBzaWduYXR1cmUnKTsKICAgICAgICB9CiAgICAgICAgJGQgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDMyOyArKyRpKSB7CiAgICAgICAgICAgICRkIHw9IHNlbGY6OmNoclRvSW50KCRwa1skaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoJGQgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQWxsIHplcm8gcHVibGljIGtleScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYm9vbCBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCAqLwogICAgICAgICRvcmlnID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdDsKCiAgICAgICAgLy8gU2V0IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgdG8gdHJ1ZSB0byBzcGVlZCB1cCB2ZXJpZmljYXRpb24uCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCA9IHRydWU7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRBICovCiAgICAgICAgJEEgPSBzZWxmOjpnZV9mcm9tYnl0ZXNfbmVnYXRlX3ZhcnRpbWUoJHBrKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRoRGlnZXN0ICovCiAgICAgICAgJGhEaWdlc3QgPSBoYXNoKAogICAgICAgICAgICAnc2hhNTEyJywKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSAuCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJHBrLCAwLCAzMikgLgogICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgIHRydWUKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGggKi8KICAgICAgICAkaCA9IHNlbGY6OnNjX3JlZHVjZSgkaERpZ2VzdCkgLiBzZWxmOjpzdWJzdHIoJGhEaWdlc3QsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfR2VfUDIgJFIgKi8KICAgICAgICAkUiA9IHNlbGY6OmdlX2RvdWJsZV9zY2FsYXJtdWx0X3ZhcnRpbWUoCiAgICAgICAgICAgICRoLAogICAgICAgICAgICAkQSwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRzaWcsIDMyKQogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmNoZWNrICovCiAgICAgICAgJHJjaGVjayA9IHNlbGY6OmdlX3RvYnl0ZXMoJFIpOwoKICAgICAgICAvLyBSZXNldCBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZS4KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0ID0gJG9yaWc7CgogICAgICAgIHJldHVybiBzZWxmOjp2ZXJpZnlfMzIoJHJjaGVjaywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkUwogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja19TX2x0X0woJFMpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkUykgPCAzMikgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdTaWduYXR1cmUgbXVzdCBiZSAzMiBieXRlcycpOwogICAgICAgIH0KICAgICAgICAkTCA9IGFycmF5KAogICAgICAgICAgICAweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LAogICAgICAgICAgICAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LAogICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwCiAgICAgICAgKTsKICAgICAgICAkYyA9IDA7CiAgICAgICAgJG4gPSAxOwogICAgICAgICRpID0gMzI7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkTCAqLwogICAgICAgIGRvIHsKICAgICAgICAgICAgLS0kaTsKICAgICAgICAgICAgJHggPSBzZWxmOjpjaHJUb0ludCgkU1skaV0pOwogICAgICAgICAgICAkYyB8PSAoCiAgICAgICAgICAgICAgICAoKCR4IC0gJExbJGldKSA+PiA4KSAmICRuCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRuICY9ICgKICAgICAgICAgICAgICAgICgoJHggXiAkTFskaV0pIC0gMSkgPj4gOAogICAgICAgICAgICApOwogICAgICAgIH0gd2hpbGUgKCRpICE9PSAwKTsKCiAgICAgICAgcmV0dXJuICRjID09PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkUgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzbWFsbF9vcmRlcigkUikKICAgIHsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGFycmF5PGludCwgaW50Pj4gJGJsYWNrbGlzdCAqLwogICAgICAgICRibGFja2xpc3QgPSBhcnJheSgKICAgICAgICAgICAgLyogMCAob3JkZXIgNCkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIDEgKG9yZGVyIDEpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAogICAgICAgICAgICApLAogICAgICAgICAgICAvKiAyNzA3Mzg1NTAxMTQ0ODQwNjQ5MzE4MjI1Mjg3MjI1NjU4Nzg4OTM2ODA0MjY3NTc1MzEzNTE5NDYzNzQzNjA5NzUwMzAzNDAyMDIyIChvcmRlciA4KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4MjYsIDB4ZTgsIDB4OTUsIDB4OGYsIDB4YzIsIDB4YjIsIDB4MjcsIDB4YjAsCiAgICAgICAgICAgICAgICAweDQ1LCAweGMzLCAweGY0LCAweDg5LCAweGYyLCAweGVmLCAweDk4LCAweGYwLAogICAgICAgICAgICAgICAgMHhkNSwgMHhkZiwgMHhhYywgMHgwNSwgMHhkMywgMHhjNiwgMHgzMywgMHgzOSwKICAgICAgICAgICAgICAgIDB4YjEsIDB4MzgsIDB4MDIsIDB4ODgsIDB4NmQsIDB4NTMsIDB4ZmMsIDB4MDUKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogNTUxODg2NTkxMTc1MTMyNTcwNjI0NjcyNjcyMTcxMTgyOTUxMzc2OTgxODgwNjUyNDQ5Njg1MDAyNjUwNDgzOTQyMDYyNjE0MTc5MjcgKG9yZGVyIDgpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhjNywgMHgxNywgMHg2YSwgMHg3MCwgMHgzZCwgMHg0ZCwgMHhkOCwgMHg0ZiwKICAgICAgICAgICAgICAgIDB4YmEsIDB4M2MsIDB4MGIsIDB4NzYsIDB4MGQsIDB4MTAsIDB4NjcsIDB4MGYsCiAgICAgICAgICAgICAgICAweDJhLCAweDIwLCAweDUzLCAweGZhLCAweDJjLCAweDM5LCAweGNjLCAweGM2LAogICAgICAgICAgICAgICAgMHg0ZSwgMHhjNywgMHhmZCwgMHg3NywgMHg5MiwgMHhhYywgMHgwMywgMHg3YQogICAgICAgICAgICApLAogICAgICAgICAgICAvKiBwLTEgKG9yZGVyIDIpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHgxMywgMHhlOCwgMHg5NSwgMHg4ZiwgMHhjMiwgMHhiMiwgMHgyNywgMHhiMCwKICAgICAgICAgICAgICAgIDB4NDUsIDB4YzMsIDB4ZjQsIDB4ODksIDB4ZjIsIDB4ZWYsIDB4OTgsIDB4ZjAsCiAgICAgICAgICAgICAgICAweGQ1LCAweGRmLCAweGFjLCAweDA1LCAweGQzLCAweGM2LCAweDMzLCAweDM5LAogICAgICAgICAgICAgICAgMHhiMSwgMHgzOCwgMHgwMiwgMHg4OCwgMHg2ZCwgMHg1MywgMHhmYywgMHg4NQogICAgICAgICAgICApLAogICAgICAgICAgICAvKiBwIChvcmRlciA0KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4YjQsIDB4MTcsIDB4NmEsIDB4NzAsIDB4M2QsIDB4NGQsIDB4ZDgsIDB4NGYsCiAgICAgICAgICAgICAgICAweGJhLCAweDNjLCAweDBiLCAweDc2LCAweDBkLCAweDEwLCAweDY3LCAweDBmLAogICAgICAgICAgICAgICAgMHgyYSwgMHgyMCwgMHg1MywgMHhmYSwgMHgyYywgMHgzOSwgMHhjYywgMHhjNiwKICAgICAgICAgICAgICAgIDB4NGUsIDB4YzcsIDB4ZmQsIDB4NzcsIDB4OTIsIDB4YWMsIDB4MDMsIDB4ZmEKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogcCsxIChvcmRlciAxKSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4ZWMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogcCsyNzA3Mzg1NTAxMTQ0ODQwNjQ5MzE4MjI1Mjg3MjI1NjU4Nzg4OTM2ODA0MjY3NTc1MzEzNTE5NDYzNzQzNjA5NzUwMzAzNDAyMDIyIChvcmRlciA4KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4ZWQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogcCs1NTE4ODY1OTExNzUxMzI1NzA2MjQ2NzI2NzIxNzExODI5NTEzNzY5ODE4ODA2NTI0NDk2ODUwMDI2NTA0ODM5NDIwNjI2MTQxNzkyNyAob3JkZXIgOCkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweGVlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIDJwLTEgKG9yZGVyIDIpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhkOSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgogICAgICAgICAgICApLAogICAgICAgICAgICAvKiAycCAob3JkZXIgNCkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweGRhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIDJwKzEgKG9yZGVyIDEpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhkYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAvKiogQHZhciBpbnQgJGNvdW50QmxhY2tsaXN0ICovCiAgICAgICAgJGNvdW50QmxhY2tsaXN0ID0gY291bnQoJGJsYWNrbGlzdCk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudEJsYWNrbGlzdDsgKyskaSkgewogICAgICAgICAgICAkYyA9IDA7CiAgICAgICAgICAgIGZvciAoJGogPSAwOyAkaiA8IDMyOyArKyRqKSB7CiAgICAgICAgICAgICAgICAkYyB8PSBzZWxmOjpjaHJUb0ludCgkUlskal0pIF4gKGludCkgJGJsYWNrbGlzdFskaV1bJGpdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/HChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9IQ2hhQ2hhMjAnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IQ2hhQ2hhMjAKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IQ2hhQ2hhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjAKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhDaGFDaGEyMCgkaW4gPSAnJywgJGtleSA9ICcnLCAkYyA9IG51bGwpCiAgICB7CiAgICAgICAgJGN0eCA9IGFycmF5KCk7CgogICAgICAgIGlmICgkYyA9PT0gbnVsbCkgewogICAgICAgICAgICAkY3R4WzBdID0gMHg2MTcwNzg2NTsKICAgICAgICAgICAgJGN0eFsxXSA9IDB4MzMyMDY0NmU7CiAgICAgICAgICAgICRjdHhbMl0gPSAweDc5NjIyZDMyOwogICAgICAgICAgICAkY3R4WzNdID0gMHg2YjIwNjU3NDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R4WzBdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgIDAsIDQpKTsKICAgICAgICAgICAgJGN0eFsxXSA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsICA0LCA0KSk7CiAgICAgICAgICAgICRjdHhbMl0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRjLCAgOCwgNCkpOwogICAgICAgICAgICAkY3R4WzNdID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMTIsIDQpKTsKICAgICAgICB9CiAgICAgICAgJGN0eFs0XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksICAwLCA0KSk7CiAgICAgICAgJGN0eFs1XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksICA0LCA0KSk7CiAgICAgICAgJGN0eFs2XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksICA4LCA0KSk7CiAgICAgICAgJGN0eFs3XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDEyLCA0KSk7CiAgICAgICAgJGN0eFs4XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDE2LCA0KSk7CiAgICAgICAgJGN0eFs5XSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDIwLCA0KSk7CiAgICAgICAgJGN0eFsxMF0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDI0LCA0KSk7CiAgICAgICAgJGN0eFsxMV0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDI4LCA0KSk7CiAgICAgICAgJGN0eFsxMl0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpbiwgICAwLCA0KSk7CiAgICAgICAgJGN0eFsxM10gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpbiwgICA0LCA0KSk7CiAgICAgICAgJGN0eFsxNF0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpbiwgICA4LCA0KSk7CiAgICAgICAgJGN0eFsxNV0gPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpbiwgIDEyLCA0KSk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmhDaGFDaGEyMEJ5dGVzKCRjdHgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRjdHgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGhDaGFDaGEyMEJ5dGVzKGFycmF5ICRjdHgpCiAgICB7CiAgICAgICAgJHgwICA9IChpbnQpICRjdHhbMF07CiAgICAgICAgJHgxICA9IChpbnQpICRjdHhbMV07CiAgICAgICAgJHgyICA9IChpbnQpICRjdHhbMl07CiAgICAgICAgJHgzICA9IChpbnQpICRjdHhbM107CiAgICAgICAgJHg0ICA9IChpbnQpICRjdHhbNF07CiAgICAgICAgJHg1ICA9IChpbnQpICRjdHhbNV07CiAgICAgICAgJHg2ICA9IChpbnQpICRjdHhbNl07CiAgICAgICAgJHg3ICA9IChpbnQpICRjdHhbN107CiAgICAgICAgJHg4ICA9IChpbnQpICRjdHhbOF07CiAgICAgICAgJHg5ICA9IChpbnQpICRjdHhbOV07CiAgICAgICAgJHgxMCA9IChpbnQpICRjdHhbMTBdOwogICAgICAgICR4MTEgPSAoaW50KSAkY3R4WzExXTsKICAgICAgICAkeDEyID0gKGludCkgJGN0eFsxMl07CiAgICAgICAgJHgxMyA9IChpbnQpICRjdHhbMTNdOwogICAgICAgICR4MTQgPSAoaW50KSAkY3R4WzE0XTsKICAgICAgICAkeDE1ID0gKGludCkgJGN0eFsxNV07CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MCwgIHg0LCAgeDgsICB4MTIpCiAgICAgICAgICAgIGxpc3QoJHgwLCAkeDQsICR4OCwgJHgxMikgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgwLCAkeDQsICR4OCwgJHgxMik7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDEsICB4NSwgIHg5LCAgeDEzKQogICAgICAgICAgICBsaXN0KCR4MSwgJHg1LCAkeDksICR4MTMpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg1LCAkeDksICR4MTMpOwoKICAgICAgICAgICAgIyBRVUFSVEVSUk9VTkQoIHgyLCAgeDYsICB4MTAsICB4MTQpCiAgICAgICAgICAgIGxpc3QoJHgyLCAkeDYsICR4MTAsICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MiwgJHg2LCAkeDEwLCAkeDE0KTsKCiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MywgIHg3LCAgeDExLCAgeDE1KQogICAgICAgICAgICBsaXN0KCR4MywgJHg3LCAkeDExLCAkeDE1KSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDMsICR4NywgJHgxMSwgJHgxNSk7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDAsICB4NSwgIHgxMCwgIHgxNSkKICAgICAgICAgICAgbGlzdCgkeDAsICR4NSwgJHgxMCwgJHgxNSkgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgwLCAkeDUsICR4MTAsICR4MTUpOwoKICAgICAgICAgICAgIyBRVUFSVEVSUk9VTkQoIHgxLCAgeDYsICB4MTEsICB4MTIpCiAgICAgICAgICAgIGxpc3QoJHgxLCAkeDYsICR4MTEsICR4MTIpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg2LCAkeDExLCAkeDEyKTsKCiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MiwgIHg3LCAgeDgsICB4MTMpCiAgICAgICAgICAgIGxpc3QoJHgyLCAkeDcsICR4OCwgJHgxMykgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgyLCAkeDcsICR4OCwgJHgxMyk7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDMsICB4NCwgIHg5LCAgeDE0KQogICAgICAgICAgICBsaXN0KCR4MywgJHg0LCAkeDksICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MywgJHg0LCAkeDksICR4MTQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MCAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKChpbnQpICgkeDEgICYgMHhmZmZmZmZmZikpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgoaW50KSAoJHgyICAmIDB4ZmZmZmZmZmYpKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MyAgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKChpbnQpICgkeDEyICYgMHhmZmZmZmZmZikpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgoaW50KSAoJHgxMyAmIDB4ZmZmZmZmZmYpKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoKGludCkgKCR4MTQgJiAweGZmZmZmZmZmKSkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKChpbnQpICgkeDE1ICYgMHhmZmZmZmZmZikpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/HSalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9IU2Fsc2EyMCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0hTYWxzYTIwCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfSFNhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMAp7CiAgICAvKioKICAgICAqIENhbGN1bGF0ZSBhbiBoc2Fsc2EyMCBoYXNoIG9mIGEgc2luZ2xlIGJsb2NrCiAgICAgKgogICAgICogSFNhbHNhMjAgZG9lc24ndCBoYXZlIGEgY291bnRlciBhbmQgd2lsbCBuZXZlciBiZSB1c2VkIGZvciBtb3JlIHRoYW4KICAgICAqIG9uZSBibG9jayAodXNlZCB0byBkZXJpdmUgYSBzdWJrZXkgZm9yIHhzYWxzYTIwKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGsKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaHNhbHNhMjAoJGluLCAkaywgJGMgPSBudWxsKQogICAgewogICAgICAgIGlmICgkYyA9PT0gbnVsbCkgewogICAgICAgICAgICAkeDAgID0gMHg2MTcwNzg2NTsKICAgICAgICAgICAgJHg1ICA9IDB4MzMyMDY0NmU7CiAgICAgICAgICAgICR4MTAgPSAweDc5NjIyZDMyOwogICAgICAgICAgICAkeDE1ID0gMHg2YjIwNjU3NDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkeDAgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMCwgNCkpOwogICAgICAgICAgICAkeDUgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgNCwgNCkpOwogICAgICAgICAgICAkeDEwID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgOCwgNCkpOwogICAgICAgICAgICAkeDE1ID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMTIsIDQpKTsKICAgICAgICB9CiAgICAgICAgJHgxICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDAsIDQpKTsKICAgICAgICAkeDIgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaywgNCwgNCkpOwogICAgICAgICR4MyAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCA4LCA0KSk7CiAgICAgICAgJHg0ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDEyLCA0KSk7CiAgICAgICAgJHgxMSA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDE2LCA0KSk7CiAgICAgICAgJHgxMiA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDIwLCA0KSk7CiAgICAgICAgJHgxMyA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDI0LCA0KSk7CiAgICAgICAgJHgxNCA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDI4LCA0KSk7CiAgICAgICAgJHg2ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCAwLCA0KSk7CiAgICAgICAgJHg3ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCA0LCA0KSk7CiAgICAgICAgJHg4ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCA4LCA0KSk7CiAgICAgICAgJHg5ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCAxMiwgNCkpOwoKICAgICAgICBmb3IgKCRpID0gc2VsZjo6Uk9VTkRTOyAkaSA+IDA7ICRpIC09IDIpIHsKICAgICAgICAgICAgJHg0IF49IHNlbGY6OnJvdGF0ZSgkeDAgKyAkeDEyLCA3KTsKICAgICAgICAgICAgJHg4IF49IHNlbGY6OnJvdGF0ZSgkeDQgKyAkeDAsIDkpOwogICAgICAgICAgICAkeDEyIF49IHNlbGY6OnJvdGF0ZSgkeDggKyAkeDQsIDEzKTsKICAgICAgICAgICAgJHgwIF49IHNlbGY6OnJvdGF0ZSgkeDEyICsgJHg4LCAxOCk7CiAgICAgICAgICAgICR4OSBePSBzZWxmOjpyb3RhdGUoJHg1ICsgJHgxLCA3KTsKICAgICAgICAgICAgJHgxMyBePSBzZWxmOjpyb3RhdGUoJHg5ICsgJHg1LCA5KTsKICAgICAgICAgICAgJHgxIF49IHNlbGY6OnJvdGF0ZSgkeDEzICsgJHg5LCAxMyk7CiAgICAgICAgICAgICR4NSBePSBzZWxmOjpyb3RhdGUoJHgxICsgJHgxMywgMTgpOwogICAgICAgICAgICAkeDE0IF49IHNlbGY6OnJvdGF0ZSgkeDEwICsgJHg2LCA3KTsKICAgICAgICAgICAgJHgyIF49IHNlbGY6OnJvdGF0ZSgkeDE0ICsgJHgxMCwgOSk7CiAgICAgICAgICAgICR4NiBePSBzZWxmOjpyb3RhdGUoJHgyICsgJHgxNCwgMTMpOwogICAgICAgICAgICAkeDEwIF49IHNlbGY6OnJvdGF0ZSgkeDYgKyAkeDIsIDE4KTsKICAgICAgICAgICAgJHgzIF49IHNlbGY6OnJvdGF0ZSgkeDE1ICsgJHgxMSwgNyk7CiAgICAgICAgICAgICR4NyBePSBzZWxmOjpyb3RhdGUoJHgzICsgJHgxNSwgOSk7CiAgICAgICAgICAgICR4MTEgXj0gc2VsZjo6cm90YXRlKCR4NyArICR4MywgMTMpOwogICAgICAgICAgICAkeDE1IF49IHNlbGY6OnJvdGF0ZSgkeDExICsgJHg3LCAxOCk7CiAgICAgICAgICAgICR4MSBePSBzZWxmOjpyb3RhdGUoJHgwICsgJHgzLCA3KTsKICAgICAgICAgICAgJHgyIF49IHNlbGY6OnJvdGF0ZSgkeDEgKyAkeDAsIDkpOwogICAgICAgICAgICAkeDMgXj0gc2VsZjo6cm90YXRlKCR4MiArICR4MSwgMTMpOwogICAgICAgICAgICAkeDAgXj0gc2VsZjo6cm90YXRlKCR4MyArICR4MiwgMTgpOwogICAgICAgICAgICAkeDYgXj0gc2VsZjo6cm90YXRlKCR4NSArICR4NCwgNyk7CiAgICAgICAgICAgICR4NyBePSBzZWxmOjpyb3RhdGUoJHg2ICsgJHg1LCA5KTsKICAgICAgICAgICAgJHg0IF49IHNlbGY6OnJvdGF0ZSgkeDcgKyAkeDYsIDEzKTsKICAgICAgICAgICAgJHg1IF49IHNlbGY6OnJvdGF0ZSgkeDQgKyAkeDcsIDE4KTsKICAgICAgICAgICAgJHgxMSBePSBzZWxmOjpyb3RhdGUoJHgxMCArICR4OSwgNyk7CiAgICAgICAgICAgICR4OCBePSBzZWxmOjpyb3RhdGUoJHgxMSArICR4MTAsIDkpOwogICAgICAgICAgICAkeDkgXj0gc2VsZjo6cm90YXRlKCR4OCArICR4MTEsIDEzKTsKICAgICAgICAgICAgJHgxMCBePSBzZWxmOjpyb3RhdGUoJHg5ICsgJHg4LCAxOCk7CiAgICAgICAgICAgICR4MTIgXj0gc2VsZjo6cm90YXRlKCR4MTUgKyAkeDE0LCA3KTsKICAgICAgICAgICAgJHgxMyBePSBzZWxmOjpyb3RhdGUoJHgxMiArICR4MTUsIDkpOwogICAgICAgICAgICAkeDE0IF49IHNlbGY6OnJvdGF0ZSgkeDEzICsgJHgxMiwgMTMpOwogICAgICAgICAgICAkeDE1IF49IHNlbGY6OnJvdGF0ZSgkeDE0ICsgJHgxMywgMTgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OnN0b3JlMzJfbGUoJHgwKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJHg1KSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJHgxMCkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKCR4MTUpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDYpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDcpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDgpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Poly1305.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNScsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1CiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDUgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAp7CiAgICBjb25zdCBCTE9DS19TSVpFID0gMTY7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25ldGltZWF1dGgoJG0sICRrZXkpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnS2V5IG11c3QgYmUgMzIgYnl0ZXMgbG9uZy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDVfU3RhdGUoCiAgICAgICAgICAgIHNlbGY6OnN1YnN0cigka2V5LCAwLCAzMikKICAgICAgICApOwogICAgICAgIHJldHVybiAkc3RhdGUKICAgICAgICAgICAgLT51cGRhdGUoJG0pCiAgICAgICAgICAgIC0+ZmluaXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFjCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb25ldGltZWF1dGhfdmVyaWZ5KCRtYWMsICRtLCAka2V5KQogICAgewogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJGtleSkgPCAzMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ0tleSBtdXN0IGJlIDMyIGJ5dGVzIGxvbmcuJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlKAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGtleSwgMCwgMzIpCiAgICAgICAgKTsKICAgICAgICAkY2FsYyA9ICRzdGF0ZQogICAgICAgICAgICAtPnVwZGF0ZSgkbSkKICAgICAgICAgICAgLT5maW5pc2goKTsKICAgICAgICByZXR1cm4gc2VsZjo6dmVyaWZ5XzE2KCRjYWxjLCAkbWFjKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Poly1305/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZScsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDVfU3RhdGUgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBpbnQ+CiAgICAgKi8KICAgIHByb3RlY3RlZCAkYnVmZmVyID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgJGZpbmFsID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwdWJsaWMgJGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJGxlZnRvdmVyID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50W10KICAgICAqLwogICAgcHVibGljICRyOwoKICAgIC8qKgogICAgICogQHZhciBpbnRbXQogICAgICovCiAgICBwdWJsaWMgJHBhZDsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXkgPSAnJykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXkpIDwgMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdQb2x5MTMwNSByZXF1aXJlcyBhIDMyLWJ5dGUga2V5JwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAvKiByICY9IDB4ZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmMwZmZmZmZmZiAqLwogICAgICAgICR0aGlzLT5yID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAwLCA0KSkpICYgMHgzZmZmZmZmKSwKICAgICAgICAgICAgKGludCkgKChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDMsIDQpKSA+PiAyKSAmIDB4M2ZmZmYwMyksCiAgICAgICAgICAgIChpbnQpICgoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCA2LCA0KSkgPj4gNCkgJiAweDNmZmMwZmYpLAogICAgICAgICAgICAoaW50KSAoKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGtleSwgOSwgNCkpID4+IDYpICYgMHgzZjAzZmZmKSwKICAgICAgICAgICAgKGludCkgKChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDEyLCA0KSkgPj4gOCkgJiAweDAwZmZmZmYpCiAgICAgICAgKTsKCiAgICAgICAgLyogaCA9IDAgKi8KICAgICAgICAkdGhpcy0+aCA9IGFycmF5KDAsIDAsIDAsIDAsIDApOwoKICAgICAgICAvKiBzYXZlIHBhZCBmb3IgbGF0ZXIgKi8KICAgICAgICAkdGhpcy0+cGFkID0gYXJyYXkoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGtleSwgMTYsIDQpKSwKICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAyMCwgNCkpLAogICAgICAgICAgICBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDI0LCA0KSksCiAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGtleSwgMjgsIDQpKSwKICAgICAgICApOwoKICAgICAgICAkdGhpcy0+bGVmdG92ZXIgPSAwOwogICAgICAgICR0aGlzLT5maW5hbCA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEByZXR1cm4gc2VsZgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoJG1lc3NhZ2UgPSAnJykKICAgIHsKICAgICAgICAkYnl0ZXMgPSBzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiBoYW5kbGUgbGVmdG92ZXIgKi8KICAgICAgICBpZiAoJHRoaXMtPmxlZnRvdmVyKSB7CiAgICAgICAgICAgICR3YW50ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1OjpCTE9DS19TSVpFIC0gJHRoaXMtPmxlZnRvdmVyOwogICAgICAgICAgICBpZiAoJHdhbnQgPiAkYnl0ZXMpIHsKICAgICAgICAgICAgICAgICR3YW50ID0gJGJ5dGVzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICR3YW50OyArKyRpKSB7CiAgICAgICAgICAgICAgICAkbWkgPSBzZWxmOjpjaHJUb0ludCgkbWVzc2FnZVskaV0pOwogICAgICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlclskdGhpcy0+bGVmdG92ZXIgKyAkaV0gPSAkbWk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gV2Ugc25pcCBvZmYgdGhlIGxlZnRtb3N0IGJ5dGVzLgogICAgICAgICAgICAkbWVzc2FnZSA9IHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgJHdhbnQpOwogICAgICAgICAgICAkYnl0ZXMgPSBzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpOwogICAgICAgICAgICAkdGhpcy0+bGVmdG92ZXIgKz0gJHdhbnQ7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bGVmdG92ZXIgPCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDU6OkJMT0NLX1NJWkUpIHsKICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGRvbid0IGhhdmUgZW5vdWdoIHRvIHJ1biAkdGhpcy0+YmxvY2tzKCkKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmJsb2NrcygKICAgICAgICAgICAgICAgIHN0YXRpYzo6aW50QXJyYXlUb1N0cmluZygkdGhpcy0+YnVmZmVyKSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6QkxPQ0tfU0laRQogICAgICAgICAgICApOwogICAgICAgICAgICAkdGhpcy0+bGVmdG92ZXIgPSAwOwogICAgICAgIH0KCiAgICAgICAgLyogcHJvY2VzcyBmdWxsIGJsb2NrcyAqLwogICAgICAgIGlmICgkYnl0ZXMgPj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1OjpCTE9DS19TSVpFKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkd2FudCAqLwogICAgICAgICAgICAkd2FudCA9ICRieXRlcyAmIH4oUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1OjpCTE9DS19TSVpFIC0gMSk7CiAgICAgICAgICAgIGlmICgkd2FudCA+PSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDU6OkJMT0NLX1NJWkUpIHsKICAgICAgICAgICAgICAgICRibG9jayA9IHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMCwgJHdhbnQpOwogICAgICAgICAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkYmxvY2spID49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6QkxPQ0tfU0laRSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ibG9ja3MoJGJsb2NrLCAkd2FudCk7CiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSBzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsICR3YW50KTsKICAgICAgICAgICAgICAgICAgICAkYnl0ZXMgPSBzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKiBzdG9yZSBsZWZ0b3ZlciAqLwogICAgICAgIGlmICgkYnl0ZXMpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGJ5dGVzOyArKyRpKSB7CiAgICAgICAgICAgICAgICAkbWkgPSBzZWxmOjpjaHJUb0ludCgkbWVzc2FnZVskaV0pOwogICAgICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlclskdGhpcy0+bGVmdG92ZXIgKyAkaV0gPSAkbWk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmxlZnRvdmVyID0gKGludCkgJHRoaXMtPmxlZnRvdmVyICsgJGJ5dGVzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIGludCAkYnl0ZXMKICAgICAqIEByZXR1cm4gc2VsZgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsb2NrcygkbWVzc2FnZSwgJGJ5dGVzKQogICAgewogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpIDwgMTYpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgPSBzdHJfcGFkKCRtZXNzYWdlLCAxNiwgIlx4MDAiLCBTVFJfUEFEX1JJR0hUKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgaW50ICRoaWJpdCAqLwogICAgICAgICRoaWJpdCA9ICR0aGlzLT5maW5hbCA/IDAgOiAxIDw8IDI0OyAvKiAxIDw8IDEyOCAqLwogICAgICAgICRyMCA9IChpbnQpICR0aGlzLT5yWzBdOwogICAgICAgICRyMSA9IChpbnQpICR0aGlzLT5yWzFdOwogICAgICAgICRyMiA9IChpbnQpICR0aGlzLT5yWzJdOwogICAgICAgICRyMyA9IChpbnQpICR0aGlzLT5yWzNdOwogICAgICAgICRyNCA9IChpbnQpICR0aGlzLT5yWzRdOwoKICAgICAgICAkczEgPSBzZWxmOjptdWwoJHIxLCA1LCAzKTsKICAgICAgICAkczIgPSBzZWxmOjptdWwoJHIyLCA1LCAzKTsKICAgICAgICAkczMgPSBzZWxmOjptdWwoJHIzLCA1LCAzKTsKICAgICAgICAkczQgPSBzZWxmOjptdWwoJHI0LCA1LCAzKTsKCiAgICAgICAgJGgwID0gJHRoaXMtPmhbMF07CiAgICAgICAgJGgxID0gJHRoaXMtPmhbMV07CiAgICAgICAgJGgyID0gJHRoaXMtPmhbMl07CiAgICAgICAgJGgzID0gJHRoaXMtPmhbM107CiAgICAgICAgJGg0ID0gJHRoaXMtPmhbNF07CgogICAgICAgIHdoaWxlICgkYnl0ZXMgPj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1OjpCTE9DS19TSVpFKSB7CiAgICAgICAgICAgIC8qIGggKz0gbVtpXSAqLwogICAgICAgICAgICAkaDAgKz0gIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDAsIDQpKSAgICAgICAmIDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGgxICs9IChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAzLCA0KSkgPj4gMikgJiAweDNmZmZmZmY7CiAgICAgICAgICAgICRoMiArPSAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNiwgNCkpID4+IDQpICYgMHgzZmZmZmZmOwogICAgICAgICAgICAkaDMgKz0gKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDksIDQpKSA+PiA2KSAmIDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGg0ICs9IChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAxMiwgNCkpID4+IDgpIHwgJGhpYml0OwoKICAgICAgICAgICAgLyogaCAqPSByICovCiAgICAgICAgICAgICRkMCA9ICgKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkaDAsICRyMCwgMjUpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkczQsICRoMSwgMjYpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkczMsICRoMiwgMjYpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkczIsICRoMywgMjYpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkczEsICRoNCwgMjYpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkZDEgPSAoCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgwLCAkcjEsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgxLCAkcjAsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJHM0LCAkaDIsIDI2KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJHMzLCAkaDMsIDI2KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJHMyLCAkaDQsIDI2KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgJGQyID0gKAogICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRoMCwgJHIyLCAyNSkgKwogICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRoMSwgJHIxLCAyNSkgKwogICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRoMiwgJHIwLCAyNSkgKwogICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRzNCwgJGgzLCAyNikgKwogICAgICAgICAgICAgICAgc2VsZjo6bXVsKCRzMywgJGg0LCAyNikKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRkMyA9ICgKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkaDAsICRyMywgMjUpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkaDEsICRyMiwgMjUpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkaDIsICRyMSwgMjUpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkaDMsICRyMCwgMjUpICsKICAgICAgICAgICAgICAgIHNlbGY6Om11bCgkczQsICRoNCwgMjYpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkZDQgPSAoCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgwLCAkcjQsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgxLCAkcjMsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgyLCAkcjIsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGgzLCAkcjEsIDI1KSArCiAgICAgICAgICAgICAgICBzZWxmOjptdWwoJGg0LCAkcjAsIDI1KQogICAgICAgICAgICApOwoKICAgICAgICAgICAgLyogKHBhcnRpYWwpIGggJT0gcCAqLwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgJGMgPSAkZDAgPj4gMjY7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAgICAgJGgwID0gJGQwICYgMHgzZmZmZmZmOwogICAgICAgICAgICAkZDEgKz0gJGM7CgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgJGMgPSAkZDEgPj4gMjY7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaDEgKi8KICAgICAgICAgICAgJGgxID0gJGQxICYgMHgzZmZmZmZmOwogICAgICAgICAgICAkZDIgKz0gJGM7CgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgJGMgPSAkZDIgPj4gMjY7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaDIgICovCiAgICAgICAgICAgICRoMiA9ICRkMiAmIDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGQzICs9ICRjOwoKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgICAgICRjID0gJGQzID4+IDI2OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGgzICovCiAgICAgICAgICAgICRoMyA9ICRkMyAmIDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGQ0ICs9ICRjOwoKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgICAgICRjID0gJGQ0ID4+IDI2OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGg0ICovCiAgICAgICAgICAgICRoNCA9ICRkNCAmIDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGgwICs9IChpbnQpIHNlbGY6Om11bCgkYywgNSwgMyk7CgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgJGMgPSAkaDAgPj4gMjY7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAgICAgJGgwICY9IDB4M2ZmZmZmZjsKICAgICAgICAgICAgJGgxICs9ICRjOwoKICAgICAgICAgICAgLy8gQ2hvcCBvZmYgdGhlIGxlZnQgMzIgYnl0ZXMuCiAgICAgICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKAogICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDU6OkJMT0NLX1NJWkUKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJGJ5dGVzIC09IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6QkxPQ0tfU0laRTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5oID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgkaDAgJiAweGZmZmZmZmZmKSwKICAgICAgICAgICAgKGludCkgKCRoMSAmIDB4ZmZmZmZmZmYpLAogICAgICAgICAgICAoaW50KSAoJGgyICYgMHhmZmZmZmZmZiksCiAgICAgICAgICAgIChpbnQpICgkaDMgJiAweGZmZmZmZmZmKSwKICAgICAgICAgICAgKGludCkgKCRoNCAmIDB4ZmZmZmZmZmYpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5pc2goKQogICAgewogICAgICAgIC8qIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBibG9jayAqLwogICAgICAgIGlmICgkdGhpcy0+bGVmdG92ZXIpIHsKICAgICAgICAgICAgJGkgPSAkdGhpcy0+bGVmdG92ZXI7CiAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJGkrK10gPSAxOwogICAgICAgICAgICBmb3IgKDsgJGkgPCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDU6OkJMT0NLX1NJWkU7ICsrJGkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJGldID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+ZmluYWwgPSB0cnVlOwogICAgICAgICAgICAkdGhpcy0+YmxvY2tzKAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKAogICAgICAgICAgICAgICAgICAgIHN0YXRpYzo6aW50QXJyYXlUb1N0cmluZygkdGhpcy0+YnVmZmVyKSwKICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6QkxPQ0tfU0laRQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6QkxPQ0tfU0laRQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJGgwID0gKGludCkgJHRoaXMtPmhbMF07CiAgICAgICAgJGgxID0gKGludCkgJHRoaXMtPmhbMV07CiAgICAgICAgJGgyID0gKGludCkgJHRoaXMtPmhbMl07CiAgICAgICAgJGgzID0gKGludCkgJHRoaXMtPmhbM107CiAgICAgICAgJGg0ID0gKGludCkgJHRoaXMtPmhbNF07CgogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gJGgxID4+IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkaDEgKi8KICAgICAgICAkaDEgJj0gMHgzZmZmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkaDIgKi8KICAgICAgICAkaDIgKz0gJGM7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAkaDIgPj4gMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMiAqLwogICAgICAgICRoMiAmPSAweDNmZmZmZmY7CiAgICAgICAgJGgzICs9ICRjOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gJGgzID4+IDI2OwogICAgICAgICRoMyAmPSAweDNmZmZmZmY7CiAgICAgICAgJGg0ICs9ICRjOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gJGg0ID4+IDI2OwogICAgICAgICRoNCAmPSAweDNmZmZmZmY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMCAqLwogICAgICAgICRoMCArPSBzZWxmOjptdWwoJGMsIDUsIDMpOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gJGgwID4+IDI2OwogICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAkaDAgJj0gMHgzZmZmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkaDEgKi8KICAgICAgICAkaDEgKz0gJGM7CgogICAgICAgIC8qIGNvbXB1dGUgaCArIC1wICovCiAgICAgICAgLyoqIEB2YXIgaW50ICRnMCAqLwogICAgICAgICRnMCA9ICRoMCArIDU7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAkZzAgPj4gMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRnMCAqLwogICAgICAgICRnMCAmPSAweDNmZmZmZmY7CgogICAgICAgIC8qKiBAdmFyIGludCAkZzEgKi8KICAgICAgICAkZzEgPSAkaDEgKyAkYzsKICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAkYyA9ICRnMSA+PiAyNjsKICAgICAgICAkZzEgJj0gMHgzZmZmZmZmOwoKICAgICAgICAvKiogQHZhciBpbnQgJGcyICovCiAgICAgICAgJGcyID0gJGgyICsgJGM7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAkZzIgPj4gMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRnMiAqLwogICAgICAgICRnMiAmPSAweDNmZmZmZmY7CgogICAgICAgIC8qKiBAdmFyIGludCAkZzMgKi8KICAgICAgICAkZzMgPSAkaDMgKyAkYzsKICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAkYyA9ICRnMyA+PiAyNjsKICAgICAgICAvKiogQHZhciBpbnQgJGczICovCiAgICAgICAgJGczICY9IDB4M2ZmZmZmZjsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRnNCAqLwogICAgICAgICRnNCA9ICgkaDQgKyAkYyAtICgxIDw8IDI2KSkgJiAweGZmZmZmZmZmOwoKICAgICAgICAvKiBzZWxlY3QgaCBpZiBoIDwgcCwgb3IgaCArIC1wIGlmIGggPj0gcCAqLwogICAgICAgIC8qKiBAdmFyIGludCAkbWFzayAqLwogICAgICAgICRtYXNrID0gKCRnNCA+PiAzMSkgLSAxOwoKICAgICAgICAkZzAgJj0gJG1hc2s7CiAgICAgICAgJGcxICY9ICRtYXNrOwogICAgICAgICRnMiAmPSAkbWFzazsKICAgICAgICAkZzMgJj0gJG1hc2s7CiAgICAgICAgJGc0ICY9ICRtYXNrOwoKICAgICAgICAvKiogQHZhciBpbnQgJG1hc2sgKi8KICAgICAgICAkbWFzayA9IH4kbWFzayAmIDB4ZmZmZmZmZmY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMCAqLwogICAgICAgICRoMCA9ICgkaDAgJiAkbWFzaykgfCAkZzA7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMSAqLwogICAgICAgICRoMSA9ICgkaDEgJiAkbWFzaykgfCAkZzE7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMiAqLwogICAgICAgICRoMiA9ICgkaDIgJiAkbWFzaykgfCAkZzI7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoMyAqLwogICAgICAgICRoMyA9ICgkaDMgJiAkbWFzaykgfCAkZzM7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoNCAqLwogICAgICAgICRoNCA9ICgkaDQgJiAkbWFzaykgfCAkZzQ7CgogICAgICAgIC8qIGggPSBoICUgKDJeMTI4KSAqLwogICAgICAgIC8qKiBAdmFyIGludCAkaDAgKi8KICAgICAgICAkaDAgPSAoKCRoMCkgfCAoJGgxIDw8IDI2KSkgJiAweGZmZmZmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkaDEgKi8KICAgICAgICAkaDEgPSAoKCRoMSA+PiAgNikgfCAoJGgyIDw8IDIwKSkgJiAweGZmZmZmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkaDIgKi8KICAgICAgICAkaDIgPSAoKCRoMiA+PiAxMikgfCAoJGgzIDw8IDE0KSkgJiAweGZmZmZmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkaDMgKi8KICAgICAgICAkaDMgPSAoKCRoMyA+PiAxOCkgfCAoJGg0IDw8ICA4KSkgJiAweGZmZmZmZmZmOwoKICAgICAgICAvKiBtYWMgPSAoaCArIHBhZCkgJSAoMl4xMjgpICovCiAgICAgICAgJGYgPSAoaW50KSAoJGgwICsgJHRoaXMtPnBhZFswXSk7CiAgICAgICAgJGgwID0gKGludCkgJGY7CiAgICAgICAgJGYgPSAoaW50KSAoJGgxICsgJHRoaXMtPnBhZFsxXSArICgkZiA+PiAzMikpOwogICAgICAgICRoMSA9IChpbnQpICRmOwogICAgICAgICRmID0gKGludCkgKCRoMiArICR0aGlzLT5wYWRbMl0gKyAoJGYgPj4gMzIpKTsKICAgICAgICAkaDIgPSAoaW50KSAkZjsKICAgICAgICAkZiA9IChpbnQpICgkaDMgKyAkdGhpcy0+cGFkWzNdICsgKCRmID4+IDMyKSk7CiAgICAgICAgJGgzID0gKGludCkgJGY7CgogICAgICAgIHJldHVybiBzZWxmOjpzdG9yZTMyX2xlKCRoMCAmIDB4ZmZmZmZmZmYpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkaDEgJiAweGZmZmZmZmZmKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJGgyICYgMHhmZmZmZmZmZikgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKCRoMyAmIDB4ZmZmZmZmZmYpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Salsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9TYWxzYTIwJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMAogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAp7CiAgICBjb25zdCBST1VORFMgPSAyMDsKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSBhbiBzYWxzYTIwIGhhc2ggb2YgYSBzaW5nbGUgYmxvY2sKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGsKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29yZV9zYWxzYTIwKCRpbiwgJGssICRjID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrKSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignS2V5IG11c3QgYmUgMzIgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgJGowICA9ICR4MCAgPSAweDYxNzA3ODY1OwogICAgICAgICAgICAkajUgID0gJHg1ICA9IDB4MzMyMDY0NmU7CiAgICAgICAgICAgICRqMTAgPSAkeDEwID0gMHg3OTYyMmQzMjsKICAgICAgICAgICAgJGoxNSA9ICR4MTUgPSAweDZiMjA2NTc0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRqMCAgPSAkeDAgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMCwgNCkpOwogICAgICAgICAgICAkajUgID0gJHg1ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsIDQsIDQpKTsKICAgICAgICAgICAgJGoxMCA9ICR4MTAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRjLCA4LCA0KSk7CiAgICAgICAgICAgICRqMTUgPSAkeDE1ID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMTIsIDQpKTsKICAgICAgICB9CiAgICAgICAgJGoxICA9ICR4MSAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCAwLCA0KSk7CiAgICAgICAgJGoyICA9ICR4MiAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCA0LCA0KSk7CiAgICAgICAgJGozICA9ICR4MyAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCA4LCA0KSk7CiAgICAgICAgJGo0ICA9ICR4NCAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCAxMiwgNCkpOwogICAgICAgICRqNiAgPSAkeDYgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaW4sIDAsIDQpKTsKICAgICAgICAkajcgID0gJHg3ICA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCA0LCA0KSk7CiAgICAgICAgJGo4ICA9ICR4OCAgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRpbiwgOCwgNCkpOwogICAgICAgICRqOSAgPSAkeDkgID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaW4sIDEyLCA0KSk7CiAgICAgICAgJGoxMSA9ICR4MTEgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCAxNiwgNCkpOwogICAgICAgICRqMTIgPSAkeDEyID0gc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaywgMjAsIDQpKTsKICAgICAgICAkajEzID0gJHgxMyA9IHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGssIDI0LCA0KSk7CiAgICAgICAgJGoxNCA9ICR4MTQgPSBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrLCAyOCwgNCkpOwoKICAgICAgICBmb3IgKCRpID0gc2VsZjo6Uk9VTkRTOyAkaSA+IDA7ICRpIC09IDIpIHsKICAgICAgICAgICAgJHg0IF49IHNlbGY6OnJvdGF0ZSgkeDAgKyAkeDEyLCA3KTsKICAgICAgICAgICAgJHg4IF49IHNlbGY6OnJvdGF0ZSgkeDQgKyAkeDAsIDkpOwogICAgICAgICAgICAkeDEyIF49IHNlbGY6OnJvdGF0ZSgkeDggKyAkeDQsIDEzKTsKICAgICAgICAgICAgJHgwIF49IHNlbGY6OnJvdGF0ZSgkeDEyICsgJHg4LCAxOCk7CgogICAgICAgICAgICAkeDkgXj0gc2VsZjo6cm90YXRlKCR4NSArICR4MSwgNyk7CiAgICAgICAgICAgICR4MTMgXj0gc2VsZjo6cm90YXRlKCR4OSArICR4NSwgOSk7CiAgICAgICAgICAgICR4MSBePSBzZWxmOjpyb3RhdGUoJHgxMyArICR4OSwgMTMpOwogICAgICAgICAgICAkeDUgXj0gc2VsZjo6cm90YXRlKCR4MSArICR4MTMsIDE4KTsKCiAgICAgICAgICAgICR4MTQgXj0gc2VsZjo6cm90YXRlKCR4MTAgKyAkeDYsIDcpOwogICAgICAgICAgICAkeDIgXj0gc2VsZjo6cm90YXRlKCR4MTQgKyAkeDEwLCA5KTsKICAgICAgICAgICAgJHg2IF49IHNlbGY6OnJvdGF0ZSgkeDIgKyAkeDE0LCAxMyk7CiAgICAgICAgICAgICR4MTAgXj0gc2VsZjo6cm90YXRlKCR4NiArICR4MiwgMTgpOwoKICAgICAgICAgICAgJHgzIF49IHNlbGY6OnJvdGF0ZSgkeDE1ICsgJHgxMSwgNyk7CiAgICAgICAgICAgICR4NyBePSBzZWxmOjpyb3RhdGUoJHgzICsgJHgxNSwgOSk7CiAgICAgICAgICAgICR4MTEgXj0gc2VsZjo6cm90YXRlKCR4NyArICR4MywgMTMpOwogICAgICAgICAgICAkeDE1IF49IHNlbGY6OnJvdGF0ZSgkeDExICsgJHg3LCAxOCk7CgogICAgICAgICAgICAkeDEgXj0gc2VsZjo6cm90YXRlKCR4MCArICR4MywgNyk7CiAgICAgICAgICAgICR4MiBePSBzZWxmOjpyb3RhdGUoJHgxICsgJHgwLCA5KTsKICAgICAgICAgICAgJHgzIF49IHNlbGY6OnJvdGF0ZSgkeDIgKyAkeDEsIDEzKTsKICAgICAgICAgICAgJHgwIF49IHNlbGY6OnJvdGF0ZSgkeDMgKyAkeDIsIDE4KTsKCiAgICAgICAgICAgICR4NiBePSBzZWxmOjpyb3RhdGUoJHg1ICsgJHg0LCA3KTsKICAgICAgICAgICAgJHg3IF49IHNlbGY6OnJvdGF0ZSgkeDYgKyAkeDUsIDkpOwogICAgICAgICAgICAkeDQgXj0gc2VsZjo6cm90YXRlKCR4NyArICR4NiwgMTMpOwogICAgICAgICAgICAkeDUgXj0gc2VsZjo6cm90YXRlKCR4NCArICR4NywgMTgpOwoKICAgICAgICAgICAgJHgxMSBePSBzZWxmOjpyb3RhdGUoJHgxMCArICR4OSwgNyk7CiAgICAgICAgICAgICR4OCBePSBzZWxmOjpyb3RhdGUoJHgxMSArICR4MTAsIDkpOwogICAgICAgICAgICAkeDkgXj0gc2VsZjo6cm90YXRlKCR4OCArICR4MTEsIDEzKTsKICAgICAgICAgICAgJHgxMCBePSBzZWxmOjpyb3RhdGUoJHg5ICsgJHg4LCAxOCk7CgogICAgICAgICAgICAkeDEyIF49IHNlbGY6OnJvdGF0ZSgkeDE1ICsgJHgxNCwgNyk7CiAgICAgICAgICAgICR4MTMgXj0gc2VsZjo6cm90YXRlKCR4MTIgKyAkeDE1LCA5KTsKICAgICAgICAgICAgJHgxNCBePSBzZWxmOjpyb3RhdGUoJHgxMyArICR4MTIsIDEzKTsKICAgICAgICAgICAgJHgxNSBePSBzZWxmOjpyb3RhdGUoJHgxNCArICR4MTMsIDE4KTsKICAgICAgICB9CgogICAgICAgICR4MCAgKz0gJGowOwogICAgICAgICR4MSAgKz0gJGoxOwogICAgICAgICR4MiAgKz0gJGoyOwogICAgICAgICR4MyAgKz0gJGozOwogICAgICAgICR4NCAgKz0gJGo0OwogICAgICAgICR4NSAgKz0gJGo1OwogICAgICAgICR4NiAgKz0gJGo2OwogICAgICAgICR4NyAgKz0gJGo3OwogICAgICAgICR4OCAgKz0gJGo4OwogICAgICAgICR4OSAgKz0gJGo5OwogICAgICAgICR4MTAgKz0gJGoxMDsKICAgICAgICAkeDExICs9ICRqMTE7CiAgICAgICAgJHgxMiArPSAkajEyOwogICAgICAgICR4MTMgKz0gJGoxMzsKICAgICAgICAkeDE0ICs9ICRqMTQ7CiAgICAgICAgJHgxNSArPSAkajE1OwoKICAgICAgICByZXR1cm4gc2VsZjo6c3RvcmUzMl9sZSgkeDApIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDEpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDIpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDMpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDQpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDUpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDYpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDcpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDgpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDkpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDEwKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJHgxMSkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKCR4MTIpIC4KICAgICAgICAgICAgc2VsZjo6c3RvcmUzMl9sZSgkeDEzKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJHgxNCkgLgogICAgICAgICAgICBzZWxmOjpzdG9yZTMyX2xlKCR4MTUpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhbHNhMjAoJGxlbiwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJGtleSkgIT09IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignS2V5IG11c3QgYmUgMzIgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICAka2NvcHkgPSAnJyAuICRrZXk7CiAgICAgICAgJGluID0gc2VsZjo6c3Vic3RyKCRub25jZSwgMCwgOCkgLiBzdHJfcmVwZWF0KCJcMCIsIDgpOwogICAgICAgICRjID0gJyc7CiAgICAgICAgd2hpbGUgKCRsZW4gPj0gNjQpIHsKICAgICAgICAgICAgJGMgLj0gc2VsZjo6Y29yZV9zYWxzYTIwKCRpbiwgJGtjb3B5LCBudWxsKTsKICAgICAgICAgICAgJHUgPSAxOwogICAgICAgICAgICAvLyBJbnRlcm5hbCBjb3VudGVyLgogICAgICAgICAgICBmb3IgKCRpID0gODsgJGkgPCAxNjsgKyskaSkgewogICAgICAgICAgICAgICAgJHUgKz0gc2VsZjo6Y2hyVG9JbnQoJGluWyRpXSk7CiAgICAgICAgICAgICAgICAkaW5bJGldID0gc2VsZjo6aW50VG9DaHIoJHUgJiAweGZmKTsKICAgICAgICAgICAgICAgICR1ID4+PSA4OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRsZW4gLT0gNjQ7CiAgICAgICAgfQogICAgICAgIGlmICgkbGVuID4gMCkgewogICAgICAgICAgICAkYyAuPSBzZWxmOjpzdWJzdHIoCiAgICAgICAgICAgICAgICBzZWxmOjpjb3JlX3NhbHNhMjAoJGluLCAka2NvcHksIG51bGwpLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICRsZW4KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGtjb3B5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRrY29weSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYzsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuCiAgICAgKiBAcGFyYW0gaW50ICRpYwogICAgICogQHBhcmFtIHN0cmluZyAkawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhbHNhMjBfeG9yX2ljKCRtLCAkbiwgJGljLCAkaykKICAgIHsKICAgICAgICAkbWxlbiA9IHNlbGY6OnN0cmxlbigkbSk7CiAgICAgICAgaWYgKCRtbGVuIDwgMSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRrY29weSA9IHNlbGY6OnN1YnN0cigkaywgMCwgMzIpOwogICAgICAgICRpbiA9IHNlbGY6OnN1YnN0cigkbiwgMCwgOCk7CiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY291bnRlcgogICAgICAgICRpbiAuPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgkaWMpOwoKICAgICAgICAkYyA9ICcnOwogICAgICAgIHdoaWxlICgkbWxlbiA+PSA2NCkgewogICAgICAgICAgICAkYmxvY2sgPSBzZWxmOjpjb3JlX3NhbHNhMjAoJGluLCAka2NvcHksIG51bGwpOwogICAgICAgICAgICAkYyAuPSBzZWxmOjp4b3JTdHJpbmdzKAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRtLCAwLCA2NCksCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGJsb2NrLCAwLCA2NCkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHUgPSAxOwogICAgICAgICAgICBmb3IgKCRpID0gODsgJGkgPCAxNjsgKyskaSkgewogICAgICAgICAgICAgICAgJHUgKz0gc2VsZjo6Y2hyVG9JbnQoJGluWyRpXSk7CiAgICAgICAgICAgICAgICAkaW5bJGldID0gc2VsZjo6aW50VG9DaHIoJHUgJiAweGZmKTsKICAgICAgICAgICAgICAgICR1ID4+PSA4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWxlbiAtPSA2NDsKICAgICAgICAgICAgJG0gPSBzZWxmOjpzdWJzdHIoJG0sIDY0KTsKICAgICAgICB9CgogICAgICAgIGlmICgkbWxlbikgewogICAgICAgICAgICAkYmxvY2sgPSBzZWxmOjpjb3JlX3NhbHNhMjAoJGluLCAka2NvcHksIG51bGwpOwogICAgICAgICAgICAkYyAuPSBzZWxmOjp4b3JTdHJpbmdzKAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRtLCAwLCAkbWxlbiksCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGJsb2NrLCAwLCAkbWxlbikKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGJsb2NrKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGtjb3B5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jayA9IG51bGw7CiAgICAgICAgICAgICRrY29weSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhbHNhMjBfeG9yKCRtZXNzYWdlLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnhvclN0cmluZ3MoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICBzZWxmOjpzYWxzYTIwKAogICAgICAgICAgICAgICAgc2VsZjo6c3RybGVuKCRtZXNzYWdlKSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdQogICAgICogQHBhcmFtIGludCAkYwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByb3RhdGUoJHUsICRjKQogICAgewogICAgICAgICR1ICY9IDB4ZmZmZmZmZmY7CiAgICAgICAgJGMgJT0gMzI7CiAgICAgICAgcmV0dXJuIChpbnQpICgweGZmZmZmZmZmICYgKAogICAgICAgICAgICAgICAgKCR1IDw8ICRjKQogICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICgkdSA+PiAoMzIgLSAkYykpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/SipHash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9TaXBIYXNoJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtQ29tcGF0X0NvcmVfU2lwSGFzaAogKgogKiBPbmx5IHVzZXMgMzItYml0IGFyaXRobWV0aWMsIHdoaWxlIHRoZSBvcmlnaW5hbCBTaXBIYXNoIHVzZWQgNjQtYml0IGludGVnZXJzCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2lwSGFzaCBleHRlbmRzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsCnsKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnRbXSAkdgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpcFJvdW5kKGFycmF5ICR2KQogICAgewogICAgICAgICMgdjAgKz0gdjE7CiAgICAgICAgbGlzdCgkdlswXSwgJHZbMV0pID0gc2VsZjo6YWRkKAogICAgICAgICAgICBhcnJheSgkdlswXSwgJHZbMV0pLAogICAgICAgICAgICBhcnJheSgkdlsyXSwgJHZbM10pCiAgICAgICAgKTsKCiAgICAgICAgIyAgdjE9Uk9UTCh2MSwxMyk7CiAgICAgICAgbGlzdCgkdlsyXSwgJHZbM10pID0gc2VsZjo6cm90bF82NCgkdlsyXSwgJHZbM10sIDEzKTsKCiAgICAgICAgIyAgdjEgXj0gdjA7CiAgICAgICAgJHZbMl0gXj0gJHZbMF07CiAgICAgICAgJHZbM10gXj0gJHZbMV07CgogICAgICAgICMgIHYwPVJPVEwodjAsMzIpOwogICAgICAgIGxpc3QoJHZbMF0sICR2WzFdKSA9IHNlbGY6OnJvdGxfNjQoKGludCkgJHZbMF0sIChpbnQpICR2WzFdLCAzMik7CgogICAgICAgICMgdjIgKz0gdjM7CiAgICAgICAgbGlzdCgkdls0XSwgJHZbNV0pID0gc2VsZjo6YWRkKAogICAgICAgICAgICBhcnJheSgkdls0XSwgJHZbNV0pLAogICAgICAgICAgICBhcnJheSgkdls2XSwgJHZbN10pCiAgICAgICAgKTsKCiAgICAgICAgIyB2Mz1ST1RMKHYzLDE2KTsKICAgICAgICBsaXN0KCR2WzZdLCAkdls3XSkgPSBzZWxmOjpyb3RsXzY0KCR2WzZdLCAkdls3XSwgMTYpOwoKICAgICAgICAjICB2MyBePSB2MjsKICAgICAgICAkdls2XSBePSAkdls0XTsKICAgICAgICAkdls3XSBePSAkdls1XTsKCiAgICAgICAgIyB2MCArPSB2MzsKICAgICAgICBsaXN0KCR2WzBdLCAkdlsxXSkgPSBzZWxmOjphZGQoCiAgICAgICAgICAgIGFycmF5KChpbnQpICR2WzBdLCAoaW50KSAkdlsxXSksCiAgICAgICAgICAgIGFycmF5KChpbnQpICR2WzZdLCAoaW50KSAkdls3XSkKICAgICAgICApOwoKICAgICAgICAjIHYzPVJPVEwodjMsMjEpOwogICAgICAgIGxpc3QoJHZbNl0sICR2WzddKSA9IHNlbGY6OnJvdGxfNjQoKGludCkgJHZbNl0sIChpbnQpICR2WzddLCAyMSk7CgogICAgICAgICMgdjMgXj0gdjA7CiAgICAgICAgJHZbNl0gXj0gJHZbMF07CiAgICAgICAgJHZbN10gXj0gJHZbMV07CgogICAgICAgICMgdjIgKz0gdjE7CiAgICAgICAgbGlzdCgkdls0XSwgJHZbNV0pID0gc2VsZjo6YWRkKAogICAgICAgICAgICBhcnJheSgoaW50KSAkdls0XSwgKGludCkgJHZbNV0pLAogICAgICAgICAgICBhcnJheSgoaW50KSAkdlsyXSwgKGludCkgJHZbM10pCiAgICAgICAgKTsKCiAgICAgICAgIyB2MT1ST1RMKHYxLDE3KTsKICAgICAgICBsaXN0KCR2WzJdLCAkdlszXSkgPSBzZWxmOjpyb3RsXzY0KChpbnQpICR2WzJdLCAoaW50KSAkdlszXSwgMTcpOwoKICAgICAgICAjICB2MSBePSB2Mjs7CiAgICAgICAgJHZbMl0gXj0gJHZbNF07CiAgICAgICAgJHZbM10gXj0gJHZbNV07CgogICAgICAgICMgdjI9Uk9UTCh2MiwzMikKICAgICAgICBsaXN0KCR2WzRdLCAkdls1XSkgPSBzZWxmOjpyb3RsXzY0KChpbnQpICR2WzRdLCAoaW50KSAkdls1XSwgMzIpOwoKICAgICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgdHdvIDMyIGJpdCBpbnRlZ2VycyByZXByZXNlbnRpbmcgYSA2NC1iaXQgaW50ZWdlci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludFtdICRhCiAgICAgKiBAcGFyYW0gaW50W10gJGIKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LCBtaXhlZD4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGQoYXJyYXkgJGEsIGFycmF5ICRiKQogICAgewogICAgICAgIC8qKiBAdmFyIGludCAkeDEgKi8KICAgICAgICAkeDEgPSAkYVsxXSArICRiWzFdOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gJHgxID4+IDMyOyAvLyBDYXJyeSBpZiAoJGEgKyAkYikgPiAweGZmZmZmZmZmCiAgICAgICAgLyoqIEB2YXIgaW50ICR4MCAqLwogICAgICAgICR4MCA9ICRhWzBdICsgJGJbMF0gKyAkYzsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICR4MCAmIDB4ZmZmZmZmZmYsCiAgICAgICAgICAgICR4MSAmIDB4ZmZmZmZmZmYKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGludDAKICAgICAqIEBwYXJhbSBpbnQgJGludDEKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LCBtaXhlZD4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByb3RsXzY0KCRpbnQwLCAkaW50MSwgJGMpCiAgICB7CiAgICAgICAgJGludDAgJj0gMHhmZmZmZmZmZjsKICAgICAgICAkaW50MSAmPSAweGZmZmZmZmZmOwogICAgICAgICRjICY9IDYzOwogICAgICAgIGlmICgkYyA9PT0gMzIpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRpbnQxLCAkaW50MCk7CiAgICAgICAgfQogICAgICAgIGlmICgkYyA+IDMxKSB7CiAgICAgICAgICAgICR0bXAgPSAkaW50MTsKICAgICAgICAgICAgJGludDEgPSAkaW50MDsKICAgICAgICAgICAgJGludDAgPSAkdG1wOwogICAgICAgICAgICAkYyAmPSAzMTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkaW50MCwgJGludDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIDB4ZmZmZmZmZmYgJiAoCiAgICAgICAgICAgICAgICAoJGludDAgPDwgJGMpCiAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgKCRpbnQxID4+ICgzMiAtICRjKSkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgMHhmZmZmZmZmZiAmICgKICAgICAgICAgICAgICAgICgkaW50MSA8PCAkYykKICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAoJGludDAgPj4gKDMyIC0gJGMpKQogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIFNpcGhhc2gtMi00IHVzaW5nIG9ubHkgMzItYml0IG51bWJlcnMuCiAgICAgKgogICAgICogV2hlbiB3ZSBzcGxpdCBhbiBpbnQgaW50byB0d28sIHRoZSBoaWdoZXIgYml0cyBnbyB0byB0aGUgbG93ZXIgaW5kZXguCiAgICAgKiBlLmcuIDB4REVBREJFRUZBQjEwQzkyRCBiZWNvbWVzIFsKICAgICAqICAgICAwID0+IDB4REVBREJFRUYsCiAgICAgKiAgICAgMSA9PiAweEFCMTBDOTJECiAgICAgKiBdLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lwSGFzaDI0KCRpbiwgJGtleSkKICAgIHsKICAgICAgICAkaW5sZW4gPSBzZWxmOjpzdHJsZW4oJGluKTsKCiAgICAgICAgIyAvKiAic29tZXBzZXVkb3JhbmRvbWx5Z2VuZXJhdGVkYnl0ZXMiICovCiAgICAgICAgIyB1NjQgdjAgPSAweDczNmY2ZDY1NzA3MzY1NzVVTEw7CiAgICAgICAgIyB1NjQgdjEgPSAweDY0NmY3MjYxNmU2NDZmNmRVTEw7CiAgICAgICAgIyB1NjQgdjIgPSAweDZjNzk2NzY1NmU2NTcyNjFVTEw7CiAgICAgICAgIyB1NjQgdjMgPSAweDc0NjU2NDYyNzk3NDY1NzNVTEw7CiAgICAgICAgJHYgPSBhcnJheSgKICAgICAgICAgICAgMHg3MzZmNmQ2NSwgLy8gMAogICAgICAgICAgICAweDcwNzM2NTc1LCAvLyAxCiAgICAgICAgICAgIDB4NjQ2ZjcyNjEsIC8vIDIKICAgICAgICAgICAgMHg2ZTY0NmY2ZCwgLy8gMwogICAgICAgICAgICAweDZjNzk2NzY1LCAvLyA0CiAgICAgICAgICAgIDB4NmU2NTcyNjEsIC8vIDUKICAgICAgICAgICAgMHg3NDY1NjQ2MiwgLy8gNgogICAgICAgICAgICAweDc5NzQ2NTczICAvLyA3CiAgICAgICAgKTsKICAgICAgICAvLyB2MCA9PiAkdlswXSwgJHZbMV0KICAgICAgICAvLyB2MSA9PiAkdlsyXSwgJHZbM10KICAgICAgICAvLyB2MiA9PiAkdls0XSwgJHZbNV0KICAgICAgICAvLyB2MyA9PiAkdls2XSwgJHZbN10KCiAgICAgICAgIyB1NjQgazAgPSBMT0FENjRfTEUoIGsgKTsKICAgICAgICAjIHU2NCBrMSA9IExPQUQ2NF9MRSggayArIDggKTsKICAgICAgICAkayA9IGFycmF5KAogICAgICAgICAgICBzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRrZXksIDQsIDQpKSwKICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCAwLCA0KSksCiAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGtleSwgMTIsIDQpKSwKICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigka2V5LCA4LCA0KSkKICAgICAgICApOwogICAgICAgIC8vIGswID0+ICRrWzBdLCAka1sxXQogICAgICAgIC8vIGsxID0+ICRrWzJdLCAka1szXQoKICAgICAgICAjIGIgPSAoICggdTY0IClpbmxlbiApIDw8IDU2OwogICAgICAgICRiID0gYXJyYXkoCiAgICAgICAgICAgICRpbmxlbiA8PCAyNCwKICAgICAgICAgICAgMAogICAgICAgICk7CiAgICAgICAgLy8gU2VlIGRvY2Jsb2NrIGZvciB3aHkgdGhlIDB0aCBpbmRleCBnZXRzIHRoZSBoaWdoZXIgYml0cy4KCiAgICAgICAgIyB2MyBePSBrMTsKICAgICAgICAkdls2XSBePSAka1syXTsKICAgICAgICAkdls3XSBePSAka1szXTsKICAgICAgICAjIHYyIF49IGswOwogICAgICAgICR2WzRdIF49ICRrWzBdOwogICAgICAgICR2WzVdIF49ICRrWzFdOwogICAgICAgICMgdjEgXj0gazE7CiAgICAgICAgJHZbMl0gXj0gJGtbMl07CiAgICAgICAgJHZbM10gXj0gJGtbM107CiAgICAgICAgIyB2MCBePSBrMDsKICAgICAgICAkdlswXSBePSAka1swXTsKICAgICAgICAkdlsxXSBePSAka1sxXTsKCiAgICAgICAgJGxlZnQgPSAkaW5sZW47CiAgICAgICAgIyBmb3IgKCA7IGluICE9IGVuZDsgaW4gKz0gOCApCiAgICAgICAgd2hpbGUgKCRsZWZ0ID49IDgpIHsKICAgICAgICAgICAgIyBtID0gTE9BRDY0X0xFKCBpbiApOwogICAgICAgICAgICAkbSA9IGFycmF5KAogICAgICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkaW4sIDQsIDQpKSwKICAgICAgICAgICAgICAgIHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGluLCAwLCA0KSkKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgdjMgXj0gbTsKICAgICAgICAgICAgJHZbNl0gXj0gJG1bMF07CiAgICAgICAgICAgICR2WzddIF49ICRtWzFdOwoKICAgICAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAgICAgJHYgPSBzZWxmOjpzaXBSb3VuZCgkdik7CiAgICAgICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwoKICAgICAgICAgICAgIyB2MCBePSBtOwogICAgICAgICAgICAkdlswXSBePSAkbVswXTsKICAgICAgICAgICAgJHZbMV0gXj0gJG1bMV07CgogICAgICAgICAgICAkaW4gPSBzZWxmOjpzdWJzdHIoJGluLCA4KTsKICAgICAgICAgICAgJGxlZnQgLT0gODsKICAgICAgICB9CgogICAgICAgICMgc3dpdGNoKCBsZWZ0ICkKICAgICAgICAjICB7CiAgICAgICAgIyAgICAgY2FzZSA3OiBiIHw9ICggKCB1NjQgKWluWyA2XSApICA8PCA0ODsKICAgICAgICAjICAgICBjYXNlIDY6IGIgfD0gKCAoIHU2NCApaW5bIDVdICkgIDw8IDQwOwogICAgICAgICMgICAgIGNhc2UgNTogYiB8PSAoICggdTY0IClpblsgNF0gKSAgPDwgMzI7CiAgICAgICAgIyAgICAgY2FzZSA0OiBiIHw9ICggKCB1NjQgKWluWyAzXSApICA8PCAyNDsKICAgICAgICAjICAgICBjYXNlIDM6IGIgfD0gKCAoIHU2NCApaW5bIDJdICkgIDw8IDE2OwogICAgICAgICMgICAgIGNhc2UgMjogYiB8PSAoICggdTY0IClpblsgMV0gKSAgPDwgIDg7CiAgICAgICAgIyAgICAgY2FzZSAxOiBiIHw9ICggKCB1NjQgKWluWyAwXSApOyBicmVhazsKICAgICAgICAjICAgICBjYXNlIDA6IGJyZWFrOwogICAgICAgICMgfQogICAgICAgIHN3aXRjaCAoJGxlZnQpIHsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgJGJbMF0gfD0gc2VsZjo6Y2hyVG9JbnQoJGluWzZdKSA8PCAxNjsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgJGJbMF0gfD0gc2VsZjo6Y2hyVG9JbnQoJGluWzVdKSA8PCA4OwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAkYlswXSB8PSBzZWxmOjpjaHJUb0ludCgkaW5bNF0pOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAkYlsxXSB8PSBzZWxmOjpjaHJUb0ludCgkaW5bM10pIDw8IDI0OwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAkYlsxXSB8PSBzZWxmOjpjaHJUb0ludCgkaW5bMl0pIDw8IDE2OwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAkYlsxXSB8PSBzZWxmOjpjaHJUb0ludCgkaW5bMV0pIDw8IDg7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICRiWzFdIHw9IHNlbGY6OmNoclRvSW50KCRpblswXSk7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBTZWUgZG9jYmxvY2sgZm9yIHdoeSB0aGUgMHRoIGluZGV4IGdldHMgdGhlIGhpZ2hlciBiaXRzLgoKICAgICAgICAjIHYzIF49IGI7CiAgICAgICAgJHZbNl0gXj0gJGJbMF07CiAgICAgICAgJHZbN10gXj0gJGJbMV07CgogICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAkdiA9IHNlbGY6OnNpcFJvdW5kKCR2KTsKICAgICAgICAkdiA9IHNlbGY6OnNpcFJvdW5kKCR2KTsKCiAgICAgICAgIyB2MCBePSBiOwogICAgICAgICR2WzBdIF49ICRiWzBdOwogICAgICAgICR2WzFdIF49ICRiWzFdOwoKICAgICAgICAvLyBGbGlwIHRoZSBsb3dlciA4IGJpdHMgb2YgdjIgd2hpY2ggaXMgKCR2WzRdLCAkdls1XSkgaW4gb3VyIGltcGxlbWVudGF0aW9uCiAgICAgICAgIyB2MiBePSAweGZmOwogICAgICAgICR2WzVdIF49IDB4ZmY7CgogICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAjIFNJUFJPVU5EOwogICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgJHYgPSBzZWxmOjpzaXBSb3VuZCgkdik7CiAgICAgICAgJHYgPSBzZWxmOjpzaXBSb3VuZCgkdik7CiAgICAgICAgJHYgPSBzZWxmOjpzaXBSb3VuZCgkdik7CiAgICAgICAgJHYgPSBzZWxmOjpzaXBSb3VuZCgkdik7CgogICAgICAgICMgYiA9IHYwIF4gdjEgXiB2MiBeIHYzOwogICAgICAgICMgU1RPUkU2NF9MRSggb3V0LCBiICk7CiAgICAgICAgcmV0dXJuICBzZWxmOjpzdG9yZTMyX2xlKCR2WzFdIF4gJHZbM10gXiAkdls1XSBeICR2WzddKSAuCiAgICAgICAgICAgIHNlbGY6OnN0b3JlMzJfbGUoJHZbMF0gXiAkdlsyXSBeICR2WzRdIF4gJHZbNl0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/Util.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbAogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWwKewogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRpbnRlZ2VyCiAgICAgKiBAcGFyYW0gaW50ICRzaXplICgxNiwgMzIsIDY0KQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhYnMoJGludGVnZXIsICRzaXplID0gMCkKICAgIHsKICAgICAgICAvKiogQHZhciBpbnQgJHJlYWxTaXplICovCiAgICAgICAgJHJlYWxTaXplID0gKFBIUF9JTlRfU0laRSA8PCAzKSAtIDE7CiAgICAgICAgaWYgKCRzaXplKSB7CiAgICAgICAgICAgIC0tJHNpemU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgICAgICRzaXplID0gJHJlYWxTaXplOwogICAgICAgIH0KCiAgICAgICAgJG5lZ2F0aXZlID0gLSgoJGludGVnZXIgPj4gJHNpemUpICYgMSk7CiAgICAgICAgcmV0dXJuIChpbnQpICgKICAgICAgICAgICAgKCRpbnRlZ2VyIF4gJG5lZ2F0aXZlKQogICAgICAgICAgICAgICAgKwogICAgICAgICAgICAoKCRuZWdhdGl2ZSA+PiAkcmVhbFNpemUpICYgMSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIGJpbmFyeSBzdHJpbmcgaW50byBhIGhleGFkZWNpbWFsIHN0cmluZyB3aXRob3V0IGNhY2hlLXRpbWluZwogICAgICogbGVha3MKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5U3RyaW5nIChyYXcgYmluYXJ5KQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmluMmhleCgkYmluYXJ5U3RyaW5nKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfc3RyaW5nKCRiaW5hcnlTdHJpbmcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGJpbmFyeVN0cmluZykgLiAnIGdpdmVuLicpOwogICAgICAgIH0KCiAgICAgICAgJGhleCA9ICcnOwogICAgICAgICRsZW4gPSBzZWxmOjpzdHJsZW4oJGJpbmFyeVN0cmluZyk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewogICAgICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGNodW5rICovCiAgICAgICAgICAgICRjaHVuayA9IHVucGFjaygnQycsICRiaW5hcnlTdHJpbmdbJGldKTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgICAgICRjID0gJGNodW5rWzFdICYgMHhmOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGIgKi8KICAgICAgICAgICAgJGIgPSAkY2h1bmtbMV0gPj4gNDsKICAgICAgICAgICAgJGhleCAuPSBwYWNrKAogICAgICAgICAgICAgICAgJ0NDJywKICAgICAgICAgICAgICAgICg4NyArICRiICsgKCgoJGIgLSAxMCkgPj4gOCkgJiB+MzgpKSwKICAgICAgICAgICAgICAgICg4NyArICRjICsgKCgoJGMgLSAxMCkgPj4gOCkgJiB+MzgpKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGhleDsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIGludG8gYSBoZXhhZGVjaW1hbCBzdHJpbmcgd2l0aG91dCBjYWNoZS10aW1pbmcKICAgICAqIGxlYWtzLCByZXR1cm5pbmcgdXBwZXJjYXNlIGxldHRlcnMgKGFzIHBlciBSRkMgNDY0OCkKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluX3N0cmluZyAocmF3IGJpbmFyeSkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJpbjJoZXhVcHBlcigkYmluX3N0cmluZykKICAgIHsKICAgICAgICAkaGV4ID0gJyc7CiAgICAgICAgJGxlbiA9IHNlbGY6OnN0cmxlbigkYmluX3N0cmluZyk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewogICAgICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGNodW5rICovCiAgICAgICAgICAgICRjaHVuayA9IHVucGFjaygnQycsICRiaW5fc3RyaW5nWyRpXSk7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBMb3dlciAxNiBiaXRzCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEB2YXIgaW50ICRjCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkYyA9ICRjaHVua1sxXSAmIDB4ZjsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBVcHBlciAxNiBiaXRzCiAgICAgICAgICAgICAqIEB2YXIgaW50ICRiCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkYiA9ICRjaHVua1sxXSA+PiA0OwoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFVzZSBwYWNrKCkgYW5kIGJpbmFyeSBvcGVyYXRvcnMgdG8gdHVybiB0aGUgdHdvIGludGVnZXJzCiAgICAgICAgICAgICAqIGludG8gaGV4YWRlY2ltYWwgY2hhcmFjdGVycy4gV2UgZG9uJ3QgdXNlIGNocigpIGhlcmUsIGJlY2F1c2UKICAgICAgICAgICAgICogaXQgdXNlcyBhIGxvb2t1cCB0YWJsZSBpbnRlcm5hbGx5IGFuZCB3ZSB3YW50IHRvIGF2b2lkCiAgICAgICAgICAgICAqIGNhY2hlLXRpbWluZyBzaWRlLWNoYW5uZWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgJGhleCAuPSBwYWNrKAogICAgICAgICAgICAgICAgJ0NDJywKICAgICAgICAgICAgICAgICg1NSArICRiICsgKCgoJGIgLSAxMCkgPj4gOCkgJiB+NikpLAogICAgICAgICAgICAgICAgKDU1ICsgJGMgKyAoKCgkYyAtIDEwKSA+PiA4KSAmIH42KSkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRoZXg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWNoZS10aW1pbmctc2FmZSB2YXJpYW50IG9mIG9yZCgpCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNocgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoclRvSW50KCRjaHIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGNocikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkY2hyKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJGNocikgIT09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignY2hyVG9JbnQoKSBleHBlY3RzIGEgc3RyaW5nIHRoYXQgaXMgZXhhY3RseSAxIGNoYXJhY3RlciBsb25nJyk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkY2h1bmsgKi8KICAgICAgICAkY2h1bmsgPSB1bnBhY2soJ0MnLCAkY2hyKTsKICAgICAgICByZXR1cm4gKGludCkgKCRjaHVua1sxXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0d28gc3RyaW5ncy4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGVmdAogICAgICogQHBhcmFtIHN0cmluZyAkcmlnaHQKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmUoJGxlZnQsICRyaWdodCwgJGxlbiA9IG51bGwpCiAgICB7CiAgICAgICAgJGxlZnRMZW4gPSBzZWxmOjpzdHJsZW4oJGxlZnQpOwogICAgICAgICRyaWdodExlbiA9IHNlbGY6OnN0cmxlbigkcmlnaHQpOwogICAgICAgIGlmICgkbGVuID09PSBudWxsKSB7CiAgICAgICAgICAgICRsZW4gPSBtYXgoJGxlZnRMZW4sICRyaWdodExlbik7CiAgICAgICAgICAgICRsZWZ0ID0gc3RyX3BhZCgkbGVmdCwgJGxlbiwgIlx4MDAiLCBTVFJfUEFEX1JJR0hUKTsKICAgICAgICAgICAgJHJpZ2h0ID0gc3RyX3BhZCgkcmlnaHQsICRsZW4sICJceDAwIiwgU1RSX1BBRF9SSUdIVCk7CiAgICAgICAgfQoKICAgICAgICAkZ3QgPSAwOwogICAgICAgICRlcSA9IDE7CiAgICAgICAgJGkgPSAkbGVuOwogICAgICAgIHdoaWxlICgkaSAhPT0gMCkgewogICAgICAgICAgICAtLSRpOwogICAgICAgICAgICAkZ3QgfD0gKChzZWxmOjpjaHJUb0ludCgkcmlnaHRbJGldKSAtIHNlbGY6OmNoclRvSW50KCRsZWZ0WyRpXSkpID4+IDgpICYgJGVxOwogICAgICAgICAgICAkZXEgJj0gKChzZWxmOjpjaHJUb0ludCgkcmlnaHRbJGldKSBeIHNlbGY6OmNoclRvSW50KCRsZWZ0WyRpXSkpIC0gMSkgPj4gODsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICgkZ3QgKyAkZ3QgKyAkZXEpIC0gMTsKICAgIH0KCiAgICAvKioKICAgICAqIElmIGEgdmFyaWFibGUgZG9lcyBub3QgbWF0Y2ggYSBnaXZlbiB0eXBlLCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1peGVkVmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAcGFyYW0gaW50ICRhcmd1bWVudEluZGV4CiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmVTY2FsYXJUeXBlKCYkbWl4ZWRWYXIgPSBudWxsLCAkdHlwZSA9ICd2b2lkJywgJGFyZ3VtZW50SW5kZXggPSAwKQogICAgewogICAgICAgIGlmIChmdW5jX251bV9hcmdzKCkgPT09IDApIHsKICAgICAgICAgICAgLyogVGF1dG9sb2d5LCBieSBkZWZhdWx0ICovCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGZ1bmNfbnVtX2FyZ3MoKSA9PT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNsYXJlZCB2b2lkLCBidXQgcGFzc2VkIGEgdmFyaWFibGUnKTsKICAgICAgICB9CiAgICAgICAgJHJlYWxUeXBlID0gc3RydG9sb3dlcihnZXR0eXBlKCRtaXhlZFZhcikpOwogICAgICAgICR0eXBlID0gc3RydG9sb3dlcigkdHlwZSk7CiAgICAgICAgc3dpdGNoICgkdHlwZSkgewogICAgICAgICAgICBjYXNlICdudWxsJzoKICAgICAgICAgICAgICAgIGlmICgkbWl4ZWRWYXIgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAnIC4gJGFyZ3VtZW50SW5kZXggLiAnIG11c3QgYmUgbnVsbCwgJyAuICRyZWFsVHlwZSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgIGNhc2UgJ2ludCc6CiAgICAgICAgICAgICAgICAkYWxsb3cgPSBhcnJheSgnaW50JywgJ2ludGVnZXInKTsKICAgICAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJHR5cGUsICRhbGxvdykpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAnIC4gJGFyZ3VtZW50SW5kZXggLiAnIG11c3QgYmUgYW4gaW50ZWdlciwgJyAuICRyZWFsVHlwZSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbWl4ZWRWYXIgPSAoaW50KSAkbWl4ZWRWYXI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6CiAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOgogICAgICAgICAgICAgICAgJGFsbG93ID0gYXJyYXkoJ2Jvb2wnLCAnYm9vbGVhbicpOwogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgJGFsbG93KSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50ICcgLiAkYXJndW1lbnRJbmRleCAuICcgbXVzdCBiZSBhIGJvb2xlYW4sICcgLiAkcmVhbFR5cGUgLiAnIGdpdmVuLicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG1peGVkVmFyID0gKGJvb2wpICRtaXhlZFZhcjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJG1peGVkVmFyKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50ICcgLiAkYXJndW1lbnRJbmRleCAuICcgbXVzdCBiZSBhIHN0cmluZywgJyAuICRyZWFsVHlwZSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbWl4ZWRWYXIgPSAoc3RyaW5nKSAkbWl4ZWRWYXI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZGVjaW1hbCc6CiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzoKICAgICAgICAgICAgICAgICRhbGxvdyA9IGFycmF5KCdkZWNpbWFsJywgJ2RvdWJsZScsICdmbG9hdCcpOwogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdHlwZSwgJGFsbG93KSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50ICcgLiAkYXJndW1lbnRJbmRleCAuICcgbXVzdCBiZSBhIGZsb2F0LCAnIC4gJHJlYWxUeXBlIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRtaXhlZFZhciA9IChmbG9hdCkgJG1peGVkVmFyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgICAgICBpZiAoIWlzX29iamVjdCgkbWl4ZWRWYXIpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgJyAuICRhcmd1bWVudEluZGV4IC4gJyBtdXN0IGJlIGFuIG9iamVjdCwgJyAuICRyZWFsVHlwZSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYXJyYXknOgogICAgICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkbWl4ZWRWYXIpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkbWl4ZWRWYXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbWl4ZWRWYXIgaW5zdGFuY2VvZiBBcnJheUFjY2VzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50ICcgLiAkYXJndW1lbnRJbmRleCAuICcgbXVzdCBiZSBhbiBhcnJheSwgJyAuICRyZWFsVHlwZSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1Vua25vd24gdHlwZSAoJyAuICRyZWFsVHlwZSAuJykgZG9lcyBub3QgbWF0Y2ggZXhwZWN0IHR5cGUgKCcgLiAkdHlwZSAuICcpJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRXZhbHVhdGUgd2hldGhlciBvciBub3QgdHdvIHN0cmluZ3MgYXJlIGVxdWFsIChpbiBjb25zdGFudC10aW1lKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxlZnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJpZ2h0CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc2hFcXVhbHMoJGxlZnQsICRyaWdodCkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkbGVmdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkbGVmdCkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkcmlnaHQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDIgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJHJpZ2h0KSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfY2FsbGFibGUoJ2hhc2hfZXF1YWxzJykpIHsKICAgICAgICAgICAgcmV0dXJuIGhhc2hfZXF1YWxzKCRsZWZ0LCAkcmlnaHQpOwogICAgICAgIH0KICAgICAgICAkZCA9IDA7CiAgICAgICAgLyoqIEB2YXIgaW50ICRsZW4gKi8KICAgICAgICAkbGVuID0gc2VsZjo6c3RybGVuKCRsZWZ0KTsKICAgICAgICBpZiAoJGxlbiAhPT0gc2VsZjo6c3RybGVuKCRyaWdodCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuOyArKyRpKSB7CiAgICAgICAgICAgICRkIHw9IHNlbGY6OmNoclRvSW50KCRsZWZ0WyRpXSkgXiBzZWxmOjpjaHJUb0ludCgkcmlnaHRbJGldKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZCAhPT0gMCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbGVmdCA9PT0gJHJpZ2h0OwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIGhleGFkZWNpbWFsIHN0cmluZyBpbnRvIGEgYmluYXJ5IHN0cmluZyB3aXRob3V0IGNhY2hlLXRpbWluZwogICAgICogbGVha3MKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGV4U3RyaW5nCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RyaWN0UGFkZGluZwogICAgICogQHJldHVybiBzdHJpbmcgKHJhdyBiaW5hcnkpCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhleDJiaW4oJGhleFN0cmluZywgJHN0cmljdFBhZGRpbmcgPSBmYWxzZSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkaGV4U3RyaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRoZXhTdHJpbmcpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIGludCAkaGV4X3BvcyAqLwogICAgICAgICRoZXhfcG9zID0gMDsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJpbiAqLwogICAgICAgICRiaW4gPSAnJzsKICAgICAgICAvKiogQHZhciBpbnQgJGNfYWNjICovCiAgICAgICAgJGNfYWNjID0gMDsKICAgICAgICAvKiogQHZhciBpbnQgJGhleF9sZW4gKi8KICAgICAgICAkaGV4X2xlbiA9IHNlbGY6OnN0cmxlbigkaGV4U3RyaW5nKTsKICAgICAgICAvKiogQHZhciBpbnQgJHN0YXRlICovCiAgICAgICAgJHN0YXRlID0gMDsKICAgICAgICBpZiAoKCRoZXhfbGVuICYgMSkgIT09IDApIHsKICAgICAgICAgICAgaWYgKCRzdHJpY3RQYWRkaW5nKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMnCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGhleFN0cmluZyA9ICcwJyAuICRoZXhTdHJpbmc7CiAgICAgICAgICAgICAgICArKyRoZXhfbGVuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkY2h1bmsgPSB1bnBhY2soJ0MqJywgJGhleFN0cmluZyk7CiAgICAgICAgd2hpbGUgKCRoZXhfcG9zIDwgJGhleF9sZW4pIHsKICAgICAgICAgICAgKyskaGV4X3BvczsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgICAgICRjID0gJGNodW5rWyRoZXhfcG9zXTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjX251bSAqLwogICAgICAgICAgICAkY19udW0gPSAkYyBeIDQ4OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGNfbnVtMCAqLwogICAgICAgICAgICAkY19udW0wID0gKCRjX251bSAtIDEwKSA+PiA4OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGNfYWxwaGEgKi8KICAgICAgICAgICAgJGNfYWxwaGEgPSAoJGMgJiB+MzIpIC0gNTU7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY19hbHBoYTAgKi8KICAgICAgICAgICAgJGNfYWxwaGEwID0gKCgkY19hbHBoYSAtIDEwKSBeICgkY19hbHBoYSAtIDE2KSkgPj4gODsKICAgICAgICAgICAgaWYgKCgkY19udW0wIHwgJGNfYWxwaGEwKSA9PT0gMCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdoZXgyYmluKCkgb25seSBleHBlY3RzIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMnCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY192YWwgKi8KICAgICAgICAgICAgJGNfdmFsID0gKCRjX251bTAgJiAkY19udW0pIHwgKCRjX2FscGhhICYgJGNfYWxwaGEwKTsKICAgICAgICAgICAgaWYgKCRzdGF0ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgJGNfYWNjID0gJGNfdmFsICogMTY7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYmluIC49IHBhY2soJ0MnLCAkY19hY2MgfCAkY192YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdGF0ZSBePSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGJpbjsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm4gYW4gYXJyYXkgb2YgaW50ZWdlcnMgaW50byBhIHN0cmluZwogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LCBpbnQ+ICRpbnRzCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGludEFycmF5VG9TdHJpbmcoYXJyYXkgJGludHMpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRhcmdzICovCiAgICAgICAgJGFyZ3MgPSAkaW50czsKICAgICAgICBmb3JlYWNoICgkYXJncyBhcyAkaSA9PiAkdikgewogICAgICAgICAgICAkYXJnc1skaV0gPSAoaW50KSAoJHYgJiAweGZmKTsKICAgICAgICB9CiAgICAgICAgYXJyYXlfdW5zaGlmdCgkYXJncywgc3RyX3JlcGVhdCgnQycsIGNvdW50KCRpbnRzKSkpOwogICAgICAgIHJldHVybiAoc3RyaW5nKSAoY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ3BhY2snLCAkYXJncykpOwogICAgfQoKICAgIC8qKgogICAgICogQ2FjaGUtdGltaW5nLXNhZmUgdmFyaWFudCBvZiBvcmQoKQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGludFRvQ2hyKCRpbnQpCiAgICB7CiAgICAgICAgcmV0dXJuIHBhY2soJ0MnLCAkaW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIExvYWQgYSAzIGNoYXJhY3RlciBzdWJzdHJpbmcgaW50byBhbiBpbnRlZ2VyCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgUmFuZ2VFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZF8zKCRzdHJpbmcpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHN0cmluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkc3RyaW5nKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJHN0cmluZykgPCAzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdTdHJpbmcgbXVzdCBiZSAzIGJ5dGVzIG9yIG1vcmU7ICcgLiBzZWxmOjpzdHJsZW4oJHN0cmluZykgLiAnIGdpdmVuLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICR1bnBhY2tlZCAqLwogICAgICAgICR1bnBhY2tlZCA9IHVucGFjaygnVicsICRzdHJpbmcgLiAiXDAiKTsKICAgICAgICByZXR1cm4gKGludCkgKCR1bnBhY2tlZFsxXSAmIDB4ZmZmZmZmKTsKICAgIH0KCiAgICAvKioKICAgICAqIExvYWQgYSA0IGNoYXJhY3RlciBzdWJzdHJpbmcgaW50byBhbiBpbnRlZ2VyCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgUmFuZ2VFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZF80KCRzdHJpbmcpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHN0cmluZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkc3RyaW5nKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICAvKiBJbnB1dCB2YWxpZGF0aW9uOiAqLwogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJHN0cmluZykgPCA0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdTdHJpbmcgbXVzdCBiZSA0IGJ5dGVzIG9yIG1vcmU7ICcgLiBzZWxmOjpzdHJsZW4oJHN0cmluZykgLiAnIGdpdmVuLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICR1bnBhY2tlZCAqLwogICAgICAgICR1bnBhY2tlZCA9IHVucGFjaygnVicsICRzdHJpbmcpOwogICAgICAgIHJldHVybiAoaW50KSAoJHVucGFja2VkWzFdICYgMHhmZmZmZmZmZik7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGEgOCBjaGFyYWN0ZXIgc3Vic3RyaW5nIGludG8gYW4gaW50ZWdlcgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkNjRfbGUoJHN0cmluZykKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkc3RyaW5nKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRzdHJpbmcpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc3RyaW5nKSA8IDQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1N0cmluZyBtdXN0IGJlIDQgYnl0ZXMgb3IgbW9yZTsgJyAuIHNlbGY6OnN0cmxlbigkc3RyaW5nKSAuICcgZ2l2ZW4uJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPj0gNTA2MDMgJiYgUEhQX0lOVF9TSVpFID09PSA4KSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkdW5wYWNrZWQgKi8KICAgICAgICAgICAgJHVucGFja2VkID0gdW5wYWNrKCdQJywgJHN0cmluZyk7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAkdW5wYWNrZWRbMV07CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJHJlc3VsdCAqLwogICAgICAgICRyZXN1bHQgID0gKHNlbGY6OmNoclRvSW50KCRzdHJpbmdbMF0pICYgMHhmZik7CiAgICAgICAgJHJlc3VsdCB8PSAoc2VsZjo6Y2hyVG9JbnQoJHN0cmluZ1sxXSkgJiAweGZmKSA8PCAgODsKICAgICAgICAkcmVzdWx0IHw9IChzZWxmOjpjaHJUb0ludCgkc3RyaW5nWzJdKSAmIDB4ZmYpIDw8IDE2OwogICAgICAgICRyZXN1bHQgfD0gKHNlbGY6OmNoclRvSW50KCRzdHJpbmdbM10pICYgMHhmZikgPDwgMjQ7CiAgICAgICAgJHJlc3VsdCB8PSAoc2VsZjo6Y2hyVG9JbnQoJHN0cmluZ1s0XSkgJiAweGZmKSA8PCAzMjsKICAgICAgICAkcmVzdWx0IHw9IChzZWxmOjpjaHJUb0ludCgkc3RyaW5nWzVdKSAmIDB4ZmYpIDw8IDQwOwogICAgICAgICRyZXN1bHQgfD0gKHNlbGY6OmNoclRvSW50KCRzdHJpbmdbNl0pICYgMHhmZikgPDwgNDg7CiAgICAgICAgJHJlc3VsdCB8PSAoc2VsZjo6Y2hyVG9JbnQoJHN0cmluZ1s3XSkgJiAweGZmKSA8PCA1NjsKICAgICAgICByZXR1cm4gKGludCkgJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZWZ0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyaWdodAogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lbWNtcCgkbGVmdCwgJHJpZ2h0KQogICAgewogICAgICAgIGlmIChzZWxmOjpoYXNoRXF1YWxzKCRsZWZ0LCAkcmlnaHQpKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBNdWx0aXBseSB0d28gaW50ZWdlcnMgaW4gY29uc3RhbnQtdGltZQogICAgICoKICAgICAqIE1pY3JvLWFyY2hpdGVjdHVyZSB0aW1pbmcgc2lkZS1jaGFubmVscyBjYXVzZWQgYnkgaG93IHlvdXIgQ1BVCiAgICAgKiBpbXBsZW1lbnRzIG11bHRpcGxpY2F0aW9uIGFyZSBiZXN0IHByZXZlbnRlZCBieSBuZXZlciB1c2luZyB0aGUKICAgICAqIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9ycyBhbmQgZW5zdXJpbmcgdGhhdCBvdXIgY29kZSBhbHdheXMgdGFrZXMKICAgICAqIHRoZSBzYW1lIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIGNvbXBsZXRlLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZXMKICAgICAqIG9mICRhIGFuZCAkYi4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYQogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHBhcmFtIGludCAkc2l6ZSBMaW1pdHMgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zICh1c2VmdWwgZm9yIHNtYWxsLAogICAgICogICAgICAgICAgICAgICAgICBjb25zdGFudCBvcGVyYW5kcykKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbXVsKCRhLCAkYiwgJHNpemUgPSAwKQogICAgewogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAoJGEgKiAkYik7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgJGRlZmF1bHRTaXplID0gbnVsbDsKICAgICAgICAvKiogQHZhciBpbnQgJGRlZmF1bHRTaXplICovCiAgICAgICAgaWYgKCEkZGVmYXVsdFNpemUpIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRkZWZhdWx0U2l6ZSAqLwogICAgICAgICAgICAkZGVmYXVsdFNpemUgPSAoUEhQX0lOVF9TSVpFIDw8IDMpIC0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCRzaXplIDwgMSkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KICAgICAgICAgICAgJHNpemUgPSAkZGVmYXVsdFNpemU7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwoKICAgICAgICAkYyA9IDA7CgogICAgICAgIC8qKgogICAgICAgICAqIE1hc2sgaXMgZWl0aGVyIC0xIG9yIDAuCiAgICAgICAgICoKICAgICAgICAgKiAtMSBpbiBiaW5hcnkgbG9va3MgbGlrZSAweDExMTEgLi4uIDExMTEKICAgICAgICAgKiAgMCBpbiBiaW5hcnkgbG9va3MgbGlrZSAweDAwMDAgLi4uIDAwMDAKICAgICAgICAgKgogICAgICAgICAqIEB2YXIgaW50CiAgICAgICAgICovCiAgICAgICAgJG1hc2sgPSAtKCgkYiA+PiAoKGludCkgJGRlZmF1bHRTaXplKSkgJiAxKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRW5zdXJlICRiIGlzIGEgcG9zaXRpdmUgaW50ZWdlciwgd2l0aG91dCBjcmVhdGluZwogICAgICAgICAqIGEgYnJhbmNoaW5nIHNpZGUtY2hhbm5lbAogICAgICAgICAqCiAgICAgICAgICogQHZhciBpbnQgJGIKICAgICAgICAgKi8KICAgICAgICAkYiA9ICgkYiAmIH4kbWFzaykgfCAoJG1hc2sgJiAtJGIpOwoKICAgICAgICAvKioKICAgICAgICAgKiBVbmxlc3MgJHNpemUgaXMgcHJvdmlkZWQ6CiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIGxvb3AgYWx3YXlzIHJ1bnMgMzIgdGltZXMgd2hlbiBQSFBfSU5UX1NJWkUgaXMgNC4KICAgICAgICAgKiBUaGlzIGxvb3AgYWx3YXlzIHJ1bnMgNjQgdGltZXMgd2hlbiBQSFBfSU5UX1NJWkUgaXMgOC4KICAgICAgICAgKi8KICAgICAgICBmb3IgKCRpID0gJHNpemU7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgJGMgKz0gKGludCkgKCRhICYgLSgkYiAmIDEpKTsKICAgICAgICAgICAgJGEgPDw9IDE7CiAgICAgICAgICAgICRiID4+PSAxOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgJGIgd2FzIG5lZ2F0aXZlLCB3ZSB0aGVuIGFwcGx5IHRoZSBzYW1lIHZhbHVlIHRvICRjIGhlcmUuCiAgICAgICAgICogSXQgZG9lc24ndCBtYXR0ZXIgbXVjaCBpZiAkYSB3YXMgbmVnYXRpdmU7IHRoZSAkYyArPSBhYm92ZSB3b3VsZAogICAgICAgICAqIGhhdmUgcHJvZHVjZWQgYSBuZWdhdGl2ZSBpbnRlZ2VyIHRvIGJlZ2luIHdpdGguIEJ1dCBhIG5lZ2F0aXZlICRiCiAgICAgICAgICogbWFrZXMgJGIgPj49IDEgbmV2ZXIgcmV0dXJuIDAsIHNvIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGluY29ycmVjdAogICAgICAgICAqIHJlc3VsdHMuCiAgICAgICAgICoKICAgICAgICAgKiBUaGUgZW5kIHJlc3VsdCBpcyB3aGF0IHdlJ2QgZXhwZWN0IGZyb20gaW50ZWdlciBtdWx0aXBsaWNhdGlvbi4KICAgICAgICAgKi8KICAgICAgICByZXR1cm4gKGludCkgKCgkYyAmIH4kbWFzaykgfCAoJG1hc2sgJiAtJGMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYW55IGFyYml0cmFyeSBudW1iZXJzIGludG8gdHdvIDMyLWJpdCBpbnRlZ2VycyB0aGF0IHJlcHJlc2VudAogICAgICogYSA2NC1iaXQgaW50ZWdlci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludHxmbG9hdCAkbnVtCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG51bWVyaWNUbzY0Qml0SW50ZWdlcigkbnVtKQogICAgewogICAgICAgICRoaWdoID0gMDsKICAgICAgICAvKiogQHZhciBpbnQgJGxvdyAqLwogICAgICAgICRsb3cgPSAkbnVtICYgMHhmZmZmZmZmZjsKCiAgICAgICAgaWYgKCgrKGFicygkbnVtKSkpID49IDEpIHsKICAgICAgICAgICAgaWYgKCRudW0gPiAwKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGhpZ2ggKi8KICAgICAgICAgICAgICAgICRoaWdoID0gbWluKCgrKGZsb29yKCRudW0vNDI5NDk2NzI5NikpKSwgNDI5NDk2NzI5NSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGhpZ2ggKi8KICAgICAgICAgICAgICAgICRoaWdoID0gfn4oKCsoY2VpbCgoJG51bSAtICgrKCh+figkbnVtKSkpKSkvNDI5NDk2NzI5NikpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5KChpbnQpICRoaWdoLCAoaW50KSAkbG93KTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3JlIGEgMjQtYml0IGludGVnZXIgaW50byBhIHN0cmluZywgdHJlYXRpbmcgaXQgYXMgYmlnLWVuZGlhbi4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW50CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZV8zKCRpbnQpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19pbnQoJGludCkpIHsKICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJGludCkpIHsKICAgICAgICAgICAgICAgICRpbnQgPSAoaW50KSAkaW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGFuIGludGVnZXIsICcgLiBnZXR0eXBlKCRpbnQpIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKiogQHZhciBzdHJpbmcgJHBhY2tlZCAqLwogICAgICAgICRwYWNrZWQgPSBwYWNrKCdOJywgJGludCk7CiAgICAgICAgcmV0dXJuIHNlbGY6OnN1YnN0cigkcGFja2VkLCAxLCAzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3JlIGEgMzItYml0IGludGVnZXIgaW50byBhIHN0cmluZywgdHJlYXRpbmcgaXQgYXMgbGl0dGxlLWVuZGlhbi4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW50CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9yZTMyX2xlKCRpbnQpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19pbnQoJGludCkpIHsKICAgICAgICAgICAgaWYgKGlzX251bWVyaWMoJGludCkpIHsKICAgICAgICAgICAgICAgICRpbnQgPSAoaW50KSAkaW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGFuIGludGVnZXIsICcgLiBnZXR0eXBlKCRpbnQpIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRwYWNrZWQgKi8KICAgICAgICAkcGFja2VkID0gcGFjaygnVicsICRpbnQpOwogICAgICAgIHJldHVybiAkcGFja2VkOwogICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgYSAzMi1iaXQgaW50ZWdlciBpbnRvIGEgc3RyaW5nLCB0cmVhdGluZyBpdCBhcyBiaWctZW5kaWFuLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0b3JlXzQoJGludCkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX2ludCgkaW50KSkgewogICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkaW50KSkgewogICAgICAgICAgICAgICAgJGludCA9IChpbnQpICRpbnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYW4gaW50ZWdlciwgJyAuIGdldHR5cGUoJGludCkgLiAnIGdpdmVuLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHBhY2tlZCAqLwogICAgICAgICRwYWNrZWQgPSBwYWNrKCdOJywgJGludCk7CiAgICAgICAgcmV0dXJuICRwYWNrZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdG9yZXMgYSA2NC1iaXQgaW50ZWdlciBhcyBhbiBzdHJpbmcsIHRyZWF0aW5nIGl0IGFzIGxpdHRsZS1lbmRpYW4uCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGludAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmU2NF9sZSgkaW50KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfaW50KCRpbnQpKSB7CiAgICAgICAgICAgIGlmIChpc19udW1lcmljKCRpbnQpKSB7CiAgICAgICAgICAgICAgICAkaW50ID0gKGludCkgJGludDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBhbiBpbnRlZ2VyLCAnIC4gZ2V0dHlwZSgkaW50KSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChQSFBfSU5UX1NJWkUgPT09IDgpIHsKICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEID49IDUwNjAzKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBzdHJpbmcgJHBhY2tlZCAqLwogICAgICAgICAgICAgICAgJHBhY2tlZCA9IHBhY2soJ1AnLCAkaW50KTsKICAgICAgICAgICAgICAgIHJldHVybiAkcGFja2VkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzZWxmOjppbnRUb0NocigkaW50ICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gIDgpICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gMTYpICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gMjQpICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gMzIpICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gNDApICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gNDgpICYgMHhmZikgLgogICAgICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gNTYpICYgMHhmZik7CiAgICAgICAgfQogICAgICAgIGlmICgkaW50ID4gUEhQX0lOVF9NQVgpIHsKICAgICAgICAgICAgbGlzdCgkaGlCLCAkaW50KSA9IHNlbGY6Om51bWVyaWNUbzY0Qml0SW50ZWdlcigkaW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaGlCID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkaW50ICAgICAgKSAmIDB4ZmYpIC4KICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRpbnQgPj4gIDgpICYgMHhmZikgLgogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGludCA+PiAxNikgJiAweGZmKSAuCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkaW50ID4+IDI0KSAmIDB4ZmYpIC4KICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoJGhpQiAmIDB4ZmYpIC4KICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRoaUIgPj4gIDgpICYgMHhmZikgLgogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGhpQiA+PiAxNikgJiAweGZmKSAuCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkaGlCID4+IDI0KSAmIDB4ZmYpOwogICAgfQoKICAgIC8qKgogICAgICogU2FmZSBzdHJpbmcgbGVuZ3RoCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZWYgbWJzdHJpbmcuZnVuY19vdmVybG9hZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RybGVuKCRzdHIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHN0cikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKGludCkgKAogICAgICAgIHNlbGY6OmlzTWJTdHJpbmdPdmVycmlkZSgpCiAgICAgICAgICAgID8gbWJfc3RybGVuKCRzdHIsICc4Yml0JykKICAgICAgICAgICAgOiBzdHJsZW4oJHN0cikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogVHVybiBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIGludGVnZXJzCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICogQHJldHVybiBhcnJheTxpbnQsIGludD4KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nVG9JbnRBcnJheSgkc3RyaW5nKQogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRzdHJpbmcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICAgICAqLwogICAgICAgICR2YWx1ZXMgPSBhcnJheV92YWx1ZXMoCiAgICAgICAgICAgIHVucGFjaygnQyonLCAkc3RyaW5nKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYWZlIHN1YnN0cmluZwogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmVmIG1ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0CiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1YnN0cigkc3RyLCAkc3RhcnQgPSAwLCAkbGVuZ3RoID0gbnVsbCkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkc3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQnKTsKICAgICAgICB9CgogICAgICAgIGlmICgkbGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjppc01iU3RyaW5nT3ZlcnJpZGUoKSkgewogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDQwMCAmJiAkbGVuZ3RoID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbGVuZ3RoID0gc2VsZjo6c3RybGVuKCRzdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdWIgPSAoc3RyaW5nKSBtYl9zdWJzdHIoJHN0ciwgJHN0YXJ0LCAkbGVuZ3RoLCAnOGJpdCcpOwogICAgICAgIH0gZWxzZWlmICgkbGVuZ3RoID09PSBudWxsKSB7CiAgICAgICAgICAgICRzdWIgPSAoc3RyaW5nKSBzdWJzdHIoJHN0ciwgJHN0YXJ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc3ViID0gKHN0cmluZykgc3Vic3RyKCRzdHIsICRzdGFydCwgJGxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkc3ViKSkgewogICAgICAgICAgICByZXR1cm4gJHN1YjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICcnOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBhIDE2LWNoYXJhY3RlciBieXRlIHN0cmluZyBpbiBjb25zdGFudCB0aW1lLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeV8xNigkYSwgJGIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkYikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpoYXNoRXF1YWxzKAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGEsIDAsIDE2KSwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRiLCAwLCAxNikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSBhIDMyLWNoYXJhY3RlciBieXRlIHN0cmluZyBpbiBjb25zdGFudCB0aW1lLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeV8zMigkYSwgJGIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkYikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpoYXNoRXF1YWxzKAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGEsIDAsIDMyKSwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRiLCAwLCAzMikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlICRhIF4gJGIgZm9yIHR3byBzdHJpbmdzLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB4b3JTdHJpbmdzKCRhLCAkYikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkYSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRiKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSAoJGEgXiAkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IG1ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQgaXMgaW4gZWZmZWN0LgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc01iU3RyaW5nT3ZlcnJpZGUoKQogICAgewogICAgICAgIHN0YXRpYyAkbWJzdHJpbmcgPSBudWxsOwoKICAgICAgICBpZiAoJG1ic3RyaW5nID09PSBudWxsKSB7CiAgICAgICAgICAgICRtYnN0cmluZyA9IGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykKICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICgoaW50KSAoaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpKSAmIE1CX09WRVJMT0FEX1NUUklORyk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGJvb2wgJG1ic3RyaW5nICovCgogICAgICAgIHJldHVybiAkbWJzdHJpbmc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/X25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9YMjU1MTknLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9YMjU1MTkKICovCmFic3RyYWN0IGNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9YMjU1MTkgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOQp7CiAgICAvKioKICAgICAqIEFsdGVycyB0aGUgb2JqZWN0cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QgaW4gcGxhY2UuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRnCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9jc3dhcCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZiwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZywKICAgICAgICAkYiA9IDAKICAgICkgewogICAgICAgICRmMCA9IChpbnQpICRmWzBdOwogICAgICAgICRmMSA9IChpbnQpICRmWzFdOwogICAgICAgICRmMiA9IChpbnQpICRmWzJdOwogICAgICAgICRmMyA9IChpbnQpICRmWzNdOwogICAgICAgICRmNCA9IChpbnQpICRmWzRdOwogICAgICAgICRmNSA9IChpbnQpICRmWzVdOwogICAgICAgICRmNiA9IChpbnQpICRmWzZdOwogICAgICAgICRmNyA9IChpbnQpICRmWzddOwogICAgICAgICRmOCA9IChpbnQpICRmWzhdOwogICAgICAgICRmOSA9IChpbnQpICRmWzldOwogICAgICAgICRnMCA9IChpbnQpICRnWzBdOwogICAgICAgICRnMSA9IChpbnQpICRnWzFdOwogICAgICAgICRnMiA9IChpbnQpICRnWzJdOwogICAgICAgICRnMyA9IChpbnQpICRnWzNdOwogICAgICAgICRnNCA9IChpbnQpICRnWzRdOwogICAgICAgICRnNSA9IChpbnQpICRnWzVdOwogICAgICAgICRnNiA9IChpbnQpICRnWzZdOwogICAgICAgICRnNyA9IChpbnQpICRnWzddOwogICAgICAgICRnOCA9IChpbnQpICRnWzhdOwogICAgICAgICRnOSA9IChpbnQpICRnWzldOwogICAgICAgICRiID0gLSRiOwogICAgICAgICR4MCA9ICgkZjAgXiAkZzApICYgJGI7CiAgICAgICAgJHgxID0gKCRmMSBeICRnMSkgJiAkYjsKICAgICAgICAkeDIgPSAoJGYyIF4gJGcyKSAmICRiOwogICAgICAgICR4MyA9ICgkZjMgXiAkZzMpICYgJGI7CiAgICAgICAgJHg0ID0gKCRmNCBeICRnNCkgJiAkYjsKICAgICAgICAkeDUgPSAoJGY1IF4gJGc1KSAmICRiOwogICAgICAgICR4NiA9ICgkZjYgXiAkZzYpICYgJGI7CiAgICAgICAgJHg3ID0gKCRmNyBeICRnNykgJiAkYjsKICAgICAgICAkeDggPSAoJGY4IF4gJGc4KSAmICRiOwogICAgICAgICR4OSA9ICgkZjkgXiAkZzkpICYgJGI7CiAgICAgICAgJGZbMF0gPSAkZjAgXiAkeDA7CiAgICAgICAgJGZbMV0gPSAkZjEgXiAkeDE7CiAgICAgICAgJGZbMl0gPSAkZjIgXiAkeDI7CiAgICAgICAgJGZbM10gPSAkZjMgXiAkeDM7CiAgICAgICAgJGZbNF0gPSAkZjQgXiAkeDQ7CiAgICAgICAgJGZbNV0gPSAkZjUgXiAkeDU7CiAgICAgICAgJGZbNl0gPSAkZjYgXiAkeDY7CiAgICAgICAgJGZbN10gPSAkZjcgXiAkeDc7CiAgICAgICAgJGZbOF0gPSAkZjggXiAkeDg7CiAgICAgICAgJGZbOV0gPSAkZjkgXiAkeDk7CiAgICAgICAgJGdbMF0gPSAkZzAgXiAkeDA7CiAgICAgICAgJGdbMV0gPSAkZzEgXiAkeDE7CiAgICAgICAgJGdbMl0gPSAkZzIgXiAkeDI7CiAgICAgICAgJGdbM10gPSAkZzMgXiAkeDM7CiAgICAgICAgJGdbNF0gPSAkZzQgXiAkeDQ7CiAgICAgICAgJGdbNV0gPSAkZzUgXiAkeDU7CiAgICAgICAgJGdbNl0gPSAkZzYgXiAkeDY7CiAgICAgICAgJGdbN10gPSAkZzcgXiAkeDc7CiAgICAgICAgJGdbOF0gPSAkZzggXiAkeDg7CiAgICAgICAgJGdbOV0gPSAkZzkgXiAkeDk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfbXVsMTIxNjY2KFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgICRoID0gYXJyYXkoCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZlswXSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZlsxXSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZlsyXSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZlszXSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls0XSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls1XSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls2XSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls3XSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls4XSwgMTIxNjY2LCAxNyksCiAgICAgICAgICAgIHNlbGY6Om11bCgoaW50KSAkZls5XSwgMTIxNjY2LCAxNykKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5OSAqLwogICAgICAgICRjYXJyeTkgPSAoJGhbOV0gKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoWzBdICs9IHNlbGY6Om11bCgkY2Fycnk5LCAxOSwgNSk7CiAgICAgICAgJGhbOV0gLT0gJGNhcnJ5OSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MSAqLwogICAgICAgICRjYXJyeTEgPSAoJGhbMV0gKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoWzJdICs9ICRjYXJyeTE7CiAgICAgICAgJGhbMV0gLT0gJGNhcnJ5MSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5MyAqLwogICAgICAgICRjYXJyeTMgPSAoJGhbM10gKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoWzRdICs9ICRjYXJyeTM7CiAgICAgICAgJGhbM10gLT0gJGNhcnJ5MyA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NSAqLwogICAgICAgICRjYXJyeTUgPSAoJGhbNV0gKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoWzZdICs9ICRjYXJyeTU7CiAgICAgICAgJGhbNV0gLT0gJGNhcnJ5NSA8PCAyNTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5NyAqLwogICAgICAgICRjYXJyeTcgPSAoJGhbN10gKyAoMSA8PCAyNCkpID4+IDI1OwogICAgICAgICRoWzhdICs9ICRjYXJyeTc7CiAgICAgICAgJGhbN10gLT0gJGNhcnJ5NyA8PCAyNTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gKCRoWzBdICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaFsxXSArPSAkY2FycnkwOwogICAgICAgICRoWzBdIC09ICRjYXJyeTAgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gKCRoWzJdICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaFszXSArPSAkY2FycnkyOwogICAgICAgICRoWzJdIC09ICRjYXJyeTIgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gKCRoWzRdICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaFs1XSArPSAkY2Fycnk0OwogICAgICAgICRoWzRdIC09ICRjYXJyeTQgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gKCRoWzZdICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaFs3XSArPSAkY2Fycnk2OwogICAgICAgICRoWzZdIC09ICRjYXJyeTYgPDwgMjY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gKCRoWzhdICsgKDEgPDwgMjUpKSA+PiAyNjsKICAgICAgICAkaFs5XSArPSAkY2Fycnk4OwogICAgICAgICRoWzhdIC09ICRjYXJyeTggPDwgMjY7CgogICAgICAgIGZvcmVhY2ggKCRoIGFzICRpID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkaFskaV0gPSAoaW50KSAkdmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KCRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBJbmxpbmUgY29tbWVudHMgcHJlY2VkZWQgYnkgIyBhcmUgZnJvbSBsaWJzb2RpdW0ncyByZWYxMCBjb2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X3JlZjEwKCRuLCAkcCkKICAgIHsKICAgICAgICAjIGZvciAoaSA9IDA7aSA8IDMyOysraSkgZVtpXSA9IG5baV07CiAgICAgICAgJGUgPSAnJyAuICRuOwogICAgICAgICMgZVswXSAmPSAyNDg7CiAgICAgICAgJGVbMF0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGVbMF0pICYgMjQ4CiAgICAgICAgKTsKICAgICAgICAjIGVbMzFdICY9IDEyNzsKICAgICAgICAjIGVbMzFdIHw9IDY0OwogICAgICAgICRlWzMxXSA9IHNlbGY6OmludFRvQ2hyKAogICAgICAgICAgICAoc2VsZjo6Y2hyVG9JbnQoJGVbMzFdKSAmIDEyNykgfCA2NAogICAgICAgICk7CiAgICAgICAgIyBmZV9mcm9tYnl0ZXMoeDEscCk7CiAgICAgICAgJHgxID0gc2VsZjo6ZmVfZnJvbWJ5dGVzKCRwKTsKICAgICAgICAjIGZlXzEoeDIpOwogICAgICAgICR4MiA9IHNlbGY6OmZlXzEoKTsKICAgICAgICAjIGZlXzAoejIpOwogICAgICAgICR6MiA9IHNlbGY6OmZlXzAoKTsKICAgICAgICAjIGZlX2NvcHkoeDMseDEpOwogICAgICAgICR4MyA9IHNlbGY6OmZlX2NvcHkoJHgxKTsKICAgICAgICAjIGZlXzEoejMpOwogICAgICAgICR6MyA9IHNlbGY6OmZlXzEoKTsKCiAgICAgICAgIyBzd2FwID0gMDsKICAgICAgICAvKiogQHZhciBpbnQgJHN3YXAgKi8KICAgICAgICAkc3dhcCA9IDA7CgogICAgICAgICMgZm9yIChwb3MgPSAyNTQ7cG9zID49IDA7LS1wb3MpIHsKICAgICAgICBmb3IgKCRwb3MgPSAyNTQ7ICRwb3MgPj0gMDsgLS0kcG9zKSB7CiAgICAgICAgICAgICMgYiA9IGVbcG9zIC8gOF0gPj4gKHBvcyAmIDcpOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGIgKi8KICAgICAgICAgICAgJGIgPSBzZWxmOjpjaHJUb0ludCgKICAgICAgICAgICAgICAgICAgICAkZVsoaW50KSBmbG9vcigkcG9zIC8gOCldCiAgICAgICAgICAgICAgICApID4+ICgkcG9zICYgNyk7CiAgICAgICAgICAgICMgYiAmPSAxOwogICAgICAgICAgICAkYiAmPSAxOwogICAgICAgICAgICAjIHN3YXAgXj0gYjsKICAgICAgICAgICAgJHN3YXAgXj0gJGI7CiAgICAgICAgICAgICMgZmVfY3N3YXAoeDIseDMsc3dhcCk7CiAgICAgICAgICAgIHNlbGY6OmZlX2Nzd2FwKCR4MiwgJHgzLCAkc3dhcCk7CiAgICAgICAgICAgICMgZmVfY3N3YXAoejIsejMsc3dhcCk7CiAgICAgICAgICAgIHNlbGY6OmZlX2Nzd2FwKCR6MiwgJHozLCAkc3dhcCk7CiAgICAgICAgICAgICMgc3dhcCA9IGI7CiAgICAgICAgICAgICRzd2FwID0gJGI7CiAgICAgICAgICAgICMgZmVfc3ViKHRtcDAseDMsejMpOwogICAgICAgICAgICAkdG1wMCA9IHNlbGY6OmZlX3N1YigkeDMsICR6Myk7CiAgICAgICAgICAgICMgZmVfc3ViKHRtcDEseDIsejIpOwogICAgICAgICAgICAkdG1wMSA9IHNlbGY6OmZlX3N1YigkeDIsICR6Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh4Mix4Mix6Mik7CiAgICAgICAgICAgICR4MiA9IHNlbGY6OmZlX2FkZCgkeDIsICR6Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh6Mix4Myx6Myk7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX2FkZCgkeDMsICR6Myk7CgogICAgICAgICAgICAjIGZlX211bCh6Myx0bXAwLHgyKTsKICAgICAgICAgICAgJHozID0gc2VsZjo6ZmVfbXVsKCR0bXAwLCAkeDIpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejIsejIsdG1wMSk7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX211bCgkejIsICR0bXAxKTsKCiAgICAgICAgICAgICMgZmVfc3EodG1wMCx0bXAxKTsKICAgICAgICAgICAgJHRtcDAgPSBzZWxmOjpmZV9zcSgkdG1wMSk7CgogICAgICAgICAgICAjIGZlX3NxKHRtcDEseDIpOwogICAgICAgICAgICAkdG1wMSA9IHNlbGY6OmZlX3NxKCR4Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh4Myx6Myx6Mik7CiAgICAgICAgICAgICR4MyA9IHNlbGY6OmZlX2FkZCgkejMsICR6Mik7CgogICAgICAgICAgICAjIGZlX3N1Yih6Mix6Myx6Mik7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX3N1YigkejMsICR6Mik7CgogICAgICAgICAgICAjIGZlX211bCh4Mix0bXAxLHRtcDApOwogICAgICAgICAgICAkeDIgPSBzZWxmOjpmZV9tdWwoJHRtcDEsICR0bXAwKTsKCiAgICAgICAgICAgICMgZmVfc3ViKHRtcDEsdG1wMSx0bXAwKTsKICAgICAgICAgICAgJHRtcDEgPSBzZWxmOjpmZV9zdWIoJHRtcDEsICR0bXAwKTsKCiAgICAgICAgICAgICMgZmVfc3EoejIsejIpOwogICAgICAgICAgICAkejIgPSBzZWxmOjpmZV9zcSgkejIpOwoKICAgICAgICAgICAgIyBmZV9tdWwxMjE2NjYoejMsdG1wMSk7CiAgICAgICAgICAgICR6MyA9IHNlbGY6OmZlX211bDEyMTY2NigkdG1wMSk7CgogICAgICAgICAgICAjIGZlX3NxKHgzLHgzKTsKICAgICAgICAgICAgJHgzID0gc2VsZjo6ZmVfc3EoJHgzKTsKCiAgICAgICAgICAgICMgZmVfYWRkKHRtcDAsdG1wMCx6Myk7CiAgICAgICAgICAgICR0bXAwID0gc2VsZjo6ZmVfYWRkKCR0bXAwLCAkejMpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejMseDEsejIpOwogICAgICAgICAgICAkejMgPSBzZWxmOjpmZV9tdWwoJHgxLCAkejIpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejIsdG1wMSx0bXAwKTsKICAgICAgICAgICAgJHoyID0gc2VsZjo6ZmVfbXVsKCR0bXAxLCAkdG1wMCk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX2Nzd2FwKHgyLHgzLHN3YXApOwogICAgICAgIHNlbGY6OmZlX2Nzd2FwKCR4MiwgJHgzLCAkc3dhcCk7CgogICAgICAgICMgZmVfY3N3YXAoejIsejMsc3dhcCk7CiAgICAgICAgc2VsZjo6ZmVfY3N3YXAoJHoyLCAkejMsICRzd2FwKTsKCiAgICAgICAgIyBmZV9pbnZlcnQoejIsejIpOwogICAgICAgICR6MiA9IHNlbGY6OmZlX2ludmVydCgkejIpOwoKICAgICAgICAjIGZlX211bCh4Mix4Mix6Mik7CiAgICAgICAgJHgyID0gc2VsZjo6ZmVfbXVsKCR4MiwgJHoyKTsKICAgICAgICAjIGZlX3RvYnl0ZXMocSx4Mik7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZlX3RvYnl0ZXMoJHgyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGVkd2FyZHNZCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUgJGVkd2FyZHNaCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZWR3YXJkc190b19tb250Z29tZXJ5KAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0ZlICRlZHdhcmRzWSwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9GZSAkZWR3YXJkc1oKICAgICkgewogICAgICAgICR0ZW1wWCA9IHNlbGY6OmZlX2FkZCgkZWR3YXJkc1osICRlZHdhcmRzWSk7CiAgICAgICAgJHRlbXBaID0gc2VsZjo6ZmVfc3ViKCRlZHdhcmRzWiwgJGVkd2FyZHNZKTsKICAgICAgICAkdGVtcFogPSBzZWxmOjpmZV9pbnZlcnQoJHRlbXBaKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmVfbXVsKCR0ZW1wWCwgJHRlbXBaKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9yZWYxMF9iYXNlKCRuKQogICAgewogICAgICAgICMgZm9yIChpID0gMDtpIDwgMzI7KytpKSBlW2ldID0gbltpXTsKICAgICAgICAkZSA9ICcnIC4gJG47CgogICAgICAgICMgZVswXSAmPSAyNDg7CiAgICAgICAgJGVbMF0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGVbMF0pICYgMjQ4CiAgICAgICAgKTsKCiAgICAgICAgIyBlWzMxXSAmPSAxMjc7CiAgICAgICAgIyBlWzMxXSB8PSA2NDsKICAgICAgICAkZVszMV0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgKHNlbGY6OmNoclRvSW50KCRlWzMxXSkgJiAxMjcpIHwgNjQKICAgICAgICApOwoKICAgICAgICAkQSA9IHNlbGY6OmdlX3NjYWxhcm11bHRfYmFzZSgkZSk7CiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCRBLT5ZIGluc3RhbmNlb2YgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUpCiAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAhKCRBLT5aIGluc3RhbmNlb2YgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0N1cnZlMjU1MTlfRmUpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ051bGwgcG9pbnRzIGVuY291bnRlcmVkJyk7CiAgICAgICAgfQogICAgICAgICRwayA9IHNlbGY6OmVkd2FyZHNfdG9fbW9udGdvbWVyeSgkQS0+WSwgJEEtPlopOwogICAgICAgIHJldHVybiBzZWxmOjpmZV90b2J5dGVzKCRwayk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9YQ2hhQ2hhMjAnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9YQ2hhQ2hhMjAKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9YQ2hhQ2hhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfSENoYUNoYTIwCnsKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmVhbSgkbGVuID0gNjQsICRub25jZSA9ICcnLCAka2V5ID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkbm9uY2UpICE9PSAyNCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdOb25jZSBtdXN0IGJlIDI0IGJ5dGVzIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY3J5cHRCeXRlcygKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHgoCiAgICAgICAgICAgICAgICBzZWxmOjpoQ2hhQ2hhMjAoCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRub25jZSwgMCwgMTYpLAogICAgICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgc3RyX3JlcGVhdCgiXHgwMCIsICRsZW4pCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpYwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmVhbVhvckljKCRtZXNzYWdlLCAkbm9uY2UgPSAnJywgJGtleSA9ICcnLCAkaWMgPSAnJykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRub25jZSkgIT09IDI0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ05vbmNlIG11c3QgYmUgMjQgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6ZW5jcnlwdEJ5dGVzKAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0N0eCgKICAgICAgICAgICAgICAgIHNlbGY6OmhDaGFDaGEyMChzZWxmOjpzdWJzdHIoJG5vbmNlLCAwLCAxNiksICRrZXkpLAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAgICAgJGljCiAgICAgICAgICAgICksCiAgICAgICAgICAgICRtZXNzYWdlCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core/XSalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9YU2Fsc2EyMCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1hTYWxzYTIwCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfWFNhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfSFNhbHNhMjAKewogICAgLyoqCiAgICAgKiBFeHBhbmQgYSBrZXkgYW5kIG5vbmNlIGludG8gYW4geHNhbHNhMjAga2V5c3RyZWFtLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB4c2Fsc2EyMCgkbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgJHJldCA9IHNlbGY6OnNhbHNhMjAoCiAgICAgICAgICAgICRsZW4sCiAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkbm9uY2UsIDE2LCA4KSwKICAgICAgICAgICAgc2VsZjo6aHNhbHNhMjAoJG5vbmNlLCAka2V5KQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0IGEgc3RyaW5nIHdpdGggWFNhbHNhMjAuIERvZXNuJ3QgcHJvdmlkZSBpbnRlZ3JpdHkuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB4c2Fsc2EyMF94b3IoJG1lc3NhZ2UsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6eG9yU3RyaW5ncygKICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgIHNlbGY6OnhzYWxzYTIwKAogICAgICAgICAgICAgICAgc2VsZjo6c3RybGVuKCRtZXNzYWdlKSwKICAgICAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgICAgICRrZXkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/BLAKE2b.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYgogKgogKiBCYXNlZCBvbiB0aGUgd29yayBvZiBEZXZpIE1hbmRpcmkgaW4gZGV2aS9zYWx0LgogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYiBleHRlbmRzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsCnsKICAgIC8qKgogICAgICogQHZhciBTcGxGaXhlZEFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGl2OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIGFycmF5PGludCwgaW50Pj4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkc2lnbWEgPSBhcnJheSgKICAgICAgICBhcnJheSggIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpLAogICAgICAgIGFycmF5KCAxNCwgMTAsICA0LCAgOCwgIDksIDE1LCAxMywgIDYsICAxLCAxMiwgIDAsICAyLCAxMSwgIDcsICA1LCAgMyksCiAgICAgICAgYXJyYXkoIDExLCAgOCwgMTIsICAwLCAgNSwgIDIsIDE1LCAxMywgMTAsIDE0LCAgMywgIDYsICA3LCAgMSwgIDksICA0KSwKICAgICAgICBhcnJheSggIDcsICA5LCAgMywgIDEsIDEzLCAxMiwgMTEsIDE0LCAgMiwgIDYsICA1LCAxMCwgIDQsICAwLCAxNSwgIDgpLAogICAgICAgIGFycmF5KCAgOSwgIDAsICA1LCAgNywgIDIsICA0LCAxMCwgMTUsIDE0LCAgMSwgMTEsIDEyLCAgNiwgIDgsICAzLCAxMyksCiAgICAgICAgYXJyYXkoICAyLCAxMiwgIDYsIDEwLCAgMCwgMTEsICA4LCAgMywgIDQsIDEzLCAgNywgIDUsIDE1LCAxNCwgIDEsICA5KSwKICAgICAgICBhcnJheSggMTIsICA1LCAgMSwgMTUsIDE0LCAxMywgIDQsIDEwLCAgMCwgIDcsICA2LCAgMywgIDksICAyLCAgOCwgMTEpLAogICAgICAgIGFycmF5KCAxMywgMTEsICA3LCAxNCwgMTIsICAxLCAgMywgIDksICA1LCAgMCwgMTUsICA0LCAgOCwgIDYsICAyLCAxMCksCiAgICAgICAgYXJyYXkoICA2LCAxNSwgMTQsICA5LCAxMSwgIDMsICAwLCAgOCwgMTIsICAyLCAxMywgIDcsICAxLCAgNCwgMTAsICA1KSwKICAgICAgICBhcnJheSggMTAsICAyLCAgOCwgIDQsICA3LCAgNiwgIDEsICA1LCAxNSwgMTEsICA5LCAxNCwgIDMsIDEyLCAxMyAsIDApLAogICAgICAgIGFycmF5KCAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSksCiAgICAgICAgYXJyYXkoIDE0LCAxMCwgIDQsICA4LCAgOSwgMTUsIDEzLCAgNiwgIDEsIDEyLCAgMCwgIDIsIDExLCAgNywgIDUsICAzKQogICAgKTsKCiAgICBjb25zdCBCTE9DS0JZVEVTID0gMTI4OwogICAgY29uc3QgT1VUQllURVMgICA9IDY0OwogICAgY29uc3QgS0VZQllURVMgICA9IDY0OwoKICAgIC8qKgogICAgICogVHVybiB0d28gMzItYml0IGludGVnZXJzIGludG8gYSBmaXhlZCBhcnJheSByZXByZXNlbnRpbmcgYSA2NC1iaXQgaW50ZWdlci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaGlnaAogICAgICogQHBhcmFtIGludCAkbG93CiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXc2NCgkaGlnaCwgJGxvdykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnRzKCRsb3csICRoaWdoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IG51bWJlciBpbnRvIGFuIFNwbEZpeGVkQXJyYXkgb2YgdHdvIDMyLWJpdCBpbnRlZ2VycwogICAgICogdGhhdCByZXByZXNlbnRzIGEgNjQtYml0IGludGVnZXIuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG51bQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gdG82NCgkbnVtKQogICAgewogICAgICAgIGxpc3QoJGhpLCAkbG8pID0gc2VsZjo6bnVtZXJpY1RvNjRCaXRJbnRlZ2VyKCRudW0pOwogICAgICAgIHJldHVybiBzZWxmOjpuZXc2NCgkaGksICRsbyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIHR3byA2NC1iaXQgaW50ZWdlcnMgdG9nZXRoZXIsIHJldHVybmluZyB0aGVpciBzdW0gYXMgYSBTcGxGaXhlZEFycmF5CiAgICAgKiBjb250YWluaW5nIHR3byAzMi1iaXQgaW50ZWdlcnMgKHJlcHJlc2VudGluZyBhIDY0LWJpdCBpbnRlZ2VyKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICR4CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHkKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBhZGQ2NCgkeCwgJHkpCiAgICB7CiAgICAgICAgcmV0dXJuICR4LT5hZGRJbnQ2NCgkeSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICR4CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHkKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkegogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZDM2NCgkeCwgJHksICR6KQogICAgewogICAgICAgIHJldHVybiAkeC0+YWRkSW50NjQoJHkpLT5hZGRJbnQ2NCgkeik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICR4CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHkKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24geG9yNjQoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHgsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICR5KQogICAgewogICAgICAgIHJldHVybiAkeC0+eG9ySW50NjQoJHkpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkeAogICAgICogQHBhcmFtIGludCAkYwogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcm90cjY0KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICR4LCAkYykKICAgIHsKICAgICAgICByZXR1cm4gJHgtPnJvdGF0ZVJpZ2h0KCRjKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkeAogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZDY0KCR4LCAkaSkKICAgIHsKICAgICAgICAvKiogQHZhciBpbnQgJGwgKi8KICAgICAgICAkbCA9IChpbnQpICgkeFskaV0pCiAgICAgICAgICAgICB8ICgoaW50KSAoJHhbJGkrMV0pIDw8IDgpCiAgICAgICAgICAgICB8ICgoaW50KSAoJHhbJGkrMl0pIDw8IDE2KQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzNdKSA8PCAyNCk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRoICovCiAgICAgICAgJGggPSAoaW50KSAoJHhbJGkrNF0pCiAgICAgICAgICAgICB8ICgoaW50KSAoJHhbJGkrNV0pIDw8IDgpCiAgICAgICAgICAgICB8ICgoaW50KSAoJHhbJGkrNl0pIDw8IDE2KQogICAgICAgICAgICAgfCAoKGludCkgKCR4WyRpKzddKSA8PCAyNCk7CiAgICAgICAgcmV0dXJuIHNlbGY6Om5ldzY0KCRoLCAkbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJHgKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkdQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RvcmU2NChTcGxGaXhlZEFycmF5ICR4LCAkaSwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHUpCiAgICB7CiAgICAgICAgJHYgPSBjbG9uZSAkdTsKICAgICAgICAkbWF4TGVuZ3RoID0gJHgtPmdldFNpemUoKSAtIDE7CiAgICAgICAgZm9yICgkaiA9IDA7ICRqIDwgODsgKyskaikgewogICAgICAgICAgICAkayA9IDMgLSAoJGogPj4gMSk7CiAgICAgICAgICAgICR4WyRpXSA9ICR2LT5saW1ic1ska10gJiAweGZmOwogICAgICAgICAgICBpZiAoKyskaSA+ICRtYXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdi0+bGltYnNbJGtdID4+PSA4OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMganVzdCBzZXRzIHRoZSAkaXYgc3RhdGljIHZhcmlhYmxlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBzZXVkb0NvbnN0cnVjdG9yKCkKICAgIHsKICAgICAgICBzdGF0aWMgJGNhbGxlZCA9IGZhbHNlOwogICAgICAgIGlmICgkY2FsbGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2VsZjo6JGl2ID0gbmV3IFNwbEZpeGVkQXJyYXkoOCk7CiAgICAgICAgc2VsZjo6JGl2WzBdID0gc2VsZjo6bmV3NjQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCk7CiAgICAgICAgc2VsZjo6JGl2WzFdID0gc2VsZjo6bmV3NjQoMHhiYjY3YWU4NSwgMHg4NGNhYTczYik7CiAgICAgICAgc2VsZjo6JGl2WzJdID0gc2VsZjo6bmV3NjQoMHgzYzZlZjM3MiwgMHhmZTk0ZjgyYik7CiAgICAgICAgc2VsZjo6JGl2WzNdID0gc2VsZjo6bmV3NjQoMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSk7CiAgICAgICAgc2VsZjo6JGl2WzRdID0gc2VsZjo6bmV3NjQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSk7CiAgICAgICAgc2VsZjo6JGl2WzVdID0gc2VsZjo6bmV3NjQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZik7CiAgICAgICAgc2VsZjo6JGl2WzZdID0gc2VsZjo6bmV3NjQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2Yik7CiAgICAgICAgc2VsZjo6JGl2WzddID0gc2VsZjo6bmV3NjQoMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSk7CgogICAgICAgICRjYWxsZWQgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGZyZXNoIEJMQUtFMiBjb250ZXh0LgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGNvbnRleHQoKQogICAgewogICAgICAgICRjdHggICAgPSBuZXcgU3BsRml4ZWRBcnJheSg1KTsKICAgICAgICAkY3R4WzBdID0gbmV3IFNwbEZpeGVkQXJyYXkoOCk7ICAgLy8gaAogICAgICAgICRjdHhbMV0gPSBuZXcgU3BsRml4ZWRBcnJheSgyKTsgICAvLyB0CiAgICAgICAgJGN0eFsyXSA9IG5ldyBTcGxGaXhlZEFycmF5KDIpOyAgIC8vIGYKICAgICAgICAkY3R4WzNdID0gbmV3IFNwbEZpeGVkQXJyYXkoMjU2KTsgLy8gYnVmCiAgICAgICAgJGN0eFs0XSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmxlbgoKICAgICAgICBmb3IgKCRpID0gODsgJGktLTspIHsKICAgICAgICAgICAgJGN0eFswXVskaV0gPSBzZWxmOjokaXZbJGldOwogICAgICAgIH0KICAgICAgICBmb3IgKCRpID0gMjU2OyAkaS0tOykgewogICAgICAgICAgICAkY3R4WzNdWyRpXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkemVybyA9IHNlbGY6Om5ldzY0KDAsIDApOwogICAgICAgICRjdHhbMV1bMF0gPSAkemVybzsKICAgICAgICAkY3R4WzFdWzFdID0gJHplcm87CiAgICAgICAgJGN0eFsyXVswXSA9ICR6ZXJvOwogICAgICAgICRjdHhbMl1bMV0gPSAkemVybzsKCiAgICAgICAgcmV0dXJuICRjdHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGN0eAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGJ1ZgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY29tcHJlc3MoU3BsRml4ZWRBcnJheSAkY3R4LCBTcGxGaXhlZEFycmF5ICRidWYpCiAgICB7CiAgICAgICAgJG0gPSBuZXcgU3BsRml4ZWRBcnJheSgxNik7CiAgICAgICAgJHYgPSBuZXcgU3BsRml4ZWRBcnJheSgxNik7CgogICAgICAgIGZvciAoJGkgPSAxNjsgJGktLTspIHsKICAgICAgICAgICAgJG1bJGldID0gc2VsZjo6bG9hZDY0KCRidWYsICRpIDw8IDMpOwogICAgICAgIH0KCiAgICAgICAgZm9yICgkaSA9IDg7ICRpLS07KSB7CiAgICAgICAgICAgICR2WyRpXSA9ICRjdHhbMF1bJGldOwogICAgICAgIH0KCiAgICAgICAgJHZbIDhdID0gc2VsZjo6JGl2WzBdOwogICAgICAgICR2WyA5XSA9IHNlbGY6OiRpdlsxXTsKICAgICAgICAkdlsxMF0gPSBzZWxmOjokaXZbMl07CiAgICAgICAgJHZbMTFdID0gc2VsZjo6JGl2WzNdOwoKICAgICAgICAkdlsxMl0gPSBzZWxmOjp4b3I2NCgkY3R4WzFdWzBdLCBzZWxmOjokaXZbNF0pOwogICAgICAgICR2WzEzXSA9IHNlbGY6OnhvcjY0KCRjdHhbMV1bMV0sIHNlbGY6OiRpdls1XSk7CiAgICAgICAgJHZbMTRdID0gc2VsZjo6eG9yNjQoJGN0eFsyXVswXSwgc2VsZjo6JGl2WzZdKTsKICAgICAgICAkdlsxNV0gPSBzZWxmOjp4b3I2NCgkY3R4WzJdWzFdLCBzZWxmOjokaXZbN10pOwoKICAgICAgICBmb3IgKCRyID0gMDsgJHIgPCAxMjsgKyskcikgewogICAgICAgICAgICAkdiA9IHNlbGY6OkcoJHIsIDAsIDAsIDQsIDgsIDEyLCAkdiwgJG0pOwogICAgICAgICAgICAkdiA9IHNlbGY6OkcoJHIsIDEsIDEsIDUsIDksIDEzLCAkdiwgJG0pOwogICAgICAgICAgICAkdiA9IHNlbGY6OkcoJHIsIDIsIDIsIDYsIDEwLCAxNCwgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCAzLCAzLCA3LCAxMSwgMTUsICR2LCAkbSk7CiAgICAgICAgICAgICR2ID0gc2VsZjo6RygkciwgNCwgMCwgNSwgMTAsIDE1LCAkdiwgJG0pOwogICAgICAgICAgICAkdiA9IHNlbGY6OkcoJHIsIDUsIDEsIDYsIDExLCAxMiwgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCA2LCAyLCA3LCA4LCAxMywgJHYsICRtKTsKICAgICAgICAgICAgJHYgPSBzZWxmOjpHKCRyLCA3LCAzLCA0LCA5LCAxNCwgJHYsICRtKTsKICAgICAgICB9CgogICAgICAgIGZvciAoJGkgPSA4OyAkaS0tOykgewogICAgICAgICAgICAkY3R4WzBdWyRpXSA9IHNlbGY6OnhvcjY0KAogICAgICAgICAgICAgICAgJGN0eFswXVskaV0sIHNlbGY6OnhvcjY0KCR2WyRpXSwgJHZbJGkrOF0pCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHIKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEBwYXJhbSBpbnQgJGEKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEBwYXJhbSBpbnQgJGQKICAgICAqIEBwYXJhbSBTcGxGaXhlZEFycmF5ICR2CiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkbQogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheU9mZnNldAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEcoJHIsICRpLCAkYSwgJGIsICRjLCAkZCwgU3BsRml4ZWRBcnJheSAkdiwgU3BsRml4ZWRBcnJheSAkbSkKICAgIHsKICAgICAgICAkdlskYV0gPSBzZWxmOjphZGQzNjQoJHZbJGFdLCAkdlskYl0sICRtW3NlbGY6OiRzaWdtYVskcl1bJGkgPDwgMV1dKTsKICAgICAgICAkdlskZF0gPSBzZWxmOjpyb3RyNjQoc2VsZjo6eG9yNjQoJHZbJGRdLCAkdlskYV0pLCAzMik7CiAgICAgICAgJHZbJGNdID0gc2VsZjo6YWRkNjQoJHZbJGNdLCAkdlskZF0pOwogICAgICAgICR2WyRiXSA9IHNlbGY6OnJvdHI2NChzZWxmOjp4b3I2NCgkdlskYl0sICR2WyRjXSksIDI0KTsKICAgICAgICAkdlskYV0gPSBzZWxmOjphZGQzNjQoJHZbJGFdLCAkdlskYl0sICRtW3NlbGY6OiRzaWdtYVskcl1bKCRpIDw8IDEpICsgMV1dKTsKICAgICAgICAkdlskZF0gPSBzZWxmOjpyb3RyNjQoc2VsZjo6eG9yNjQoJHZbJGRdLCAkdlskYV0pLCAxNik7CiAgICAgICAgJHZbJGNdID0gc2VsZjo6YWRkNjQoJHZbJGNdLCAkdlskZF0pOwogICAgICAgICR2WyRiXSA9IHNlbGY6OnJvdHI2NChzZWxmOjp4b3I2NCgkdlskYl0sICR2WyRjXSksIDYzKTsKICAgICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGN0eAogICAgICogQHBhcmFtIGludCAkaW5jCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbmNyZW1lbnRfY291bnRlcigkY3R4LCAkaW5jKQogICAgewogICAgICAgIGlmICgkaW5jIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbmNyZWFzaW5nIGJ5IGEgbmVnYXRpdmUgbnVtYmVyIG1ha2VzIG5vIHNlbnNlLicpOwogICAgICAgIH0KICAgICAgICAkdCA9IHNlbGY6OnRvNjQoJGluYyk7CiAgICAgICAgIyBTLT50IGlzICRjdHhbMV0gaW4gb3VyIGltcGxlbWVudGF0aW9uCgogICAgICAgICMgUy0+dFswXSA9ICggdWludDY0X3QgKSggdCA+PiAwICk7CiAgICAgICAgJGN0eFsxXVswXSA9IHNlbGY6OmFkZDY0KCRjdHhbMV1bMF0sICR0KTsKCiAgICAgICAgIyBTLT50WzFdICs9ICggUy0+dFswXSA8IGluYyApOwogICAgICAgIGlmICghKCRjdHhbMV1bMF0gaW5zdGFuY2VvZiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGFuIGludDY0Jyk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRjKi8KICAgICAgICAkYyA9ICRjdHhbMV1bMF07CiAgICAgICAgaWYgKCRjLT5pc0xlc3NUaGFuSW50KCRpbmMpKSB7CiAgICAgICAgICAgICRjdHhbMV1bMV0gPSBzZWxmOjphZGQ2NCgkY3R4WzFdWzFdLCBzZWxmOjp0bzY0KDEpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGN0eAogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJHAKICAgICAqIEBwYXJhbSBpbnQgJHBsZW4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE9wZXJhbmQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGUoU3BsRml4ZWRBcnJheSAkY3R4LCBTcGxGaXhlZEFycmF5ICRwLCAkcGxlbikKICAgIHsKICAgICAgICBzZWxmOjpwc2V1ZG9Db25zdHJ1Y3RvcigpOwoKICAgICAgICAkb2Zmc2V0ID0gMDsKICAgICAgICB3aGlsZSAoJHBsZW4gPiAwKSB7CiAgICAgICAgICAgICRsZWZ0ID0gJGN0eFs0XTsKICAgICAgICAgICAgJGZpbGwgPSAyNTYgLSAkbGVmdDsKCiAgICAgICAgICAgIGlmICgkcGxlbiA+ICRmaWxsKSB7CiAgICAgICAgICAgICAgICAjIG1lbWNweSggUy0+YnVmICsgbGVmdCwgaW4sIGZpbGwgKTsgLyogRmlsbCBidWZmZXIgKi8KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAkZmlsbDsgJGktLTspIHsKICAgICAgICAgICAgICAgICAgICAkY3R4WzNdWyRpICsgJGxlZnRdID0gJHBbJGkgKyAkb2Zmc2V0XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFMtPmJ1ZmxlbiArPSBmaWxsOwogICAgICAgICAgICAgICAgJGN0eFs0XSArPSAkZmlsbDsKCiAgICAgICAgICAgICAgICAjIGJsYWtlMmJfaW5jcmVtZW50X2NvdW50ZXIoIFMsIEJMQUtFMkJfQkxPQ0tCWVRFUyApOwogICAgICAgICAgICAgICAgc2VsZjo6aW5jcmVtZW50X2NvdW50ZXIoJGN0eCwgMTI4KTsKCiAgICAgICAgICAgICAgICAjIGJsYWtlMmJfY29tcHJlc3MoIFMsIFMtPmJ1ZiApOyAvKiBDb21wcmVzcyAqLwogICAgICAgICAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CgogICAgICAgICAgICAgICAgIyBtZW1jcHkoIFMtPmJ1ZiwgUy0+YnVmICsgQkxBS0UyQl9CTE9DS0JZVEVTLCBCTEFLRTJCX0JMT0NLQllURVMgKTsgLyogU2hpZnQgYnVmZmVyIGxlZnQgKi8KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAxMjg7ICRpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgJGN0eFszXVskaV0gPSAkY3R4WzNdWyRpICsgMTI4XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIFMtPmJ1ZmxlbiAtPSBCTEFLRTJCX0JMT0NLQllURVM7CiAgICAgICAgICAgICAgICAkY3R4WzRdIC09IDEyODsKCiAgICAgICAgICAgICAgICAjIGluICs9IGZpbGw7CiAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9ICRmaWxsOwoKICAgICAgICAgICAgICAgICMgaW5sZW4gLT0gZmlsbDsKICAgICAgICAgICAgICAgICRwbGVuIC09ICRmaWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yICgkaSA9ICRwbGVuOyAkaS0tOykgewogICAgICAgICAgICAgICAgICAgICRjdHhbM11bJGkgKyAkbGVmdF0gPSAkcFskaSArICRvZmZzZXRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGN0eFs0XSArPSAkcGxlbjsKICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gJHBsZW47CiAgICAgICAgICAgICAgICAkcGxlbiAtPSAkcGxlbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkY3R4CiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheSAkb3V0CiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJndW1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRPcGVyYW5kCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluaXNoKFNwbEZpeGVkQXJyYXkgJGN0eCwgU3BsRml4ZWRBcnJheSAkb3V0KQogICAgewogICAgICAgIHNlbGY6OnBzZXVkb0NvbnN0cnVjdG9yKCk7CiAgICAgICAgaWYgKCRjdHhbNF0gPiAxMjgpIHsKICAgICAgICAgICAgc2VsZjo6aW5jcmVtZW50X2NvdW50ZXIoJGN0eCwgMTI4KTsKICAgICAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CiAgICAgICAgICAgICRjdHhbNF0gLT0gMTI4OwogICAgICAgICAgICBpZiAoJGN0eFs0XSA+IDEyOCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignRmFpbGVkIHRvIGFzc2VydCB0aGF0IGJ1ZmxlbiA8PSAxMjggYnl0ZXMnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gJGN0eFs0XTsgJGktLTspIHsKICAgICAgICAgICAgICAgICRjdHhbM11bJGldID0gJGN0eFszXVskaSArIDEyOF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNlbGY6OmluY3JlbWVudF9jb3VudGVyKCRjdHgsICRjdHhbNF0pOwogICAgICAgICRjdHhbMl1bMF0gPSBzZWxmOjpuZXc2NCgweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKCiAgICAgICAgZm9yICgkaSA9IDI1NiAtICRjdHhbNF07ICRpLS07KSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaSAqLwogICAgICAgICAgICAkY3R4WzNdWyRpICsgJGN0eFs0XV0gPSAwOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6Y29tcHJlc3MoJGN0eCwgJGN0eFszXSk7CgogICAgICAgICRpID0gKGludCkgKCgkb3V0LT5nZXRTaXplKCkgLSAxKSAvIDgpOwogICAgICAgIGZvciAoOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgIHNlbGY6OnN0b3JlNjQoJG91dCwgJGkgPDwgMywgJGN0eFswXVskaV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gU3BsRml4ZWRBcnJheXxudWxsICRrZXkKICAgICAqIEBwYXJhbSBpbnQgJG91dGxlbgogICAgICogQHJldHVybiBTcGxGaXhlZEFycmF5CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5pdCgka2V5ID0gbnVsbCwgJG91dGxlbiA9IDY0KQogICAgewogICAgICAgIHNlbGY6OnBzZXVkb0NvbnN0cnVjdG9yKCk7CiAgICAgICAgJGtsZW4gPSAwOwoKICAgICAgICBpZiAoJGtleSAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoY291bnQoJGtleSkgPiA2NCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignSW52YWxpZCBrZXkgc2l6ZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRrbGVuID0gY291bnQoJGtleSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG91dGxlbiA+IDY0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgb3V0cHV0IHNpemUnKTsKICAgICAgICB9CgogICAgICAgICRjdHggPSBzZWxmOjpjb250ZXh0KCk7CgogICAgICAgICRwID0gbmV3IFNwbEZpeGVkQXJyYXkoNjQpOwogICAgICAgIGZvciAoJGkgPSA2NDsgLS0kaTspIHsKICAgICAgICAgICAgJHBbJGldID0gMDsKICAgICAgICB9CgogICAgICAgICRwWzBdID0gJG91dGxlbjsgLy8gZGlnZXN0X2xlbmd0aAogICAgICAgICRwWzFdID0gJGtsZW47ICAgLy8ga2V5X2xlbmd0aAogICAgICAgICRwWzJdID0gMTsgICAgICAgLy8gZmFub3V0CiAgICAgICAgJHBbM10gPSAxOyAgICAgICAvLyBkZXB0aAoKICAgICAgICAkY3R4WzBdWzBdID0gc2VsZjo6eG9yNjQoCiAgICAgICAgICAgICRjdHhbMF1bMF0sCiAgICAgICAgICAgIHNlbGY6OmxvYWQ2NCgkcCwgMCkKICAgICAgICApOwoKICAgICAgICBpZiAoJGtsZW4gPiAwICYmICRrZXkgaW5zdGFuY2VvZiBTcGxGaXhlZEFycmF5KSB7CiAgICAgICAgICAgICRibG9jayA9IG5ldyBTcGxGaXhlZEFycmF5KDEyOCk7CiAgICAgICAgICAgIGZvciAoJGkgPSAxMjg7ICRpLS07KSB7CiAgICAgICAgICAgICAgICAkYmxvY2tbJGldID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gJGtsZW47ICRpLS07KSB7CiAgICAgICAgICAgICAgICAkYmxvY2tbJGldID0gJGtleVskaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VsZjo6dXBkYXRlKCRjdHgsICRibG9jaywgMTI4KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY3R4OwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIHN0cmluZyBpbnRvIGFuIFNwbEZpeGVkQXJyYXkgb2YgaW50ZWdlcnMKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJpbmdUb1NwbEZpeGVkQXJyYXkoJHN0ciA9ICcnKQogICAgewogICAgICAgICR2YWx1ZXMgPSB1bnBhY2soJ0MqJywgJHN0cik7CiAgICAgICAgcmV0dXJuIFNwbEZpeGVkQXJyYXk6OmZyb21BcnJheShhcnJheV92YWx1ZXMoJHZhbHVlcykpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhbiBTcGxGaXhlZEFycmF5IG9mIGludGVnZXJzIGludG8gYSBzdHJpbmcKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXkgJGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gU3BsRml4ZWRBcnJheVRvU3RyaW5nKFNwbEZpeGVkQXJyYXkgJGEpCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBhcnJheTxpbnQsIHN0cmluZ3xpbnQ+CiAgICAgICAgICovCiAgICAgICAgJGFyciA9ICRhLT50b0FycmF5KCk7CiAgICAgICAgJGMgPSAkYS0+Y291bnQoKTsKICAgICAgICBhcnJheV91bnNoaWZ0KCRhcnIsIHN0cl9yZXBlYXQoJ0MnLCAkYykpOwogICAgICAgIHJldHVybiAoc3RyaW5nKSAoY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ3BhY2snLCAkYXJyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFNwbEZpeGVkQXJyYXlbU3BsRml4ZWRBcnJheV0gJGN0eAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcmd1bWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnRleHRUb1N0cmluZyhTcGxGaXhlZEFycmF5ICRjdHgpCiAgICB7CiAgICAgICAgJHN0ciA9ICcnOwogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ+ICRjdHhBICovCiAgICAgICAgJGN0eEEgPSAkY3R4WzBdLT50b0FycmF5KCk7CgogICAgICAgICMgdWludDY0X3QgaFs4XTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgIGlmICghKCRjdHhBWyRpXSBpbnN0YW5jZW9mIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGFuIGluc3RhbmNlIG9mIEludDY0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGN0eEFpICovCiAgICAgICAgICAgICRjdHhBaSA9ICRjdHhBWyRpXTsKICAgICAgICAgICAgJHN0ciAuPSAkY3R4QWktPnRvU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICAjIHVpbnQ2NF90IHRbMl07CiAgICAgICAgIyB1aW50NjRfdCBmWzJdOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDM7ICsrJGkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2ND4gJGN0eEEgKi8KICAgICAgICAgICAgJGN0eEEgPSAkY3R4WyRpXS0+dG9BcnJheSgpOwogICAgICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY3R4QTEgKi8KICAgICAgICAgICAgJGN0eEExID0gJGN0eEFbMF07CiAgICAgICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRjdHhBMiAqLwogICAgICAgICAgICAkY3R4QTIgPSAkY3R4QVsxXTsKCiAgICAgICAgICAgICRzdHIgLj0gJGN0eEExLT50b1N0cmluZygpOwogICAgICAgICAgICAkc3RyIC49ICRjdHhBMi0+dG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgICMgdWludDhfdCBidWZbMiAqIDEyOF07CiAgICAgICAgJHN0ciAuPSBzZWxmOjpTcGxGaXhlZEFycmF5VG9TdHJpbmcoJGN0eFszXSk7CgogICAgICAgIC8qKiBAdmFyIGludCAkY3R4NCAqLwogICAgICAgICRjdHg0ID0gJGN0eFs0XTsKCiAgICAgICAgIyBzaXplX3QgYnVmbGVuOwogICAgICAgICRzdHIgLj0gaW1wbG9kZSgnJywgYXJyYXkoCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCRjdHg0ICYgMHhmZiksCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkY3R4NCA+PiA4KSAmIDB4ZmYpLAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGN0eDQgPj4gMTYpICYgMHhmZiksCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkY3R4NCA+PiAyNCkgJiAweGZmKSwKICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRjdHg0ID4+IDMyKSAmIDB4ZmYpLAogICAgICAgICAgICBzZWxmOjppbnRUb0NocigoJGN0eDQgPj4gNDApICYgMHhmZiksCiAgICAgICAgICAgIHNlbGY6OmludFRvQ2hyKCgkY3R4NCA+PiA0OCkgJiAweGZmKSwKICAgICAgICAgICAgc2VsZjo6aW50VG9DaHIoKCRjdHg0ID4+IDU2KSAmIDB4ZmYpCiAgICAgICAgKSk7CiAgICAgICAgIyB1aW50OF90IGxhc3Rfbm9kZTsKICAgICAgICByZXR1cm4gJHN0ciAuICJceDAwIjsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gU3BsRml4ZWRBcnJheSBjb250YWluaW5nIG90aGVyIFNwbEZpeGVkQXJyYXkgZWxlbWVudHMsIGZyb20KICAgICAqIGEgc3RyaW5nIChjb21wYXRpYmxlIHdpdGggXFNvZGl1bVxjcnlwdG9fZ2VuZXJpY2hhc2hfe2luaXQsIHVwZGF0ZSwgZmluYWx9KQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqIEByZXR1cm4gU3BsRml4ZWRBcnJheQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBc3NpZ25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyaW5nVG9Db250ZXh0KCRzdHJpbmcpCiAgICB7CiAgICAgICAgJGN0eCA9IHNlbGY6OmNvbnRleHQoKTsKCiAgICAgICAgIyB1aW50NjRfdCBoWzhdOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDg7ICsrJGkpIHsKICAgICAgICAgICAgJGN0eFswXVskaV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbVN0cmluZygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkc3RyaW5nLCAoKCRpIDw8IDMpICsgMCksIDgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVpbnQ2NF90IHRbMl07CiAgICAgICAgIyB1aW50NjRfdCBmWzJdOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDM7ICsrJGkpIHsKICAgICAgICAgICAgJGN0eFskaV1bMV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbVN0cmluZygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkc3RyaW5nLCA3MiArICgoJGkgLSAxKSA8PCA0KSwgOCkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJGN0eFskaV1bMF0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbVN0cmluZygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkc3RyaW5nLCA2NCArICgoJGkgLSAxKSA8PCA0KSwgOCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdWludDhfdCBidWZbMiAqIDEyOF07CiAgICAgICAgJGN0eFszXSA9IHNlbGY6OnN0cmluZ1RvU3BsRml4ZWRBcnJheShzZWxmOjpzdWJzdHIoJHN0cmluZywgOTYsIDI1NikpOwoKCiAgICAgICAgIyB1aW50OF90IGJ1ZlsyICogMTI4XTsKICAgICAgICAkaW50ID0gMDsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICRpbnQgfD0gc2VsZjo6Y2hyVG9JbnQoJHN0cmluZ1szNTIgKyAkaV0pIDw8ICgkaSA8PCAzKTsKICAgICAgICB9CiAgICAgICAgJGN0eFs0XSA9ICRpbnQ7CgogICAgICAgIHJldHVybiAkY3R4OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/ChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsCnsKICAgIC8qKgogICAgICogVGhlIENoYUNoYTIwIHF1YXJ0ZXIgcm91bmQgZnVuY3Rpb24uIFdvcmtzIG9uIGZvdXIgMzItYml0IGludGVnZXJzLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGEKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGQKICAgICAqIEByZXR1cm4gYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMj4KICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHF1YXJ0ZXJSb3VuZCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYSwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYiwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYywKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkZAogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGEgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYiAqLwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjICovCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGQgKi8KCiAgICAgICAgIyBhID0gUExVUyhhLGIpOyBkID0gUk9UQVRFKFhPUihkLGEpLDE2KTsKICAgICAgICAkYSA9ICRhLT5hZGRJbnQzMigkYik7CiAgICAgICAgJGQgPSAkZC0+eG9ySW50MzIoJGEpLT5yb3RhdGVMZWZ0KDE2KTsKCiAgICAgICAgIyBjID0gUExVUyhjLGQpOyBiID0gUk9UQVRFKFhPUihiLGMpLDEyKTsKICAgICAgICAkYyA9ICRjLT5hZGRJbnQzMigkZCk7CiAgICAgICAgJGIgPSAkYi0+eG9ySW50MzIoJGMpLT5yb3RhdGVMZWZ0KDEyKTsKCiAgICAgICAgIyBhID0gUExVUyhhLGIpOyBkID0gUk9UQVRFKFhPUihkLGEpLCA4KTsKICAgICAgICAkYSA9ICRhLT5hZGRJbnQzMigkYik7CiAgICAgICAgJGQgPSAkZC0+eG9ySW50MzIoJGEpLT5yb3RhdGVMZWZ0KDgpOwoKICAgICAgICAjIGMgPSBQTFVTKGMsZCk7IGIgPSBST1RBVEUoWE9SKGIsYyksIDcpOwogICAgICAgICRjID0gJGMtPmFkZEludDMyKCRkKTsKICAgICAgICAkYiA9ICRiLT54b3JJbnQzMigkYyktPnJvdGF0ZUxlZnQoNyk7CgogICAgICAgIHJldHVybiBhcnJheSgkYSwgJGIsICRjLCAkZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwX0N0eCAkY3R4CiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY3J5cHRCeXRlcygKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9DdHggJGN0eCwKICAgICAgICAkbWVzc2FnZSA9ICcnCiAgICApIHsKICAgICAgICAkYnl0ZXMgPSBzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDAgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDIgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDMgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDQgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDUgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDYgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDcgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDggKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDkgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEwICovCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMSAqLwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MTIgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEzICovCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxNCAqLwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MTUgKi8KCiAgICAgICAgLyoKICAgICAgICBqMCA9IGN0eC0+aW5wdXRbMF07CiAgICAgICAgajEgPSBjdHgtPmlucHV0WzFdOwogICAgICAgIGoyID0gY3R4LT5pbnB1dFsyXTsKICAgICAgICBqMyA9IGN0eC0+aW5wdXRbM107CiAgICAgICAgajQgPSBjdHgtPmlucHV0WzRdOwogICAgICAgIGo1ID0gY3R4LT5pbnB1dFs1XTsKICAgICAgICBqNiA9IGN0eC0+aW5wdXRbNl07CiAgICAgICAgajcgPSBjdHgtPmlucHV0WzddOwogICAgICAgIGo4ID0gY3R4LT5pbnB1dFs4XTsKICAgICAgICBqOSA9IGN0eC0+aW5wdXRbOV07CiAgICAgICAgajEwID0gY3R4LT5pbnB1dFsxMF07CiAgICAgICAgajExID0gY3R4LT5pbnB1dFsxMV07CiAgICAgICAgajEyID0gY3R4LT5pbnB1dFsxMl07CiAgICAgICAgajEzID0gY3R4LT5pbnB1dFsxM107CiAgICAgICAgajE0ID0gY3R4LT5pbnB1dFsxNF07CiAgICAgICAgajE1ID0gY3R4LT5pbnB1dFsxNV07CiAgICAgICAgKi8KICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajAgKi8KICAgICAgICAkajAgID0gJGN0eFswXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEgKi8KICAgICAgICAkajEgID0gJGN0eFsxXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajIgKi8KICAgICAgICAkajIgID0gJGN0eFsyXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajMgKi8KICAgICAgICAkajMgID0gJGN0eFszXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajQgKi8KICAgICAgICAkajQgID0gJGN0eFs0XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajUgKi8KICAgICAgICAkajUgID0gJGN0eFs1XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajYgKi8KICAgICAgICAkajYgID0gJGN0eFs2XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajcgKi8KICAgICAgICAkajcgID0gJGN0eFs3XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajggKi8KICAgICAgICAkajggID0gJGN0eFs4XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajkgKi8KICAgICAgICAkajkgID0gJGN0eFs5XTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEwICovCiAgICAgICAgJGoxMCA9ICRjdHhbMTBdOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTEgKi8KICAgICAgICAkajExID0gJGN0eFsxMV07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGoxMiAqLwogICAgICAgICRqMTIgPSAkY3R4WzEyXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEzICovCiAgICAgICAgJGoxMyA9ICRjdHhbMTNdOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTQgKi8KICAgICAgICAkajE0ID0gJGN0eFsxNF07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGoxNSAqLwogICAgICAgICRqMTUgPSAkY3R4WzE1XTsKCiAgICAgICAgJGMgPSAnJzsKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGlmICgkYnl0ZXMgPCA2NCkgewogICAgICAgICAgICAgICAgJG1lc3NhZ2UgLj0gc3RyX3JlcGVhdCgiXHgwMCIsIDY0IC0gJGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHgwID0gIGNsb25lICRqMDsKICAgICAgICAgICAgJHgxID0gIGNsb25lICRqMTsKICAgICAgICAgICAgJHgyID0gIGNsb25lICRqMjsKICAgICAgICAgICAgJHgzID0gIGNsb25lICRqMzsKICAgICAgICAgICAgJHg0ID0gIGNsb25lICRqNDsKICAgICAgICAgICAgJHg1ID0gIGNsb25lICRqNTsKICAgICAgICAgICAgJHg2ID0gIGNsb25lICRqNjsKICAgICAgICAgICAgJHg3ID0gIGNsb25lICRqNzsKICAgICAgICAgICAgJHg4ID0gIGNsb25lICRqODsKICAgICAgICAgICAgJHg5ID0gIGNsb25lICRqOTsKICAgICAgICAgICAgJHgxMCA9IGNsb25lICRqMTA7CiAgICAgICAgICAgICR4MTEgPSBjbG9uZSAkajExOwogICAgICAgICAgICAkeDEyID0gY2xvbmUgJGoxMjsKICAgICAgICAgICAgJHgxMyA9IGNsb25lICRqMTM7CiAgICAgICAgICAgICR4MTQgPSBjbG9uZSAkajE0OwogICAgICAgICAgICAkeDE1ID0gY2xvbmUgJGoxNTsKCiAgICAgICAgICAgICMgZm9yIChpID0gMjA7IGkgPiAwOyBpIC09IDIpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDIwOyAkaSA+IDA7ICRpIC09IDIpIHsKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MCwgIHg0LCAgeDgsICB4MTIpCiAgICAgICAgICAgICAgICBsaXN0KCR4MCwgJHg0LCAkeDgsICR4MTIpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MCwgJHg0LCAkeDgsICR4MTIpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MSwgIHg1LCAgeDksICB4MTMpCiAgICAgICAgICAgICAgICBsaXN0KCR4MSwgJHg1LCAkeDksICR4MTMpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg1LCAkeDksICR4MTMpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MiwgIHg2LCAgeDEwLCAgeDE0KQogICAgICAgICAgICAgICAgbGlzdCgkeDIsICR4NiwgJHgxMCwgJHgxNCkgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgyLCAkeDYsICR4MTAsICR4MTQpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MywgIHg3LCAgeDExLCAgeDE1KQogICAgICAgICAgICAgICAgbGlzdCgkeDMsICR4NywgJHgxMSwgJHgxNSkgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgzLCAkeDcsICR4MTEsICR4MTUpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MCwgIHg1LCAgeDEwLCAgeDE1KQogICAgICAgICAgICAgICAgbGlzdCgkeDAsICR4NSwgJHgxMCwgJHgxNSkgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgwLCAkeDUsICR4MTAsICR4MTUpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MSwgIHg2LCAgeDExLCAgeDEyKQogICAgICAgICAgICAgICAgbGlzdCgkeDEsICR4NiwgJHgxMSwgJHgxMikgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgxLCAkeDYsICR4MTEsICR4MTIpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MiwgIHg3LCAgeDgsICB4MTMpCiAgICAgICAgICAgICAgICBsaXN0KCR4MiwgJHg3LCAkeDgsICR4MTMpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MiwgJHg3LCAkeDgsICR4MTMpOwoKICAgICAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MywgIHg0LCAgeDksICB4MTQpCiAgICAgICAgICAgICAgICBsaXN0KCR4MywgJHg0LCAkeDksICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MywgJHg0LCAkeDksICR4MTQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qCiAgICAgICAgICAgIHgwID0gUExVUyh4MCwgajApOwogICAgICAgICAgICB4MSA9IFBMVVMoeDEsIGoxKTsKICAgICAgICAgICAgeDIgPSBQTFVTKHgyLCBqMik7CiAgICAgICAgICAgIHgzID0gUExVUyh4MywgajMpOwogICAgICAgICAgICB4NCA9IFBMVVMoeDQsIGo0KTsKICAgICAgICAgICAgeDUgPSBQTFVTKHg1LCBqNSk7CiAgICAgICAgICAgIHg2ID0gUExVUyh4NiwgajYpOwogICAgICAgICAgICB4NyA9IFBMVVMoeDcsIGo3KTsKICAgICAgICAgICAgeDggPSBQTFVTKHg4LCBqOCk7CiAgICAgICAgICAgIHg5ID0gUExVUyh4OSwgajkpOwogICAgICAgICAgICB4MTAgPSBQTFVTKHgxMCwgajEwKTsKICAgICAgICAgICAgeDExID0gUExVUyh4MTEsIGoxMSk7CiAgICAgICAgICAgIHgxMiA9IFBMVVMoeDEyLCBqMTIpOwogICAgICAgICAgICB4MTMgPSBQTFVTKHgxMywgajEzKTsKICAgICAgICAgICAgeDE0ID0gUExVUyh4MTQsIGoxNCk7CiAgICAgICAgICAgIHgxNSA9IFBMVVMoeDE1LCBqMTUpOwogICAgICAgICAgICAqLwogICAgICAgICAgICAkeDAgPSAkeDAtPmFkZEludDMyKCRqMCk7CiAgICAgICAgICAgICR4MSA9ICR4MS0+YWRkSW50MzIoJGoxKTsKICAgICAgICAgICAgJHgyID0gJHgyLT5hZGRJbnQzMigkajIpOwogICAgICAgICAgICAkeDMgPSAkeDMtPmFkZEludDMyKCRqMyk7CiAgICAgICAgICAgICR4NCA9ICR4NC0+YWRkSW50MzIoJGo0KTsKICAgICAgICAgICAgJHg1ID0gJHg1LT5hZGRJbnQzMigkajUpOwogICAgICAgICAgICAkeDYgPSAkeDYtPmFkZEludDMyKCRqNik7CiAgICAgICAgICAgICR4NyA9ICR4Ny0+YWRkSW50MzIoJGo3KTsKICAgICAgICAgICAgJHg4ID0gJHg4LT5hZGRJbnQzMigkajgpOwogICAgICAgICAgICAkeDkgPSAkeDktPmFkZEludDMyKCRqOSk7CiAgICAgICAgICAgICR4MTAgPSAkeDEwLT5hZGRJbnQzMigkajEwKTsKICAgICAgICAgICAgJHgxMSA9ICR4MTEtPmFkZEludDMyKCRqMTEpOwogICAgICAgICAgICAkeDEyID0gJHgxMi0+YWRkSW50MzIoJGoxMik7CiAgICAgICAgICAgICR4MTMgPSAkeDEzLT5hZGRJbnQzMigkajEzKTsKICAgICAgICAgICAgJHgxNCA9ICR4MTQtPmFkZEludDMyKCRqMTQpOwogICAgICAgICAgICAkeDE1ID0gJHgxNS0+YWRkSW50MzIoJGoxNSk7CgogICAgICAgICAgICAvKgogICAgICAgICAgICB4MCA9IFhPUih4MCwgTE9BRDMyX0xFKG0gKyAwKSk7CiAgICAgICAgICAgIHgxID0gWE9SKHgxLCBMT0FEMzJfTEUobSArIDQpKTsKICAgICAgICAgICAgeDIgPSBYT1IoeDIsIExPQUQzMl9MRShtICsgOCkpOwogICAgICAgICAgICB4MyA9IFhPUih4MywgTE9BRDMyX0xFKG0gKyAxMikpOwogICAgICAgICAgICB4NCA9IFhPUih4NCwgTE9BRDMyX0xFKG0gKyAxNikpOwogICAgICAgICAgICB4NSA9IFhPUih4NSwgTE9BRDMyX0xFKG0gKyAyMCkpOwogICAgICAgICAgICB4NiA9IFhPUih4NiwgTE9BRDMyX0xFKG0gKyAyNCkpOwogICAgICAgICAgICB4NyA9IFhPUih4NywgTE9BRDMyX0xFKG0gKyAyOCkpOwogICAgICAgICAgICB4OCA9IFhPUih4OCwgTE9BRDMyX0xFKG0gKyAzMikpOwogICAgICAgICAgICB4OSA9IFhPUih4OSwgTE9BRDMyX0xFKG0gKyAzNikpOwogICAgICAgICAgICB4MTAgPSBYT1IoeDEwLCBMT0FEMzJfTEUobSArIDQwKSk7CiAgICAgICAgICAgIHgxMSA9IFhPUih4MTEsIExPQUQzMl9MRShtICsgNDQpKTsKICAgICAgICAgICAgeDEyID0gWE9SKHgxMiwgTE9BRDMyX0xFKG0gKyA0OCkpOwogICAgICAgICAgICB4MTMgPSBYT1IoeDEzLCBMT0FEMzJfTEUobSArIDUyKSk7CiAgICAgICAgICAgIHgxNCA9IFhPUih4MTQsIExPQUQzMl9MRShtICsgNTYpKTsKICAgICAgICAgICAgeDE1ID0gWE9SKHgxNSwgTE9BRDMyX0xFKG0gKyA2MCkpOwogICAgICAgICAgICAqLwogICAgICAgICAgICAkeDAgID0gICR4MC0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgIDAsIDQpKSk7CiAgICAgICAgICAgICR4MSAgPSAgJHgxLT54b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAgNCwgNCkpKTsKICAgICAgICAgICAgJHgyICA9ICAkeDItPnhvckludDMyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsICA4LCA0KSkpOwogICAgICAgICAgICAkeDMgID0gICR4My0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMTIsIDQpKSk7CiAgICAgICAgICAgICR4NCAgPSAgJHg0LT54b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAxNiwgNCkpKTsKICAgICAgICAgICAgJHg1ICA9ICAkeDUtPnhvckludDMyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDIwLCA0KSkpOwogICAgICAgICAgICAkeDYgID0gICR4Ni0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMjQsIDQpKSk7CiAgICAgICAgICAgICR4NyAgPSAgJHg3LT54b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAyOCwgNCkpKTsKICAgICAgICAgICAgJHg4ICA9ICAkeDgtPnhvckludDMyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDMyLCA0KSkpOwogICAgICAgICAgICAkeDkgID0gICR4OS0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgMzYsIDQpKSk7CiAgICAgICAgICAgICR4MTAgPSAkeDEwLT54b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA0MCwgNCkpKTsKICAgICAgICAgICAgJHgxMSA9ICR4MTEtPnhvckludDMyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDQ0LCA0KSkpOwogICAgICAgICAgICAkeDEyID0gJHgxMi0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNDgsIDQpKSk7CiAgICAgICAgICAgICR4MTMgPSAkeDEzLT54b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA1MiwgNCkpKTsKICAgICAgICAgICAgJHgxNCA9ICR4MTQtPnhvckludDMyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsIDU2LCA0KSkpOwogICAgICAgICAgICAkeDE1ID0gJHgxNS0+eG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkbWVzc2FnZSwgNjAsIDQpKSk7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgajEyID0gUExVU09ORShqMTIpOwogICAgICAgICAgICAgICAgaWYgKCFqMTIpIHsKICAgICAgICAgICAgICAgICAgICBqMTMgPSBQTFVTT05FKGoxMyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqLwogICAgICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEyICovCiAgICAgICAgICAgICRqMTIgPSAkajEyLT5hZGRJbnQoMSk7CiAgICAgICAgICAgIGlmICgkajEyLT5saW1ic1swXSA9PT0gMCAmJiAkajEyLT5saW1ic1sxXSA9PT0gMCkgewogICAgICAgICAgICAgICAgJGoxMyA9ICRqMTMtPmFkZEludCgxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMCwgeDApOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA0LCB4MSk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDgsIHgyKTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMTIsIHgzKTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMTYsIHg0KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMjAsIHg1KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMjQsIHg2KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMjgsIHg3KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMzIsIHg4KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgMzYsIHg5KTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgNDAsIHgxMCk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDQ0LCB4MTEpOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA0OCwgeDEyKTsKICAgICAgICAgICAgU1RPUkUzMl9MRShjICsgNTIsIHgxMyk7CiAgICAgICAgICAgIFNUT1JFMzJfTEUoYyArIDU2LCB4MTQpOwogICAgICAgICAgICBTVE9SRTMyX0xFKGMgKyA2MCwgeDE1KTsKICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICRibG9jayA9ICR4MC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICAgICAkeDItPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgICAgICR4My0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHg0LT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICAgICAkeDUtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgICAgICR4Ni0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHg3LT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICAgICAkeDgtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgICAgICR4OS0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxMC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxMS0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxMi0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxMy0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxNC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAgICAgJHgxNS0+dG9SZXZlcnNlU3RyaW5nKCk7CgogICAgICAgICAgICAvKiBQYXJ0aWFsIGJsb2NrICovCiAgICAgICAgICAgIGlmICgkYnl0ZXMgPCA2NCkgewogICAgICAgICAgICAgICAgJGMgLj0gc2VsZjo6c3Vic3RyKCRibG9jaywgMCwgJGJ5dGVzKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiBGdWxsIGJsb2NrICovCiAgICAgICAgICAgICRjIC49ICRibG9jazsKICAgICAgICAgICAgJGJ5dGVzIC09IDY0OwogICAgICAgICAgICBpZiAoJGJ5dGVzIDw9IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2NCk7CiAgICAgICAgfQogICAgICAgIC8qIGVuZCBmb3IoOzspIGxvb3AgKi8KCiAgICAgICAgJGN0eFsxMl0gPSAkajEyOwogICAgICAgICRjdHhbMTNdID0gJGoxMzsKICAgICAgICByZXR1cm4gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtKCRsZW4gPSA2NCwgJG5vbmNlID0gJycsICRrZXkgPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6ZW5jcnlwdEJ5dGVzKAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjBfQ3R4KCRrZXksICRub25jZSksCiAgICAgICAgICAgIHN0cl9yZXBlYXQoIlx4MDAiLCAkbGVuKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWV0ZlN0cmVhbSgkbGVuLCAkbm9uY2UgPSAnJywgJGtleSA9ICcnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbmNyeXB0Qnl0ZXMoCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9JZXRmQ3R4KCRrZXksICRub25jZSksCiAgICAgICAgICAgIHN0cl9yZXBlYXQoIlx4MDAiLCAkbGVuKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkaWMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZXRmU3RyZWFtWG9ySWMoJG1lc3NhZ2UsICRub25jZSA9ICcnLCAka2V5ID0gJycsICRpYyA9ICcnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbmNyeXB0Qnl0ZXMoCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9JZXRmQ3R4KCRrZXksICRub25jZSwgJGljKSwKICAgICAgICAgICAgJG1lc3NhZ2UKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtWG9ySWMoJG1lc3NhZ2UsICRub25jZSA9ICcnLCAka2V5ID0gJycsICRpYyA9ICcnKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjplbmNyeXB0Qnl0ZXMoCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9DdHgoJGtleSwgJG5vbmNlLCAkaWMpLAogICAgICAgICAgICAkbWVzc2FnZQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHgnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwX0N0eAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjBfQ3R4IGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbCBpbXBsZW1lbnRzIEFycmF5QWNjZXNzCnsKICAgIC8qKgogICAgICogQHZhciBTcGxGaXhlZEFycmF5IGludGVybmFsbHksIDxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyPgogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbnRhaW5lcjsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9DdHggY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgQ2hhQ2hhMjAga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkaXYgICAgICBJbml0aWFsaXphdGlvbiBWZWN0b3IgKGEuay5hLiBub25jZSkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudGVyIFRoZSBpbml0aWFsIGNvdW50ZXIgdmFsdWUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIDggMHgwMCBieXRlcy4KICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXkgPSAnJywgJGl2ID0gJycsICRjb3VudGVyID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSAhPT0gMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2hhQ2hhMjAgZXhwZWN0cyBhIDI1Ni1iaXQga2V5LicpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRpdikgIT09IDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ2hhQ2hhMjAgZXhwZWN0cyBhIDY0LWJpdCBub25jZS4nKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lciA9IG5ldyBTcGxGaXhlZEFycmF5KDE2KTsKCiAgICAgICAgLyogImV4cGFuZCAzMi1ieXRlIGsiIGFzIHBlciBDaGFDaGEyMCBzcGVjICovCiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclswXSAgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg2MTcwLCAweDc4NjUpKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzFdICA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDMzMjAsIDB4NjQ2ZSkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMl0gID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDB4Nzk2MiwgMHgyZDMyKSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclszXSAgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg2YjIwLCAweDY1NzQpKTsKCiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcls0XSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDAsIDQpKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzVdICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgNCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbNl0gID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigka2V5LCA4LCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcls3XSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDEyLCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcls4XSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDE2LCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcls5XSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDIwLCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxMF0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDI0LCA0KSk7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxMV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDI4LCA0KSk7CgogICAgICAgIGlmIChlbXB0eSgkY291bnRlcikpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxMl0gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxM10gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzEyXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGNvdW50ZXIsIDAsIDQpKTsKICAgICAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxM10gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjb3VudGVyLCA0LCA0KSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5jb250YWluZXJbMTRdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaXYsIDAsIDQpKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzE1XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGl2LCA0LCA0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkb2Zmc2V0CiAgICAgKiBAcGFyYW0gaW50fFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKQogICAgewogICAgICAgIGlmICghaXNfaW50KCRvZmZzZXQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGludGVnZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKSB7CiAgICAgICAgICAgIC8qCiAgICAgICAgfSBlbHNlaWYgKGlzX2ludCgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCR2YWx1ZSk7CiAgICAgICAgICAgICovCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRXhwZWN0ZWQgYW4gaW50ZWdlcicpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdKQogICAgICAgICAgICA/ICR0aGlzLT5jb250YWluZXJbJG9mZnNldF0KICAgICAgICAgICAgOiBudWxsOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMF9JZXRmQ3R4JywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9JZXRmQ3R4CiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMF9JZXRmQ3R4IGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjBfQ3R4CnsKICAgIC8qKgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwX0lldGZDdHggY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgQ2hhQ2hhMjAga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkaXYgICAgICBJbml0aWFsaXphdGlvbiBWZWN0b3IgKGEuay5hLiBub25jZSkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb3VudGVyIFRoZSBpbml0aWFsIGNvdW50ZXIgdmFsdWUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIDQgMHgwMCBieXRlcy4KICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXkgPSAnJywgJGl2ID0gJycsICRjb3VudGVyID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkaXYpICE9PSAxMikgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdDaGFDaGEyMCBleHBlY3RzIGEgOTYtYml0IG5vbmNlIGluIElFVEYgbW9kZS4nKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgka2V5LCBzZWxmOjpzdWJzdHIoJGl2LCAwLCA4KSwgJGNvdW50ZXIpOwoKICAgICAgICBpZiAoIWVtcHR5KCRjb3VudGVyKSkgewogICAgICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzEyXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGNvdW50ZXIsIDAsIDQpKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lclsxM10gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRpdiwgMCwgNCkpOwogICAgICAgICR0aGlzLT5jb250YWluZXJbMTRdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaXYsIDQsIDQpKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyWzE1XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGl2LCA4LCA0KSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTknLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTkKICoKICogSW1wbGVtZW50cyBDdXJ2ZTI1NTE5IGNvcmUgZnVuY3Rpb25zCiAqCiAqIEJhc2VkIG9uIHRoZSByZWYxMCBjdXJ2ZTI1NTE5IGNvZGUgcHJvdmlkZWQgYnkgbGlic29kaXVtCiAqCiAqIEByZWYgaHR0cHM6Ly9naXRodWIuY29tL2plZGlzY3QxL2xpYnNvZGl1bS9ibG9iL21hc3Rlci9zcmMvbGlic29kaXVtL2NyeXB0b19jb3JlL2N1cnZlMjU1MTkvcmVmMTAvY3VydmUyNTUxOV9yZWYxMC5jCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5IGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9ICnsKICAgIC8qKgogICAgICogR2V0IGEgZmllbGQgZWxlbWVudCBvZiBzaXplIDEwIHdpdGggYSB2YWx1ZSBvZiAwCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGZpZWxkIGVsZW1lbnQgb2Ygc2l6ZSAxMCB3aXRoIGEgdmFsdWUgb2YgMQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlXzEoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoMSksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCksCiAgICAgICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKSwKICAgICAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpLAogICAgICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgdHdvIGZpZWxkIGVsZW1lbnRzLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGcKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfYWRkKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZwogICAgKSB7CiAgICAgICAgJGFyciA9IGFycmF5KCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgJGFyclskaV0gPSAkZlskaV0tPmFkZEludDMyKCRnWyRpXSk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI+ICRhcnIgKi8KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KCRhcnIpOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RhbnQtdGltZSBjb25kaXRpb25hbCBtb3ZlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGcKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfY21vdigKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRmLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGcsCiAgICAgICAgJGIgPSAwCiAgICApIHsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyPiAkaCAqLwogICAgICAgICRoID0gYXJyYXkoKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAxMDsgKyskaSkgewogICAgICAgICAgICBpZiAoISgkZlskaV0gaW5zdGFuY2VvZiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMikpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEludDMyJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEoJGdbJGldIGluc3RhbmNlb2YgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBJbnQzMicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRoWyRpXSA9ICRmWyRpXS0+eG9ySW50MzIoCiAgICAgICAgICAgICAgICAkZlskaV0tPnhvckludDMyKCRnWyRpXSktPm1hc2soJGIpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI+ICRoICovCiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgkaCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBjb3B5IG9mIGEgZmllbGQgZWxlbWVudC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2NvcHkoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZikKICAgIHsKICAgICAgICAkaCA9IGNsb25lICRmOwogICAgICAgIHJldHVybiAkaDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmU6IDMyLWJ5dGUgc3RyaW5nLgogICAgICogUmVjZWl2ZTogQSBmaWVsZCBlbGVtZW50IG9iamVjdCB0byB1c2UgZm9yIGludGVybmFsIGNhbGN1bGF0aW9ucy4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcwogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9mcm9tYnl0ZXMoJHMpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkcykgIT09IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignRXhwZWN0ZWQgYSAzMi1ieXRlIHN0cmluZy4nKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGgwICovCiAgICAgICAgJGgwID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfNCgkcykKICAgICAgICApOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRoMSAqLwogICAgICAgICRoMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KAogICAgICAgICAgICBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCA0LCAzKSkgPDwgNgogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGgyICovCiAgICAgICAgJGgyID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDcsIDMpKSA8PCA1CiAgICAgICAgKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDMgKi8KICAgICAgICAkaDMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgKICAgICAgICAgICAgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMTAsIDMpKSA8PCAzCiAgICAgICAgKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDQgKi8KICAgICAgICAkaDQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgKICAgICAgICAgICAgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMTMsIDMpKSA8PCAyCiAgICAgICAgKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDUgKi8KICAgICAgICAkaDUgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgKICAgICAgICAgICAgc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMTYsIDQpKQogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGg2ICovCiAgICAgICAgJGg2ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDIwLCAzKSkgPDwgNwogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGg3ICovCiAgICAgICAgJGg3ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDIzLCAzKSkgPDwgNQogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGg4ICovCiAgICAgICAgJGg4ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDI2LCAzKSkgPDwgNAogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGg5ICovCiAgICAgICAgJGg5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoCiAgICAgICAgICAgIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAyOSwgMykpICYgODM4ODYwNykgPDwgMgogICAgICAgICk7CgogICAgICAgICRjYXJyeTkgPSAkaDktPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGgwID0gJGgwLT5hZGRJbnQzMigkY2Fycnk5LT5tdWxJbnQoMTksIDUpKTsKICAgICAgICAkaDkgPSAkaDktPnN1YkludDMyKCRjYXJyeTktPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2FycnkxID0gJGgxLT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoMiA9ICRoMi0+YWRkSW50MzIoJGNhcnJ5MSk7CiAgICAgICAgJGgxID0gJGgxLT5zdWJJbnQzMigkY2FycnkxLT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5MyA9ICRoMy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDQgPSAkaDQtPmFkZEludDMyKCRjYXJyeTMpOwogICAgICAgICRoMyA9ICRoMy0+c3ViSW50MzIoJGNhcnJ5My0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgICRjYXJyeTUgPSAkaDUtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGg2ID0gJGg2LT5hZGRJbnQzMigkY2Fycnk1KTsKICAgICAgICAkaDUgPSAkaDUtPnN1YkludDMyKCRjYXJyeTUtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2Fycnk3ID0gJGg3LT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoOCA9ICRoOC0+YWRkSW50MzIoJGNhcnJ5Nyk7CiAgICAgICAgJGg3ID0gJGg3LT5zdWJJbnQzMigkY2Fycnk3LT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRoMC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDEgPSAkaDEtPmFkZEludDMyKCRjYXJyeTApOwogICAgICAgICRoMCA9ICRoMC0+c3ViSW50MzIoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTIgPSAkaDItPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGgzID0gJGgzLT5hZGRJbnQzMigkY2FycnkyKTsKICAgICAgICAkaDIgPSAkaDItPnN1YkludDMyKCRjYXJyeTItPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk0ID0gJGg0LT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoNSA9ICRoNS0+YWRkSW50MzIoJGNhcnJ5NCk7CiAgICAgICAgJGg0ID0gJGg0LT5zdWJJbnQzMigkY2Fycnk0LT5zaGlmdExlZnQoMjYpKTsKCiAgICAgICAgJGNhcnJ5NiA9ICRoNi0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDcgPSAkaDctPmFkZEludDMyKCRjYXJyeTYpOwogICAgICAgICRoNiA9ICRoNi0+c3ViSW50MzIoJGNhcnJ5Ni0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTggPSAkaDgtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg5ID0gJGg5LT5hZGRJbnQzMigkY2Fycnk4KTsKICAgICAgICAkaDggPSAkaDgtPnN1YkludDMyKCRjYXJyeTgtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICBhcnJheSgkaDAsICRoMSwgJGgyLCRoMywgJGg0LCAkaDUsICRoNiwgJGg3LCAkaDgsICRoOSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIGZpZWxkIGVsZW1lbnQgdG8gYSBieXRlIHN0cmluZy4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV90b2J5dGVzKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGgpCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NFtdICRmCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkcQogICAgICAgICAqLwogICAgICAgICRmID0gYXJyYXkoKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgJGZbJGldID0gJGhbJGldLT50b0ludDY0KCk7CiAgICAgICAgfQoKICAgICAgICAkcSA9ICRmWzldLT5tdWxJbnQoMTksIDUpLT5hZGRJbnQoMSA8PCAxNCktPnNoaWZ0UmlnaHQoMjUpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGZbMF0pLT5zaGlmdFJpZ2h0KDI2KQogICAgICAgICAgICAtPmFkZEludDY0KCRmWzFdKS0+c2hpZnRSaWdodCgyNSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZlsyXSktPnNoaWZ0UmlnaHQoMjYpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGZbM10pLT5zaGlmdFJpZ2h0KDI1KQogICAgICAgICAgICAtPmFkZEludDY0KCRmWzRdKS0+c2hpZnRSaWdodCgyNikKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZls1XSktPnNoaWZ0UmlnaHQoMjUpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGZbNl0pLT5zaGlmdFJpZ2h0KDI2KQogICAgICAgICAgICAtPmFkZEludDY0KCRmWzddKS0+c2hpZnRSaWdodCgyNSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZls4XSktPnNoaWZ0UmlnaHQoMjYpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGZbOV0pLT5zaGlmdFJpZ2h0KDI1KTsKCiAgICAgICAgJGZbMF0gPSAkZlswXS0+YWRkSW50NjQoJHEtPm11bEludCgxOSwgNSkpOwoKICAgICAgICAkY2FycnkwID0gJGZbMF0tPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRmWzFdID0gJGZbMV0tPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRmWzBdID0gJGZbMF0tPnN1YkludDY0KCRjYXJyeTAtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2FycnkxID0gJGZbMV0tPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRmWzJdID0gJGZbMl0tPmFkZEludDY0KCRjYXJyeTEpOwogICAgICAgICRmWzFdID0gJGZbMV0tPnN1YkludDY0KCRjYXJyeTEtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2FycnkyID0gJGZbMl0tPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRmWzNdID0gJGZbM10tPmFkZEludDY0KCRjYXJyeTIpOwogICAgICAgICRmWzJdID0gJGZbMl0tPnN1YkludDY0KCRjYXJyeTItPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2FycnkzID0gJGZbM10tPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRmWzRdID0gJGZbNF0tPmFkZEludDY0KCRjYXJyeTMpOwogICAgICAgICRmWzNdID0gJGZbM10tPnN1YkludDY0KCRjYXJyeTMtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2Fycnk0ID0gJGZbNF0tPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRmWzVdID0gJGZbNV0tPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRmWzRdID0gJGZbNF0tPnN1YkludDY0KCRjYXJyeTQtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk1ID0gJGZbNV0tPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRmWzZdID0gJGZbNl0tPmFkZEludDY0KCRjYXJyeTUpOwogICAgICAgICRmWzVdID0gJGZbNV0tPnN1YkludDY0KCRjYXJyeTUtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2Fycnk2ID0gJGZbNl0tPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRmWzddID0gJGZbN10tPmFkZEludDY0KCRjYXJyeTYpOwogICAgICAgICRmWzZdID0gJGZbNl0tPnN1YkludDY0KCRjYXJyeTYtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk3ID0gJGZbN10tPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRmWzhdID0gJGZbOF0tPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRmWzddID0gJGZbN10tPnN1YkludDY0KCRjYXJyeTctPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2Fycnk4ID0gJGZbOF0tPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRmWzldID0gJGZbOV0tPmFkZEludDY0KCRjYXJyeTgpOwogICAgICAgICRmWzhdID0gJGZbOF0tPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk5ID0gJGZbOV0tPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRmWzldID0gJGZbOV0tPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGgwICovCiAgICAgICAgJGgwID0gJGZbMF0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGgxICovCiAgICAgICAgJGgxID0gJGZbMV0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGgyICovCiAgICAgICAgJGgyID0gJGZbMl0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGgzICovCiAgICAgICAgJGgzID0gJGZbM10tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg0ICovCiAgICAgICAgJGg0ID0gJGZbNF0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg1ICovCiAgICAgICAgJGg1ID0gJGZbNV0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg2ICovCiAgICAgICAgJGg2ID0gJGZbNl0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg3ICovCiAgICAgICAgJGg3ID0gJGZbN10tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg4ICovCiAgICAgICAgJGg4ID0gJGZbOF0tPnRvSW50MzIoKS0+dG9JbnQoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGg5ICovCiAgICAgICAgJGg5ID0gJGZbOV0tPnRvSW50MzIoKS0+dG9JbnQoKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAgICAgKi8KICAgICAgICAkcyA9IGFycmF5KAogICAgICAgICAgICAoaW50KSAoKCRoMCA+PiAwKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMCA+PiA4KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMCA+PiAxNikgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGgwID4+IDI0KSB8ICgkaDEgPDwgMikpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgxID4+IDYpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGgxID4+IDE0KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCgkaDEgPj4gMjIpIHwgKCRoMiA8PCAzKSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDIgPj4gNSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDIgPj4gMTMpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoKCRoMiA+PiAyMSkgfCAoJGgzIDw8IDUpKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMyA+PiAzKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoMyA+PiAxMSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGgzID4+IDE5KSB8ICgkaDQgPDwgNikpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg0ID4+IDIpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg0ID4+IDEwKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNCA+PiAxOCkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDUgPj4gMCkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDUgPj4gOCkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDUgPj4gMTYpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoKCRoNSA+PiAyNCkgfCAoJGg2IDw8IDEpKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNiA+PiA3KSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoNiA+PiAxNSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgoJGg2ID4+IDIzKSB8ICgkaDcgPDwgMykpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg3ID4+IDUpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoJGg3ID4+IDEzKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCgkaDcgPj4gMjEpIHwgKCRoOCA8PCA0KSkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDggPj4gNCkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDggPj4gMTIpICYgMHhmZiksCiAgICAgICAgICAgIChpbnQpICgoKCRoOCA+PiAyMCkgfCAoJGg5IDw8IDYpKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoOSA+PiAyKSAmIDB4ZmYpLAogICAgICAgICAgICAoaW50KSAoKCRoOSA+PiAxMCkgJiAweGZmKSwKICAgICAgICAgICAgKGludCkgKCgkaDkgPj4gMTgpICYgMHhmZikKICAgICAgICApOwogICAgICAgIHJldHVybiBzZWxmOjppbnRBcnJheVRvU3RyaW5nKCRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIElzIGEgZmllbGQgZWxlbWVudCBuZWdhdGl2ZT8gKDEgPSB5ZXMsIDAgPSBuby4gVXNlZCBpbiBjYWxjdWxhdGlvbnMuKQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHJldHVybiBpbnQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2lzbmVnYXRpdmUoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZikKICAgIHsKICAgICAgICAkc3RyID0gc2VsZjo6ZmVfdG9ieXRlcygkZik7CiAgICAgICAgcmV0dXJuIChpbnQpIChzZWxmOjpjaHJUb0ludCgkc3RyWzBdKSAmIDEpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyAwIGlmIHRoaXMgZmllbGQgZWxlbWVudCByZXN1bHRzIGluIGFsbCBOVUwgYnl0ZXMuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRmCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2lzbm9uemVybyhQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgIHN0YXRpYyAkemVybzsKICAgICAgICBpZiAoJHplcm8gPT09IG51bGwpIHsKICAgICAgICAgICAgJHplcm8gPSBzdHJfcmVwZWF0KCJceDAwIiwgMzIpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBzdHJpbmcgJHN0ciAqLwogICAgICAgICRzdHIgPSBzZWxmOjpmZV90b2J5dGVzKCRmKTsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHplcm8gKi8KICAgICAgICByZXR1cm4gIXNlbGY6OnZlcmlmeV8zMigkc3RyLCAkemVybyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNdWx0aXBseSB0d28gZmllbGQgZWxlbWVudHMKICAgICAqCiAgICAgKiBoID0gZiAqIGcKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHNlY3VyaXR5IElzIG11bHRpcGxpY2F0aW9uIGEgc291cmNlIG9mIHRpbWluZyBsZWFrcz8gSWYgc28sIGNhbiB3ZSBkbwogICAgICogICAgICAgICAgIGFueXRoaW5nIHRvIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZz8KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGcKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfbXVsKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZwogICAgKSB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMltdICRmCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMltdICRnCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGYyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjYKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY4CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjkKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRnMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGcxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZzIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRnMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGc0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZzUKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRnNgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGc3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZzgKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRnOQogICAgICAgICAqLwogICAgICAgICRmMCA9ICRmWzBdLT50b0ludDY0KCk7CiAgICAgICAgJGYxID0gJGZbMV0tPnRvSW50NjQoKTsKICAgICAgICAkZjIgPSAkZlsyXS0+dG9JbnQ2NCgpOwogICAgICAgICRmMyA9ICRmWzNdLT50b0ludDY0KCk7CiAgICAgICAgJGY0ID0gJGZbNF0tPnRvSW50NjQoKTsKICAgICAgICAkZjUgPSAkZls1XS0+dG9JbnQ2NCgpOwogICAgICAgICRmNiA9ICRmWzZdLT50b0ludDY0KCk7CiAgICAgICAgJGY3ID0gJGZbN10tPnRvSW50NjQoKTsKICAgICAgICAkZjggPSAkZls4XS0+dG9JbnQ2NCgpOwogICAgICAgICRmOSA9ICRmWzldLT50b0ludDY0KCk7CiAgICAgICAgJGcwID0gJGdbMF0tPnRvSW50NjQoKTsKICAgICAgICAkZzEgPSAkZ1sxXS0+dG9JbnQ2NCgpOwogICAgICAgICRnMiA9ICRnWzJdLT50b0ludDY0KCk7CiAgICAgICAgJGczID0gJGdbM10tPnRvSW50NjQoKTsKICAgICAgICAkZzQgPSAkZ1s0XS0+dG9JbnQ2NCgpOwogICAgICAgICRnNSA9ICRnWzVdLT50b0ludDY0KCk7CiAgICAgICAgJGc2ID0gJGdbNl0tPnRvSW50NjQoKTsKICAgICAgICAkZzcgPSAkZ1s3XS0+dG9JbnQ2NCgpOwogICAgICAgICRnOCA9ICRnWzhdLT50b0ludDY0KCk7CiAgICAgICAgJGc5ID0gJGdbOV0tPnRvSW50NjQoKTsKICAgICAgICAkZzFfMTkgPSAkZzEtPm11bEludCgxOSwgNSk7IC8qIDJeNCA8PSAxOSA8PSAyXjUsIGJ1dCB3ZSBvbmx5IHdhbnQgNSBiaXRzICovCiAgICAgICAgJGcyXzE5ID0gJGcyLT5tdWxJbnQoMTksIDUpOwogICAgICAgICRnM18xOSA9ICRnMy0+bXVsSW50KDE5LCA1KTsKICAgICAgICAkZzRfMTkgPSAkZzQtPm11bEludCgxOSwgNSk7CiAgICAgICAgJGc1XzE5ID0gJGc1LT5tdWxJbnQoMTksIDUpOwogICAgICAgICRnNl8xOSA9ICRnNi0+bXVsSW50KDE5LCA1KTsKICAgICAgICAkZzdfMTkgPSAkZzctPm11bEludCgxOSwgNSk7CiAgICAgICAgJGc4XzE5ID0gJGc4LT5tdWxJbnQoMTksIDUpOwogICAgICAgICRnOV8xOSA9ICRnOS0+bXVsSW50KDE5LCA1KTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjFfMiAqLwogICAgICAgICRmMV8yID0gJGYxLT5zaGlmdExlZnQoMSk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGYzXzIgKi8KICAgICAgICAkZjNfMiA9ICRmMy0+c2hpZnRMZWZ0KDEpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNV8yICovCiAgICAgICAgJGY1XzIgPSAkZjUtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjdfMiAqLwogICAgICAgICRmN18yID0gJGY3LT5zaGlmdExlZnQoMSk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY5XzIgKi8KICAgICAgICAkZjlfMiA9ICRmOS0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmMGcwICAgID0gJGYwLT5tdWxJbnQ2NCgkZzAsIDI3KTsKICAgICAgICAkZjBnMSAgICA9ICRmMC0+bXVsSW50NjQoJGcxLCAyNyk7CiAgICAgICAgJGYwZzIgICAgPSAkZjAtPm11bEludDY0KCRnMiwgMjcpOwogICAgICAgICRmMGczICAgID0gJGYwLT5tdWxJbnQ2NCgkZzMsIDI3KTsKICAgICAgICAkZjBnNCAgICA9ICRmMC0+bXVsSW50NjQoJGc0LCAyNyk7CiAgICAgICAgJGYwZzUgICAgPSAkZjAtPm11bEludDY0KCRnNSwgMjcpOwogICAgICAgICRmMGc2ICAgID0gJGYwLT5tdWxJbnQ2NCgkZzYsIDI3KTsKICAgICAgICAkZjBnNyAgICA9ICRmMC0+bXVsSW50NjQoJGc3LCAyNyk7CiAgICAgICAgJGYwZzggICAgPSAkZjAtPm11bEludDY0KCRnOCwgMjcpOwogICAgICAgICRmMGc5ICAgID0gJGYwLT5tdWxJbnQ2NCgkZzksIDI3KTsKICAgICAgICAkZjFnMCAgICA9ICRmMS0+bXVsSW50NjQoJGcwLCAyNyk7CiAgICAgICAgJGYxZzFfMiAgPSAkZjFfMi0+bXVsSW50NjQoJGcxLCAyNyk7CiAgICAgICAgJGYxZzIgICAgPSAkZjEtPm11bEludDY0KCRnMiwgMjcpOwogICAgICAgICRmMWczXzIgID0gJGYxXzItPm11bEludDY0KCRnMywgMjcpOwogICAgICAgICRmMWc0ICAgID0gJGYxLT5tdWxJbnQ2NCgkZzQsIDMwKTsKICAgICAgICAkZjFnNV8yICA9ICRmMV8yLT5tdWxJbnQ2NCgkZzUsIDMwKTsKICAgICAgICAkZjFnNiAgICA9ICRmMS0+bXVsSW50NjQoJGc2LCAzMCk7CiAgICAgICAgJGYxZzdfMiAgPSAkZjFfMi0+bXVsSW50NjQoJGc3LCAzMCk7CiAgICAgICAgJGYxZzggICAgPSAkZjEtPm11bEludDY0KCRnOCwgMzApOwogICAgICAgICRmMWc5XzM4ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjFfMiwgMzApOwogICAgICAgICRmMmcwICAgID0gJGYyLT5tdWxJbnQ2NCgkZzAsIDMwKTsKICAgICAgICAkZjJnMSAgICA9ICRmMi0+bXVsSW50NjQoJGcxLCAyOSk7CiAgICAgICAgJGYyZzIgICAgPSAkZjItPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmMmczICAgID0gJGYyLT5tdWxJbnQ2NCgkZzMsIDI5KTsKICAgICAgICAkZjJnNCAgICA9ICRmMi0+bXVsSW50NjQoJGc0LCAzMCk7CiAgICAgICAgJGYyZzUgICAgPSAkZjItPm11bEludDY0KCRnNSwgMjkpOwogICAgICAgICRmMmc2ICAgID0gJGYyLT5tdWxJbnQ2NCgkZzYsIDMwKTsKICAgICAgICAkZjJnNyAgICA9ICRmMi0+bXVsSW50NjQoJGc3LCAyOSk7CiAgICAgICAgJGYyZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmMiwgMzApOwogICAgICAgICRmMmc5XzE5ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjIsIDMwKTsKICAgICAgICAkZjNnMCAgICA9ICRmMy0+bXVsSW50NjQoJGcwLCAzMCk7CiAgICAgICAgJGYzZzFfMiAgPSAkZjNfMi0+bXVsSW50NjQoJGcxLCAzMCk7CiAgICAgICAgJGYzZzIgICAgPSAkZjMtPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmM2czXzIgID0gJGYzXzItPm11bEludDY0KCRnMywgMzApOwogICAgICAgICRmM2c0ICAgID0gJGYzLT5tdWxJbnQ2NCgkZzQsIDMwKTsKICAgICAgICAkZjNnNV8yICA9ICRmM18yLT5tdWxJbnQ2NCgkZzUsIDMwKTsKICAgICAgICAkZjNnNiAgICA9ICRmMy0+bXVsSW50NjQoJGc2LCAzMCk7CiAgICAgICAgJGYzZzdfMzggPSAkZzdfMTktPm11bEludDY0KCRmM18yLCAzMCk7CiAgICAgICAgJGYzZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmMywgMzApOwogICAgICAgICRmM2c5XzM4ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjNfMiwgMzApOwogICAgICAgICRmNGcwICAgID0gJGY0LT5tdWxJbnQ2NCgkZzAsIDMwKTsKICAgICAgICAkZjRnMSAgICA9ICRmNC0+bXVsSW50NjQoJGcxLCAzMCk7CiAgICAgICAgJGY0ZzIgICAgPSAkZjQtPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmNGczICAgID0gJGY0LT5tdWxJbnQ2NCgkZzMsIDMwKTsKICAgICAgICAkZjRnNCAgICA9ICRmNC0+bXVsSW50NjQoJGc0LCAzMCk7CiAgICAgICAgJGY0ZzUgICAgPSAkZjQtPm11bEludDY0KCRnNSwgMzApOwogICAgICAgICRmNGc2XzE5ID0gJGc2XzE5LT5tdWxJbnQ2NCgkZjQsIDMwKTsKICAgICAgICAkZjRnN18xOSA9ICRnN18xOS0+bXVsSW50NjQoJGY0LCAzMCk7CiAgICAgICAgJGY0ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmNCwgMzApOwogICAgICAgICRmNGc5XzE5ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjQsIDMwKTsKICAgICAgICAkZjVnMCAgICA9ICRmNS0+bXVsSW50NjQoJGcwLCAzMCk7CiAgICAgICAgJGY1ZzFfMiAgPSAkZjVfMi0+bXVsSW50NjQoJGcxLCAzMCk7CiAgICAgICAgJGY1ZzIgICAgPSAkZjUtPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmNWczXzIgID0gJGY1XzItPm11bEludDY0KCRnMywgMzApOwogICAgICAgICRmNWc0ICAgID0gJGY1LT5tdWxJbnQ2NCgkZzQsIDMwKTsKICAgICAgICAkZjVnNV8zOCA9ICRnNV8xOS0+bXVsSW50NjQoJGY1XzIsIDMwKTsKICAgICAgICAkZjVnNl8xOSA9ICRnNl8xOS0+bXVsSW50NjQoJGY1LCAzMCk7CiAgICAgICAgJGY1ZzdfMzggPSAkZzdfMTktPm11bEludDY0KCRmNV8yLCAzMCk7CiAgICAgICAgJGY1ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmNSwgMzApOwogICAgICAgICRmNWc5XzM4ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjVfMiwgMzApOwogICAgICAgICRmNmcwICAgID0gJGY2LT5tdWxJbnQ2NCgkZzAsIDMwKTsKICAgICAgICAkZjZnMSAgICA9ICRmNi0+bXVsSW50NjQoJGcxLCAzMCk7CiAgICAgICAgJGY2ZzIgICAgPSAkZjYtPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmNmczICAgID0gJGY2LT5tdWxJbnQ2NCgkZzMsIDMwKTsKICAgICAgICAkZjZnNF8xOSA9ICRnNF8xOS0+bXVsSW50NjQoJGY2LCAzMCk7CiAgICAgICAgJGY2ZzVfMTkgPSAkZzVfMTktPm11bEludDY0KCRmNiwgMzApOwogICAgICAgICRmNmc2XzE5ID0gJGc2XzE5LT5tdWxJbnQ2NCgkZjYsIDMwKTsKICAgICAgICAkZjZnN18xOSA9ICRnN18xOS0+bXVsSW50NjQoJGY2LCAzMCk7CiAgICAgICAgJGY2ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmNiwgMzApOwogICAgICAgICRmNmc5XzE5ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjYsIDMwKTsKICAgICAgICAkZjdnMCAgICA9ICRmNy0+bXVsSW50NjQoJGcwLCAzMCk7CiAgICAgICAgJGY3ZzFfMiAgPSAkZzEtPm11bEludDY0KCRmN18yLCAzMCk7CiAgICAgICAgJGY3ZzIgICAgPSAkZjctPm11bEludDY0KCRnMiwgMzApOwogICAgICAgICRmN2czXzM4ID0gJGczXzE5LT5tdWxJbnQ2NCgkZjdfMiwgMzApOwogICAgICAgICRmN2c0XzE5ID0gJGc0XzE5LT5tdWxJbnQ2NCgkZjcsIDMwKTsKICAgICAgICAkZjdnNV8zOCA9ICRnNV8xOS0+bXVsSW50NjQoJGY3XzIsIDMwKTsKICAgICAgICAkZjdnNl8xOSA9ICRnNl8xOS0+bXVsSW50NjQoJGY3LCAzMCk7CiAgICAgICAgJGY3ZzdfMzggPSAkZzdfMTktPm11bEludDY0KCRmN18yLCAzMCk7CiAgICAgICAgJGY3ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmNywgMzApOwogICAgICAgICRmN2c5XzM4ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjdfMiwgMzApOwogICAgICAgICRmOGcwICAgID0gJGY4LT5tdWxJbnQ2NCgkZzAsIDMwKTsKICAgICAgICAkZjhnMSAgICA9ICRmOC0+bXVsSW50NjQoJGcxLCAyOSk7CiAgICAgICAgJGY4ZzJfMTkgPSAkZzJfMTktPm11bEludDY0KCRmOCwgMzApOwogICAgICAgICRmOGczXzE5ID0gJGczXzE5LT5tdWxJbnQ2NCgkZjgsIDMwKTsKICAgICAgICAkZjhnNF8xOSA9ICRnNF8xOS0+bXVsSW50NjQoJGY4LCAzMCk7CiAgICAgICAgJGY4ZzVfMTkgPSAkZzVfMTktPm11bEludDY0KCRmOCwgMzApOwogICAgICAgICRmOGc2XzE5ID0gJGc2XzE5LT5tdWxJbnQ2NCgkZjgsIDMwKTsKICAgICAgICAkZjhnN18xOSA9ICRnN18xOS0+bXVsSW50NjQoJGY4LCAzMCk7CiAgICAgICAgJGY4ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmOCwgMzApOwogICAgICAgICRmOGc5XzE5ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjgsIDMwKTsKICAgICAgICAkZjlnMCAgICA9ICRmOS0+bXVsSW50NjQoJGcwLCAzMCk7CiAgICAgICAgJGY5ZzFfMzggPSAkZzFfMTktPm11bEludDY0KCRmOV8yLCAzMCk7CiAgICAgICAgJGY5ZzJfMTkgPSAkZzJfMTktPm11bEludDY0KCRmOSwgMzApOwogICAgICAgICRmOWczXzM4ID0gJGczXzE5LT5tdWxJbnQ2NCgkZjlfMiwgMzApOwogICAgICAgICRmOWc0XzE5ID0gJGc0XzE5LT5tdWxJbnQ2NCgkZjksIDMwKTsKICAgICAgICAkZjlnNV8zOCA9ICRnNV8xOS0+bXVsSW50NjQoJGY5XzIsIDMwKTsKICAgICAgICAkZjlnNl8xOSA9ICRnNl8xOS0+bXVsSW50NjQoJGY5LCAzMCk7CiAgICAgICAgJGY5ZzdfMzggPSAkZzdfMTktPm11bEludDY0KCRmOV8yLCAzMCk7CiAgICAgICAgJGY5ZzhfMTkgPSAkZzhfMTktPm11bEludDY0KCRmOSwgMzApOwogICAgICAgICRmOWc5XzM4ID0gJGc5XzE5LT5tdWxJbnQ2NCgkZjlfMiwgMzApOwoKICAgICAgICAvLyAkaDAgPSAkZjBnMCArICRmMWc5XzM4ICsgJGYyZzhfMTkgKyAkZjNnN18zOCArICRmNGc2XzE5ICsgJGY1ZzVfMzggKyAkZjZnNF8xOSArICRmN2czXzM4ICsgJGY4ZzJfMTkgKyAkZjlnMV8zODsKICAgICAgICAkaDAgPSAkZjBnMC0+YWRkSW50NjQoJGYxZzlfMzgpLT5hZGRJbnQ2NCgkZjJnOF8xOSktPmFkZEludDY0KCRmM2c3XzM4KQogICAgICAgICAgICAtPmFkZEludDY0KCRmNGc2XzE5KS0+YWRkSW50NjQoJGY1ZzVfMzgpLT5hZGRJbnQ2NCgkZjZnNF8xOSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnM18zOCktPmFkZEludDY0KCRmOGcyXzE5KS0+YWRkSW50NjQoJGY5ZzFfMzgpOwoKICAgICAgICAvLyAkaDEgPSAkZjBnMSArICRmMWcwICAgICsgJGYyZzlfMTkgKyAkZjNnOF8xOSArICRmNGc3XzE5ICsgJGY1ZzZfMTkgKyAkZjZnNV8xOSArICRmN2c0XzE5ICsgJGY4ZzNfMTkgKyAkZjlnMl8xOTsKICAgICAgICAkaDEgPSAkZjBnMS0+YWRkSW50NjQoJGYxZzApLT5hZGRJbnQ2NCgkZjJnOV8xOSktPmFkZEludDY0KCRmM2c4XzE5KQogICAgICAgICAgICAtPmFkZEludDY0KCRmNGc3XzE5KS0+YWRkSW50NjQoJGY1ZzZfMTkpLT5hZGRJbnQ2NCgkZjZnNV8xOSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnNF8xOSktPmFkZEludDY0KCRmOGczXzE5KS0+YWRkSW50NjQoJGY5ZzJfMTkpOwoKICAgICAgICAvLyAkaDIgPSAkZjBnMiArICRmMWcxXzIgICsgJGYyZzAgICAgKyAkZjNnOV8zOCArICRmNGc4XzE5ICsgJGY1ZzdfMzggKyAkZjZnNl8xOSArICRmN2c1XzM4ICsgJGY4ZzRfMTkgKyAkZjlnM18zODsKICAgICAgICAkaDIgPSAkZjBnMi0+YWRkSW50NjQoJGYxZzFfMiktPmFkZEludDY0KCRmMmcwKS0+YWRkSW50NjQoJGYzZzlfMzgpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGY0ZzhfMTkpLT5hZGRJbnQ2NCgkZjVnN18zOCktPmFkZEludDY0KCRmNmc2XzE5KQogICAgICAgICAgICAtPmFkZEludDY0KCRmN2c1XzM4KS0+YWRkSW50NjQoJGY4ZzRfMTkpLT5hZGRJbnQ2NCgkZjlnM18zOCk7CgogICAgICAgIC8vICRoMyA9ICRmMGczICsgJGYxZzIgICAgKyAkZjJnMSAgICArICRmM2cwICAgICsgJGY0ZzlfMTkgKyAkZjVnOF8xOSArICRmNmc3XzE5ICsgJGY3ZzZfMTkgKyAkZjhnNV8xOSArICRmOWc0XzE5OwogICAgICAgICRoMyA9ICRmMGczLT5hZGRJbnQ2NCgkZjFnMiktPmFkZEludDY0KCRmMmcxKS0+YWRkSW50NjQoJGYzZzApCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGY0ZzlfMTkpLT5hZGRJbnQ2NCgkZjVnOF8xOSktPmFkZEludDY0KCRmNmc3XzE5KQogICAgICAgICAgICAtPmFkZEludDY0KCRmN2c2XzE5KS0+YWRkSW50NjQoJGY4ZzVfMTkpLT5hZGRJbnQ2NCgkZjlnNF8xOSk7CgogICAgICAgIC8vICRoNCA9ICRmMGc0ICsgJGYxZzNfMiAgKyAkZjJnMiAgICArICRmM2cxXzIgICsgJGY0ZzAgICAgKyAkZjVnOV8zOCArICRmNmc4XzE5ICsgJGY3ZzdfMzggKyAkZjhnNl8xOSArICRmOWc1XzM4OwogICAgICAgICRoNCA9ICRmMGc0LT5hZGRJbnQ2NCgkZjFnM18yKS0+YWRkSW50NjQoJGYyZzIpLT5hZGRJbnQ2NCgkZjNnMV8yKQogICAgICAgICAgICAtPmFkZEludDY0KCRmNGcwKS0+YWRkSW50NjQoJGY1ZzlfMzgpLT5hZGRJbnQ2NCgkZjZnOF8xOSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnN18zOCktPmFkZEludDY0KCRmOGc2XzE5KS0+YWRkSW50NjQoJGY5ZzVfMzgpOwoKICAgICAgICAvLyAkaDUgPSAkZjBnNSArICRmMWc0ICAgICsgJGYyZzMgICAgKyAkZjNnMiAgICArICRmNGcxICAgICsgJGY1ZzAgICAgKyAkZjZnOV8xOSArICRmN2c4XzE5ICsgJGY4ZzdfMTkgKyAkZjlnNl8xOTsKICAgICAgICAkaDUgPSAkZjBnNS0+YWRkSW50NjQoJGYxZzQpLT5hZGRJbnQ2NCgkZjJnMyktPmFkZEludDY0KCRmM2cyKQogICAgICAgICAgICAtPmFkZEludDY0KCRmNGcxKS0+YWRkSW50NjQoJGY1ZzApLT5hZGRJbnQ2NCgkZjZnOV8xOSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnOF8xOSktPmFkZEludDY0KCRmOGc3XzE5KS0+YWRkSW50NjQoJGY5ZzZfMTkpOwoKICAgICAgICAvLyAkaDYgPSAkZjBnNiArICRmMWc1XzIgICsgJGYyZzQgICAgKyAkZjNnM18yICArICRmNGcyICAgICsgJGY1ZzFfMiAgKyAkZjZnMCAgICArICRmN2c5XzM4ICsgJGY4ZzhfMTkgKyAkZjlnN18zODsKICAgICAgICAkaDYgPSAkZjBnNi0+YWRkSW50NjQoJGYxZzVfMiktPmFkZEludDY0KCRmMmc0KS0+YWRkSW50NjQoJGYzZzNfMikKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjRnMiktPmFkZEludDY0KCRmNWcxXzIpLT5hZGRJbnQ2NCgkZjZnMCkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnOV8zOCktPmFkZEludDY0KCRmOGc4XzE5KS0+YWRkSW50NjQoJGY5ZzdfMzgpOwoKICAgICAgICAvLyAkaDcgPSAkZjBnNyArICRmMWc2ICAgICsgJGYyZzUgICAgKyAkZjNnNCAgICArICRmNGczICAgICsgJGY1ZzIgICAgKyAkZjZnMSAgICArICRmN2cwICAgICsgJGY4ZzlfMTkgKyAkZjlnOF8xOTsKICAgICAgICAkaDcgPSAkZjBnNy0+YWRkSW50NjQoJGYxZzYpLT5hZGRJbnQ2NCgkZjJnNSktPmFkZEludDY0KCRmM2c0KQogICAgICAgICAgICAtPmFkZEludDY0KCRmNGczKS0+YWRkSW50NjQoJGY1ZzIpLT5hZGRJbnQ2NCgkZjZnMSkKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnMCktPmFkZEludDY0KCRmOGc5XzE5KS0+YWRkSW50NjQoJGY5ZzhfMTkpOwoKICAgICAgICAvLyAkaDggPSAkZjBnOCArICRmMWc3XzIgICsgJGYyZzYgICAgKyAkZjNnNV8yICArICRmNGc0ICAgICsgJGY1ZzNfMiAgKyAkZjZnMiAgICArICRmN2cxXzIgICsgJGY4ZzAgICAgKyAkZjlnOV8zODsKICAgICAgICAkaDggPSAkZjBnOC0+YWRkSW50NjQoJGYxZzdfMiktPmFkZEludDY0KCRmMmc2KS0+YWRkSW50NjQoJGYzZzVfMikKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjRnNCktPmFkZEludDY0KCRmNWczXzIpLT5hZGRJbnQ2NCgkZjZnMikKICAgICAgICAgICAgLT5hZGRJbnQ2NCgkZjdnMV8yKS0+YWRkSW50NjQoJGY4ZzApLT5hZGRJbnQ2NCgkZjlnOV8zOCk7CgogICAgICAgIC8vICRoOSA9ICRmMGc5ICsgJGYxZzggICAgKyAkZjJnNyAgICArICRmM2c2ICAgICsgJGY0ZzUgICAgKyAkZjVnNCAgICArICRmNmczICAgICsgJGY3ZzIgICAgKyAkZjhnMSAgICArICRmOWcwICAgOwogICAgICAgICRoOSA9ICRmMGc5LT5hZGRJbnQ2NCgkZjFnOCktPmFkZEludDY0KCRmMmc3KS0+YWRkSW50NjQoJGYzZzYpCiAgICAgICAgICAgIC0+YWRkSW50NjQoJGY0ZzUpLT5hZGRJbnQ2NCgkZjVnNCktPmFkZEludDY0KCRmNmczKQogICAgICAgICAgICAtPmFkZEludDY0KCRmN2cyKS0+YWRkSW50NjQoJGY4ZzEpLT5hZGRJbnQ2NCgkZjlnMCk7CgogICAgICAgIC8qKgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGgwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGgzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDQKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoNQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDcKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoOAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg5CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2FycnkwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2FycnkxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2FycnkyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2FycnkzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk4CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkY2Fycnk5CiAgICAgICAgICovCiAgICAgICAgJGNhcnJ5MCA9ICRoMC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDEgPSAkaDEtPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRoMCA9ICRoMC0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CiAgICAgICAgJGNhcnJ5NCA9ICRoNC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDUgPSAkaDUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRoNCA9ICRoNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTEgPSAkaDEtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGgyID0gJGgyLT5hZGRJbnQ2NCgkY2FycnkxKTsKICAgICAgICAkaDEgPSAkaDEtPnN1YkludDY0KCRjYXJyeTEtPnNoaWZ0TGVmdCgyNSkpOwogICAgICAgICRjYXJyeTUgPSAkaDUtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGg2ID0gJGg2LT5hZGRJbnQ2NCgkY2Fycnk1KTsKICAgICAgICAkaDUgPSAkaDUtPnN1YkludDY0KCRjYXJyeTUtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2FycnkyID0gJGgyLT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoMyA9ICRoMy0+YWRkSW50NjQoJGNhcnJ5Mik7CiAgICAgICAgJGgyID0gJGgyLT5zdWJJbnQ2NCgkY2FycnkyLT5zaGlmdExlZnQoMjYpKTsKICAgICAgICAkY2Fycnk2ID0gJGg2LT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoNyA9ICRoNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJGg2ID0gJGg2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjYpKTsKCiAgICAgICAgJGNhcnJ5MyA9ICRoMy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDQgPSAkaDQtPmFkZEludDY0KCRjYXJyeTMpOwogICAgICAgICRoMyA9ICRoMy0+c3ViSW50NjQoJGNhcnJ5My0+c2hpZnRMZWZ0KDI1KSk7CiAgICAgICAgJGNhcnJ5NyA9ICRoNy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDggPSAkaDgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRoNyA9ICRoNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgICRjYXJyeTQgPSAkaDQtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg1ID0gJGg1LT5hZGRJbnQ2NCgkY2Fycnk0KTsKICAgICAgICAkaDQgPSAkaDQtPnN1YkludDY0KCRjYXJyeTQtPnNoaWZ0TGVmdCgyNikpOwogICAgICAgICRjYXJyeTggPSAkaDgtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg5ID0gJGg5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkaDggPSAkaDgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk5ID0gJGg5LT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoMCA9ICRoMC0+YWRkSW50NjQoJGNhcnJ5OS0+bXVsSW50KDE5LCA1KSk7CiAgICAgICAgJGg5ID0gJGg5LT5zdWJJbnQ2NCgkY2Fycnk5LT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRoMC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDEgPSAkaDEtPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRoMCA9ICRoMC0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJGgwLT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDEtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoMi0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGgzLT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDQtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoNS0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg2LT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDctPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoOC0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg5LT50b0ludDMyKCkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgZWFjaCBwaWVjZSBvZiB0aGUgZmllbGQgZWxlbWVudC4KICAgICAqCiAgICAgKiBoID0gLWYKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX25lZyhQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRmKQogICAgewogICAgICAgICRoID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAxMDsgKyskaSkgewogICAgICAgICAgICAkaFskaV0gPSAkaFskaV0tPnN1YkludDMyKCRmWyRpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaDsKICAgIH0KCiAgICAvKioKICAgICAqIFNxdWFyZSBhIGZpZWxkIGVsZW1lbnQKICAgICAqCiAgICAgKiBoID0gZiAqIGYKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfc3EoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZikKICAgIHsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjAgKi8KICAgICAgICAkZjAgPSAkZlswXS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmMSAqLwogICAgICAgICRmMSA9ICRmWzFdLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGYyICovCiAgICAgICAgJGYyID0gJGZbMl0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjMgKi8KICAgICAgICAkZjMgPSAkZlszXS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNCAqLwogICAgICAgICRmNCA9ICRmWzRdLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY1ICovCiAgICAgICAgJGY1ID0gJGZbNV0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjYgKi8KICAgICAgICAkZjYgPSAkZls2XS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNyAqLwogICAgICAgICRmNyA9ICRmWzddLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY4ICovCiAgICAgICAgJGY4ID0gJGZbOF0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjkgKi8KICAgICAgICAkZjkgPSAkZls5XS0+dG9JbnQ2NCgpOwoKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjBfMiAqLwogICAgICAgICRmMF8yID0gJGYwLT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGYxXzIgPSAkZjEtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkZjJfMiA9ICRmMi0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmM18yID0gJGYzLT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGY0XzIgPSAkZjQtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkZjVfMiA9ICRmNS0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmNl8yID0gJGY2LT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGY3XzIgPSAkZjctPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkZjVfMzggPSAkZjUtPm11bEludCgzOCwgNik7CiAgICAgICAgJGY2XzE5ID0gJGY2LT5tdWxJbnQoMTksIDUpOwogICAgICAgICRmN18zOCA9ICRmNy0+bXVsSW50KDM4LCA2KTsKICAgICAgICAkZjhfMTkgPSAkZjgtPm11bEludCgxOSwgNSk7CiAgICAgICAgJGY5XzM4ID0gJGY5LT5tdWxJbnQoMzgsIDYpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmMGYwKi8KICAgICAgICAkZjBmMCAgICA9ICRmMC0+bXVsSW50NjQoJGYwLCAyOCk7CiAgICAgICAgJGYwZjFfMiAgPSAkZjBfMi0+bXVsSW50NjQoJGYxLCAyOCk7CiAgICAgICAgJGYwZjJfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGYyLCAyOCk7CiAgICAgICAgJGYwZjNfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGYzLCAyOCk7CiAgICAgICAgJGYwZjRfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY0LCAyOCk7CiAgICAgICAgJGYwZjVfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY1LCAyOCk7CiAgICAgICAgJGYwZjZfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY2LCAyOCk7CiAgICAgICAgJGYwZjdfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY3LCAyOCk7CiAgICAgICAgJGYwZjhfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY4LCAyOCk7CiAgICAgICAgJGYwZjlfMiA9ICAkZjBfMi0+bXVsSW50NjQoJGY5LCAyOCk7CgogICAgICAgICRmMWYxXzIgPSAkZjFfMi0+bXVsSW50NjQoJGYxLCAyOCk7CiAgICAgICAgJGYxZjJfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjIsIDI4KTsKICAgICAgICAkZjFmM180ID0gJGYxXzItPm11bEludDY0KCRmM18yLCAyOCk7CiAgICAgICAgJGYxZjRfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjQsIDI4KTsKICAgICAgICAkZjFmNV80ID0gJGYxXzItPm11bEludDY0KCRmNV8yLCAzMCk7CiAgICAgICAgJGYxZjZfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjYsIDI4KTsKICAgICAgICAkZjFmN180ID0gJGYxXzItPm11bEludDY0KCRmN18yLCAyOCk7CiAgICAgICAgJGYxZjhfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjgsIDI4KTsKICAgICAgICAkZjFmOV83NiA9ICRmOV8zOC0+bXVsSW50NjQoJGYxXzIsIDMwKTsKCiAgICAgICAgJGYyZjIgPSAkZjItPm11bEludDY0KCRmMiwgMjgpOwogICAgICAgICRmMmYzXzIgPSAkZjJfMi0+bXVsSW50NjQoJGYzLCAyOCk7CiAgICAgICAgJGYyZjRfMiA9ICRmMl8yLT5tdWxJbnQ2NCgkZjQsIDI4KTsKICAgICAgICAkZjJmNV8yID0gJGYyXzItPm11bEludDY0KCRmNSwgMjgpOwogICAgICAgICRmMmY2XzIgPSAkZjJfMi0+bXVsSW50NjQoJGY2LCAyOCk7CiAgICAgICAgJGYyZjdfMiA9ICRmMl8yLT5tdWxJbnQ2NCgkZjcsIDI4KTsKICAgICAgICAkZjJmOF8zOCA9ICRmOF8xOS0+bXVsSW50NjQoJGYyXzIsIDMwKTsKICAgICAgICAkZjJmOV8zOCA9ICRmOV8zOC0+bXVsSW50NjQoJGYyLCAzMCk7CgogICAgICAgICRmM2YzXzIgPSAkZjNfMi0+bXVsSW50NjQoJGYzLCAyOCk7CiAgICAgICAgJGYzZjRfMiA9ICRmM18yLT5tdWxJbnQ2NCgkZjQsIDI4KTsKICAgICAgICAkZjNmNV80ID0gJGYzXzItPm11bEludDY0KCRmNV8yLCAzMCk7CiAgICAgICAgJGYzZjZfMiA9ICRmM18yLT5tdWxJbnQ2NCgkZjYsIDI4KTsKICAgICAgICAkZjNmN183NiA9ICRmN18zOC0+bXVsSW50NjQoJGYzXzIsIDMwKTsKICAgICAgICAkZjNmOF8zOCA9ICRmOF8xOS0+bXVsSW50NjQoJGYzXzIsIDMwKTsKICAgICAgICAkZjNmOV83NiA9ICRmOV8zOC0+bXVsSW50NjQoJGYzXzIsIDMwKTsKCiAgICAgICAgJGY0ZjQgPSAkZjQtPm11bEludDY0KCRmNCwgMjgpOwogICAgICAgICRmNGY1XzIgPSAkZjRfMi0+bXVsSW50NjQoJGY1LCAyOCk7CiAgICAgICAgJGY0ZjZfMzggPSAkZjZfMTktPm11bEludDY0KCRmNF8yLCAzMCk7CiAgICAgICAgJGY0ZjdfMzggPSAkZjdfMzgtPm11bEludDY0KCRmNCwgMzApOwogICAgICAgICRmNGY4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjRfMiwgMzApOwogICAgICAgICRmNGY5XzM4ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjQsIDMwKTsKCiAgICAgICAgJGY1ZjVfMzggPSAkZjVfMzgtPm11bEludDY0KCRmNSwgMzApOwogICAgICAgICRmNWY2XzM4ID0gJGY2XzE5LT5tdWxJbnQ2NCgkZjVfMiwgMzApOwogICAgICAgICRmNWY3Xzc2ID0gJGY3XzM4LT5tdWxJbnQ2NCgkZjVfMiwgMzApOwogICAgICAgICRmNWY4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjVfMiwgMzApOwogICAgICAgICRmNWY5Xzc2ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjVfMiwgMzApOwoKICAgICAgICAkZjZmNl8xOSA9ICRmNl8xOS0+bXVsSW50NjQoJGY2LCAzMCk7CiAgICAgICAgJGY2ZjdfMzggPSAkZjdfMzgtPm11bEludDY0KCRmNiwgMzApOwogICAgICAgICRmNmY4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjZfMiwgMzApOwogICAgICAgICRmNmY5XzM4ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjYsIDMwKTsKCiAgICAgICAgJGY3ZjdfMzggPSAkZjdfMzgtPm11bEludDY0KCRmNywgMjgpOwogICAgICAgICRmN2Y4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjdfMiwgMzApOwogICAgICAgICRmN2Y5Xzc2ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjdfMiwgMzApOwoKICAgICAgICAkZjhmOF8xOSA9ICRmOF8xOS0+bXVsSW50NjQoJGY4LCAzMCk7CiAgICAgICAgJGY4ZjlfMzggPSAkZjlfMzgtPm11bEludDY0KCRmOCwgMzApOwoKICAgICAgICAkZjlmOV8zOCA9ICRmOV8zOC0+bXVsSW50NjQoJGY5LCAyOCk7CgogICAgICAgICRoMCA9ICRmMGYwLT5hZGRJbnQ2NCgkZjFmOV83NiktPmFkZEludDY0KCRmMmY4XzM4KS0+YWRkSW50NjQoJGYzZjdfNzYpLT5hZGRJbnQ2NCgkZjRmNl8zOCktPmFkZEludDY0KCRmNWY1XzM4KTsKICAgICAgICAkaDEgPSAkZjBmMV8yLT5hZGRJbnQ2NCgkZjJmOV8zOCktPmFkZEludDY0KCRmM2Y4XzM4KS0+YWRkSW50NjQoJGY0ZjdfMzgpLT5hZGRJbnQ2NCgkZjVmNl8zOCk7CiAgICAgICAgJGgyID0gJGYwZjJfMi0+YWRkSW50NjQoJGYxZjFfMiktPmFkZEludDY0KCRmM2Y5Xzc2KS0+YWRkSW50NjQoJGY0ZjhfMzgpLT5hZGRJbnQ2NCgkZjVmN183NiktPmFkZEludDY0KCRmNmY2XzE5KTsKICAgICAgICAkaDMgPSAkZjBmM18yLT5hZGRJbnQ2NCgkZjFmMl8yKS0+YWRkSW50NjQoJGY0ZjlfMzgpLT5hZGRJbnQ2NCgkZjVmOF8zOCktPmFkZEludDY0KCRmNmY3XzM4KTsKICAgICAgICAkaDQgPSAkZjBmNF8yLT5hZGRJbnQ2NCgkZjFmM180KS0+YWRkSW50NjQoJGYyZjIpLT5hZGRJbnQ2NCgkZjVmOV83NiktPmFkZEludDY0KCRmNmY4XzM4KS0+YWRkSW50NjQoJGY3ZjdfMzgpOwogICAgICAgICRoNSA9ICRmMGY1XzItPmFkZEludDY0KCRmMWY0XzIpLT5hZGRJbnQ2NCgkZjJmM18yKS0+YWRkSW50NjQoJGY2ZjlfMzgpLT5hZGRJbnQ2NCgkZjdmOF8zOCk7CiAgICAgICAgJGg2ID0gJGYwZjZfMi0+YWRkSW50NjQoJGYxZjVfNCktPmFkZEludDY0KCRmMmY0XzIpLT5hZGRJbnQ2NCgkZjNmM18yKS0+YWRkSW50NjQoJGY3ZjlfNzYpLT5hZGRJbnQ2NCgkZjhmOF8xOSk7CiAgICAgICAgJGg3ID0gJGYwZjdfMi0+YWRkSW50NjQoJGYxZjZfMiktPmFkZEludDY0KCRmMmY1XzIpLT5hZGRJbnQ2NCgkZjNmNF8yKS0+YWRkSW50NjQoJGY4ZjlfMzgpOwogICAgICAgICRoOCA9ICRmMGY4XzItPmFkZEludDY0KCRmMWY3XzQpLT5hZGRJbnQ2NCgkZjJmNl8yKS0+YWRkSW50NjQoJGYzZjVfNCktPmFkZEludDY0KCRmNGY0KS0+YWRkSW50NjQoJGY5ZjlfMzgpOwogICAgICAgICRoOSA9ICRmMGY5XzItPmFkZEludDY0KCRmMWY4XzIpLT5hZGRJbnQ2NCgkZjJmN18yKS0+YWRkSW50NjQoJGYzZjZfMiktPmFkZEludDY0KCRmNGY1XzIpOwoKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGgxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDUKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoNgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDgKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoOQogICAgICAgICAqLwoKICAgICAgICAkY2FycnkwID0gJGgwLT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoMSA9ICRoMS0+YWRkSW50NjQoJGNhcnJ5MCk7CiAgICAgICAgJGgwID0gJGgwLT5zdWJJbnQ2NCgkY2FycnkwLT5zaGlmdExlZnQoMjYpKTsKCiAgICAgICAgJGNhcnJ5NCA9ICRoNC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDUgPSAkaDUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRoNCA9ICRoNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTEgPSAkaDEtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGgyID0gJGgyLT5hZGRJbnQ2NCgkY2FycnkxKTsKICAgICAgICAkaDEgPSAkaDEtPnN1YkludDY0KCRjYXJyeTEtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2Fycnk1ID0gJGg1LT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoNiA9ICRoNi0+YWRkSW50NjQoJGNhcnJ5NSk7CiAgICAgICAgJGg1ID0gJGg1LT5zdWJJbnQ2NCgkY2Fycnk1LT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5MiA9ICRoMi0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDMgPSAkaDMtPmFkZEludDY0KCRjYXJyeTIpOwogICAgICAgICRoMiA9ICRoMi0+c3ViSW50NjQoJGNhcnJ5Mi0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTYgPSAkaDYtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg3ID0gJGg3LT5hZGRJbnQ2NCgkY2Fycnk2KTsKICAgICAgICAkaDYgPSAkaDYtPnN1YkludDY0KCRjYXJyeTYtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2FycnkzID0gJGgzLT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoNCA9ICRoNC0+YWRkSW50NjQoJGNhcnJ5Myk7CiAgICAgICAgJGgzID0gJGgzLT5zdWJJbnQ2NCgkY2FycnkzLT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5NyA9ICRoNy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDggPSAkaDgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRoNyA9ICRoNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgICRjYXJyeTQgPSAkaDQtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg1ID0gJGg1LT5hZGRJbnQ2NCgkY2Fycnk0KTsKICAgICAgICAkaDQgPSAkaDQtPnN1YkludDY0KCRjYXJyeTQtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk4ID0gJGg4LT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoOSA9ICRoOS0+YWRkSW50NjQoJGNhcnJ5OCk7CiAgICAgICAgJGg4ID0gJGg4LT5zdWJJbnQ2NCgkY2Fycnk4LT5zaGlmdExlZnQoMjYpKTsKCiAgICAgICAgJGNhcnJ5OSA9ICRoOS0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDAgPSAkaDAtPmFkZEludDY0KCRjYXJyeTktPm11bEludCgxOSwgNSkpOwogICAgICAgICRoOSA9ICRoOS0+c3ViSW50NjQoJGNhcnJ5OS0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgICRjYXJyeTAgPSAkaDAtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGgxID0gJGgxLT5hZGRJbnQ2NCgkY2FycnkwKTsKICAgICAgICAkaDAgPSAkaDAtPnN1YkludDY0KCRjYXJyeTAtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICRoMC0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGgxLT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDItPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoMy0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg0LT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDUtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoNi0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg3LT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDgtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoOS0+dG9JbnQzMigpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogU3F1YXJlIGFuZCBkb3VibGUgYSBmaWVsZCBlbGVtZW50CiAgICAgKgogICAgICogaCA9IDIgKiBmICogZgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE1ldGhvZENhbGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9zcTIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZikKICAgIHsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjAgKi8KICAgICAgICAkZjAgPSAkZlswXS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmMSAqLwogICAgICAgICRmMSA9ICRmWzFdLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGYyICovCiAgICAgICAgJGYyID0gJGZbMl0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjMgKi8KICAgICAgICAkZjMgPSAkZlszXS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNCAqLwogICAgICAgICRmNCA9ICRmWzRdLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY1ICovCiAgICAgICAgJGY1ID0gJGZbNV0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjYgKi8KICAgICAgICAkZjYgPSAkZls2XS0+dG9JbnQ2NCgpOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRmNyAqLwogICAgICAgICRmNyA9ICRmWzddLT50b0ludDY0KCk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGY4ICovCiAgICAgICAgJGY4ID0gJGZbOF0tPnRvSW50NjQoKTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZjkgKi8KICAgICAgICAkZjkgPSAkZls5XS0+dG9JbnQ2NCgpOwoKICAgICAgICAkZjBfMiA9ICRmMC0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmMV8yID0gJGYxLT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGYyXzIgPSAkZjItPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkZjNfMiA9ICRmMy0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmNF8yID0gJGY0LT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGY1XzIgPSAkZjUtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkZjZfMiA9ICRmNi0+c2hpZnRMZWZ0KDEpOwogICAgICAgICRmN18yID0gJGY3LT5zaGlmdExlZnQoMSk7CiAgICAgICAgJGY1XzM4ID0gJGY1LT5tdWxJbnQoMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY2XzE5ID0gJGY2LT5tdWxJbnQoMTksIDUpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY3XzM4ID0gJGY3LT5tdWxJbnQoMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY4XzE5ID0gJGY4LT5tdWxJbnQoMTksIDUpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGY5XzM4ID0gJGY5LT5tdWxJbnQoMzgsIDYpOyAvKiAxLjk1OTM3NSoyXjMwICovCiAgICAgICAgJGYwZjAgPSAkZjAtPm11bEludDY0KCRmMCwgMjgpOwogICAgICAgICRmMGYxXzIgPSAkZjBfMi0+bXVsSW50NjQoJGYxLCAyOCk7CiAgICAgICAgJGYwZjJfMiA9ICRmMF8yLT5tdWxJbnQ2NCgkZjIsIDI4KTsKICAgICAgICAkZjBmM18yID0gJGYwXzItPm11bEludDY0KCRmMywgMjgpOwogICAgICAgICRmMGY0XzIgPSAkZjBfMi0+bXVsSW50NjQoJGY0LCAyOCk7CiAgICAgICAgJGYwZjVfMiA9ICRmMF8yLT5tdWxJbnQ2NCgkZjUsIDI4KTsKICAgICAgICAkZjBmNl8yID0gJGYwXzItPm11bEludDY0KCRmNiwgMjgpOwogICAgICAgICRmMGY3XzIgPSAkZjBfMi0+bXVsSW50NjQoJGY3LCAyOCk7CiAgICAgICAgJGYwZjhfMiA9ICRmMF8yLT5tdWxJbnQ2NCgkZjgsIDI4KTsKICAgICAgICAkZjBmOV8yID0gJGYwXzItPm11bEludDY0KCRmOSwgMjgpOwogICAgICAgICRmMWYxXzIgPSAkZjFfMi0+bXVsSW50NjQoJGYxLCAyOCk7CiAgICAgICAgJGYxZjJfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjIsIDI4KTsKICAgICAgICAkZjFmM180ID0gJGYxXzItPm11bEludDY0KCRmM18yLCAyOSk7CiAgICAgICAgJGYxZjRfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjQsIDI4KTsKICAgICAgICAkZjFmNV80ID0gJGYxXzItPm11bEludDY0KCRmNV8yLCAyOSk7CiAgICAgICAgJGYxZjZfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjYsIDI4KTsKICAgICAgICAkZjFmN180ID0gJGYxXzItPm11bEludDY0KCRmN18yLCAyOSk7CiAgICAgICAgJGYxZjhfMiA9ICRmMV8yLT5tdWxJbnQ2NCgkZjgsIDI4KTsKICAgICAgICAkZjFmOV83NiA9ICRmOV8zOC0+bXVsSW50NjQoJGYxXzIsIDI5KTsKICAgICAgICAkZjJmMiA9ICRmMi0+bXVsSW50NjQoJGYyLCAyOCk7CiAgICAgICAgJGYyZjNfMiA9ICRmMl8yLT5tdWxJbnQ2NCgkZjMsIDI4KTsKICAgICAgICAkZjJmNF8yID0gJGYyXzItPm11bEludDY0KCRmNCwgMjgpOwogICAgICAgICRmMmY1XzIgPSAkZjJfMi0+bXVsSW50NjQoJGY1LCAyOCk7CiAgICAgICAgJGYyZjZfMiA9ICRmMl8yLT5tdWxJbnQ2NCgkZjYsIDI4KTsKICAgICAgICAkZjJmN18yID0gJGYyXzItPm11bEludDY0KCRmNywgMjgpOwogICAgICAgICRmMmY4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjJfMiwgMjkpOwogICAgICAgICRmMmY5XzM4ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjIsIDI5KTsKICAgICAgICAkZjNmM18yID0gJGYzXzItPm11bEludDY0KCRmMywgMjgpOwogICAgICAgICRmM2Y0XzIgPSAkZjNfMi0+bXVsSW50NjQoJGY0LCAyOCk7CiAgICAgICAgJGYzZjVfNCA9ICRmM18yLT5tdWxJbnQ2NCgkZjVfMiwgMjgpOwogICAgICAgICRmM2Y2XzIgPSAkZjNfMi0+bXVsSW50NjQoJGY2LCAyOCk7CiAgICAgICAgJGYzZjdfNzYgPSAkZjdfMzgtPm11bEludDY0KCRmM18yLCAyOSk7CiAgICAgICAgJGYzZjhfMzggPSAkZjhfMTktPm11bEludDY0KCRmM18yLCAyOSk7CiAgICAgICAgJGYzZjlfNzYgPSAkZjlfMzgtPm11bEludDY0KCRmM18yLCAyOSk7CiAgICAgICAgJGY0ZjQgPSAkZjQtPm11bEludDY0KCRmNCwgMjgpOwogICAgICAgICRmNGY1XzIgPSAkZjRfMi0+bXVsSW50NjQoJGY1LCAyOCk7CiAgICAgICAgJGY0ZjZfMzggPSAkZjZfMTktPm11bEludDY0KCRmNF8yLCAyOSk7CiAgICAgICAgJGY0ZjdfMzggPSAkZjdfMzgtPm11bEludDY0KCRmNCwgMjkpOwogICAgICAgICRmNGY4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjRfMiwgMjkpOwogICAgICAgICRmNGY5XzM4ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjQsIDI5KTsKICAgICAgICAkZjVmNV8zOCA9ICRmNV8zOC0+bXVsSW50NjQoJGY1LCAyOSk7CiAgICAgICAgJGY1ZjZfMzggPSAkZjZfMTktPm11bEludDY0KCRmNV8yLCAyOSk7CiAgICAgICAgJGY1ZjdfNzYgPSAkZjdfMzgtPm11bEludDY0KCRmNV8yLCAyOSk7CiAgICAgICAgJGY1ZjhfMzggPSAkZjhfMTktPm11bEludDY0KCRmNV8yLCAyOSk7CiAgICAgICAgJGY1ZjlfNzYgPSAkZjlfMzgtPm11bEludDY0KCRmNV8yLCAyOSk7CiAgICAgICAgJGY2ZjZfMTkgPSAkZjZfMTktPm11bEludDY0KCRmNiwgMjkpOwogICAgICAgICRmNmY3XzM4ID0gJGY3XzM4LT5tdWxJbnQ2NCgkZjYsIDI5KTsKICAgICAgICAkZjZmOF8zOCA9ICRmOF8xOS0+bXVsSW50NjQoJGY2XzIsIDI5KTsKICAgICAgICAkZjZmOV8zOCA9ICRmOV8zOC0+bXVsSW50NjQoJGY2LCAyOSk7CiAgICAgICAgJGY3ZjdfMzggPSAkZjdfMzgtPm11bEludDY0KCRmNywgMjkpOwogICAgICAgICRmN2Y4XzM4ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjdfMiwgMjkpOwogICAgICAgICRmN2Y5Xzc2ID0gJGY5XzM4LT5tdWxJbnQ2NCgkZjdfMiwgMjkpOwogICAgICAgICRmOGY4XzE5ID0gJGY4XzE5LT5tdWxJbnQ2NCgkZjgsIDI5KTsKICAgICAgICAkZjhmOV8zOCA9ICRmOV8zOC0+bXVsSW50NjQoJGY4LCAyOSk7CiAgICAgICAgJGY5ZjlfMzggPSAkZjlfMzgtPm11bEludDY0KCRmOSwgMjkpOwoKICAgICAgICAkaDAgPSAkZjBmMC0+YWRkSW50NjQoJGYxZjlfNzYpLT5hZGRJbnQ2NCgkZjJmOF8zOCktPmFkZEludDY0KCRmM2Y3Xzc2KS0+YWRkSW50NjQoJGY0ZjZfMzgpLT5hZGRJbnQ2NCgkZjVmNV8zOCk7CiAgICAgICAgJGgxID0gJGYwZjFfMi0+YWRkSW50NjQoJGYyZjlfMzgpLT5hZGRJbnQ2NCgkZjNmOF8zOCktPmFkZEludDY0KCRmNGY3XzM4KS0+YWRkSW50NjQoJGY1ZjZfMzgpOwogICAgICAgICRoMiA9ICRmMGYyXzItPmFkZEludDY0KCRmMWYxXzIpLT5hZGRJbnQ2NCgkZjNmOV83NiktPmFkZEludDY0KCRmNGY4XzM4KS0+YWRkSW50NjQoJGY1ZjdfNzYpLT5hZGRJbnQ2NCgkZjZmNl8xOSk7CiAgICAgICAgJGgzID0gJGYwZjNfMi0+YWRkSW50NjQoJGYxZjJfMiktPmFkZEludDY0KCRmNGY5XzM4KS0+YWRkSW50NjQoJGY1ZjhfMzgpLT5hZGRJbnQ2NCgkZjZmN18zOCk7CiAgICAgICAgJGg0ID0gJGYwZjRfMi0+YWRkSW50NjQoJGYxZjNfNCktPmFkZEludDY0KCRmMmYyKS0+YWRkSW50NjQoJGY1ZjlfNzYpLT5hZGRJbnQ2NCgkZjZmOF8zOCktPmFkZEludDY0KCRmN2Y3XzM4KTsKICAgICAgICAkaDUgPSAkZjBmNV8yLT5hZGRJbnQ2NCgkZjFmNF8yKS0+YWRkSW50NjQoJGYyZjNfMiktPmFkZEludDY0KCRmNmY5XzM4KS0+YWRkSW50NjQoJGY3ZjhfMzgpOwogICAgICAgICRoNiA9ICRmMGY2XzItPmFkZEludDY0KCRmMWY1XzQpLT5hZGRJbnQ2NCgkZjJmNF8yKS0+YWRkSW50NjQoJGYzZjNfMiktPmFkZEludDY0KCRmN2Y5Xzc2KS0+YWRkSW50NjQoJGY4ZjhfMTkpOwogICAgICAgICRoNyA9ICRmMGY3XzItPmFkZEludDY0KCRmMWY2XzIpLT5hZGRJbnQ2NCgkZjJmNV8yKS0+YWRkSW50NjQoJGYzZjRfMiktPmFkZEludDY0KCRmOGY5XzM4KTsKICAgICAgICAkaDggPSAkZjBmOF8yLT5hZGRJbnQ2NCgkZjFmN180KS0+YWRkSW50NjQoJGYyZjZfMiktPmFkZEludDY0KCRmM2Y1XzQpLT5hZGRJbnQ2NCgkZjRmNCktPmFkZEludDY0KCRmOWY5XzM4KTsKICAgICAgICAkaDkgPSAkZjBmOV8yLT5hZGRJbnQ2NCgkZjFmOF8yKS0+YWRkSW50NjQoJGYyZjdfMiktPmFkZEludDY0KCRmM2Y2XzIpLT5hZGRJbnQ2NCgkZjRmNV8yKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGgyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDYKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRoNwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGg4CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkaDkKICAgICAgICAgKi8KICAgICAgICAkaDAgPSAkaDAtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDEgPSAkaDEtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDIgPSAkaDItPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDMgPSAkaDMtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDQgPSAkaDQtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDUgPSAkaDUtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDYgPSAkaDYtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDcgPSAkaDctPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDggPSAkaDgtPnNoaWZ0TGVmdCgxKTsKICAgICAgICAkaDkgPSAkaDktPnNoaWZ0TGVmdCgxKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRoMC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDEgPSAkaDEtPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRoMCA9ICRoMC0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CiAgICAgICAgJGNhcnJ5NCA9ICRoNC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDUgPSAkaDUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRoNCA9ICRoNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgICRjYXJyeTEgPSAkaDEtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGgyID0gJGgyLT5hZGRJbnQ2NCgkY2FycnkxKTsKICAgICAgICAkaDEgPSAkaDEtPnN1YkludDY0KCRjYXJyeTEtPnNoaWZ0TGVmdCgyNSkpOwogICAgICAgICRjYXJyeTUgPSAkaDUtPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGg2ID0gJGg2LT5hZGRJbnQ2NCgkY2Fycnk1KTsKICAgICAgICAkaDUgPSAkaDUtPnN1YkludDY0KCRjYXJyeTUtPnNoaWZ0TGVmdCgyNSkpOwoKICAgICAgICAkY2FycnkyID0gJGgyLT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoMyA9ICRoMy0+YWRkSW50NjQoJGNhcnJ5Mik7CiAgICAgICAgJGgyID0gJGgyLT5zdWJJbnQ2NCgkY2FycnkyLT5zaGlmdExlZnQoMjYpKTsKICAgICAgICAkY2Fycnk2ID0gJGg2LT5hZGRJbnQoMSA8PCAyNSktPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRoNyA9ICRoNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJGg2ID0gJGg2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjYpKTsKCiAgICAgICAgJGNhcnJ5MyA9ICRoMy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDQgPSAkaDQtPmFkZEludDY0KCRjYXJyeTMpOwogICAgICAgICRoMyA9ICRoMy0+c3ViSW50NjQoJGNhcnJ5My0+c2hpZnRMZWZ0KDI1KSk7CiAgICAgICAgJGNhcnJ5NyA9ICRoNy0+YWRkSW50KDEgPDwgMjQpLT5zaGlmdFJpZ2h0KDI1KTsKICAgICAgICAkaDggPSAkaDgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRoNyA9ICRoNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgICRjYXJyeTQgPSAkaDQtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg1ID0gJGg1LT5hZGRJbnQ2NCgkY2Fycnk0KTsKICAgICAgICAkaDQgPSAkaDQtPnN1YkludDY0KCRjYXJyeTQtPnNoaWZ0TGVmdCgyNikpOwogICAgICAgICRjYXJyeTggPSAkaDgtPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGg5ID0gJGg5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkaDggPSAkaDgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyNikpOwoKICAgICAgICAkY2Fycnk5ID0gJGg5LT5hZGRJbnQoMSA8PCAyNCktPnNoaWZ0UmlnaHQoMjUpOwogICAgICAgICRoMCA9ICRoMC0+YWRkSW50NjQoJGNhcnJ5OS0+bXVsSW50KDE5LCA1KSk7CiAgICAgICAgJGg5ID0gJGg5LT5zdWJJbnQ2NCgkY2Fycnk5LT5zaGlmdExlZnQoMjUpKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRoMC0+YWRkSW50KDEgPDwgMjUpLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkaDEgPSAkaDEtPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRoMCA9ICRoMC0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJGgwLT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDEtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoMi0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGgzLT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDQtPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoNS0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg2LT50b0ludDMyKCksCiAgICAgICAgICAgICAgICAkaDctPnRvSW50MzIoKSwKICAgICAgICAgICAgICAgICRoOC0+dG9JbnQzMigpLAogICAgICAgICAgICAgICAgJGg5LT50b0ludDMyKCkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJFoKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfaW52ZXJ0KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJFopCiAgICB7CiAgICAgICAgJHogPSBjbG9uZSAkWjsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9zcSgkeik7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQwKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkeiwgJHQxKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9tdWwoJHQwLCAkdDEpOwogICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQyKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDU7ICsrJGkpIHsKICAgICAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICB9CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MiwgJHQxKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQogICAgICAgICR0MiA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQzID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAyMDsgKyskaSkgewogICAgICAgICAgICAkdDMgPSBzZWxmOjpmZV9zcSgkdDMpOwogICAgICAgIH0KICAgICAgICAkdDIgPSBzZWxmOjpmZV9tdWwoJHQzLCAkdDIpOwogICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICB9CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfbXVsKCR0MiwgJHQxKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDUwOyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQogICAgICAgICR0MiA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQzID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAxMDA7ICsrJGkpIHsKICAgICAgICAgICAgJHQzID0gc2VsZjo6ZmVfc3EoJHQzKTsKICAgICAgICB9CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfbXVsKCR0MywgJHQyKTsKICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDUwOyArKyRpKSB7CiAgICAgICAgICAgICR0MiA9IHNlbGY6OmZlX3NxKCR0Mik7CiAgICAgICAgfQogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1OyArKyRpKSB7CiAgICAgICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpmZV9tdWwoJHQxLCAkdDApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZWYgaHR0cHM6Ly9naXRodWIuY29tL2plZGlzY3QxL2xpYnNvZGl1bS9ibG9iLzY4NTY0MzI2ZTFlOWRjNTdlZjAzNzQ2Zjg1NzM0MjMyZDIwY2E2ZmIvc3JjL2xpYnNvZGl1bS9jcnlwdG9fY29yZS9jdXJ2ZTI1NTE5L3JlZjEwL2N1cnZlMjU1MTlfcmVmMTAuYyNMMTA1NC1MMTEwNgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICR6CiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX3BvdzIyNTIzKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHopCiAgICB7CiAgICAgICAgIyBmZV9zcSh0MCwgeik7CiAgICAgICAgIyBmZV9zcSh0MSwgdDApOwogICAgICAgICMgZmVfc3EodDEsIHQxKTsKICAgICAgICAjIGZlX211bCh0MSwgeiwgdDEpOwogICAgICAgICMgZmVfbXVsKHQwLCB0MCwgdDEpOwogICAgICAgICMgZmVfc3EodDAsIHQwKTsKICAgICAgICAjIGZlX211bCh0MCwgdDEsIHQwKTsKICAgICAgICAjIGZlX3NxKHQxLCB0MCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfc3EoJHopOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9tdWwoJHosICR0MSk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MCwgJHQxKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9zcSgkdDApOwogICAgICAgICR0MCA9IHNlbGY6OmZlX211bCgkdDEsICR0MCk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQwKTsKCiAgICAgICAgIyBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7CiAgICAgICAgIyAgICAgZmVfc3EodDEsIHQxKTsKICAgICAgICAjIH0KICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1OyArKyRpKSB7CiAgICAgICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX211bCh0MCwgdDEsIHQwKTsKICAgICAgICAjIGZlX3NxKHQxLCB0MCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDApOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCAxMDsgKytpKSB7CiAgICAgICAgIyAgICAgZmVfc3EodDEsIHQxKTsKICAgICAgICAjIH0KICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCAxMDsgKyskaSkgewogICAgICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwodDEsIHQxLCB0MCk7CiAgICAgICAgIyBmZV9zcSh0MiwgdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDEsICR0MCk7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQxKTsKCiAgICAgICAgIyBmb3IgKGkgPSAxOyBpIDwgMjA7ICsraSkgewogICAgICAgICMgICAgIGZlX3NxKHQyLCB0Mik7CiAgICAgICAgIyB9CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgMjA7ICsrJGkpIHsKICAgICAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQyKTsKICAgICAgICB9CgogICAgICAgICMgZmVfbXVsKHQxLCB0MiwgdDEpOwogICAgICAgICMgZmVfc3EodDEsIHQxKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9tdWwoJHQyLCAkdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CgogICAgICAgICMgZm9yIChpID0gMTsgaSA8IDEwOyArK2kpIHsKICAgICAgICAjICAgICBmZV9zcSh0MSwgdDEpOwogICAgICAgICMgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICR0MSA9IHNlbGY6OmZlX3NxKCR0MSk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX211bCh0MCwgdDEsIHQwKTsKICAgICAgICAjIGZlX3NxKHQxLCB0MCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDApOwoKICAgICAgICAjIGZvciAoaSA9IDE7IGkgPCA1MDsgKytpKSB7CiAgICAgICAgIyAgICAgZmVfc3EodDEsIHQxKTsKICAgICAgICAjIH0KICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA1MDsgKyskaSkgewogICAgICAgICAgICAkdDEgPSBzZWxmOjpmZV9zcSgkdDEpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwodDEsIHQxLCB0MCk7CiAgICAgICAgIyBmZV9zcSh0MiwgdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDEsICR0MCk7CiAgICAgICAgJHQyID0gc2VsZjo6ZmVfc3EoJHQxKTsKCiAgICAgICAgIyBmb3IgKGkgPSAxOyBpIDwgMTAwOyArK2kpIHsKICAgICAgICAjICAgICBmZV9zcSh0MiwgdDIpOwogICAgICAgICMgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8IDEwMDsgKyskaSkgewogICAgICAgICAgICAkdDIgPSBzZWxmOjpmZV9zcSgkdDIpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwodDEsIHQyLCB0MSk7CiAgICAgICAgIyBmZV9zcSh0MSwgdDEpOwogICAgICAgICR0MSA9IHNlbGY6OmZlX211bCgkdDIsICR0MSk7CiAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKCiAgICAgICAgIyBmb3IgKGkgPSAxOyBpIDwgNTA7ICsraSkgewogICAgICAgICMgICAgIGZlX3NxKHQxLCB0MSk7CiAgICAgICAgIyB9CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgNTA7ICsrJGkpIHsKICAgICAgICAgICAgJHQxID0gc2VsZjo6ZmVfc3EoJHQxKTsKICAgICAgICB9CgogICAgICAgICMgZmVfbXVsKHQwLCB0MSwgdDApOwogICAgICAgICMgZmVfc3EodDAsIHQwKTsKICAgICAgICAjIGZlX3NxKHQwLCB0MCk7CiAgICAgICAgIyBmZV9tdWwob3V0LCB0MCwgeik7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfbXVsKCR0MSwgJHQwKTsKICAgICAgICAkdDAgPSBzZWxmOjpmZV9zcSgkdDApOwogICAgICAgICR0MCA9IHNlbGY6OmZlX3NxKCR0MCk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZlX211bCgkdDAsICR6KTsKICAgIH0KCiAgICAvKioKICAgICAqIFN1YnRyYWN0IHR3byBmaWVsZCBlbGVtZW50cy4KICAgICAqCiAgICAgKiBoID0gZiAtIGcKICAgICAqCiAgICAgKiBQcmVjb25kaXRpb25zOgogICAgICogfGZ8IGJvdW5kZWQgYnkgMS4xKjJeMjUsMS4xKjJeMjQsMS4xKjJeMjUsMS4xKjJeMjQsZXRjLgogICAgICogfGd8IGJvdW5kZWQgYnkgMS4xKjJeMjUsMS4xKjJeMjQsMS4xKjJeMjUsMS4xKjJeMjQsZXRjLgogICAgICoKICAgICAqIFBvc3Rjb25kaXRpb25zOgogICAgICogfGh8IGJvdW5kZWQgYnkgMS4xKjJeMjYsMS4xKjJeMjUsMS4xKjJeMjYsMS4xKjJeMjUsZXRjLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGcKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRUeXBlQ29lcmNpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZV9zdWIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZiwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICRmWzBdLT5zdWJJbnQzMigkZ1swXSksCiAgICAgICAgICAgICAgICAkZlsxXS0+c3ViSW50MzIoJGdbMV0pLAogICAgICAgICAgICAgICAgJGZbMl0tPnN1YkludDMyKCRnWzJdKSwKICAgICAgICAgICAgICAgICRmWzNdLT5zdWJJbnQzMigkZ1szXSksCiAgICAgICAgICAgICAgICAkZls0XS0+c3ViSW50MzIoJGdbNF0pLAogICAgICAgICAgICAgICAgJGZbNV0tPnN1YkludDMyKCRnWzVdKSwKICAgICAgICAgICAgICAgICRmWzZdLT5zdWJJbnQzMigkZ1s2XSksCiAgICAgICAgICAgICAgICAkZls3XS0+c3ViSW50MzIoJGdbN10pLAogICAgICAgICAgICAgICAgJGZbOF0tPnN1YkludDMyKCRnWzhdKSwKICAgICAgICAgICAgICAgICRmWzldLT5zdWJJbnQzMigkZ1s5XSkKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgdHdvIGdyb3VwIGVsZW1lbnRzLgogICAgICoKICAgICAqIHIgPSBwICsgcQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkcAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkICRxCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfYWRkKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJHAsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9DYWNoZWQgJHEKICAgICkgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSgpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfYWRkKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9zdWIoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX211bCgkci0+WCwgJHEtPllwbHVzWCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9tdWwoJHItPlksICRxLT5ZbWludXNYKTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX211bCgkcS0+VDJkLCAkcC0+VCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9tdWwoJHAtPlosICRxLT5aKTsKICAgICAgICAkdDAgICA9IHNlbGY6OmZlX2FkZCgkci0+WCwgJHItPlgpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfc3ViKCRyLT5aLCAkci0+WSk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9hZGQoJHItPlosICRyLT5ZKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX2FkZCgkdDAsICRyLT5UKTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX3N1YigkdDAsICRyLT5UKTsKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHJlZiBodHRwczovL2dpdGh1Yi5jb20vamVkaXNjdDEvbGlic29kaXVtL2Jsb2IvMTU3YzRhODBjMTNiMTE3NjA4YWVhZTEyMTc4YjJkMzg4MjVmOWY4Zi9zcmMvbGlic29kaXVtL2NyeXB0b19jb3JlL2N1cnZlMjU1MTkvcmVmMTAvY3VydmUyNTUxOV9yZWYxMC5jI0wxMTg1LUwxMjE1CiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgbWl4ZWQ+CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2xpZGUoJGEpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkYSkgPCAyNTYpIHsKICAgICAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkYSkgPCAxNikgewogICAgICAgICAgICAgICAgJGEgPSBzdHJfcGFkKCRhLCAyNTYsICcwJywgU1RSX1BBRF9SSUdIVCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRyICovCiAgICAgICAgJHIgPSBhcnJheSgpOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDI1NjsgKyskaSkgewogICAgICAgICAgICAkclskaV0gPSAoaW50KSAoMSAmCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGFbJGkgPj4gM10pCiAgICAgICAgICAgICAgICAgICAgICAgID4+CiAgICAgICAgICAgICAgICAgICAgKCRpICYgNykKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciAoJGkgPSAwOyRpIDwgMjU2OysrJGkpIHsKICAgICAgICAgICAgaWYgKCRyWyRpXSkgewogICAgICAgICAgICAgICAgZm9yICgkYiA9IDE7JGIgPD0gNiAmJiAkaSArICRiIDwgMjU2OysrJGIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHJbJGkgKyAkYl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyWyRpXSArICgkclskaSArICRiXSA8PCAkYikgPD0gMTUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyWyRpXSArPSAkclskaSArICRiXSA8PCAkYjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyWyRpICsgJGJdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRyWyRpXSAtICgkclskaSArICRiXSA8PCAkYikgPj0gLTE1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkclskaV0gLT0gJHJbJGkgKyAkYl0gPDwgJGI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRrID0gJGkgKyAkYjsgJGsgPCAyNTY7ICsrJGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRyWyRrXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkclska10gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJbJGtdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX2Zyb21ieXRlc19uZWdhdGVfdmFydGltZSgkcykKICAgIHsKICAgICAgICBzdGF0aWMgJGQgPSBudWxsOwogICAgICAgIGlmICghJGQpIHsKICAgICAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZCAqLwogICAgICAgICAgICAkZCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkWzBdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZFsxXSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGRbMl0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkWzNdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZFs0XSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGRbNV0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkWzZdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZFs3XSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGRbOF0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkWzldKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9mcm9tYnl0ZXMoaC0+WSxzKTsKICAgICAgICAjIGZlXzEoaC0+Wik7CiAgICAgICAgJGggPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMygKICAgICAgICAgICAgc2VsZjo6ZmVfMCgpLAogICAgICAgICAgICBzZWxmOjpmZV9mcm9tYnl0ZXMoJHMpLAogICAgICAgICAgICBzZWxmOjpmZV8xKCkKICAgICAgICApOwoKICAgICAgICAjIGZlX3NxKHUsaC0+WSk7CiAgICAgICAgIyBmZV9tdWwodix1LGQpOwogICAgICAgICMgZmVfc3ViKHUsdSxoLT5aKTsgICAgICAgLyogdSA9IHleMi0xICovCiAgICAgICAgIyBmZV9hZGQodix2LGgtPlopOyAgICAgICAvKiB2ID0gZHleMisxICovCiAgICAgICAgJHUgPSBzZWxmOjpmZV9zcSgkaC0+WSk7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZCAqLwogICAgICAgICR2ID0gc2VsZjo6ZmVfbXVsKCR1LCAkZCk7CiAgICAgICAgJHUgPSBzZWxmOjpmZV9zdWIoJHUsICRoLT5aKTsgLyogdSA9ICB5XjIgLSAxICovCiAgICAgICAgJHYgPSBzZWxmOjpmZV9hZGQoJHYsICRoLT5aKTsgLyogdiA9IGR5XjIgKyAxICovCgogICAgICAgICMgZmVfc3EodjMsdik7CiAgICAgICAgIyBmZV9tdWwodjMsdjMsdik7ICAgICAgICAvKiB2MyA9IHZeMyAqLwogICAgICAgICMgZmVfc3EoaC0+WCx2Myk7CiAgICAgICAgIyBmZV9tdWwoaC0+WCxoLT5YLHYpOwogICAgICAgICMgZmVfbXVsKGgtPlgsaC0+WCx1KTsgICAgLyogeCA9IHV2XjcgKi8KICAgICAgICAkdjMgPSBzZWxmOjpmZV9zcSgkdik7CiAgICAgICAgJHYzID0gc2VsZjo6ZmVfbXVsKCR2MywgJHYpOyAvKiB2MyA9IHZeMyAqLwogICAgICAgICRoLT5YID0gc2VsZjo6ZmVfc3EoJHYzKTsKICAgICAgICAkaC0+WCA9IHNlbGY6OmZlX211bCgkaC0+WCwgJHYpOwogICAgICAgICRoLT5YID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkdSk7IC8qIHggPSB1dl43ICovCgogICAgICAgICMgZmVfcG93MjI1MjMoaC0+WCxoLT5YKTsgLyogeCA9ICh1dl43KV4oKHEtNSkvOCkgKi8KICAgICAgICAjIGZlX211bChoLT5YLGgtPlgsdjMpOwogICAgICAgICMgZmVfbXVsKGgtPlgsaC0+WCx1KTsgICAgLyogeCA9IHV2XjModXZeNyleKChxLTUpLzgpICovCiAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9wb3cyMjUyMygkaC0+WCk7IC8qIHggPSAodXZeNyleKChxLTUpLzgpICovCiAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9tdWwoJGgtPlgsICR2Myk7CiAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9tdWwoJGgtPlgsICR1KTsgLyogeCA9IHV2XjModXZeNyleKChxLTUpLzgpICovCgogICAgICAgICMgZmVfc3Eodnh4LGgtPlgpOwogICAgICAgICMgZmVfbXVsKHZ4eCx2eHgsdik7CiAgICAgICAgIyBmZV9zdWIoY2hlY2ssdnh4LHUpOyAgICAvKiB2eF4yLXUgKi8KICAgICAgICAkdnh4ID0gc2VsZjo6ZmVfc3EoJGgtPlgpOwogICAgICAgICR2eHggPSBzZWxmOjpmZV9tdWwoJHZ4eCwgJHYpOwogICAgICAgICRjaGVjayA9IHNlbGY6OmZlX3N1Yigkdnh4LCAkdSk7IC8qIHZ4XjIgLSB1ICovCgogICAgICAgICMgaWYgKGZlX2lzbm9uemVybyhjaGVjaykpIHsKICAgICAgICAjICAgICBmZV9hZGQoY2hlY2ssdnh4LHUpOyAgLyogdnheMit1ICovCiAgICAgICAgIyAgICAgaWYgKGZlX2lzbm9uemVybyhjaGVjaykpIHsKICAgICAgICAjICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICMgICAgIH0KICAgICAgICAjICAgICBmZV9tdWwoaC0+WCxoLT5YLHNxcnRtMSk7CiAgICAgICAgIyB9CiAgICAgICAgaWYgKHNlbGY6OmZlX2lzbm9uemVybygkY2hlY2spKSB7CiAgICAgICAgICAgICRjaGVjayA9IHNlbGY6OmZlX2FkZCgkdnh4LCAkdSk7IC8qIHZ4XjIgKyB1ICovCiAgICAgICAgICAgIGlmIChzZWxmOjpmZV9pc25vbnplcm8oJGNoZWNrKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdJbnRlcm5hbCBjaGVjayBmYWlsZWQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9tdWwoCiAgICAgICAgICAgICAgICAkaC0+WCwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21JbnRBcnJheShzZWxmOjokc3FydG0xKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiAoZmVfaXNuZWdhdGl2ZShoLT5YKSA9PSAoc1szMV0gPj4gNykpIHsKICAgICAgICAjICAgICBmZV9uZWcoaC0+WCxoLT5YKTsKICAgICAgICAjIH0KICAgICAgICAkaSA9IHNlbGY6OmNoclRvSW50KCRzWzMxXSk7CiAgICAgICAgaWYgKHNlbGY6OmZlX2lzbmVnYXRpdmUoJGgtPlgpID09PSAoJGkgPj4gNykpIHsKICAgICAgICAgICAgJGgtPlggPSBzZWxmOjpmZV9uZWcoJGgtPlgpOwogICAgICAgIH0KCiAgICAgICAgIyBmZV9tdWwoaC0+VCxoLT5YLGgtPlkpOwogICAgICAgICRoLT5UID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkaC0+WSk7CiAgICAgICAgcmV0dXJuICRoOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEgJFIKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRwCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QcmVjb21wICRxCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfbWFkZCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEgJFIsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkcCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHEKICAgICkgewogICAgICAgICRyID0gY2xvbmUgJFI7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9hZGQoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX3N1YigkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfbXVsKCRyLT5YLCAkcS0+eXBsdXN4KTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX211bCgkci0+WSwgJHEtPnltaW51c3gpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfbXVsKCRxLT54eTJkLCAkcC0+VCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfYWRkKGNsb25lICRwLT5aLCBjbG9uZSAkcC0+Wik7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9zdWIoJHItPlosICRyLT5ZKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX2FkZCgkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfYWRkKCR0MCwgJHItPlQpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfc3ViKCR0MCwgJHItPlQpOwoKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSAkUgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJHAKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHEKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMXAxCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9tc3ViKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSAkUiwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRwLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkcQogICAgKSB7CiAgICAgICAgJHIgPSBjbG9uZSAkUjsKCiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9hZGQoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX3N1YigkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfbXVsKCRyLT5YLCAkcS0+eW1pbnVzeCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9tdWwoJHItPlksICRxLT55cGx1c3gpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfbXVsKCRxLT54eTJkLCAkcC0+VCk7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfYWRkKCRwLT5aLCAkcC0+Wik7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9zdWIoJHItPlosICRyLT5ZKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX2FkZCgkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfc3ViKCR0MCwgJHItPlQpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfYWRkKCR0MCwgJHItPlQpOwoKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSAkcAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9wMXAxX3RvX3AyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSAkcCkKICAgIHsKICAgICAgICAkciA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyKCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9tdWwoJHAtPlgsICRwLT5UKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX211bCgkcC0+WSwgJHAtPlopOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfbXVsKCRwLT5aLCAkcC0+VCk7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEgJHAKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDFwMV90b19wMyhQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEgJHApCiAgICB7CiAgICAgICAgJHIgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMygpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfbXVsKCRwLT5YLCAkcC0+VCk7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9tdWwoJHAtPlksICRwLT5aKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX211bCgkcC0+WiwgJHAtPlQpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfbXVsKCRwLT5YLCAkcC0+WSk7CiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDJfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyKAogICAgICAgICAgICBzZWxmOjpmZV8wKCksCiAgICAgICAgICAgIHNlbGY6OmZlXzEoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMiAkcAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AyX2RibChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyICRwKQogICAgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSgpOwoKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX3NxKCRwLT5YKTsKICAgICAgICAkci0+WiA9IHNlbGY6OmZlX3NxKCRwLT5ZKTsKICAgICAgICAkci0+VCA9IHNlbGY6OmZlX3NxMigkcC0+Wik7CiAgICAgICAgJHItPlkgPSBzZWxmOjpmZV9hZGQoJHAtPlgsICRwLT5ZKTsKICAgICAgICAkdDAgICA9IHNlbGY6OmZlX3NxKCRyLT5ZKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX2FkZCgkci0+WiwgJHItPlgpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfc3ViKCRyLT5aLCAkci0+WCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9zdWIoJHQwLCAkci0+WSk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9zdWIoJHItPlQsICRyLT5aKTsKCiAgICAgICAgcmV0dXJuICRyOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfcDNfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzKAogICAgICAgICAgICBzZWxmOjpmZV8wKCksCiAgICAgICAgICAgIHNlbGY6OmZlXzEoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpLAogICAgICAgICAgICBzZWxmOjpmZV8wKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRwCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9wM190b19jYWNoZWQoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkcCkKICAgIHsKICAgICAgICBzdGF0aWMgJGQyID0gbnVsbDsKICAgICAgICBpZiAoJGQyID09PSBudWxsKSB7CiAgICAgICAgICAgICRkMiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkMlswXSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGQyWzFdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZDJbMl0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkMlszXSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGQyWzRdKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZDJbNV0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkMls2XSksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGQyWzddKSwKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokZDJbOF0pLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRkMls5XSkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZDIgKi8KICAgICAgICAkciA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX0NhY2hlZCgpOwogICAgICAgICRyLT5ZcGx1c1ggPSBzZWxmOjpmZV9hZGQoJHAtPlksICRwLT5YKTsKICAgICAgICAkci0+WW1pbnVzWCA9IHNlbGY6OmZlX3N1YigkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfY29weSgkcC0+Wik7CiAgICAgICAgJHItPlQyZCA9IHNlbGY6OmZlX211bCgkcC0+VCwgJGQyKTsKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJHAKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AzX3RvX3AyKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJHApCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyKAogICAgICAgICAgICAkcC0+WCwKICAgICAgICAgICAgJHAtPlksCiAgICAgICAgICAgICRwLT5aCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkaAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AzX3RvYnl0ZXMoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkaCkKICAgIHsKICAgICAgICAkcmVjaXAgPSBzZWxmOjpmZV9pbnZlcnQoJGgtPlopOwogICAgICAgICR4ID0gc2VsZjo6ZmVfbXVsKCRoLT5YLCAkcmVjaXApOwogICAgICAgICR5ID0gc2VsZjo6ZmVfbXVsKCRoLT5ZLCAkcmVjaXApOwogICAgICAgICRzID0gc2VsZjo6ZmVfdG9ieXRlcygkeSk7CiAgICAgICAgJHNbMzFdID0gc2VsZjo6aW50VG9DaHIoCiAgICAgICAgICAgIHNlbGY6OmNoclRvSW50KCRzWzMxXSkgXiAoc2VsZjo6ZmVfaXNuZWdhdGl2ZSgkeCkgPDwgNykKICAgICAgICApOwogICAgICAgIHJldHVybiAkczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkcAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3AzX2RibChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRwKQogICAgewogICAgICAgICRxID0gc2VsZjo6Z2VfcDNfdG9fcDIoJHApOwogICAgICAgIHJldHVybiBzZWxmOjpnZV9wMl9kYmwoJHEpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX3ByZWNvbXBfMCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAoCiAgICAgICAgICAgIHNlbGY6OmZlXzEoKSwKICAgICAgICAgICAgc2VsZjo6ZmVfMSgpLAogICAgICAgICAgICBzZWxmOjpmZV8wKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRSZXR1cm5TdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcXVhbCgkYiwgJGMpCiAgICB7CiAgICAgICAgcmV0dXJuIChpbnQpICgoKCRiIF4gJGMpIC0gMSAmIDB4ZmZmZmZmZmYpID4+IDMxKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAkY2hhcgogICAgICogQHJldHVybiBpbnQgKDEgPSB5ZXMsIDAgPSBubykKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5lZ2F0aXZlKCRjaGFyKQogICAgewogICAgICAgIGlmIChpc19pbnQoJGNoYXIpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2hhciA8IDAgPyAxIDogMDsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjaGFyICovCiAgICAgICAgLyoqIEB2YXIgaW50ICR4ICovCiAgICAgICAgJHggPSBzZWxmOjpjaHJUb0ludChzZWxmOjpzdWJzdHIoJGNoYXIsIDAsIDEpKTsKICAgICAgICByZXR1cm4gKGludCkgKCR4ID4+IDMxKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmRpdGlvbmFsIG1vdmUKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkdAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkdQogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNtb3YoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QcmVjb21wICR0LAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCAkdSwKICAgICAgICAkYgogICAgKSB7CiAgICAgICAgaWYgKCFpc19pbnQoJGIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGludGVnZXIuJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QcmVjb21wKAogICAgICAgICAgICBzZWxmOjpmZV9jbW92KCR0LT55cGx1c3gsICR1LT55cGx1c3gsICRiKSwKICAgICAgICAgICAgc2VsZjo6ZmVfY21vdigkdC0+eW1pbnVzeCwgJHUtPnltaW51c3gsICRiKSwKICAgICAgICAgICAgc2VsZjo6ZmVfY21vdigkdC0+eHkyZCwgJHUtPnh5MmQsICRiKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcG9zCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFyZ3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2Vfc2VsZWN0KCRwb3MgPSAwLCAkYiA9IDApCiAgICB7CiAgICAgICAgc3RhdGljICRiYXNlID0gbnVsbDsKICAgICAgICBpZiAoJGJhc2UgPT09IG51bGwpIHsKICAgICAgICAgICAgJGJhc2UgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoIChzZWxmOjokYmFzZSBhcyAkaSA9PiAkYmFzKSB7CiAgICAgICAgICAgICAgICBmb3IgKCRqID0gMDsgJGogPCA4OyArKyRqKSB7CiAgICAgICAgICAgICAgICAgICAgJGJhc2VbJGldWyRqXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAoCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzBdWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVswXVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMF1bMl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzBdWzNdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVswXVs0XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMF1bNV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzBdWzZdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVswXVs3XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMF1bOF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzBdWzldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsxXVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMV1bMV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzFdWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsxXVszXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMV1bNF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzFdWzVdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsxXVs2XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMV1bN10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzFdWzhdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsxXVs5XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMl1bMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzJdWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsyXVsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMl1bM10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzJdWzRdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsyXVs1XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMl1bNl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRiYXNbJGpdWzJdWzddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkYmFzWyRqXVsyXVs4XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGJhc1skal1bMl1bOV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghaXNfaW50KCRwb3MpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Bvc2l0aW9uIG11c3QgYmUgYW4gaW50ZWdlcicpOwogICAgICAgIH0KICAgICAgICBpZiAoJHBvcyA8IDAgfHwgJHBvcyA+IDMxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignUG9zaXRpb24gaXMgb3V0IG9mIHJhbmdlIFswLCAzMV0nKTsKICAgICAgICB9CgogICAgICAgICRibmVnYXRpdmUgPSBzZWxmOjpuZWdhdGl2ZSgkYik7CiAgICAgICAgLyoqIEB2YXIgaW50ICRiYWJzICovCiAgICAgICAgJGJhYnMgPSAkYiAtICgoKC0kYm5lZ2F0aXZlKSAmICRiKSA8PCAxKTsKCiAgICAgICAgJHQgPSBzZWxmOjpnZV9wcmVjb21wXzAoKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICR0ID0gc2VsZjo6Y21vdigKICAgICAgICAgICAgICAgICR0LAogICAgICAgICAgICAgICAgJGJhc2VbJHBvc11bJGldLAogICAgICAgICAgICAgICAgc2VsZjo6ZXF1YWwoJGJhYnMsICRpICsgMSkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJG1pbnVzVCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAoCiAgICAgICAgICAgIHNlbGY6OmZlX2NvcHkoJHQtPnltaW51c3gpLAogICAgICAgICAgICBzZWxmOjpmZV9jb3B5KCR0LT55cGx1c3gpLAogICAgICAgICAgICBzZWxmOjpmZV9uZWcoJHQtPnh5MmQpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gc2VsZjo6Y21vdigkdCwgJG1pbnVzVCwgLSRibmVnYXRpdmUpOwogICAgfQoKICAgIC8qKgogICAgICogU3VidHJhY3QgdHdvIGdyb3VwIGVsZW1lbnRzLgogICAgICoKICAgICAqIHIgPSBwIC0gcQogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkcAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkICRxCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2Vfc3ViKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJHAsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9DYWNoZWQgJHEKICAgICkgewogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSgpOwoKICAgICAgICAkci0+WCA9IHNlbGY6OmZlX2FkZCgkcC0+WSwgJHAtPlgpOwogICAgICAgICRyLT5ZID0gc2VsZjo6ZmVfc3ViKCRwLT5ZLCAkcC0+WCk7CiAgICAgICAgJHItPlogPSBzZWxmOjpmZV9tdWwoJHItPlgsICRxLT5ZbWludXNYKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX211bCgkci0+WSwgJHEtPllwbHVzWCk7CiAgICAgICAgJHItPlQgPSBzZWxmOjpmZV9tdWwoJHEtPlQyZCwgJHAtPlQpOwogICAgICAgICRyLT5YID0gc2VsZjo6ZmVfbXVsKCRwLT5aLCAkcS0+Wik7CiAgICAgICAgJHQwID0gc2VsZjo6ZmVfYWRkKCRyLT5YLCAkci0+WCk7CiAgICAgICAgJHItPlggPSBzZWxmOjpmZV9zdWIoJHItPlosICRyLT5ZKTsKICAgICAgICAkci0+WSA9IHNlbGY6OmZlX2FkZCgkci0+WiwgJHItPlkpOwogICAgICAgICRyLT5aID0gc2VsZjo6ZmVfc3ViKCR0MCwgJHItPlQpOwogICAgICAgICRyLT5UID0gc2VsZjo6ZmVfYWRkKCR0MCwgJHItPlQpOwoKICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgZ3JvdXAgZWxlbWVudCB0byBhIGJ5dGUgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyICRoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VfdG9ieXRlcyhQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyICRoKQogICAgewogICAgICAgICRyZWNpcCA9IHNlbGY6OmZlX2ludmVydCgkaC0+Wik7CiAgICAgICAgJHggPSBzZWxmOjpmZV9tdWwoJGgtPlgsICRyZWNpcCk7CiAgICAgICAgJHkgPSBzZWxmOjpmZV9tdWwoJGgtPlksICRyZWNpcCk7CiAgICAgICAgJHMgPSBzZWxmOjpmZV90b2J5dGVzKCR5KTsKICAgICAgICAkc1szMV0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJHNbMzFdKSBeIChzZWxmOjpmZV9pc25lZ2F0aXZlKCR4KSA8PCA3KQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRzOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGEKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRBCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDIKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9kb3VibGVfc2NhbGFybXVsdF92YXJ0aW1lKAogICAgICAgICRhLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJEEsCiAgICAgICAgJGIKICAgICkgewogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9DYWNoZWQ+ICRBaSAqLwogICAgICAgICRBaSA9IGFycmF5KCk7CgogICAgICAgIHN0YXRpYyAkQmkgPSBhcnJheSgpOwogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QcmVjb21wPiAkQmkgKi8KICAgICAgICBpZiAoISRCaSkgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICAgICAkQmlbJGldID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCgKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVswXVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzBdWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMF1bMl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVswXVszXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzBdWzRdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMF1bNV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVswXVs2XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzBdWzddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMF1bOF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVswXVs5XSkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZTo6ZnJvbUFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMV1bMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsxXVsxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzFdWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMV1bM10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsxXVs0XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzFdWzVdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMV1bNl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsxXVs3XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzFdWzhdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMV1bOV0pCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmU6OmZyb21BcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzJdWzBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMl1bMV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsyXVsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzJdWzNdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMl1bNF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsyXVs1XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzJdWzZdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KHNlbGY6OiRiYXNlMlskaV1bMl1bN10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoc2VsZjo6JGJhc2UyWyRpXVsyXVs4XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludChzZWxmOjokYmFzZTJbJGldWzJdWzldKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgODsgKyskaSkgewogICAgICAgICAgICAkQWlbJGldID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkKAogICAgICAgICAgICAgICAgc2VsZjo6ZmVfMCgpLAogICAgICAgICAgICAgICAgc2VsZjo6ZmVfMCgpLAogICAgICAgICAgICAgICAgc2VsZjo6ZmVfMCgpLAogICAgICAgICAgICAgICAgc2VsZjo6ZmVfMCgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9DYWNoZWQ+ICRBaSAqLwoKICAgICAgICAjIHNsaWRlKGFzbGlkZSxhKTsKICAgICAgICAjIHNsaWRlKGJzbGlkZSxiKTsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGFzbGlkZSAqLwogICAgICAgICRhc2xpZGUgPSBzZWxmOjpzbGlkZSgkYSk7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRic2xpZGUgKi8KICAgICAgICAkYnNsaWRlID0gc2VsZjo6c2xpZGUoJGIpOwoKICAgICAgICAjIGdlX3AzX3RvX2NhY2hlZCgmQWlbMF0sQSk7CiAgICAgICAgIyBnZV9wM19kYmwoJnQsQSk7IGdlX3AxcDFfdG9fcDMoJkEyLCZ0KTsKICAgICAgICAkQWlbMF0gPSBzZWxmOjpnZV9wM190b19jYWNoZWQoJEEpOwogICAgICAgICR0ID0gc2VsZjo6Z2VfcDNfZGJsKCRBKTsKICAgICAgICAkQTIgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKCiAgICAgICAgIyBnZV9hZGQoJnQsJkEyLCZBaVswXSk7IGdlX3AxcDFfdG9fcDMoJnUsJnQpOyBnZV9wM190b19jYWNoZWQoJkFpWzFdLCZ1KTsKICAgICAgICAjIGdlX2FkZCgmdCwmQTIsJkFpWzFdKTsgZ2VfcDFwMV90b19wMygmdSwmdCk7IGdlX3AzX3RvX2NhY2hlZCgmQWlbMl0sJnUpOwogICAgICAgICMgZ2VfYWRkKCZ0LCZBMiwmQWlbMl0pOyBnZV9wMXAxX3RvX3AzKCZ1LCZ0KTsgZ2VfcDNfdG9fY2FjaGVkKCZBaVszXSwmdSk7CiAgICAgICAgIyBnZV9hZGQoJnQsJkEyLCZBaVszXSk7IGdlX3AxcDFfdG9fcDMoJnUsJnQpOyBnZV9wM190b19jYWNoZWQoJkFpWzRdLCZ1KTsKICAgICAgICAjIGdlX2FkZCgmdCwmQTIsJkFpWzRdKTsgZ2VfcDFwMV90b19wMygmdSwmdCk7IGdlX3AzX3RvX2NhY2hlZCgmQWlbNV0sJnUpOwogICAgICAgICMgZ2VfYWRkKCZ0LCZBMiwmQWlbNV0pOyBnZV9wMXAxX3RvX3AzKCZ1LCZ0KTsgZ2VfcDNfdG9fY2FjaGVkKCZBaVs2XSwmdSk7CiAgICAgICAgIyBnZV9hZGQoJnQsJkEyLCZBaVs2XSk7IGdlX3AxcDFfdG9fcDMoJnUsJnQpOyBnZV9wM190b19jYWNoZWQoJkFpWzddLCZ1KTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA3OyArKyRpKSB7CiAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfYWRkKCRBMiwgJEFpWyRpXSk7CiAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICRBaVskaSArIDFdID0gc2VsZjo6Z2VfcDNfdG9fY2FjaGVkKCR1KTsKICAgICAgICB9CgogICAgICAgICMgZ2VfcDJfMChyKTsKICAgICAgICAkciA9IHNlbGY6OmdlX3AyXzAoKTsKCiAgICAgICAgIyBmb3IgKGkgPSAyNTU7aSA+PSAwOy0taSkgewogICAgICAgICMgICAgIGlmIChhc2xpZGVbaV0gfHwgYnNsaWRlW2ldKSBicmVhazsKICAgICAgICAjIH0KICAgICAgICAkaSA9IDI1NTsKICAgICAgICBmb3IgKDsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICBpZiAoJGFzbGlkZVskaV0gfHwgJGJzbGlkZVskaV0pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGZvciAoO2kgPj0gMDstLWkpIHsKICAgICAgICBmb3IgKDsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAjIGdlX3AyX2RibCgmdCxyKTsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9wMl9kYmwoJHIpOwoKICAgICAgICAgICAgIyBpZiAoYXNsaWRlW2ldID4gMCkgewogICAgICAgICAgICBpZiAoJGFzbGlkZVskaV0gPiAwKSB7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsJnQpOwogICAgICAgICAgICAgICAgIyBnZV9hZGQoJnQsJnUsJkFpW2FzbGlkZVtpXS8yXSk7CiAgICAgICAgICAgICAgICAkdSA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHQpOwogICAgICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9hZGQoCiAgICAgICAgICAgICAgICAgICAgJHUsCiAgICAgICAgICAgICAgICAgICAgJEFpWyhpbnQpIGZsb29yKCRhc2xpZGVbJGldIC8gMildCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIyB9IGVsc2UgaWYgKGFzbGlkZVtpXSA8IDApIHsKICAgICAgICAgICAgfSBlbHNlaWYgKCRhc2xpZGVbJGldIDwgMCkgewogICAgICAgICAgICAgICAgIyBnZV9wMXAxX3RvX3AzKCZ1LCZ0KTsKICAgICAgICAgICAgICAgICMgZ2Vfc3ViKCZ0LCZ1LCZBaVsoLWFzbGlkZVtpXSkvMl0pOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2Vfc3ViKAogICAgICAgICAgICAgICAgICAgICR1LAogICAgICAgICAgICAgICAgICAgICRBaVsoaW50KSBmbG9vcigtJGFzbGlkZVskaV0gLyAyKV0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXA+ICRCaSAqLwoKICAgICAgICAgICAgIyBpZiAoYnNsaWRlW2ldID4gMCkgewogICAgICAgICAgICBpZiAoJGJzbGlkZVskaV0gPiAwKSB7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsJnQpOwogICAgICAgICAgICAgICAgIyBnZV9tYWRkKCZ0LCZ1LCZCaVtic2xpZGVbaV0vMl0pOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaW5kZXggKi8KICAgICAgICAgICAgICAgICRpbmRleCA9IChpbnQpIGZsb29yKCRic2xpZGVbJGldIC8gMik7CiAgICAgICAgICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHRoaXNCICovCiAgICAgICAgICAgICAgICAkdGhpc0IgPSAkQmlbJGluZGV4XTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfbWFkZCgkdCwgJHUsICR0aGlzQik7CiAgICAgICAgICAgICAgICAjIH0gZWxzZSBpZiAoYnNsaWRlW2ldIDwgMCkgewogICAgICAgICAgICB9IGVsc2VpZiAoJGJzbGlkZVskaV0gPCAwKSB7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsJnQpOwogICAgICAgICAgICAgICAgIyBnZV9tc3ViKCZ0LCZ1LCZCaVsoLWJzbGlkZVtpXSkvMl0pOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKCiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGluZGV4ICovCiAgICAgICAgICAgICAgICAkaW5kZXggPSAoaW50KSBmbG9vcigtJGJzbGlkZVskaV0gLyAyKTsKCiAgICAgICAgICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAgJHRoaXNCICovCiAgICAgICAgICAgICAgICAkdGhpc0IgPSAkQmlbJGluZGV4XTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfbXN1YigkdCwgJHUsICR0aGlzQik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgIyBnZV9wMXAxX3RvX3AyKHIsJnQpOwogICAgICAgICAgICAkciA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRPcGVyYW5kCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZV9zY2FsYXJtdWx0X2Jhc2UoJGEpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRlICovCiAgICAgICAgJGUgPSBhcnJheSgpOwogICAgICAgICRyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMSgpOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAzMjsgKyskaSkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJGRibCAqLwogICAgICAgICAgICAkZGJsID0gKGludCkgJGkgPDwgMTsKICAgICAgICAgICAgJGVbJGRibF0gPSAoaW50KSBzZWxmOjpjaHJUb0ludCgkYVskaV0pICYgMTU7CiAgICAgICAgICAgICRlWyRkYmwgKyAxXSA9IChpbnQpIChzZWxmOjpjaHJUb0ludCgkYVskaV0pID4+IDQpICYgMTU7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5ICovCiAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCA2MzsgKyskaSkgewogICAgICAgICAgICAkZVskaV0gKz0gJGNhcnJ5OwogICAgICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5ICovCiAgICAgICAgICAgICRjYXJyeSA9ICRlWyRpXSArIDg7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkgKi8KICAgICAgICAgICAgJGNhcnJ5ID4+PSA0OwogICAgICAgICAgICAkZVskaV0gLT0gJGNhcnJ5IDw8IDQ7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGUgKi8KICAgICAgICAkZVs2M10gKz0gKGludCkgJGNhcnJ5OwoKICAgICAgICAkaCA9IHNlbGY6OmdlX3AzXzAoKTsKCiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgNjQ7ICRpICs9IDIpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9zZWxlY3QoKGludCkgZmxvb3IoJGkgLyAyKSwgKGludCkgJGVbJGldKTsKICAgICAgICAgICAgJHIgPSBzZWxmOjpnZV9tYWRkKCRyLCAkaCwgJHQpOwogICAgICAgICAgICAkaCA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHIpOwogICAgICAgIH0KCiAgICAgICAgJHIgPSBzZWxmOjpnZV9wM19kYmwoJGgpOwoKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKICAgICAgICAkcyA9IHNlbGY6OmdlX3AxcDFfdG9fcDIoJHIpOwogICAgICAgICRyID0gc2VsZjo6Z2VfcDJfZGJsKCRzKTsKCiAgICAgICAgJGggPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCRyKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgNjQ7ICRpICs9IDIpIHsKICAgICAgICAgICAgJHQgPSBzZWxmOjpnZV9zZWxlY3QoJGkgPj4gMSwgKGludCkgJGVbJGldKTsKICAgICAgICAgICAgJHIgPSBzZWxmOjpnZV9tYWRkKCRyLCAkaCwgJHQpOwogICAgICAgICAgICAkaCA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIChhYiArIGMpIG1vZCBsCiAgICAgKiB3aGVyZSBsID0gMl4yNTIgKyAyNzc0MjMxNzc3NzM3MjM1MzUzNTg1MTkzNzc5MDg4MzY0ODQ5MwogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2NfbXVsYWRkKCRhLCAkYiwgJGMpCiAgICB7CiAgICAgICAgJGEwID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGEsIDAsIDMpKSk7CiAgICAgICAgJGExID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAyLCA0KSkgPj4gNSkpOwogICAgICAgICRhMiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYSwgNSwgMykpID4+IDIpKTsKICAgICAgICAkYTMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGEsIDcsIDQpKSA+PiA3KSk7CiAgICAgICAgJGE0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAxMCwgNCkpID4+IDQpKTsKICAgICAgICAkYTUgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGEsIDEzLCAzKSkgPj4gMSkpOwogICAgICAgICRhNiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYSwgMTUsIDQpKSA+PiA2KSk7CiAgICAgICAgJGE3ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRhLCAxOCwgMykpID4+IDMpKTsKICAgICAgICAkYTggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYSwgMjEsIDMpKSk7CiAgICAgICAgJGE5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAyMywgNCkpID4+IDUpKTsKICAgICAgICAkYTEwID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRhLCAyNiwgMykpID4+IDIpKTsKICAgICAgICAkYTExID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMHgxZmZmZmZmZiAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRhLCAyOCwgNCkpID4+IDcpKTsKICAgICAgICAkYjAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYiwgMCwgMykpKTsKICAgICAgICAkYjEgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDIsIDQpKSA+PiA1KSk7CiAgICAgICAgJGIyID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRiLCA1LCAzKSkgPj4gMikpOwogICAgICAgICRiMyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYiwgNywgNCkpID4+IDcpKTsKICAgICAgICAkYjQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDEwLCA0KSkgPj4gNCkpOwogICAgICAgICRiNSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYiwgMTMsIDMpKSA+PiAxKSk7CiAgICAgICAgJGI2ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRiLCAxNSwgNCkpID4+IDYpKTsKICAgICAgICAkYjcgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGIsIDE4LCAzKSkgPj4gMykpOwogICAgICAgICRiOCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRiLCAyMSwgMykpKTsKICAgICAgICAkYjkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDIzLCA0KSkgPj4gNSkpOwogICAgICAgICRiMTAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGIsIDI2LCAzKSkgPj4gMikpOwogICAgICAgICRiMTEgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgweDFmZmZmZmZmICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGIsIDI4LCA0KSkgPj4gNykpOwogICAgICAgICRjMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRjLCAwLCAzKSkpOwogICAgICAgICRjMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMiwgNCkpID4+IDUpKTsKICAgICAgICAkYzIgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGMsIDUsIDMpKSA+PiAyKSk7CiAgICAgICAgJGMzID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRjLCA3LCA0KSkgPj4gNykpOwogICAgICAgICRjNCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMTAsIDQpKSA+PiA0KSk7CiAgICAgICAgJGM1ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRjLCAxMywgMykpID4+IDEpKTsKICAgICAgICAkYzYgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJGMsIDE1LCA0KSkgPj4gNikpOwogICAgICAgICRjNyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYywgMTgsIDMpKSA+PiAzKSk7CiAgICAgICAgJGM4ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJGMsIDIxLCAzKSkpOwogICAgICAgICRjOSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMjMsIDQpKSA+PiA1KSk7CiAgICAgICAgJGMxMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkYywgMjYsIDMpKSA+PiAyKSk7CiAgICAgICAgJGMxMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDB4MWZmZmZmZmYgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkYywgMjgsIDQpKSA+PiA3KSk7CgogICAgICAgIC8qIENhbid0IHJlYWxseSBhdm9pZCB0aGUgcHlyYW1pZCBoZXJlOiAqLwogICAgICAgIC8qKgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczQKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzNQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHM2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczcKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzOAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHM5CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczEwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczExCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczEyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczEzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE4CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczE5CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczIwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczIxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczIyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczIzCiAgICAgICAgICovCgogICAgICAgICRzMCA9ICRjMC0+YWRkSW50NjQoJGEwLT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHMxID0gJGMxLT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiMSwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHMyID0gJGMyLT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiMiwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjEsIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGIwLCAyNCkpOwogICAgICAgICRzMyA9ICRjMy0+YWRkSW50NjQoJGEwLT5tdWxJbnQ2NCgkYjMsIDI0KSktPmFkZEludDY0KCRhMS0+bXVsSW50NjQoJGIyLCAyNCkpLT5hZGRJbnQ2NCgkYTItPm11bEludDY0KCRiMSwgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHM0ID0gJGM0LT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiNCwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjMsIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGIyLCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTMtPm11bEludDY0KCRiMSwgMjQpKS0+YWRkSW50NjQoJGE0LT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHM1ID0gJGM1LT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiNSwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjQsIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGIzLCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTMtPm11bEludDY0KCRiMiwgMjQpKS0+YWRkSW50NjQoJGE0LT5tdWxJbnQ2NCgkYjEsIDI0KSktPmFkZEludDY0KCRhNS0+bXVsSW50NjQoJGIwLCAyNCkpOwogICAgICAgICRzNiA9ICRjNi0+YWRkSW50NjQoJGEwLT5tdWxJbnQ2NCgkYjYsIDI0KSktPmFkZEludDY0KCRhMS0+bXVsSW50NjQoJGI1LCAyNCkpLT5hZGRJbnQ2NCgkYTItPm11bEludDY0KCRiNCwgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjMsIDI0KSktPmFkZEludDY0KCRhNC0+bXVsSW50NjQoJGIyLCAyNCkpLT5hZGRJbnQ2NCgkYTUtPm11bEludDY0KCRiMSwgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE2LT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHM3ID0gJGM3LT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiNywgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjYsIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGI1LCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTMtPm11bEludDY0KCRiNCwgMjQpKS0+YWRkSW50NjQoJGE0LT5tdWxJbnQ2NCgkYjMsIDI0KSktPmFkZEludDY0KCRhNS0+bXVsSW50NjQoJGIyLCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiMSwgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHM4ID0gJGM4LT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiOCwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjcsIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGI2LCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTMtPm11bEludDY0KCRiNSwgMjQpKS0+YWRkSW50NjQoJGE0LT5tdWxJbnQ2NCgkYjQsIDI0KSktPmFkZEludDY0KCRhNS0+bXVsSW50NjQoJGIzLCAyNCkpCiAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiMiwgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjEsIDI0KSktPmFkZEludDY0KCRhOC0+bXVsSW50NjQoJGIwLCAyNCkpOwogICAgICAgICRzOSA9ICRjOS0+YWRkSW50NjQoJGEwLT5tdWxJbnQ2NCgkYjksIDI0KSktPmFkZEludDY0KCRhMS0+bXVsSW50NjQoJGI4LCAyNCkpLT5hZGRJbnQ2NCgkYTItPm11bEludDY0KCRiNywgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjYsIDI0KSktPmFkZEludDY0KCRhNC0+bXVsSW50NjQoJGI1LCAyNCkpLT5hZGRJbnQ2NCgkYTUtPm11bEludDY0KCRiNCwgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE2LT5tdWxJbnQ2NCgkYjMsIDI0KSktPmFkZEludDY0KCRhNy0+bXVsSW50NjQoJGIyLCAyNCkpLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiMSwgMjQpKQogICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE5LT5tdWxJbnQ2NCgkYjAsIDI0KSk7CiAgICAgICAgJHMxMCA9ICRjMTAtPmFkZEludDY0KCRhMC0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGExLT5tdWxJbnQ2NCgkYjksIDI0KSktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGI4LCAyNCkpCiAgICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhMy0+bXVsSW50NjQoJGI3LCAyNCkpLT5hZGRJbnQ2NCgkYTQtPm11bEludDY0KCRiNiwgMjQpKS0+YWRkSW50NjQoJGE1LT5tdWxJbnQ2NCgkYjUsIDI0KSkKICAgICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE2LT5tdWxJbnQ2NCgkYjQsIDI0KSktPmFkZEludDY0KCRhNy0+bXVsSW50NjQoJGIzLCAyNCkpLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiMiwgMjQpKQogICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTktPm11bEludDY0KCRiMSwgMjQpKS0+YWRkSW50NjQoJGExMC0+bXVsSW50NjQoJGIwLCAyNCkpOwogICAgICAgICRzMTEgPSAkYzExLT5hZGRJbnQ2NCgkYTAtPm11bEludDY0KCRiMTEsIDI0KSktPmFkZEludDY0KCRhMS0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGEyLT5tdWxJbnQ2NCgkYjksIDI0KSkKICAgICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjgsIDI0KSktPmFkZEludDY0KCRhNC0+bXVsSW50NjQoJGI3LCAyNCkpLT5hZGRJbnQ2NCgkYTUtPm11bEludDY0KCRiNiwgMjQpKQogICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiNSwgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjQsIDI0KSktPmFkZEludDY0KCRhOC0+bXVsSW50NjQoJGIzLCAyNCkpCiAgICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhOS0+bXVsSW50NjQoJGIyLCAyNCkpLT5hZGRJbnQ2NCgkYTEwLT5tdWxJbnQ2NCgkYjEsIDI0KSktPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiMCwgMjQpKTsKICAgICAgICAkczEyID0gJGExLT5tdWxJbnQ2NCgkYjExLCAyNCktPmFkZEludDY0KCRhMi0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjksIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTQtPm11bEludDY0KCRiOCwgMjQpKS0+YWRkSW50NjQoJGE1LT5tdWxJbnQ2NCgkYjcsIDI0KSktPmFkZEludDY0KCRhNi0+bXVsSW50NjQoJGI2LCAyNCkpCiAgICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjUsIDI0KSktPmFkZEludDY0KCRhOC0+bXVsSW50NjQoJGI0LCAyNCkpLT5hZGRJbnQ2NCgkYTktPm11bEludDY0KCRiMywgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiMiwgMjQpKS0+YWRkSW50NjQoJGExMS0+bXVsSW50NjQoJGIxLCAyNCkpOwogICAgICAgICRzMTMgPSAkYTItPm11bEludDY0KCRiMTEsIDI0KS0+YWRkSW50NjQoJGEzLT5tdWxJbnQ2NCgkYjEwLCAyNCkpLT5hZGRJbnQ2NCgkYTQtPm11bEludDY0KCRiOSwgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhNS0+bXVsSW50NjQoJGI4LCAyNCkpLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiNywgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjYsIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiNSwgMjQpKS0+YWRkSW50NjQoJGE5LT5tdWxJbnQ2NCgkYjQsIDI0KSktPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiMywgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiMiwgMjQpKTsKICAgICAgICAkczE0ID0gJGEzLT5tdWxJbnQ2NCgkYjExLCAyNCktPmFkZEludDY0KCRhNC0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGE1LT5tdWxJbnQ2NCgkYjksIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiOCwgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjcsIDI0KSktPmFkZEludDY0KCRhOC0+bXVsSW50NjQoJGI2LCAyNCkpCiAgICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGE5LT5tdWxJbnQ2NCgkYjUsIDI0KSktPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiNCwgMjQpKS0+YWRkSW50NjQoJGExMS0+bXVsSW50NjQoJGIzLCAyNCkpOwogICAgICAgICRzMTUgPSAkYTQtPm11bEludDY0KCRiMTEsIDI0KS0+YWRkSW50NjQoJGE1LT5tdWxJbnQ2NCgkYjEwLCAyNCkpLT5hZGRJbnQ2NCgkYTYtPm11bEludDY0KCRiOSwgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhNy0+bXVsSW50NjQoJGI4LCAyNCkpLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiNywgMjQpKS0+YWRkSW50NjQoJGE5LT5tdWxJbnQ2NCgkYjYsIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTEwLT5tdWxJbnQ2NCgkYjUsIDI0KSktPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiNCwgMjQpKTsKICAgICAgICAkczE2ID0gJGE1LT5tdWxJbnQ2NCgkYjExLCAyNCktPmFkZEludDY0KCRhNi0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGE3LT5tdWxJbnQ2NCgkYjksIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiOCwgMjQpKS0+YWRkSW50NjQoJGE5LT5tdWxJbnQ2NCgkYjcsIDI0KSktPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiNiwgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiNSwgMjQpKTsKICAgICAgICAkczE3ID0gJGE2LT5tdWxJbnQ2NCgkYjExLCAyNCktPmFkZEludDY0KCRhNy0+bXVsSW50NjQoJGIxMCwgMjQpKS0+YWRkSW50NjQoJGE4LT5tdWxJbnQ2NCgkYjksIDI0KSkKICAgICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkYTktPm11bEludDY0KCRiOCwgMjQpKS0+YWRkSW50NjQoJGExMC0+bXVsSW50NjQoJGI3LCAyNCkpLT5hZGRJbnQ2NCgkYTExLT5tdWxJbnQ2NCgkYjYsIDI0KSk7CiAgICAgICAgJHMxOCA9ICRhNy0+bXVsSW50NjQoJGIxMSwgMjQpLT5hZGRJbnQ2NCgkYTgtPm11bEludDY0KCRiMTAsIDI0KSktPmFkZEludDY0KCRhOS0+bXVsSW50NjQoJGI5LCAyNCkpCiAgICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGExMC0+bXVsSW50NjQoJGI4LCAyNCkpLT5hZGRJbnQ2NCgkYTExLT5tdWxJbnQ2NCgkYjcsIDI0KSk7CiAgICAgICAgJHMxOSA9ICRhOC0+bXVsSW50NjQoJGIxMSwgMjQpLT5hZGRJbnQ2NCgkYTktPm11bEludDY0KCRiMTAsIDI0KSktPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiOSwgMjQpKQogICAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiOCwgMjQpKTsKICAgICAgICAkczIwID0gJGE5LT5tdWxJbnQ2NCgkYjExLCAyNCktPmFkZEludDY0KCRhMTAtPm11bEludDY0KCRiMTAsIDI0KSktPmFkZEludDY0KCRhMTEtPm11bEludDY0KCRiOSwgMjQpKTsKICAgICAgICAkczIxID0gJGExMC0+bXVsSW50NjQoJGIxMSwgMjQpLT5hZGRJbnQ2NCgkYTExLT5tdWxJbnQ2NCgkYjEwLCAyNCkpOwogICAgICAgICRzMjIgPSAkYTExLT5tdWxJbnQ2NCgkYjExLCAyNCk7CiAgICAgICAgJHMyMyA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgpOwoKICAgICAgICAkY2FycnkwID0gJHMwLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMSA9ICRzMS0+YWRkSW50NjQoJGNhcnJ5MCk7CiAgICAgICAgJHMwID0gJHMwLT5zdWJJbnQ2NCgkY2FycnkwLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkyID0gJHMyLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMyA9ICRzMy0+YWRkSW50NjQoJGNhcnJ5Mik7CiAgICAgICAgJHMyID0gJHMyLT5zdWJJbnQ2NCgkY2FycnkyLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk0ID0gJHM0LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNSA9ICRzNS0+YWRkSW50NjQoJGNhcnJ5NCk7CiAgICAgICAgJHM0ID0gJHM0LT5zdWJJbnQ2NCgkY2Fycnk0LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk2ID0gJHM2LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNyA9ICRzNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJHM2ID0gJHM2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk4ID0gJHM4LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOSA9ICRzOS0+YWRkSW50NjQoJGNhcnJ5OCk7CiAgICAgICAgJHM4ID0gJHM4LT5zdWJJbnQ2NCgkY2Fycnk4LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMCA9ICRzMTAtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRjYXJyeTEwKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJGNhcnJ5MTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEyID0gJHMxMi0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEzID0gJHMxMy0+YWRkSW50NjQoJGNhcnJ5MTIpOwogICAgICAgICRzMTIgPSAkczEyLT5zdWJJbnQ2NCgkY2FycnkxMi0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTQgPSAkczE0LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTUgPSAkczE1LT5hZGRJbnQ2NCgkY2FycnkxNCk7CiAgICAgICAgJHMxNCA9ICRzMTQtPnN1YkludDY0KCRjYXJyeTE0LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxNiA9ICRzMTYtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxNyA9ICRzMTctPmFkZEludDY0KCRjYXJyeTE2KTsKICAgICAgICAkczE2ID0gJHMxNi0+c3ViSW50NjQoJGNhcnJ5MTYtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTE4ID0gJHMxOC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczE5ID0gJHMxOS0+YWRkSW50NjQoJGNhcnJ5MTgpOwogICAgICAgICRzMTggPSAkczE4LT5zdWJJbnQ2NCgkY2FycnkxOC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MjAgPSAkczIwLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMjEgPSAkczIxLT5hZGRJbnQ2NCgkY2FycnkyMCk7CiAgICAgICAgJHMyMCA9ICRzMjAtPnN1YkludDY0KCRjYXJyeTIwLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkyMiA9ICRzMjItPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMyMyA9ICRzMjMtPmFkZEludDY0KCRjYXJyeTIyKTsKICAgICAgICAkczIyID0gJHMyMi0+c3ViSW50NjQoJGNhcnJ5MjItPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkY2FycnkxID0gJHMxLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMiA9ICRzMi0+YWRkSW50NjQoJGNhcnJ5MSk7CiAgICAgICAgJHMxID0gJHMxLT5zdWJJbnQ2NCgkY2FycnkxLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkzID0gJHMzLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNCA9ICRzNC0+YWRkSW50NjQoJGNhcnJ5Myk7CiAgICAgICAgJHMzID0gJHMzLT5zdWJJbnQ2NCgkY2FycnkzLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk1ID0gJHM1LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNiA9ICRzNi0+YWRkSW50NjQoJGNhcnJ5NSk7CiAgICAgICAgJHM1ID0gJHM1LT5zdWJJbnQ2NCgkY2Fycnk1LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk3ID0gJHM3LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOCA9ICRzOC0+YWRkSW50NjQoJGNhcnJ5Nyk7CiAgICAgICAgJHM3ID0gJHM3LT5zdWJJbnQ2NCgkY2Fycnk3LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk5ID0gJHM5LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkY2Fycnk5KTsKICAgICAgICAkczkgPSAkczktPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTExID0gJHMxMS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEyID0gJHMxMi0+YWRkSW50NjQoJGNhcnJ5MTEpOwogICAgICAgICRzMTEgPSAkczExLT5zdWJJbnQ2NCgkY2FycnkxMS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTMgPSAkczEzLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTQgPSAkczE0LT5hZGRJbnQ2NCgkY2FycnkxMyk7CiAgICAgICAgJHMxMyA9ICRzMTMtPnN1YkludDY0KCRjYXJyeTEzLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxNSA9ICRzMTUtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxNiA9ICRzMTYtPmFkZEludDY0KCRjYXJyeTE1KTsKICAgICAgICAkczE1ID0gJHMxNS0+c3ViSW50NjQoJGNhcnJ5MTUtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTE3ID0gJHMxNy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczE4ID0gJHMxOC0+YWRkSW50NjQoJGNhcnJ5MTcpOwogICAgICAgICRzMTcgPSAkczE3LT5zdWJJbnQ2NCgkY2FycnkxNy0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTkgPSAkczE5LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMjAgPSAkczIwLT5hZGRJbnQ2NCgkY2FycnkxOSk7CiAgICAgICAgJHMxOSA9ICRzMTktPnN1YkludDY0KCRjYXJyeTE5LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkyMSA9ICRzMjEtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMyMiA9ICRzMjItPmFkZEludDY0KCRjYXJyeTIxKTsKICAgICAgICAkczIxID0gJHMyMS0+c3ViSW50NjQoJGNhcnJ5MjEtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczExID0gJHMxMS0+YWRkSW50NjQoJHMyMy0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEyID0gJHMxMi0+YWRkSW50NjQoJHMyMy0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczEzID0gJHMxMy0+YWRkSW50NjQoJHMyMy0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczE0ID0gJHMxNC0+c3ViSW50NjQoJHMyMy0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczE1ID0gJHMxNS0+YWRkSW50NjQoJHMyMy0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczE2ID0gJHMxNi0+c3ViSW50NjQoJHMyMy0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHMxMCA9ICRzMTAtPmFkZEludDY0KCRzMjItPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRzMjItPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRzMjItPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHMxMyA9ICRzMTMtPnN1YkludDY0KCRzMjItPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHMxNCA9ICRzMTQtPmFkZEludDY0KCRzMjItPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHMxNSA9ICRzMTUtPnN1YkludDY0KCRzMjItPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzOSAgPSAgJHM5LT5hZGRJbnQ2NCgkczIxLT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkczIxLT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzMTEgPSAkczExLT5hZGRJbnQ2NCgkczIxLT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzMTIgPSAkczEyLT5zdWJJbnQ2NCgkczIxLT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzMTMgPSAkczEzLT5hZGRJbnQ2NCgkczIxLT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzMTQgPSAkczE0LT5zdWJJbnQ2NCgkczIxLT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczggID0gICRzOC0+YWRkSW50NjQoJHMyMC0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczkgID0gICRzOS0+YWRkSW50NjQoJHMyMC0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJHMyMC0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJHMyMC0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczEyID0gJHMxMi0+YWRkSW50NjQoJHMyMC0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczEzID0gJHMxMy0+c3ViSW50NjQoJHMyMC0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHM3ICA9ICAkczctPmFkZEludDY0KCRzMTktPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHM4ICA9ICAkczgtPmFkZEludDY0KCRzMTktPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHM5ICA9ICAkczktPmFkZEludDY0KCRzMTktPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHMxMCA9ICRzMTAtPnN1YkludDY0KCRzMTktPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRzMTktPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHMxMiA9ICRzMTItPnN1YkludDY0KCRzMTktPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzNiAgPSAgJHM2LT5hZGRJbnQ2NCgkczE4LT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzNyAgPSAgJHM3LT5hZGRJbnQ2NCgkczE4LT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzOCAgPSAgJHM4LT5hZGRJbnQ2NCgkczE4LT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzOSAgPSAgJHM5LT5zdWJJbnQ2NCgkczE4LT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkczE4LT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzMTEgPSAkczExLT5zdWJJbnQ2NCgkczE4LT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkY2Fycnk2ID0gJHM2LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNyA9ICRzNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJHM2ID0gJHM2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk4ID0gJHM4LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOSA9ICRzOS0+YWRkSW50NjQoJGNhcnJ5OCk7CiAgICAgICAgJHM4ID0gJHM4LT5zdWJJbnQ2NCgkY2Fycnk4LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMCA9ICRzMTAtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRjYXJyeTEwKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJGNhcnJ5MTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEyID0gJHMxMi0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEzID0gJHMxMy0+YWRkSW50NjQoJGNhcnJ5MTIpOwogICAgICAgICRzMTIgPSAkczEyLT5zdWJJbnQ2NCgkY2FycnkxMi0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTQgPSAkczE0LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTUgPSAkczE1LT5hZGRJbnQ2NCgkY2FycnkxNCk7CiAgICAgICAgJHMxNCA9ICRzMTQtPnN1YkludDY0KCRjYXJyeTE0LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxNiA9ICRzMTYtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxNyA9ICRzMTctPmFkZEludDY0KCRjYXJyeTE2KTsKICAgICAgICAkczE2ID0gJHMxNi0+c3ViSW50NjQoJGNhcnJ5MTYtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkY2Fycnk3ID0gJHM3LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOCA9ICRzOC0+YWRkSW50NjQoJGNhcnJ5Nyk7CiAgICAgICAgJHM3ID0gJHM3LT5zdWJJbnQ2NCgkY2Fycnk3LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk5ID0gJHM5LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkY2Fycnk5KTsKICAgICAgICAkczkgPSAkczktPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTExID0gJHMxMS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEyID0gJHMxMi0+YWRkSW50NjQoJGNhcnJ5MTEpOwogICAgICAgICRzMTEgPSAkczExLT5zdWJJbnQ2NCgkY2FycnkxMS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTMgPSAkczEzLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTQgPSAkczE0LT5hZGRJbnQ2NCgkY2FycnkxMyk7CiAgICAgICAgJHMxMyA9ICRzMTMtPnN1YkludDY0KCRjYXJyeTEzLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxNSA9ICRzMTUtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxNiA9ICRzMTYtPmFkZEludDY0KCRjYXJyeTE1KTsKICAgICAgICAkczE1ID0gJHMxNS0+c3ViSW50NjQoJGNhcnJ5MTUtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczUgID0gICRzNS0+YWRkSW50NjQoJHMxNy0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczYgID0gICRzNi0+YWRkSW50NjQoJHMxNy0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczcgID0gICRzNy0+YWRkSW50NjQoJHMxNy0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczggID0gICRzOC0+c3ViSW50NjQoJHMxNy0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczkgID0gICRzOS0+YWRkSW50NjQoJHMxNy0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJHMxNy0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHM0ICA9ICAkczQtPmFkZEludDY0KCRzMTYtPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHM1ICA9ICAkczUtPmFkZEludDY0KCRzMTYtPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHM2ICA9ICAkczYtPmFkZEludDY0KCRzMTYtPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHM3ICA9ICAkczctPnN1YkludDY0KCRzMTYtPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHM4ICA9ICAkczgtPmFkZEludDY0KCRzMTYtPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHM5ICA9ICAkczktPnN1YkludDY0KCRzMTYtPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzMyAgPSAgJHMzLT5hZGRJbnQ2NCgkczE1LT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzNCAgPSAgJHM0LT5hZGRJbnQ2NCgkczE1LT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzNSAgPSAgJHM1LT5hZGRJbnQ2NCgkczE1LT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzNiAgPSAgJHM2LT5zdWJJbnQ2NCgkczE1LT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzNyAgPSAgJHM3LT5hZGRJbnQ2NCgkczE1LT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzOCAgPSAgJHM4LT5zdWJJbnQ2NCgkczE1LT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxNC0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+YWRkSW50NjQoJHMxNC0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxNC0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxNC0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczYgID0gICRzNi0+YWRkSW50NjQoJHMxNC0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczcgID0gICRzNy0+c3ViSW50NjQoJHMxNC0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHMxICA9ICAkczEtPmFkZEludDY0KCRzMTMtPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHMyICA9ICAkczItPmFkZEludDY0KCRzMTMtPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHMzICA9ICAkczMtPmFkZEludDY0KCRzMTMtPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHM0ICA9ICAkczQtPnN1YkludDY0KCRzMTMtPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHM1ICA9ICAkczUtPmFkZEludDY0KCRzMTMtPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHM2ICA9ICAkczYtPnN1YkludDY0KCRzMTMtPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzMCAgPSAgJHMwLT5hZGRJbnQ2NCgkczEyLT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzMSAgPSAgJHMxLT5hZGRJbnQ2NCgkczEyLT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzMiAgPSAgJHMyLT5hZGRJbnQ2NCgkczEyLT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzMyAgPSAgJHMzLT5zdWJJbnQ2NCgkczEyLT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzNCAgPSAgJHM0LT5hZGRJbnQ2NCgkczEyLT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzNSAgPSAgJHM1LT5zdWJJbnQ2NCgkczEyLT5tdWxJbnQoNjgzOTAxLCAyMCkpOwogICAgICAgICRzMTIgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRzMC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEgPSAkczEtPmFkZEludDY0KCRjYXJyeTApOwogICAgICAgICRzMCA9ICRzMC0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MiA9ICRzMi0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczMgPSAkczMtPmFkZEludDY0KCRjYXJyeTIpOwogICAgICAgICRzMiA9ICRzMi0+c3ViSW50NjQoJGNhcnJ5Mi0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NCA9ICRzNC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczUgPSAkczUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRzNCA9ICRzNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NiA9ICRzNi0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczcgPSAkczctPmFkZEludDY0KCRjYXJyeTYpOwogICAgICAgICRzNiA9ICRzNi0+c3ViSW50NjQoJGNhcnJ5Ni0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OCA9ICRzOC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczkgPSAkczktPmFkZEludDY0KCRjYXJyeTgpOwogICAgICAgICRzOCA9ICRzOC0+c3ViSW50NjQoJGNhcnJ5OC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTAgPSAkczEwLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTEgPSAkczExLT5hZGRJbnQ2NCgkY2FycnkxMCk7CiAgICAgICAgJHMxMCA9ICRzMTAtPnN1YkludDY0KCRjYXJyeTEwLT5zaGlmdExlZnQoMjEpKTsKCiAgICAgICAgJGNhcnJ5MSA9ICRzMS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczIgPSAkczItPmFkZEludDY0KCRjYXJyeTEpOwogICAgICAgICRzMSA9ICRzMS0+c3ViSW50NjQoJGNhcnJ5MS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MyA9ICRzMy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczQgPSAkczQtPmFkZEludDY0KCRjYXJyeTMpOwogICAgICAgICRzMyA9ICRzMy0+c3ViSW50NjQoJGNhcnJ5My0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NSA9ICRzNS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczYgPSAkczYtPmFkZEludDY0KCRjYXJyeTUpOwogICAgICAgICRzNSA9ICRzNS0+c3ViSW50NjQoJGNhcnJ5NS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NyA9ICRzNy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczggPSAkczgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRzNyA9ICRzNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OSA9ICRzOS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJGNhcnJ5OSk7CiAgICAgICAgJHM5ID0gJHM5LT5zdWJJbnQ2NCgkY2Fycnk5LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMSA9ICRzMTEtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRjYXJyeTExKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJGNhcnJ5MTEtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczAgID0gICRzMC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEgID0gICRzMS0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDY4MzkwMSwgMjApKTsKICAgICAgICAkczEyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CgogICAgICAgICRjYXJyeTAgPSAkczAtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMSA9ICRzMS0+YWRkSW50NjQoJGNhcnJ5MCk7CiAgICAgICAgJHMwID0gJHMwLT5zdWJJbnQ2NCgkY2FycnkwLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxID0gJHMxLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczIgPSAkczItPmFkZEludDY0KCRjYXJyeTEpOwogICAgICAgICRzMSA9ICRzMS0+c3ViSW50NjQoJGNhcnJ5MS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MiA9ICRzMi0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMzID0gJHMzLT5hZGRJbnQ2NCgkY2FycnkyKTsKICAgICAgICAkczIgPSAkczItPnN1YkludDY0KCRjYXJyeTItPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTMgPSAkczMtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNCA9ICRzNC0+YWRkSW50NjQoJGNhcnJ5Myk7CiAgICAgICAgJHMzID0gJHMzLT5zdWJJbnQ2NCgkY2FycnkzLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk0ID0gJHM0LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczUgPSAkczUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRzNCA9ICRzNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NSA9ICRzNS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM2ID0gJHM2LT5hZGRJbnQ2NCgkY2Fycnk1KTsKICAgICAgICAkczUgPSAkczUtPnN1YkludDY0KCRjYXJyeTUtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTYgPSAkczYtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNyA9ICRzNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJHM2ID0gJHM2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk3ID0gJHM3LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczggPSAkczgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRzNyA9ICRzNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OCA9ICRzOC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM5ID0gJHM5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkczggPSAkczgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTkgPSAkczktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkY2Fycnk5KTsKICAgICAgICAkczkgPSAkczktPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEwID0gJHMxMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRjYXJyeTEwKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJGNhcnJ5MTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTExID0gJHMxMS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRjYXJyeTExKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJGNhcnJ5MTEtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczAgID0gICRzMC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEgID0gICRzMS0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRzMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxID0gJHMxLT5hZGRJbnQ2NCgkY2FycnkwKTsKICAgICAgICAkczAgPSAkczAtPnN1YkludDY0KCRjYXJyeTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEgPSAkczEtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMiA9ICRzMi0+YWRkSW50NjQoJGNhcnJ5MSk7CiAgICAgICAgJHMxID0gJHMxLT5zdWJJbnQ2NCgkY2FycnkxLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkyID0gJHMyLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczMgPSAkczMtPmFkZEludDY0KCRjYXJyeTIpOwogICAgICAgICRzMiA9ICRzMi0+c3ViSW50NjQoJGNhcnJ5Mi0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MyA9ICRzMy0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM0ID0gJHM0LT5hZGRJbnQ2NCgkY2FycnkzKTsKICAgICAgICAkczMgPSAkczMtPnN1YkludDY0KCRjYXJyeTMtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTQgPSAkczQtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNSA9ICRzNS0+YWRkSW50NjQoJGNhcnJ5NCk7CiAgICAgICAgJHM0ID0gJHM0LT5zdWJJbnQ2NCgkY2Fycnk0LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk1ID0gJHM1LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczYgPSAkczYtPmFkZEludDY0KCRjYXJyeTUpOwogICAgICAgICRzNSA9ICRzNS0+c3ViSW50NjQoJGNhcnJ5NS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NiA9ICRzNi0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM3ID0gJHM3LT5hZGRJbnQ2NCgkY2Fycnk2KTsKICAgICAgICAkczYgPSAkczYtPnN1YkludDY0KCRjYXJyeTYtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTcgPSAkczctPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOCA9ICRzOC0+YWRkSW50NjQoJGNhcnJ5Nyk7CiAgICAgICAgJHM3ID0gJHM3LT5zdWJJbnQ2NCgkY2Fycnk3LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk4ID0gJHMxMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM5ID0gJHM5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkczggPSAkczgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTkgPSAkczktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkY2Fycnk5KTsKICAgICAgICAkczkgPSAkczktPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEwID0gJHMxMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRjYXJyeTEwKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJGNhcnJ5MTAtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkUzAgID0gICRzMC0+dG9JbnQoKTsKICAgICAgICAkUzEgID0gICRzMS0+dG9JbnQoKTsKICAgICAgICAkUzIgID0gICRzMi0+dG9JbnQoKTsKICAgICAgICAkUzMgID0gICRzMy0+dG9JbnQoKTsKICAgICAgICAkUzQgID0gICRzNC0+dG9JbnQoKTsKICAgICAgICAkUzUgID0gICRzNS0+dG9JbnQoKTsKICAgICAgICAkUzYgID0gICRzNi0+dG9JbnQoKTsKICAgICAgICAkUzcgID0gICRzNy0+dG9JbnQoKTsKICAgICAgICAkUzggID0gICRzOC0+dG9JbnQoKTsKICAgICAgICAkUzkgID0gICRzOS0+dG9JbnQoKTsKICAgICAgICAkUzEwID0gJHMxMC0+dG9JbnQoKTsKICAgICAgICAkUzExID0gJHMxMS0+dG9JbnQoKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAgICAgKi8KICAgICAgICAkYXJyID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTMCA+PiAwKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTMCA+PiA4KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkUzAgPj4gMTYpIHwgKCRTMSA8PCA1KSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzEgPj4gMykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzEgPj4gMTEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRTMSA+PiAxOSkgfCAoJFMyIDw8IDIpKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTMiA+PiA2KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkUzIgPj4gMTQpIHwgKCRTMyA8PCA3KSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzMgPj4gMSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzMgPj4gOSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgoJFMzID4+IDE3KSB8ICgkUzQgPDwgNCkpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM0ID4+IDQpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM0ID4+IDEyKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkUzQgPj4gMjApIHwgKCRTNSA8PCAxKSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzUgPj4gNykpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgoJFM1ID4+IDE1KSB8ICgkUzYgPDwgNikpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM2ID4+IDIpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM2ID4+IDEwKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCgkUzYgPj4gMTgpIHwgKCRTNyA8PCAzKSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzcgPj4gNSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzcgPj4gMTMpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM4ID4+IDApKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFM4ID4+IDgpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoKCRTOCA+PiAxNikgfCAoJFM5IDw8IDUpKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTOSA+PiAzKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTOSA+PiAxMSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgoJFM5ID4+IDE5KSB8ICgkUzEwIDw8IDIpKSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTMTAgPj4gNikpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgoJFMxMCA+PiAxNCkgfCAoJFMxMSA8PCA3KSkpLAogICAgICAgICAgICAoaW50KSAoMHhmZiAmICgkUzExID4+IDEpKSwKICAgICAgICAgICAgKGludCkgKDB4ZmYgJiAoJFMxMSA+PiA5KSksCiAgICAgICAgICAgIChpbnQpICgweGZmICYgKCRTMTEgPj4gMTcpKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmludEFycmF5VG9TdHJpbmcoJGFycik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjX3JlZHVjZSgkcykKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHM0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczUKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzNgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHM3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkczgKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRzOQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxNQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxNgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxNwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxOAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMxOQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMyMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMyMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMyMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHMyMwogICAgICAgICAqLwogICAgICAgICRzMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAwLCAzKSkpOwogICAgICAgICRzMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMiwgNCkpID4+IDUpKTsKICAgICAgICAkczIgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDUsIDMpKSA+PiAyKSk7CiAgICAgICAgJHMzID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA3LCA0KSkgPj4gNykpOwogICAgICAgICRzNCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMTAsIDQpKSA+PiA0KSk7CiAgICAgICAgJHM1ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCAxMywgMykpID4+IDEpKTsKICAgICAgICAkczYgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludCgyMDk3MTUxICYgKHNlbGY6OmxvYWRfNChzZWxmOjpzdWJzdHIoJHMsIDE1LCA0KSkgPj4gNikpOwogICAgICAgICRzNyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMTgsIDQpKSA+PiAzKSk7CiAgICAgICAgJHM4ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIHNlbGY6OmxvYWRfMyhzZWxmOjpzdWJzdHIoJHMsIDIxLCAzKSkpOwogICAgICAgICRzOSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMjMsIDQpKSA+PiA1KSk7CiAgICAgICAgJHMxMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMjYsIDMpKSA+PiAyKSk7CiAgICAgICAgJHMxMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMjgsIDQpKSA+PiA3KSk7CiAgICAgICAgJHMxMiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMzEsIDQpKSA+PiA0KSk7CiAgICAgICAgJHMxMyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMzQsIDMpKSA+PiAxKSk7CiAgICAgICAgJHMxNCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF80KHNlbGY6OnN1YnN0cigkcywgMzYsIDQpKSA+PiA2KSk7CiAgICAgICAgJHMxNSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiAoc2VsZjo6bG9hZF8zKHNlbGY6OnN1YnN0cigkcywgMzksIDQpKSA+PiAzKSk7CiAgICAgICAgJHMxNiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50KDIwOTcxNTEgJiBzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCA0MiwgMykpKTsKICAgICAgICAkczE3ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA0NCwgNCkpID4+IDUpKTsKICAgICAgICAkczE4ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCA0NywgMykpID4+IDIpKTsKICAgICAgICAkczE5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA0OSwgNCkpID4+IDcpKTsKICAgICAgICAkczIwID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA1MiwgNCkpID4+IDQpKTsKICAgICAgICAkczIxID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzMoc2VsZjo6c3Vic3RyKCRzLCA1NSwgMykpID4+IDEpKTsKICAgICAgICAkczIyID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMjA5NzE1MSAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA1NywgNCkpID4+IDYpKTsKICAgICAgICAkczIzID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnQoMHgxZmZmZmZmZiAmIChzZWxmOjpsb2FkXzQoc2VsZjo6c3Vic3RyKCRzLCA2MCwgNCkpID4+IDMpKTsKCiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRzMjMtPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRzMjMtPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHMxMyA9ICRzMTMtPmFkZEludDY0KCRzMjMtPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHMxNCA9ICRzMTQtPnN1YkludDY0KCRzMjMtPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHMxNSA9ICRzMTUtPmFkZEludDY0KCRzMjMtPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHMxNiA9ICRzMTYtPnN1YkludDY0KCRzMjMtPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkczIyLT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzMTEgPSAkczExLT5hZGRJbnQ2NCgkczIyLT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzMTIgPSAkczEyLT5hZGRJbnQ2NCgkczIyLT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzMTMgPSAkczEzLT5zdWJJbnQ2NCgkczIyLT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzMTQgPSAkczE0LT5hZGRJbnQ2NCgkczIyLT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzMTUgPSAkczE1LT5zdWJJbnQ2NCgkczIyLT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczkgID0gICRzOS0+YWRkSW50NjQoJHMyMS0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJHMyMS0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczExID0gJHMxMS0+YWRkSW50NjQoJHMyMS0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczEyID0gJHMxMi0+c3ViSW50NjQoJHMyMS0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczEzID0gJHMxMy0+YWRkSW50NjQoJHMyMS0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczE0ID0gJHMxNC0+c3ViSW50NjQoJHMyMS0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHM4ICA9ICAkczgtPmFkZEludDY0KCRzMjAtPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHM5ICA9ICAkczktPmFkZEludDY0KCRzMjAtPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHMxMCA9ICRzMTAtPmFkZEludDY0KCRzMjAtPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPnN1YkludDY0KCRzMjAtPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRzMjAtPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHMxMyA9ICRzMTMtPnN1YkludDY0KCRzMjAtPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzNyAgPSAgJHM3LT5hZGRJbnQ2NCgkczE5LT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzOCAgPSAgJHM4LT5hZGRJbnQ2NCgkczE5LT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzOSAgPSAgJHM5LT5hZGRJbnQ2NCgkczE5LT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzMTAgPSAkczEwLT5zdWJJbnQ2NCgkczE5LT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzMTEgPSAkczExLT5hZGRJbnQ2NCgkczE5LT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzMTIgPSAkczEyLT5zdWJJbnQ2NCgkczE5LT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczYgID0gICRzNi0+YWRkSW50NjQoJHMxOC0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczcgID0gICRzNy0+YWRkSW50NjQoJHMxOC0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczggID0gICRzOC0+YWRkSW50NjQoJHMxOC0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczkgID0gICRzOS0+c3ViSW50NjQoJHMxOC0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJHMxOC0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJHMxOC0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJGNhcnJ5NiA9ICRzNi0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczcgPSAkczctPmFkZEludDY0KCRjYXJyeTYpOwogICAgICAgICRzNiA9ICRzNi0+c3ViSW50NjQoJGNhcnJ5Ni0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OCA9ICRzOC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczkgPSAkczktPmFkZEludDY0KCRjYXJyeTgpOwogICAgICAgICRzOCA9ICRzOC0+c3ViSW50NjQoJGNhcnJ5OC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTAgPSAkczEwLT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTEgPSAkczExLT5hZGRJbnQ2NCgkY2FycnkxMCk7CiAgICAgICAgJHMxMCA9ICRzMTAtPnN1YkludDY0KCRjYXJyeTEwLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMiA9ICRzMTItPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMyA9ICRzMTMtPmFkZEludDY0KCRjYXJyeTEyKTsKICAgICAgICAkczEyID0gJHMxMi0+c3ViSW50NjQoJGNhcnJ5MTItPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTE0ID0gJHMxNC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczE1ID0gJHMxNS0+YWRkSW50NjQoJGNhcnJ5MTQpOwogICAgICAgICRzMTQgPSAkczE0LT5zdWJJbnQ2NCgkY2FycnkxNC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTYgPSAkczE2LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTcgPSAkczE3LT5hZGRJbnQ2NCgkY2FycnkxNik7CiAgICAgICAgJHMxNiA9ICRzMTYtPnN1YkludDY0KCRjYXJyeTE2LT5zaGlmdExlZnQoMjEpKTsKCiAgICAgICAgJGNhcnJ5NyA9ICRzNy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczggPSAkczgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRzNyA9ICRzNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OSA9ICRzOS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJGNhcnJ5OSk7CiAgICAgICAgJHM5ID0gJHM5LT5zdWJJbnQ2NCgkY2Fycnk5LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMSA9ICRzMTEtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRjYXJyeTExKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJGNhcnJ5MTEtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEzID0gJHMxMy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczE0ID0gJHMxNC0+YWRkSW50NjQoJGNhcnJ5MTMpOwogICAgICAgICRzMTMgPSAkczEzLT5zdWJJbnQ2NCgkY2FycnkxMy0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTUgPSAkczE1LT5hZGRJbnQoMSA8PCAyMCktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTYgPSAkczE2LT5hZGRJbnQ2NCgkY2FycnkxNSk7CiAgICAgICAgJHMxNSA9ICRzMTUtPnN1YkludDY0KCRjYXJyeTE1LT5zaGlmdExlZnQoMjEpKTsKCiAgICAgICAgJHM1ICA9ICAkczUtPmFkZEludDY0KCRzMTctPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHM2ICA9ICAkczYtPmFkZEludDY0KCRzMTctPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHM3ICA9ICAkczctPmFkZEludDY0KCRzMTctPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHM4ICA9ICAkczgtPnN1YkludDY0KCRzMTctPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHM5ICA9ICAkczktPmFkZEludDY0KCRzMTctPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHMxMCA9ICRzMTAtPnN1YkludDY0KCRzMTctPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzNCAgPSAgJHM0LT5hZGRJbnQ2NCgkczE2LT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzNSAgPSAgJHM1LT5hZGRJbnQ2NCgkczE2LT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzNiAgPSAgJHM2LT5hZGRJbnQ2NCgkczE2LT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzNyAgPSAgJHM3LT5zdWJJbnQ2NCgkczE2LT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzOCAgPSAgJHM4LT5hZGRJbnQ2NCgkczE2LT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzOSAgPSAgJHM5LT5zdWJJbnQ2NCgkczE2LT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczMgID0gICRzMy0+YWRkSW50NjQoJHMxNS0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxNS0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczUgID0gICRzNS0+YWRkSW50NjQoJHMxNS0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczYgID0gICRzNi0+c3ViSW50NjQoJHMxNS0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczcgID0gICRzNy0+YWRkSW50NjQoJHMxNS0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczggID0gICRzOC0+c3ViSW50NjQoJHMxNS0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJHMyICA9ICAkczItPmFkZEludDY0KCRzMTQtPm11bEludCg2NjY2NDMsIDIwKSk7CiAgICAgICAgJHMzICA9ICAkczMtPmFkZEludDY0KCRzMTQtPm11bEludCg0NzAyOTYsIDE5KSk7CiAgICAgICAgJHM0ICA9ICAkczQtPmFkZEludDY0KCRzMTQtPm11bEludCg2NTQxODMsIDIwKSk7CiAgICAgICAgJHM1ICA9ICAkczUtPnN1YkludDY0KCRzMTQtPm11bEludCg5OTc4MDUsIDIwKSk7CiAgICAgICAgJHM2ICA9ICAkczYtPmFkZEludDY0KCRzMTQtPm11bEludCgxMzY2NTcsIDE4KSk7CiAgICAgICAgJHM3ICA9ICAkczctPnN1YkludDY0KCRzMTQtPm11bEludCg2ODM5MDEsIDIwKSk7CgogICAgICAgICRzMSAgPSAgJHMxLT5hZGRJbnQ2NCgkczEzLT5tdWxJbnQoNjY2NjQzLCAyMCkpOwogICAgICAgICRzMiAgPSAgJHMyLT5hZGRJbnQ2NCgkczEzLT5tdWxJbnQoNDcwMjk2LCAxOSkpOwogICAgICAgICRzMyAgPSAgJHMzLT5hZGRJbnQ2NCgkczEzLT5tdWxJbnQoNjU0MTgzLCAyMCkpOwogICAgICAgICRzNCAgPSAgJHM0LT5zdWJJbnQ2NCgkczEzLT5tdWxJbnQoOTk3ODA1LCAyMCkpOwogICAgICAgICRzNSAgPSAgJHM1LT5hZGRJbnQ2NCgkczEzLT5tdWxJbnQoMTM2NjU3LCAxOCkpOwogICAgICAgICRzNiAgPSAgJHM2LT5zdWJJbnQ2NCgkczEzLT5tdWxJbnQoNjgzOTAxLCAyMCkpOwoKICAgICAgICAkczAgID0gICRzMC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEgID0gICRzMS0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDY4MzkwMSwgMjApKTsKICAgICAgICAkczEyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CgogICAgICAgICRjYXJyeTAgPSAkczAtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxID0gJHMxLT5hZGRJbnQ2NCgkY2FycnkwKTsKICAgICAgICAkczAgPSAkczAtPnN1YkludDY0KCRjYXJyeTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTIgPSAkczItPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMzID0gJHMzLT5hZGRJbnQ2NCgkY2FycnkyKTsKICAgICAgICAkczIgPSAkczItPnN1YkludDY0KCRjYXJyeTItPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTQgPSAkczQtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM1ID0gJHM1LT5hZGRJbnQ2NCgkY2Fycnk0KTsKICAgICAgICAkczQgPSAkczQtPnN1YkludDY0KCRjYXJyeTQtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTYgPSAkczYtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM3ID0gJHM3LT5hZGRJbnQ2NCgkY2Fycnk2KTsKICAgICAgICAkczYgPSAkczYtPnN1YkludDY0KCRjYXJyeTYtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTggPSAkczgtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM5ID0gJHM5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkczggPSAkczgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEwID0gJHMxMC0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczExID0gJHMxMS0+YWRkSW50NjQoJGNhcnJ5MTApOwogICAgICAgICRzMTAgPSAkczEwLT5zdWJJbnQ2NCgkY2FycnkxMC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MSA9ICRzMS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczIgPSAkczItPmFkZEludDY0KCRjYXJyeTEpOwogICAgICAgICRzMSA9ICRzMS0+c3ViSW50NjQoJGNhcnJ5MS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MyA9ICRzMy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczQgPSAkczQtPmFkZEludDY0KCRjYXJyeTMpOwogICAgICAgICRzMyA9ICRzMy0+c3ViSW50NjQoJGNhcnJ5My0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NSA9ICRzNS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczYgPSAkczYtPmFkZEludDY0KCRjYXJyeTUpOwogICAgICAgICRzNSA9ICRzNS0+c3ViSW50NjQoJGNhcnJ5NS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NyA9ICRzNy0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczggPSAkczgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRzNyA9ICRzNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OSA9ICRzOS0+YWRkSW50KDEgPDwgMjApLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczEwID0gJHMxMC0+YWRkSW50NjQoJGNhcnJ5OSk7CiAgICAgICAgJHM5ID0gJHM5LT5zdWJJbnQ2NCgkY2Fycnk5LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxMSA9ICRzMTEtPmFkZEludCgxIDw8IDIwKS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRjYXJyeTExKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJGNhcnJ5MTEtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczAgID0gICRzMC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEgID0gICRzMS0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDY4MzkwMSwgMjApKTsKICAgICAgICAkczEyID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CgogICAgICAgICRjYXJyeTAgPSAkczAtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMSA9ICRzMS0+YWRkSW50NjQoJGNhcnJ5MCk7CiAgICAgICAgJHMwID0gJHMwLT5zdWJJbnQ2NCgkY2FycnkwLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkxID0gJHMxLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczIgPSAkczItPmFkZEludDY0KCRjYXJyeTEpOwogICAgICAgICRzMSA9ICRzMS0+c3ViSW50NjQoJGNhcnJ5MS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MiA9ICRzMi0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMzID0gJHMzLT5hZGRJbnQ2NCgkY2FycnkyKTsKICAgICAgICAkczIgPSAkczItPnN1YkludDY0KCRjYXJyeTItPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTMgPSAkczMtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNCA9ICRzNC0+YWRkSW50NjQoJGNhcnJ5Myk7CiAgICAgICAgJHMzID0gJHMzLT5zdWJJbnQ2NCgkY2FycnkzLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk0ID0gJHM0LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczUgPSAkczUtPmFkZEludDY0KCRjYXJyeTQpOwogICAgICAgICRzNCA9ICRzNC0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NSA9ICRzNS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM2ID0gJHM2LT5hZGRJbnQ2NCgkY2Fycnk1KTsKICAgICAgICAkczUgPSAkczUtPnN1YkludDY0KCRjYXJyeTUtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTYgPSAkczYtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNyA9ICRzNy0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJHM2ID0gJHM2LT5zdWJJbnQ2NCgkY2Fycnk2LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk3ID0gJHM3LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczggPSAkczgtPmFkZEludDY0KCRjYXJyeTcpOwogICAgICAgICRzNyA9ICRzNy0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OCA9ICRzOC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM5ID0gJHM5LT5hZGRJbnQ2NCgkY2Fycnk4KTsKICAgICAgICAkczggPSAkczgtPnN1YkludDY0KCRjYXJyeTgtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTkgPSAkczktPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMTAgPSAkczEwLT5hZGRJbnQ2NCgkY2Fycnk5KTsKICAgICAgICAkczkgPSAkczktPnN1YkludDY0KCRjYXJyeTktPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEwID0gJHMxMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMSA9ICRzMTEtPmFkZEludDY0KCRjYXJyeTEwKTsKICAgICAgICAkczEwID0gJHMxMC0+c3ViSW50NjQoJGNhcnJ5MTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTExID0gJHMxMS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMiA9ICRzMTItPmFkZEludDY0KCRjYXJyeTExKTsKICAgICAgICAkczExID0gJHMxMS0+c3ViSW50NjQoJGNhcnJ5MTEtPnNoaWZ0TGVmdCgyMSkpOwoKICAgICAgICAkczAgID0gICRzMC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY2NjY0MywgMjApKTsKICAgICAgICAkczEgID0gICRzMS0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDQ3MDI5NiwgMTkpKTsKICAgICAgICAkczIgID0gICRzMi0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDY1NDE4MywgMjApKTsKICAgICAgICAkczMgID0gICRzMy0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDk5NzgwNSwgMjApKTsKICAgICAgICAkczQgID0gICRzNC0+YWRkSW50NjQoJHMxMi0+bXVsSW50KDEzNjY1NywgMTgpKTsKICAgICAgICAkczUgID0gICRzNS0+c3ViSW50NjQoJHMxMi0+bXVsSW50KDY4MzkwMSwgMjApKTsKCiAgICAgICAgJGNhcnJ5MCA9ICRzMC0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxID0gJHMxLT5hZGRJbnQ2NCgkY2FycnkwKTsKICAgICAgICAkczAgPSAkczAtPnN1YkludDY0KCRjYXJyeTAtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTEgPSAkczEtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzMiA9ICRzMi0+YWRkSW50NjQoJGNhcnJ5MSk7CiAgICAgICAgJHMxID0gJHMxLT5zdWJJbnQ2NCgkY2FycnkxLT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2FycnkyID0gJHMyLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczMgPSAkczMtPmFkZEludDY0KCRjYXJyeTIpOwogICAgICAgICRzMiA9ICRzMi0+c3ViSW50NjQoJGNhcnJ5Mi0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MyA9ICRzMy0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM0ID0gJHM0LT5hZGRJbnQ2NCgkY2FycnkzKTsKICAgICAgICAkczMgPSAkczMtPnN1YkludDY0KCRjYXJyeTMtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTQgPSAkczQtPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzNSA9ICRzNS0+YWRkSW50NjQoJGNhcnJ5NCk7CiAgICAgICAgJHM0ID0gJHM0LT5zdWJJbnQ2NCgkY2Fycnk0LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk1ID0gJHM1LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczYgPSAkczYtPmFkZEludDY0KCRjYXJyeTUpOwogICAgICAgICRzNSA9ICRzNS0+c3ViSW50NjQoJGNhcnJ5NS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5NiA9ICRzNi0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHM3ID0gJHM3LT5hZGRJbnQ2NCgkY2Fycnk2KTsKICAgICAgICAkczYgPSAkczYtPnN1YkludDY0KCRjYXJyeTYtPnNoaWZ0TGVmdCgyMSkpOwogICAgICAgICRjYXJyeTcgPSAkczctPnNoaWZ0UmlnaHQoMjEpOwogICAgICAgICRzOCA9ICRzOC0+YWRkSW50NjQoJGNhcnJ5Nyk7CiAgICAgICAgJHM3ID0gJHM3LT5zdWJJbnQ2NCgkY2Fycnk3LT5zaGlmdExlZnQoMjEpKTsKICAgICAgICAkY2Fycnk4ID0gJHM4LT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczkgPSAkczktPmFkZEludDY0KCRjYXJyeTgpOwogICAgICAgICRzOCA9ICRzOC0+c3ViSW50NjQoJGNhcnJ5OC0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5OSA9ICRzOS0+c2hpZnRSaWdodCgyMSk7CiAgICAgICAgJHMxMCA9ICRzMTAtPmFkZEludDY0KCRjYXJyeTkpOwogICAgICAgICRzOSA9ICRzOS0+c3ViSW50NjQoJGNhcnJ5OS0+c2hpZnRMZWZ0KDIxKSk7CiAgICAgICAgJGNhcnJ5MTAgPSAkczEwLT5zaGlmdFJpZ2h0KDIxKTsKICAgICAgICAkczExID0gJHMxMS0+YWRkSW50NjQoJGNhcnJ5MTApOwogICAgICAgICRzMTAgPSAkczEwLT5zdWJJbnQ2NCgkY2FycnkxMC0+c2hpZnRMZWZ0KDIxKSk7CgogICAgICAgICRTMCA9ICRzMC0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTMSA9ICRzMS0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTMiA9ICRzMi0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTMyA9ICRzMy0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTNCA9ICRzNC0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTNSA9ICRzNS0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTNiA9ICRzNi0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTNyA9ICRzNy0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTOCA9ICRzOC0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTOSA9ICRzOS0+dG9JbnQzMigpLT50b0ludCgpOwogICAgICAgICRTMTAgPSAkczEwLT50b0ludDMyKCktPnRvSW50KCk7CiAgICAgICAgJFMxMSA9ICRzMTEtPnRvSW50MzIoKS0+dG9JbnQoKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAgICAgKi8KICAgICAgICAkYXJyID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgkUzAgPj4gMCksCiAgICAgICAgICAgIChpbnQpICgkUzAgPj4gOCksCiAgICAgICAgICAgIChpbnQpICgoJFMwID4+IDE2KSB8ICgkUzEgPDwgNSkpLAogICAgICAgICAgICAoaW50KSAoJFMxID4+IDMpLAogICAgICAgICAgICAoaW50KSAoJFMxID4+IDExKSwKICAgICAgICAgICAgKGludCkgKCgkUzEgPj4gMTkpIHwgKCRTMiA8PCAyKSksCiAgICAgICAgICAgIChpbnQpICgkUzIgPj4gNiksCiAgICAgICAgICAgIChpbnQpICgoJFMyID4+IDE0KSB8ICgkUzMgPDwgNykpLAogICAgICAgICAgICAoaW50KSAoJFMzID4+IDEpLAogICAgICAgICAgICAoaW50KSAoJFMzID4+IDkpLAogICAgICAgICAgICAoaW50KSAoKCRTMyA+PiAxNykgfCAoJFM0IDw8IDQpKSwKICAgICAgICAgICAgKGludCkgKCRTNCA+PiA0KSwKICAgICAgICAgICAgKGludCkgKCRTNCA+PiAxMiksCiAgICAgICAgICAgIChpbnQpICgoJFM0ID4+IDIwKSB8ICgkUzUgPDwgMSkpLAogICAgICAgICAgICAoaW50KSAoJFM1ID4+IDcpLAogICAgICAgICAgICAoaW50KSAoKCRTNSA+PiAxNSkgfCAoJFM2IDw8IDYpKSwKICAgICAgICAgICAgKGludCkgKCRTNiA+PiAyKSwKICAgICAgICAgICAgKGludCkgKCRTNiA+PiAxMCksCiAgICAgICAgICAgIChpbnQpICgoJFM2ID4+IDE4KSB8ICgkUzcgPDwgMykpLAogICAgICAgICAgICAoaW50KSAoJFM3ID4+IDUpLAogICAgICAgICAgICAoaW50KSAoJFM3ID4+IDEzKSwKICAgICAgICAgICAgKGludCkgKCRTOCA+PiAwKSwKICAgICAgICAgICAgKGludCkgKCRTOCA+PiA4KSwKICAgICAgICAgICAgKGludCkgKCgkUzggPj4gMTYpIHwgKCRTOSA8PCA1KSksCiAgICAgICAgICAgIChpbnQpICgkUzkgPj4gMyksCiAgICAgICAgICAgIChpbnQpICgkUzkgPj4gMTEpLAogICAgICAgICAgICAoaW50KSAoKCRTOSA+PiAxOSkgfCAoJFMxMCA8PCAyKSksCiAgICAgICAgICAgIChpbnQpICgkUzEwID4+IDYpLAogICAgICAgICAgICAoaW50KSAoKCRTMTAgPj4gMTQpIHwgKCRTMTEgPDwgNykpLAogICAgICAgICAgICAoaW50KSAoJFMxMSA+PiAxKSwKICAgICAgICAgICAgKGludCkgKCRTMTEgPj4gOSksCiAgICAgICAgICAgIChpbnQpICRTMTEgPj4gMTcKICAgICAgICApOwogICAgICAgIHJldHVybiBzZWxmOjppbnRBcnJheVRvU3RyaW5nKCRhcnIpOwogICAgfQoKICAgIC8qKgogICAgICogbXVsdGlwbHkgYnkgdGhlIG9yZGVyIG9mIHRoZSBtYWluIHN1Ymdyb3VwIGwgPSAyXjI1MisyNzc0MjMxNzc3NzM3MjM1MzUzNTg1MTkzNzc5MDg4MzY0ODQ5MwogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AzICRBCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlX211bF9sKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJEEpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRhc2xpZGUgKi8KICAgICAgICAkYXNsaWRlID0gYXJyYXkoCiAgICAgICAgICAgIDEzLCAwLCAwLCAwLCAwLCAtMSwgMCwgMCwgMCwgMCwgLTExLCAwLCAwLCAwLCAwLCAwLCAwLCAtNSwgMCwgMCwgMCwKICAgICAgICAgICAgMCwgMCwgMCwgLTMsIDAsIDAsIDAsIDAsIC0xMywgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMywgMCwKICAgICAgICAgICAgMCwgMCwgMCwgLTEzLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMSwgMCwgMCwgMCwKICAgICAgICAgICAgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIC0xMywgMCwgMCwgMCwgMCwgMCwgMCwgLTMsIDAsIDAsIDAsIDAsIDAsIC0xLAogICAgICAgICAgICAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAtMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1LCAwLCAwLCAwLAogICAgICAgICAgICAwLCAwLCAtMSwgMCwgMCwgMCwgMCwgLTEsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkPiAkQWkgc2l6ZSA4ICovCiAgICAgICAgJEFpID0gYXJyYXkoKTsKCiAgICAgICAgIyBnZV9wM190b19jYWNoZWQoJkFpWzBdLCBBKTsKICAgICAgICAkQWlbMF0gPSBzZWxmOjpnZV9wM190b19jYWNoZWQoJEEpOwogICAgICAgICMgZ2VfcDNfZGJsKCZ0LCBBKTsKICAgICAgICAkdCA9IHNlbGY6OmdlX3AzX2RibCgkQSk7CiAgICAgICAgIyBnZV9wMXAxX3RvX3AzKCZBMiwgJnQpOwogICAgICAgICRBMiA9IHNlbGY6OmdlX3AxcDFfdG9fcDMoJHQpOwoKICAgICAgICBmb3IgKCRpID0gMTsgJGkgPCA4OyArKyRpKSB7CiAgICAgICAgICAgICMgZ2VfYWRkKCZ0LCAmQTIsICZBaVswXSk7CiAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfYWRkKCRBMiwgJEFpWyRpIC0gMV0pOwogICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsICZ0KTsKICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgIyBnZV9wM190b19jYWNoZWQoJkFpW2ldLCAmdSk7CiAgICAgICAgICAgICRBaVskaV0gPSBzZWxmOjpnZV9wM190b19jYWNoZWQoJHUpOwogICAgICAgIH0KCiAgICAgICAgJHIgPSBzZWxmOjpnZV9wM18wKCk7CiAgICAgICAgZm9yICgkaSA9IDI1MjsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAkdCA9IHNlbGY6OmdlX3AzX2RibCgkcik7CiAgICAgICAgICAgIGlmICgkYXNsaWRlWyRpXSA+IDApIHsKICAgICAgICAgICAgICAgICMgZ2VfcDFwMV90b19wMygmdSwgJnQpOwogICAgICAgICAgICAgICAgJHUgPSBzZWxmOjpnZV9wMXAxX3RvX3AzKCR0KTsKICAgICAgICAgICAgICAgICMgZ2VfYWRkKCZ0LCAmdSwgJkFpW2FzbGlkZVtpXSAvIDJdKTsKICAgICAgICAgICAgICAgICR0ID0gc2VsZjo6Z2VfYWRkKCR1LCAkQWlbKGludCkoJGFzbGlkZVskaV0gLyAyKV0pOwogICAgICAgICAgICB9IGVsc2VpZiAoJGFzbGlkZVskaV0gPCAwKSB7CiAgICAgICAgICAgICAgICAjIGdlX3AxcDFfdG9fcDMoJnUsICZ0KTsKICAgICAgICAgICAgICAgICR1ID0gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICAgICAgICAgICAgICAjIGdlX3N1YigmdCwgJnUsICZBaVsoLWFzbGlkZVtpXSkgLyAyXSk7CiAgICAgICAgICAgICAgICAkdCA9IHNlbGY6OmdlX3N1YigkdSwgJEFpWyhpbnQpKC0kYXNsaWRlWyRpXSAvIDIpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyBnZV9wMXAxX3RvX3AzKHIsICZ0KTsKICAgICAgICByZXR1cm4gc2VsZjo6Z2VfcDFwMV90b19wMygkdCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Fe.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICoKICogVGhpcyByZXByZXNlbnRzIGEgRmllbGQgRWxlbWVudAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSBpbXBsZW1lbnRzIEFycmF5QWNjZXNzCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyPgogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbnRhaW5lciA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJHNpemUgPSAxMDsKCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMj4gJGFycmF5CiAgICAgKiBAcGFyYW0gYm9vbCAkc2F2ZV9pbmRleGVzCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21BcnJheSgkYXJyYXksICRzYXZlX2luZGV4ZXMgPSBudWxsKQogICAgewogICAgICAgICRjb3VudCA9IGNvdW50KCRhcnJheSk7CiAgICAgICAgaWYgKCRzYXZlX2luZGV4ZXMpIHsKICAgICAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCRhcnJheSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGtleXMgPSByYW5nZSgwLCAkY291bnQgLSAxKTsKICAgICAgICB9CiAgICAgICAgJGFycmF5ID0gYXJyYXlfdmFsdWVzKCRhcnJheSk7CgogICAgICAgICRvYmogPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIGlmICgkc2F2ZV9pbmRleGVzKSB7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgKyskaSkgewogICAgICAgICAgICAgICAgJGFycmF5WyRpXS0+b3ZlcmZsb3cgPSAwOwogICAgICAgICAgICAgICAgJG9iai0+b2Zmc2V0U2V0KCRrZXlzWyRpXSwgJGFycmF5WyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRhcnJheVskaV0tPm92ZXJmbG93ID0gMDsKICAgICAgICAgICAgICAgICRvYmotPm9mZnNldFNldCgkaSwgJGFycmF5WyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGludCwgaW50PiAkYXJyYXkKICAgICAqIEBwYXJhbSBib29sICRzYXZlX2luZGV4ZXMKICAgICAqIEByZXR1cm4gc2VsZgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUludEFycmF5KCRhcnJheSwgJHNhdmVfaW5kZXhlcyA9IG51bGwpCiAgICB7CiAgICAgICAgJGNvdW50ID0gY291bnQoJGFycmF5KTsKICAgICAgICBpZiAoJHNhdmVfaW5kZXhlcykgewogICAgICAgICAgICAka2V5cyA9IGFycmF5X2tleXMoJGFycmF5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAka2V5cyA9IHJhbmdlKDAsICRjb3VudCAtIDEpOwogICAgICAgIH0KICAgICAgICAkYXJyYXkgPSBhcnJheV92YWx1ZXMoJGFycmF5KTsKICAgICAgICAkc2V0ID0gYXJyYXkoKTsKICAgICAgICAvKiogQHZhciBpbnQgJGkgKi8KICAgICAgICAvKiogQHZhciBpbnQgJHYgKi8KICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGkgPT4gJHYpIHsKICAgICAgICAgICAgJHNldFskaV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkdik7CiAgICAgICAgfQoKICAgICAgICAkb2JqID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICBpZiAoJHNhdmVfaW5kZXhlcykgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRzZXRbJGldLT5vdmVyZmxvdyA9IDA7CiAgICAgICAgICAgICAgICAkb2JqLT5vZmZzZXRTZXQoJGtleXNbJGldLCAkc2V0WyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRzZXRbJGldLT5vdmVyZmxvdyA9IDA7CiAgICAgICAgICAgICAgICAkb2JqLT5vZmZzZXRTZXQoJGksICRzZXRbJGldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCEoJHZhbHVlIGluc3RhbmNlb2YgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGFuIGluc3RhbmNlIG9mIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyJyk7CiAgICAgICAgfQogICAgICAgIGlmIChpc19udWxsKCRvZmZzZXQpKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbXSA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkb2Zmc2V0LCAnaW50JywgMSk7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbKGludCkgJG9mZnNldF0gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlPZmZzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmNvbnRhaW5lclskb2Zmc2V0XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5T2Zmc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5jb250YWluZXJbJG9mZnNldF0pKSB7CiAgICAgICAgICAgICR0aGlzLT5jb250YWluZXJbKGludCkgJG9mZnNldF0gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGdldCAqLwogICAgICAgICRnZXQgPSAkdGhpcy0+Y29udGFpbmVyWyRvZmZzZXRdOwogICAgICAgIHJldHVybiAkZ2V0OwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVidWdJbmZvKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmNvbnRhaW5lcikpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogICAgICAgICRjID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+Y29udGFpbmVyWzBdLT50b0ludCgpKSwKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5jb250YWluZXJbMV0tPnRvSW50KCkpLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmNvbnRhaW5lclsyXS0+dG9JbnQoKSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+Y29udGFpbmVyWzNdLT50b0ludCgpKSwKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5jb250YWluZXJbNF0tPnRvSW50KCkpLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmNvbnRhaW5lcls1XS0+dG9JbnQoKSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+Y29udGFpbmVyWzZdLT50b0ludCgpKSwKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5jb250YWluZXJbN10tPnRvSW50KCkpLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmNvbnRhaW5lcls4XS0+dG9JbnQoKSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+Y29udGFpbmVyWzldLT50b0ludCgpKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGFycmF5KGltcGxvZGUoJywgJywgJGMpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgppZiAoY2xhc3NfZXhpc3RzKCdQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX0NhY2hlZCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9Ci8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX0NhY2hlZAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9DYWNoZWQKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRZcGx1c1g7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRZbWludXNYOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWjsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFQyZDsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfQ2FjaGVkIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZXxudWxsICRZcGx1c1gKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJFltaW51c1gKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJFoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJFQyZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkWXBsdXNYID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRZbWludXNYID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRaID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRUMmQgPSBudWxsCiAgICApIHsKICAgICAgICBpZiAoJFlwbHVzWCA9PT0gbnVsbCkgewogICAgICAgICAgICAkWXBsdXNYID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPllwbHVzWCA9ICRZcGx1c1g7CiAgICAgICAgaWYgKCRZbWludXNYID09PSBudWxsKSB7CiAgICAgICAgICAgICRZbWludXNYID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlltaW51c1ggPSAkWW1pbnVzWDsKICAgICAgICBpZiAoJFogPT09IG51bGwpIHsKICAgICAgICAgICAgJFogPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WiA9ICRaOwogICAgICAgIGlmICgkVDJkID09PSBudWxsKSB7CiAgICAgICAgICAgICRUMmQgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+VDJkID0gJFQyZDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P1p1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMScsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9Ci8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDFwMQp7CiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFg7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRZOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWjsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFQ7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AxcDEgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHgKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHkKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlfG51bGwgJHQKICAgICAqCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHggPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHkgPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHogPSBudWxsLAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHQgPSBudWxsCiAgICApIHsKICAgICAgICBpZiAoJHggPT09IG51bGwpIHsKICAgICAgICAgICAgJHggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5OjpmZV8wKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5YID0gJHg7CiAgICAgICAgaWYgKCR5ID09PSBudWxsKSB7CiAgICAgICAgICAgICR5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOTo6ZmVfMCgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WSA9ICR5OwogICAgICAgIGlmICgkeiA9PT0gbnVsbCkgewogICAgICAgICAgICAkeiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTk6OmZlXzAoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlogPSAkejsKICAgICAgICBpZiAoJHQgPT09IG51bGwpIHsKICAgICAgICAgICAgJHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5OjpmZV8wKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5UID0gJHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDInLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDIKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDIKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRYOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWTsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFo7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1AyIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZXxudWxsICR4CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZXxudWxsICR5CiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZXxudWxsICR6CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICR4ID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICR5ID0gbnVsbCwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICR6ID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCR4ID09PSBudWxsKSB7CiAgICAgICAgICAgICR4ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlggPSAkeDsKICAgICAgICBpZiAoJHkgPT09IG51bGwpIHsKICAgICAgICAgICAgJHkgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WSA9ICR5OwogICAgICAgIGlmICgkeiA9PT0gbnVsbCkgewogICAgICAgICAgICAkeiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5aID0gJHo7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRYOwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkWTsKCiAgICAvKioKICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICovCiAgICBwdWJsaWMgJFo7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICRUOwoKICAgIC8qKgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmV8bnVsbCAkeAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmV8bnVsbCAkeQogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmV8bnVsbCAkegogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmV8bnVsbCAkdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkeCA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkeSA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkeiA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkdCA9IG51bGwKICAgICkgewogICAgICAgIGlmICgkeCA9PT0gbnVsbCkgewogICAgICAgICAgICAkeCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5YID0gJHg7CiAgICAgICAgaWYgKCR5ID09PSBudWxsKSB7CiAgICAgICAgICAgICR5ID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPlkgPSAkeTsKICAgICAgICBpZiAoJHogPT09IG51bGwpIHsKICAgICAgICAgICAgJHogPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSgpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+WiA9ICR6OwogICAgICAgIGlmICgkdCA9PT0gbnVsbCkgewogICAgICAgICAgICAkdCA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5UID0gJHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Precomp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QcmVjb21wCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0dlX1ByZWNvbXAKewogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICR5cGx1c3g7CgogICAgLyoqCiAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUKICAgICAqLwogICAgcHVibGljICR5bWludXN4OwoKICAgIC8qKgogICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKi8KICAgIHB1YmxpYyAkeHkyZDsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUHJlY29tcCBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHlwbHVzeAogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHltaW51c3gKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICR4eTJkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJHlwbHVzeCA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkeW1pbnVzeCA9IG51bGwsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkeHkyZCA9IG51bGwKICAgICkgewogICAgICAgIGlmICgkeXBsdXN4ID09PSBudWxsKSB7CiAgICAgICAgICAgICR5cGx1c3ggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5OjpmZV8wKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT55cGx1c3ggPSAkeXBsdXN4OwogICAgICAgIGlmICgkeW1pbnVzeCA9PT0gbnVsbCkgewogICAgICAgICAgICAkeW1pbnVzeCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTk6OmZlXzAoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnltaW51c3ggPSAkeW1pbnVzeDsKICAgICAgICBpZiAoJHh5MmQgPT09IG51bGwpIHsKICAgICAgICAgICAgJHh5MmQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5OjpmZV8wKCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT54eTJkID0gJHh5MmQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/H.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfSCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9ICiAqCiAqIFRoaXMganVzdCBjb250YWlucyB0aGUgY29uc3RhbnRzIGluIHRoZSByZWYxMC9iYXNlLmggZmlsZQogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9IIGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbAp7CiAgICAvKioKICAgICAqIFNlZTogbGlic29kaXVtJ3MgY3J5cHRvX2NvcmUvY3VydmUyNTUxOS9yZWYxMC9iYXNlLmgKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgYXJyYXk8aW50LCBhcnJheTxpbnQsIGFycmF5PGludCwgaW50Pj4+PiBCYXNpY2FsbHksIGludFszMl1bOF1bM11bMTBdCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGJhc2UgPSBhcnJheSgKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNTk2NzQ5MywgLTE0MzU2MDM1LCAyOTU2NjQ1NiwgMzY2MDg5NiwgLTEyNjk0MzQ1LCA0MDE0Nzg3LCAyNzU0NDYyNiwgLTExNzU0MjcxLCAtNjA3OTE1NiwgMjA0NzYwNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTI1NDU3MTEsIDkzNDI2MiwgLTI3MjI5MTAsIDMwNDk5OTAsIC03Mjc0MjgsIDk0MDY5ODYsIDEyNzIwNjkyLCA1MDQzMzg0LCAxOTUwMDkyOSwgLTE1NDY5Mzc4KSwKICAgICAgICAgICAgICAgIGFycmF5KC04NzM4MTgxLCA0NDg5NTcwLCA5Njg4NDQxLCAtMTQ3ODUxOTQsIDEwMTg0NjA5LCAtMTIzNjMzODAsIDI5Mjg3OTE5LCAxMTg2NDg5OSwgLTI0NTE0MzYyLCAtNDQzODU0NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEyODE1ODk0LCAtMTI5NzYzNDcsIC0yMTU4MTI0MywgMTE3ODQzMjAsIC0yNTM1NTY1OCwgLTI3NTA3MTcsIC0xMTcxNzkwMywgLTM4MTQ1NzEsIC0zNTg0NDUsIC0xMDIxMTMwMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjE3MDMyMzcsIDY5MDM4MjUsIDI3MTg1NDkxLCA2NDUxOTczLCAtMjk1Nzc3MjQsIC05NTU0MDA1LCAtMTU2MTY1NTEsIDExMTg5MjY4LCAtMjY4Mjk2NzgsIC01MzE5MDgxKSwKICAgICAgICAgICAgICAgIGFycmF5KDI2OTY2NjQyLCAxMTE1MjYxNywgMzI0NDI0OTUsIDE1Mzk2MDU0LCAxNDM1MzgzOSwgLTEyNzUyMzM1LCAtMzEyODgyNiwgLTk1NDExMTgsIC0xNTQ3MjA0NywgLTQxNjY2OTcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE1NjM2MjkxLCAtOTY4ODU1NywgMjQyMDQ3NzMsIC03OTEyMzk4LCA2MTY5NzcsIC0xNjY4NTI2MiwgMjc3ODc2MDAsIC0xNDc3MjE4OSwgMjg5NDQ0MDAsIC0xNTUwMDI0KSwKICAgICAgICAgICAgICAgIGFycmF5KDE2NTY4OTMzLCA0NzE3MDk3LCAtMTE1NTYxNDgsIC0xMTAyMzIyLCAxNTY4Mjg5NiwgLTExODA3MDQzLCAxNjM1NDU3NywgLTExNzc1OTYyLCA3Njg5NjYyLCAxMTE5OTU3NCksCiAgICAgICAgICAgICAgICBhcnJheSgzMDQ2NDE1NiwgLTU5NzYxMjUsIC0xMTc3OTQzNCwgLTE1NjcwODY1LCAyMzIyMDM2NSwgMTU5MTU4NTIsIDc1MTI3NzQsIDEwMDE3MzI2LCAtMTc3NDkwOTMsIC05OTIwMzU3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTcwMzY4NzgsIDEzOTIxODkyLCAxMDk0NTgwNiwgLTYwMzM0MzEsIDI3MTA1MDUyLCAtMTYwODQzNzksIC0yODkyNjIxMCwgMTUwMDYwMjMsIDMyODQ1NjgsIC02Mjc2NTQwKSwKICAgICAgICAgICAgICAgIGFycmF5KDIzNTk5Mjk1LCAtODMwNjA0NywgLTExMTkzNjY0LCAtNzY4NzQxNiwgMTMyMzY3NzQsIDEwNTA2MzU1LCA3NDY0NTc5LCA5NjU2NDQ1LCAxMzA1OTE2MiwgMTAzNzQzOTcpLAogICAgICAgICAgICAgICAgYXJyYXkoNzc5ODU1NiwgMTY3MTAyNTcsIDMwMzM5MjIsIDI4NzQwODYsIDI4OTk3ODYxLCAyODM1NjA0LCAzMjQwNjY2NCwgLTM4MzkwNDUsIC02NDE3MDgsIC0xMDEzMjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEwODYxMzYzLCAxMTQ3MzE1NCwgMjcyODQ1NDYsIDE5ODExNzUsIC0zMDA2NDM0OSwgMTI1Nzc4NjEsIDMyODY3ODg1LCAxNDUxNTEwNywgLTE1NDM4MzA0LCAxMDgxOTM4MCksCiAgICAgICAgICAgICAgICBhcnJheSg0NzA4MDI2LCA2MzM2NzQ1LCAyMDM3NzU4NiwgOTA2NjgwOSwgLTExMjcyMTA5LCA2NTk0Njk2LCAtMjU2NTM2NjgsIDEyNDgzNjg4LCAtMTI2Njg0OTEsIDU1ODEzMDYpLAogICAgICAgICAgICAgICAgYXJyYXkoMTk1NjMxNjAsIDE2MTg2NDY0LCAtMjkzODY4NTcsIDQwOTc1MTksIDEwMjM3OTg0LCAtNDM0ODExNSwgMjg1NDIzNTAsIDEzODUwMjQzLCAtMjM2NzgwMjEsIC0xNTgxNTk0MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MzcxOTY0LCAtMTI4NjI3NTQsIDMyNTczMjUwLCA0NzIwMTk3LCAtMjY0MzY1MjIsIDU4NzU1MTEsIC0xOTE4ODYyNywgLTE1MjI0ODE5LCAtOTgxODk0MCwgLTEyMDg1Nzc3KSwKICAgICAgICAgICAgICAgIGFycmF5KC04NTQ5MjEyLCAxMDk5ODMsIDE1MTQ5MzYzLCAyMTc4NzA1LCAyMjkwMDYxOCwgNDU0MzQxNywgMzA0NDI0MCwgLTE1Njg5ODg3LCAxNzYyMzI4LCAxNDg2NjczNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTgxOTk2OTUsIC0xNTk1MTQyMywgLTEwNDczMjkwLCAxNzA3Mjc4LCAtMTcxODU5MjAsIDM5MTYxMDEsIC0yODIzNjQxMiwgMzk1OTQyMSwgMjc5MTQ0NTQsIDQzODM2NTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDUxNTM3NDYsIDk5MDkyODUsIDE3MjM3NDcsIC0yNzc3ODc0LCAzMDUyMzYwNSwgNTUxNjg3MywgMTk0ODA4NTIsIDUyMzAxMzQsIC0yMzk1MjQzOSwgLTE1MTc1NzY2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDI2OTAwNywgLTM0NjM1MDksIDc2NjU0ODYsIDEwMDgzNzkzLCAyODQ3NTUyNSwgMTY0OTcyMiwgMjA2NTQwMjUsIDE2NTIwMTI1LCAzMDU5ODQ0OSwgNzcxNTcwMSksCiAgICAgICAgICAgICAgICBhcnJheSgyODg4MTg0NSwgMTQzODE1NjgsIDk2NTc5MDQsIDM2ODA3NTcsIC0yMDE4MTYzNSwgNzg0MzMxNiwgLTMxNDAwNjYwLCAxMzcwNzA4LCAyOTc5NDU1MywgLTE0MDkzMDApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE0NDk5NDcxLCAtMjcyOTU5OSwgLTMzMTkxMTEzLCAtNDI1NDY1MiwgMjg0OTQ4NjIsIDE0MjcxMjY3LCAzMDI5MDczNSwgMTA4NzY0NTQsIC0zMzE1NDA5OCwgMjM4MTcyNiksCiAgICAgICAgICAgICAgICBhcnJheSgtNzE5NTQzMSwgLTI2NTUzNjMsIC0xNDczMDE1NSwgNDYyMjUxLCAtMjc3MjQzMjYsIDM5NDEzNzIsIC02MjM2NjE3LCAzNjk2MDA1LCAtMzIzMDA4MzIsIDE1MzUxOTU1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI3NDMxMTk0LCA4MjIyMzIyLCAxNjQ0ODc2MCwgLTM5MDc5OTUsIC0xODcwNzAwMiwgMTE5MzgzNTUsIC0zMjk2MTQwMSwgLTI5NzA1MTUsIDI5NTUxODEzLCAxMDEwOTQyNSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTM2NTcwNDAsIC0xMzE1NTQzMSwgLTMxMjgzNzUwLCAxMTc3NzA5OCwgMjE0NDczODYsIDY1MTkzODQsIC0yMzc4Mjg0LCAtMTYyNzU1NiwgMTAwOTI3ODMsIC00NzY0MTcxKSwKICAgICAgICAgICAgICAgIGFycmF5KDI3OTM5MTY2LCAxNDIxMDMyMiwgNDY3NzAzNSwgMTYyNzcwNDQsIC0yMjk2NDQ2MiwgLTEyMzk4MTM5LCAtMzI1MDg3NTQsIDEyMDA1NTM4LCAtMTc4MTAxMjcsIDEyODAzNTEwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE3MjI4OTk5LCAtMTU2NjE2MjQsIC0xMjMzNTI3LCAzMDAxNDAsIC0xMjI0ODcwLCAtMTE3MTQ3NzcsIDMwMzY0MjEzLCAtOTAzODE5NCwgMTgwMTYzNTcsIDQzOTc2NjApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMDk1ODg0MywgLTc2OTAyMDcsIDQ3NzYzNDEsIC0xNDk1NDIzOCwgMjc4NTAwMjgsIC0xNTYwMjIxMiwgLTI2NjE5MTA2LCAxNDU0NDUyNSwgLTE3NDc3NTA0LCA5ODI2MzkpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkyNTM1OTgsIDE1Nzk2NzAzLCAtMjg2Mzk4MiwgLTk5MDg4ODQsIDEwMDU3MDIzLCAzMTYzNTM2LCA3MzMyODk5LCAtNDEyMDEyOCwgLTIxMDQ3Njk2LCA5OTM0OTYzKSwKICAgICAgICAgICAgICAgIGFycmF5KDU3OTMzMDMsIDE2MjcxOTIzLCAtMjQxMzE2MTQsIC0xMDExNjQwNCwgMjkxODg1NjAsIDEyMDY1MTcsIC0xNDc0NzkzMCwgNDU1OTg5NSwgLTMwMTIzOTIyLCAtMTA4OTc5NTApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNzY0Mzk1MiwgLTExNDkzMDA2LCAxNjI4MjY1NywgLTExMDM2NDkzLCAyODQxNDAyMSwgLTE1MDEyMjY0LCAyNDE5MTAzNCwgNDU0MTY5NywgLTEzMzM4MzA5LCA1NTAwNTY4KSwKICAgICAgICAgICAgICAgIGFycmF5KDEyNjUwNTQ4LCAtMTQ5NzExMywgOTA1Mjg3MSwgMTEzNTUzNTgsIC0xNzY4MDAzNywgLTg0MDAxNjQsIC0xNzQzMDU5MiwgMTIyNjQzNDMsIDEwODc0MDUxLCAxMzUyNDMzNSksCiAgICAgICAgICAgICAgICBhcnJheSgyNTU1Njk0OCwgLTMwNDU5OTAsIDcxNDY1MSwgMjUxMDQwMCwgMjMzOTQ2ODIsIC0xMDQxNTMzMCwgMzMxMTkwMzgsIDUwODA1NjgsIC0yMjUyODA1OSwgNTM3NjYyOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI2MDg4MjY0LCAtNDAxMTA1MiwgLTE3MDEzNjk5LCAtMzUzNzYyOCwgLTY3MjY3OTMsIDE5MjA4OTcsIC0yMjMyMTMwNSwgLTk0NDc0NDMsIDQ1MzU3NjgsIDE1NjkwMDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNTU0MjIsIDE0NjA2NjMwLCAtMjE2OTI0NDAsIC04MDM5ODE4LCAyODQzMDY0OSwgODc3NTgxOSwgLTMwNDk0NTYyLCAzMDQ0MjkwLCAzMTg0ODI4MCwgMTI1NDM3NzIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyMDI4NTc5LCAyOTQzODkzLCAtMzE4NTc1MTMsIDY3NzczMDYsIDEzNzg0NDYyLCAtNDI5MjIwMywgLTI3Mzc3MTk1LCAtMjA2MjczMSwgNzcxODQ4MiwgMTQ0NzQ2NTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIzODUzMTUsIDI0NTQyMTMsIC0yMjYzMTMyMCwgNDY2MDMsIC00NDM3OTM1LCAtMTU2ODA0MTUsIDY1Njk2NSwgLTcyMzY2NjUsIDI0MzE2MTY4LCAtNTI1MzU2NyksCiAgICAgICAgICAgICAgICBhcnJheSgxMzc0MTUyOSwgMTA5MTE1NjgsIC0zMzIzMzQxNywgLTg2MDM3MzcsIC0yMDE3NzgzMCwgLTEwMzMyOTcsIDMzMDQwNjUxLCAtMTM0MjQ1MzIsIC0yMDcyOTQ1NiwgODMyMTY4NiksCiAgICAgICAgICAgICAgICBhcnJheSgyMTA2MDQ5MCwgLTIyMTI3NDQsIDE1NzEyNzU3LCAtNDMzNjA5OSwgMTYzOTA0MCwgMTA2NTYzMzYsIDIzODQ1OTY1LCAtMTE4NzQ4MzgsIC05OTg0NDU4LCA2MDgzNzIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMzY3MjczMiwgLTE1MDg3NTg2LCAtMTA4ODk2OTMsIC03NTU3MDU5LCAtNjAzNjkwOSwgMTEzMDU1NDcsIDExMjM5NjgsIC02NzgwNTc3LCAyNzIyOTM5OSwgMjM4ODcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMjQ0MTQwLCAtMjk0MjA1LCAtMTE3NDQ3MjgsIDE0NzEyNTcxLCAtMjk0NjU2OTksIC0yMDI5NjE3LCAxMjc5NzAyNCwgLTY0NDAzMDgsIC0xNjMzNDA1LCAxNjY3ODk1NCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjk1MDA2MjAsIDQ3NzA2NjIsIC0xNjA1NDM4NywgMTQwMDEzMzgsIDc4MzAwNDcsIDk1NjQ4MDUsIC0xNTA4MTQ0LCAtNDc5NTA0NSwgLTE3MTY5MjY1LCA0OTA0OTUzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNDA1OTU1NywgMTQ2MTcwMDMsIDE5MDM3MTU3LCAtMTUwMzk5MDgsIDE5NzY2MDkzLCAtMTQ5MDY0MjksIDUxNjkyMTEsIDE2MTkxODgwLCAyMTI4MjM2LCAtNDMyNjgzMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTY5ODExNTIsIDQxMjQ5NjYsIC04NTQwNjEwLCAtMTA2NTM3OTcsIDMwMzM2NTIyLCAtMTQxMDUyNDcsIC0yOTgwNjMzNiwgOTE2MDMzLCAtNjg4MjU0MiwgLTI5ODY1MzIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNjMwOTA3LCAxMjQxOTM3MiwgLTcxMzQyMjksIC03NDczMzcxLCAtMTY0Nzg5MDQsIDE2NzM5MTc1LCAyODU0MzEsIDI3NjM4MjksIDE1NzM2MzIyLCA0MTQzODc2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMzc5MzUyLCAxMTgzOTM0NSwgLTQxMTA0MDIsIC01OTg4NjY1LCAxMTI3NDI5OCwgNzk0OTU3LCAyMTI4MDEsIC0xNDU5NDY2MywgMjM1MjcwODQsIC0xNjQ1ODI2OCksCiAgICAgICAgICAgICAgICBhcnJheSgzMzQzMTEyNywgLTExMTMwNDc4LCAtMTc4Mzg5NjYsIC0xNTYyNjkwMCwgODkwOTQ5OSwgODM3NjUzMCwgLTMyNjI1MzQwLCA0MDg3ODgxLCAtMTUxODg5MTEsIC0xNDQxNjIxNCksCiAgICAgICAgICAgICAgICBhcnJheSgxNzY3NjgzLCA3MTk3OTg3LCAtMTMyMDUyMjYsIC0yMDIyNjM1LCAtMTMwOTEzNTAsIDQ0ODgyNiwgNTc5OTA1NSwgNDM1Nzg2OCwgLTQ3NzQxOTEsIC0xNjMyMzAzOCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg2NzIxOTY2LCAxMzgzMzgyMywgLTIzNTIzMzg4LCAtMTU1MTMxNCwgMjYzNTQyOTMsIC0xMTg2MzMyMSwgMjMzNjUxNDcsIC0zOTQ5NzMyLCA3MzkwODkwLCAyNzU5ODAwKSwKICAgICAgICAgICAgICAgIGFycmF5KDQ0MDkwNDEsIDIwNTIzODEsIDIzMzczODUzLCAxMDUzMDIxNywgNzY3Njc3OSwgLTEyODg1OTU0LCAyMTMwMjM1MywgLTQyNjQwNTcsIDEyNDQzODAsIC0xMjkxOTY0NSksCiAgICAgICAgICAgICAgICBhcnJheSgtNDQyMTIzOSwgNzE2OTYxOSwgNDk4MjM2OCwgLTI5NTc1OTAsIDMwMjU2ODI1LCAtMjc3NzU0MCwgMTQwODY0MTMsIDkyMDgyMzYsIDE1ODg2NDI5LCAxNjQ4OTY2NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTk5NjA3NSwgMTAzNzU2NDksIDE0MzQ2MzY3LCAxMzMxMTIwMiwgLTY4NzQxMzUsIC0xNjQzODQxMSwgLTEzNjkzMTk4LCAzOTgzNjksIC0zMDYwNjQ1NSwgLTcxMjkzMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjUzMDc0NjUsIDk3OTU4ODAsIC0yNzc3NDE0LCAxNDg3ODgwOSwgLTMzNTMxODM1LCAxNDc4MDM2MywgMTMzNDg1NTMsIDEyMDc2OTQ3LCAtMzA4MzY0NjIsIDUxMTMxODIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3NzcwNzg0LCAxMTc5Nzc5NiwgMzE5NTA4NDMsIDEzOTI5MTIzLCAtMjU4ODgzMDIsIDEyMjg4MzQ0LCAtMzAzNDExMDEsIC03MzM2Mzg2LCAxMzg0NzcxMSwgNTM4NzIyMiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE4NTgyMTYzLCAtMzQxNjIxNywgMTc4MjQ4NDMsIC0yMzQwOTY2LCAyMjc0NDM0MywgLTEwNDQyNjExLCA4NzYzMDYxLCAzNjE3Nzg2LCAtMTk2MDA2NjIsIDEwMzcwOTkxKSwKICAgICAgICAgICAgICAgIGFycmF5KDIwMjQ2NTY3LCAtMTQzNjkzNzgsIDIyMzU4MjI5LCAtNTQzNzEyLCAxODUwNzI4MywgLTEwNDEzOTk2LCAxNDU1NDQzNywgLTg3NDYwOTIsIDMyMjMyOTI0LCAxNjc2Mzg4MCksCiAgICAgICAgICAgICAgICBhcnJheSg5NjQ4NTA1LCAxMDA5NDU2MywgMjY0MTY2OTMsIDE0NzQ1OTI4LCAtMzAzNzQzMTgsIC02NDcyNjIxLCAxMTA5NDE2MSwgMTU2ODk1MDYsIDMxNDAwMzgsIC0xNjUxMDA5MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE2MTYwMDcyLCA1NDcyNjk1LCAzMTg5NTU4OCwgNDc0NDk5NCwgODgyMzUxNSwgMTAzNjU2ODUsIC0yNzIyNDgwMCwgOTQ0ODYxMywgLTI4Nzc0NDU0LCAzNjYyOTUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTkxNTM0NTAsIDExNTIzOTcyLCAtMTEwOTY0OTAsIC02NTAzMTQyLCAtMjQ2NDc2MzEsIDU0MjA2NDcsIDI4MzQ0NTczLCA4MDQxMTEzLCA3MTk2MDUsIDExNjcxNzg4KSwKICAgICAgICAgICAgICAgIGFycmF5KDg2NzgwMjUsIDI2OTQ0NDAsIC02ODA4MDE0LCAyNTE3MzcyLCA0OTY0MzI2LCAxMTE1MjI3MSwgLTE1NDMyOTE2LCAtMTUyNjY1MTYsIDI3MDAwODEzLCAtMTAxOTU1NTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xNTE1NzkwNCwgNzEzNDMxMiwgODYzOTI4NywgLTI4MTQ4NzcsIC03MjM1Njg4LCAxMDQyMTc0MiwgNTY0MDY1LCA1MzM2MDk3LCA2NzUwOTc3LCAtMTQ1MjEwMjYpLAogICAgICAgICAgICAgICAgYXJyYXkoMTE4MzY0MTAsIC0zOTc5NDg4LCAyNjI5Nzg5NCwgMTYwODA3OTksIDIzNDU1MDQ1LCAxNTczNTk0NCwgMTY5NTgyMywgLTg4MTkxMjIsIDgxNjk3MjAsIDE2MjIwMzQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xODExNTgzOCwgODY1MzY0NywgMTc1Nzg1NjYsIC02MDkyNjE5LCAtODAyNTc3NywgLTE2MDEyNzYzLCAtMTExNDQzMDcsIC0yNjI3NjY0LCAtNTk5MDcwOCwgLTE0MTY2MDMzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjMzMDg0OTgsIC0xMDk2ODMxMiwgMTUyMTMyMjgsIC0xMDA4MTIxNCwgLTMwODUzNjA1LCAtMTEwNTAwMDQsIDI3ODg0MzI5LCAyODQ3Mjg0LCAyNjU1ODYxLCAxNzM4Mzk1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNzUzNzQzMywgLTE0MjUzMDIxLCAtMjUzMzYzMDEsIC04MDAyNzgwLCAtOTM3MDc2MiwgODEyOTgyMSwgMjE2NTE2MDgsIC0zMjM5MzM2LCAtMTkwODc0NDksIC0xMTAwNTI3OCksCiAgICAgICAgICAgICAgICBhcnJheSgxNTMzMTEwLCAzNDM3ODU1LCAyMzczNTg4OSwgNDU5Mjc2LCAyOTk3MDUwMSwgMTEzMzUzNzcsIDI2MDMwMDkyLCA1ODIxNDA4LCAxMDQ3ODE5NiwgODU0NDg5MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzIxNzMxMjEsIC0xNjEyOTMxMSwgMjQ4OTYyMDcsIDM5MjE0OTcsIDIyNTc5MDU2LCAtMzQxMDg1NCwgMTkyNzA0NDksIDEyMjE3NDczLCAxNzc4OTAxNywgLTMzOTU5OTUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMwNTUyOTYxLCAtMjIyODQwMSwgLTE1NTc4ODI5LCAtMTAxNDcyMDEsIDEzMjQzODg5LCA1MTcwMjQsIDE1NDc5NDAxLCAtMzg1MzIzMywgMzA0NjA1MjAsIDEwNTI1OTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNjE0ODc1LCAxMzMyMzYxOCwgMzI2MTg3OTMsIDgxNzU5MDcsIC0xNTIzMDE3MywgMTI1OTY2ODcsIDI3NDkxNTk1LCAtNDYxMjM1OSwgMzE3OTI2OCwgLTk0Nzg4OTEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMxOTQ3MDY5LCAtMTQzNjY2NTEsIC00NjQwNTgzLCAtMTUzMzk5MjEsIC0xNTEyNTk3NywgLTYwMzk3MDksIC0xNDc1Njc3NywgLTE2NDExNzQwLCAxOTA3MjY0MCwgLTk1MTEwNjApLAogICAgICAgICAgICAgICAgYXJyYXkoMTE2ODUwNTgsIDExODIyNDEwLCAzMTU4MDAzLCAtMTM5NTI1OTQsIDMzNDAyMTk0LCAtNDE2NTA2NiwgNTk3Nzg5NiwgLTUyMTUwMTcsIDQ3MzA5OSwgNTA0MDYwOCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjAyOTA4NjMsIDgxOTg2NDIsIC0yNzQxMDEzMiwgMTE2MDIxMjMsIDEyOTAzNzUsIC0yNzk5NzYwLCAyODMyNjg2MiwgMTcyMTA5MiwgLTE5NTU4NjQyLCAtMzEzMTYwNiksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg3ODgxNTMyLCAxMDY4NzkzNywgNzU3ODcyMywgNzczODM3OCwgLTE4OTUxMDEyLCAtMjU1Mzk1MiwgMjE4MjA3ODYsIDgwNzYxNDksIC0yNzg2ODQ5NiwgMTE1MzgzODkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5OTM1NjY2LCAzODk5ODYxLCAxODI4MzQ5NywgLTY4MDE1NjgsIC0xNTcyODY2MCwgLTExMjQ5MjExLCA4NzU0NTI1LCA3NDQ2NzAyLCAtNTY3NjA1NCwgNTc5NzAxNiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTEyOTU2MDAsIC0zNzkzNTY5LCAtMTU3ODIxMTAsIC03OTY0NTczLCAxMjcwODg2OSwgLTg0NTYxOTksIDIwMTQwOTksIC05MDUwNTc0LCAtMjM2OTE3MiwgLTU4NzczNDEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMjQ3MjM3NiwgLTExNTY4NzQxLCAtMjc2ODIwMjAsIDExNDYzNzUsIDE4OTU2NjkxLCAxNjY0MDU1OSwgMTE5MjczMCwgLTM3MTQxOTksIDE1MTIzNjE5LCAxMDgxMTUwNSksCiAgICAgICAgICAgICAgICBhcnJheSgxNDM1MjA5OCwgLTM0MTk3MTUsIC0xODk0MjA0NCwgMTA4MjI2NTUsIDMyNzUwNTk2LCA0Njk5MDA3LCAtNzAzNjMsIDE1Nzc2MzU2LCAtMjg4ODY3NzksIC0xMTk3NDU1MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjgyNDExNjQsIC04MDcyNDc1LCAtNDk3ODk2MiwgLTUzMTUzMTcsIDI5NDE2OTMxLCAxODQ3NTY5LCAtMjA2NTQxNzMsIC0xNjQ4NDg1NSwgNDcxNDU0NywgLTk2MDA2NTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE1MjAwMzMyLCA4MzY4NTcyLCAxOTY3OTEwMSwgMTU5NzAwNzQsIC0zMTg3MjY3NCwgMTk1OTQ1MSwgMjQ2MTE1OTksIC00NTQzODMyLCAtMTE3NDU4NzYsIDEyMzQwMjIwKSwKICAgICAgICAgICAgICAgIGFycmF5KDEyODc2OTM3LCAtMTA0ODAwNTYsIDMzMTM0MzgxLCA2NTkwOTQwLCAtNjMwNzc3NiwgMTQ4NzI0NDAsIDk2MTM5NTMsIDgyNDExNTIsIDE1MzcwOTg3LCA5NjA4NjMxKSwKICAgICAgICAgICAgICAgIGFycmF5KC00MTQzMjc3LCAtMTIwMTQ0MDgsIDg0NDYyODEsIC0zOTE2MDMsIDQ0MDc3MzgsIDEzNjI5MDMyLCAtNzcyNDg2OCwgMTU4NjYwNzQsIC0yODIxMDYyMSwgLTg4MTQwOTkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI2NjYwNjI4LCAtMTU2Nzc2NTUsIDgzOTM3MzQsIDM1ODA0NywgLTc0MDEyOTEsIDk5Mjk4OCwgLTIzOTA0MjMzLCA4NTg2OTcsIDIwNTcxMjIzLCA4NDIwNTU2KSwKICAgICAgICAgICAgICAgIGFycmF5KDE0NjIwNzE1LCAxMzA2NzIyNywgLTE1NDQ3Mjc0LCA4MjY0NDY3LCAxNDEwNjI2OSwgMTUwODA4MTQsIDMzNTMxODI3LCAxMjUxNjQwNiwgLTIxNTc0NDM1LCAtMTI0NzY3NDkpLAogICAgICAgICAgICAgICAgYXJyYXkoMjM2ODgxLCAxMDQ3NjIyNiwgNTcyNTgsIC0xNDY3NzAyNCwgNjQ3Mjk5OCwgMjQ2Njk4NCwgMTcyNTg1MTksIDcyNTY3NDAsIDg3OTExMzYsIDE1MDY5OTMwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMjc2NDEwLCAtOTM3MTkxOCwgMjI5NDk2MzUsIC0xNjMyMjgwNywgLTIzNDkzMDM5LCAtNTcwMjE4NiwgMTQ3MTE4NzUsIDQ4NzQyMjksIC0zMDY2MzE0MCwgLTIzMzEzOTEpLAogICAgICAgICAgICAgICAgYXJyYXkoNTg1NTY2NiwgNDk5MDIwNCwgLTEzNzExODQ4LCA3Mjk0Mjg0LCAtNzgwNDI4MiwgMTkyNDY0NywgLTE0MjMxNzUsIC03OTEyMzc4LCAtMzMwNjkzMzcsIDkyMzQyNTMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjA1OTA1MDMsIC05MDE4OTg4LCAzMTUyOTc0NCwgLTczNTI2NjYsIC0yNzA2ODM0LCAxMDY1MDU0OCwgMzE1NTkwNTUsIC0xMTYwOTU4NywgMTg5NzkxODYsIDEzMzk2MDY2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNDQ3NDI4NywgNDk2ODEwMywgMjIyNjcwODIsIDQ0MDczNTQsIDI0MDYzODgyLCAtODMyNTE4MCwgLTE4ODE2ODg3LCAxMzU5NDc4MiwgMzM1MTQ2NTAsIDcwMjE5NTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNTY2OTA2LCAtNjU2NTUwNSwgLTIxMzY1MDg1LCAxNTkyODg5MiwgLTI2MTU4MzA1LCA0MzE1NDIxLCAtMjU5NDg3MjgsIC0zOTE2Njc3LCAtMjE0ODA0ODAsIDEyODY4MDgyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODYzNTAxMywgMTM1MDQ2NjEsIDE5OTg4MDM3LCAtMjEzMjc2MSwgMjEwNzgyMjUsIDY0NDMyMDgsIC0yMTQ0NjEwNywgMjI0NDUwMCwgLTEyNDU1Nzk3LCAtODA4OTM4MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMwNTk1NTI4LCAxMzc5MzQ3OSwgLTU4NTI4MjAsIDMxOTEzNiwgLTI1NzIzMTcyLCAtNjI2Mzg5OSwgMzMwODY1NDYsIDg5NTc5MzcsIC0xNTIzMzY0OCwgNTU0MDUyMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE2MzAxNzYsIC0xMTUwMzkwMiwgLTgxMTk1MDAsIC03NjQzMDczLCAyNjIwMDU2LCAxMDIyOTA4LCAtMjM3MTA3NDQsIC0xNTY4OTg0LCAtMTYxMjg1MjgsIC0xNDk2MjgwNyksCiAgICAgICAgICAgICAgICBhcnJheSgyMzE1Mjk3MSwgNzc1Mzg2LCAyNzM5NTQ2MywgMTQwMDY2MzUsIC05NzAxMTE4LCA0NjQ5NTEyLCAxNjg5ODE5LCA4OTIxODUsIC0xMTUxMzI3NywgLTE1MjA1OTQ4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg5NzcwMTI5LCA5NTg2NzM4LCAyNjQ5NjA5NCwgNDMyNDEyMCwgMTU1NjUxMSwgLTM1NTAwMjQsIDI3NDUzODE5LCA0NzYzMTI3LCAtMTkxNzk2MTQsIDU4NjcxMzQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMyNzY1MDI1LCAxOTI3NTkwLCAzMTcyNjQwOSwgLTQ3NTMyOTUsIDIzOTYyNDM0LCAtMTYwMTk1MDAsIDI3ODQ2NTU5LCA1OTMxMjYzLCAtMjk3NDk3MDMsIC0xNjEwODQ1NSksCiAgICAgICAgICAgICAgICBhcnJheSgyNzQ2MTg4NSwgLTI5Nzc1MzYsIDIyMzgwODEwLCAxODE1ODU0LCAtMjMwMzM3NTMsIC0zMDMxOTM4LCA3MjgzNDkwLCAtMTUxNDgwNzMsIC0xOTUyNjcwMCwgNzczNDYyOSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtODAxMDI2NCwgLTk1OTA4MTcsIC0xMTEyMDQwMywgNjE5NjAzOCwgMjkzNDQxNTgsIC0xMzQzMDg4NSwgNzU4NTI5NSwgLTMxNzY2MjYsIDE4NTQ5NDk3LCAxNTMwMjA2OSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzI2NTgzMzcsIC02MTcxMjIyLCAtNzY3Mjc5MywgLTExMDUxNjgxLCA2MjU4ODc4LCAxMzUwNDM4MSwgMTA0NTg3OTAsIC02NDE4NDYxLCAtODg3MjI0MiwgODQyNDc0NiksCiAgICAgICAgICAgICAgICBhcnJheSgyNDY4NzIwNSwgODYxMzI3NiwgLTMwNjY3MDQ2LCAtMzIzMzU0NSwgMTg2Mzg5MiwgLTE4MzA1NDQsIDE5MjA2MjM0LCA3MTM0OTE3LCAtMTEyODQ0ODIsIC04Mjg5MTkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDExMzM0ODk5LCAtOTIxODAyMiwgODAyNTI5MywgMTI3MDc1MTksIDE3NTIzODkyLCAtMTA0NzYwNzEsIDEwMjQzNzM4LCAtMTQ2ODU0NjEsIC01MDY2MDM0LCAxNjQ5ODgzNyksCiAgICAgICAgICAgICAgICBhcnJheSg4OTExNTQyLCA2ODg3MTU4LCAtOTU4NDI2MCwgLTY5NTg1OTAsIDExMTQ1NjQxLCAtOTU0MzY4MCwgMTczMDM5MjUsIC0xNDEyNDIzOCwgNjUzNjY0MSwgMTA1NDM5MDYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4OTQ2Mzg0LCAxNTQ3OTc2MywgLTE3NDY2ODM1LCA1Njg4NzYsIC0xNDk3NjgzLCAxMTIyMzQ1NCwgLTI2NjkxOTAsIC0xNjYyNTU3NCwgLTI3MjM1NzA5LCA4ODc2NzcxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjU3NDI4OTksIC0xMjU2Njg2NCwgLTE1NjQ5OTY2LCAtODQ2NjA3LCAtMzMwMjY2ODYsIC03OTYyODgsIC0zMzQ4MTgyMiwgMTU4MjQ0NzQsIC02MDQ0MjYsIC05MDM5ODE3KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwMzMwMDU2LCA3MDA1MSwgNzk1NzM4OCwgLTkwMDI2NjcsIDk3NjQ5MDIsIDE1NjA5NzU2LCAyNzY5ODY5NywgLTQ4OTAwMzcsIDE2NTczOTQsIDMwODQwOTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTA0Nzc5NjMsIC03NDcwMjYwLCAxMjExOTU2NiwgLTEzMjUwODA1LCAyOTAxNjI0NywgLTUzNjU1ODksIDMxMjgwMzE5LCAxNDM5NjE1MSwgLTMwMjMzNTc1LCAxNTI3MjQwOSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEyMjg4MzA5LCAzMTY5NDYzLCAyODgxMzE4MywgMTY2NTg3NTMsIDI1MTE2NDMyLCAtNTYzMDQ2NiwgLTI1MTczOTU3LCAtMTI2MzYxMzgsIC0yNTAxNDc1NywgMTk1MDUwNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjYxODAzNTgsIDk0ODkxODcsIDExMDUzNDE2LCAtMTQ3NDYxNjEsIC0zMTA1MzcyMCwgNTgyNTYzMCwgLTgzODQzMDYsIC04NzY3NTMyLCAxNTM0MTI3OSwgODM3MzcyNyksCiAgICAgICAgICAgICAgICBhcnJheSgyODY4NTgyMSwgNzc1OTUwNSwgLTE0Mzc4NTE2LCAtMTIwMDI4NjAsIC0zMTk3MTgyMCwgNDA3OTI0MiwgMjk4MTM2LCAtMTAyMzI2MDIsIC0yODc4MjA3LCAxNTE5MDQyMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMyOTMyODc2LCAxMzgwNjMzNiwgLTE0MzM3NDg1LCAtMTU3OTQ0MzEsIC0yNDAwNDYyMCwgMTA5NDA5MjgsIDg2Njk3MTgsIDI3NDIzOTMsIC0yNjAzMzMxMywgLTY4NzUwMDMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1ODAzODgsIC0xMTcyOTQxNywgLTI1OTc5NjU4LCAtMTE0NDUwMjMsIC0xNzQxMTg3NCwgLTEwOTEyODU0LCA5MjkxNTk0LCAtMTYyNDc3NzksIC0xMjE1NDc0MiwgNjA0ODYwNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAzMDUzMTUsIDE0ODQzNDQ0LCAxNTM5MzAxLCAxMTg2NDM2NiwgMjAyMDE2NzcsIDE5MDAxNjMsIDEzOTM0MjMxLCA1MTI4MzIzLCAxMTIxMzI2MiwgOTE2ODM4NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI2MjgwNTEzLCAxMTAwNzg0NywgMTk0MDg5NjAsIC05NDA3NTgsIC0xODU5Mjk2NSwgLTQzMjg1ODAsIC01MDg4MDYwLCAtMTExMDUxNTAsIDIwNDcwMTU3LCAtMTYzOTg3MDEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMTM2MDUzLCA5MjgyMTkyLCAxNDg1NTE3OSwgLTE1MzkwMDc4LCAtNzM2MjgxNSwgLTE0NDA4NTYwLCAtMjI3ODM5NTIsIDE0NDYxNjA4LCAxNDA0Mjk3OCwgNTIzMDY4MyksCiAgICAgICAgICAgICAgICBhcnJheSgyOTk2OTU2NywgLTI3NDE1OTQsIC0xNjcxMTg2NywgLTg1NTI0NDIsIDkxNzU0ODYsIC0yNDY4OTc0LCAyMTU1Njk1MSwgMzUwNjA0MiwgLTU5MzM4OTEsIC0xMjQ0OTcwOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMxNDQ3NDYsIDg3NDQ2NjEsIDE5NzA0MDAzLCA0NTgxMjc4LCAtMjA0MzA2ODYsIDY4MzA2ODMsIC0yMTI4NDE3MCwgODk3MTUxMywgLTI4NTM5MTg5LCAxNTMyNjU2MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTk0NjQ2MjksIDEwMTEwMjg4LCAtMTcyNjI1MjgsIC0zNTAzODkyLCAtMjM1MDAzODcsIDEzNTU2NjksIC0xNTUyMzA1MCwgMTUzMDA5ODgsIC0yMDUxNDExOCwgOTE2ODI2MCksCiAgICAgICAgICAgICAgICBhcnJheSgtNTM1MzMzNSwgNDQ4ODYxMywgLTIzODAzMjQ4LCAxNjMxNDM0NywgNzc4MDQ4NywgLTE1NjM4OTM5LCAtMjg5NDgzNTgsIDk2MDE2MDUsIDMzMDg3MTAzLCAtOTAxMTM4NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE5NDQzMTcwLCAtMTU1MTI5MDAsIC0yMDc5NzQ2NywgLTEyNDQ1MzIzLCAtMjk4MjQ0NDcsIDEwMjI5NDYxLCAtMjc0NDQzMjksIC0xNTAwMDUzMSwgLTU5OTY4NzAsIDE1NjY0NjcyKSwKICAgICAgICAgICAgICAgIGFycmF5KDIzMjk0NTkxLCAtMTY2MzI2MTMsIC0yMjY1MDc4MSwgLTg0NzA5NzgsIDI3ODQ0MjA0LCAxMTQ2MTE5NSwgMTMwOTk3NTAsIC0yNDYwMzU2LCAxODE1MTY3NiwgMTM0MTc2ODYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI0NzIyOTEzLCAtNDE3NjUxNywgLTMxMTUwNjc5LCA1OTg4OTE5LCAtMjY4NTg3ODUsIDY2ODUwNjUsIDE2NjE1OTcsIC0xMjU1MTQ0MSwgMTUyNzE2NzYsIC0xNTQ1MjY2NSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTQzMzA0MiwgLTEzMjI4NjY1LCA4MjM5NjMxLCAtNTI3OTUxNywgLTE5ODU0MzYsIC03MjU3MTgsIC0xODY5ODc2NCwgMjE2NzU0NCwgLTY5MjEzMDEsIC0xMzQ0MDE4MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMzE0MzYxNzEsIDE1NTc1MTQ2LCAzMDQzNjgxNSwgMTIxOTIyMjgsIC0yMjQ2MzM1MywgOTM5NTM3OSwgLTk5MTc3MDgsIC04NjM4OTk3LCAxMjIxNTExMCwgMTIwMjgyNzcpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQwOTg0MDAsIDY1NTU5NDQsIDIzMDA3MjU4LCA1NzU3MjUyLCAtMTU0Mjc4MzIsIC0xMjk1MDUwMiwgMzAxMjM0NDAsIDQ2MTc3ODAsIC0xNjkwMDA4OSwgLTY1NTYyOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQwMjYyMDEsIC0xNTI0MDgzNSwgMTE4OTMxNjgsIDEzNzE4NjY0LCAtMTQ4MDk0NjIsIDE4NDczODUsIC0xNTgxOTk5OSwgMTAxNTQwMDksIDIzOTczMjYxLCAtMTI2ODQ0NzQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI2NTMxODIwLCAtMzY5NTk5MCwgLTE5MDg4OTgsIDI1MzQzMDEsIC0zMTg3MDU1NywgLTE2NTUwMzU1LCAxODM0MTM5MCwgLTExNDE5OTUxLCAzMjAxMzE3NCwgLTEwMTAzNTM5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTQ3OTMwMSwgMTA4NzY0NDMsIC0xMTc3MTA4NiwgLTE0NjI1MTQwLCAtMTIzNjk1NjcsIDE4MzgxMDQsIDIxOTExMjE0LCA2MzU0NzUyLCA0NDI1NjMyLCAtODM3ODIyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTA0MzMzODksIC0xNDYxMjk2NiwgMjIyMjk4NTgsIC0zMDkxMDQ3LCAtMTMxOTExNjYsIDc3NjcyOSwgLTE3NDE1Mzc1LCAtMTIwMjA0NjIsIDQ3MjUwMDUsIDE0MDQ0OTcwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE5MjY4NjUwLCAtNzMwNDQyMSwgMTU1NTM0OSwgODY5Mjc1NCwgLTIxNDc0MDU5LCAtOTkxMDY2NCwgNjM0NzM5MCwgLTE0MTE3ODQsIC0xOTUyMjI5MSwgLTE2MTA5NzU2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNDg2NDA4OSwgMTI5ODYwMDgsIC0xMDg5ODg3OCwgLTU1NTg1ODQsIC0xMTMxMjM3MSwgLTE0ODUyNiwgMTk1NDE0MTgsIDgxODAxMDYsIDkyODIyNjIsIDEwMjgyNTA4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjYyMDUwODIsIDQ0Mjg1NDcsIC04NjYxMTk2LCAtMTMxOTQyNjMsIDQwOTg0MDIsIC0xNDE2NTI1NywgMTU1MjI1MzUsIDgzNzIyMTUsIDU1NDI1OTUsIC0xMDcwMjY4MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTA1NjI1NDEsIDE0ODk1NjMzLCAyNjgxNDU1MiwgLTE2NjczODUwLCAtMTc0ODA3NTQsIC0yNDg5MzYwLCAtMjc4MTg5MSwgNjk5Mzc2MSwgLTE4MDkzODg1LCAxMDExNDY1NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjAxMDcwNTUsIC05Mjk0MTgsIDMxNDIyNzA0LCAxMDQyNzg2MSwgLTcxMTA3NDksIDYxNTA2NjksIC0yOTA5MTc1NSwgLTExNTI5MTQ2LCAyNTk1MzcyNSwgLTEwNjE1OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQyMzQzOTcsIC04MDM5MjkyLCAtOTExOTEyNSwgMzA0NjAwMCwgMjEwMTYwOSwgLTEyNjA3Mjk0LCAxOTM5MDAyMCwgNjA5NDI5NiwgLTMzMTUyNzksIDEyODMxMTI1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTk5ODY3OCwgNzU3ODE1MiwgNTMxMDIxNywgMTQ0MDgzNTcsIC0zMzU0ODYyMCwgLTIyNDczOSwgMzE1NzU5NTQsIDYzMjYxOTYsIDczODE3OTEsIC0yNDIxODM5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMDkwMjc3OSwgMzI5NjgxMSwgMjQ3MzYwNjUsIC0xNjMyODM4OSwgMTgzNzQyNTQsIDczMTg2NDAsIDYyOTUzMDMsIDgwODI3MjQsIC0xNTM2MjQ4OSwgMTIzMzk2NjQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI3NzI0NzM2LCAyMjkxMTU3LCA2MDg4MjAxLCAtMTQxODQ3OTgsIDE3OTI3MjcsIDU4NTc2MzQsIDEzODQ4NDE0LCAxNTc2ODkyMiwgMjUwOTExNjcsIDE0ODU2Mjk0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xODg2NjY1MiwgODMzMTA0MywgMjQzNzM0NzksIDg1NDEwMTMsIC03MDE5OTgsIC05MjY5NDU3LCAxMjkyNzMwMCwgLTEyNjk1NDkzLCAtMjIxODI0NzMsIC05MDEyODk5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTQyMzQyOSwgLTU0MjE1OTAsIDExNjMyODQ1LCAzNDA1MDIwLCAzMDUzNjczMCwgLTExNjc0MDM5LCAtMjcyNjA3NjUsIDEzODY2MzkwLCAzMDE0NjIwNiwgOTE0MjA3MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzkyNDEyOSwgLTE1MzA3NTE2LCAtMTM4MTcxMjIsIC0xMDA1NDk2MCwgMTIyOTE4MjAsIC02NjgzNjYsIC0yNzcwMjc3NCwgOTMyNjM4NCwgLTgyMzc4NTgsIDQxNzEyOTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1OTIxOTQwLCAxNjAzNzkzNywgNjcxMzc4NywgMTY2MDY2ODIsIC0yMTYxMjEzNSwgMjc5MDk0NCwgMjYzOTYxODUsIDM3MzE5NDksIDM0NTIyOCwgLTU0NjI5NDkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxMzI3NTM4LCAxMzQ0ODI1OSwgMjUyODQ1NzEsIDExNDM2NjEsIDIwNjE0OTY2LCAtODg0OTM4NywgMjAzMTUzOSwgLTEyMzkxMjMxLCAtMTYyNTMxODMsIC0xMzU4MjA4MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzEwMTYyMTEsIC0xNjcyMjQyOSwgMjYzNzEzOTIsIC0xNDQ1MTIzMywgLTUwMjczNDksIDE0ODU0MTM3LCAxNzQ3NzYwMSwgMzg0MjY1NywgMjgwMTI2NTAsIC0xNjQwNTQyMCksCiAgICAgICAgICAgICAgICBhcnJheSgtNTA3NTgzNSwgOTM2ODk2NiwgLTg1NjIwNzksIC00NjAwOTAyLCAtMTUyNDk5NTMsIDY5NzA1NjAsIC05MTg5ODczLCAxNjI5MjA1NywgLTg4NjcxNTcsIDM1MDc5NDApLAogICAgICAgICAgICAgICAgYXJyYXkoMjk0Mzk2NjQsIDM1Mzc5MTQsIDIzMzMzNTg5LCA2OTk3Nzk0LCAtMTc1NTU1NjEsIC0xMTAxODA2OCwgLTE1MjA5MjAyLCAtMTUwNTEyNjcsIC05MTY0OTI5LCA2NTgwMzk2KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMjE4NTg2MSwgLTc2Nzk3ODgsIDE2NDM4MjY5LCAxMDgyNjE2MCwgLTg2OTY4MTcsIC02MjM1NjExLCAxNzg2MDQ0NCwgLTkyNzM4NDYsIC0yMDk1ODAyLCA5MzA0NTY3KSwKICAgICAgICAgICAgICAgIGFycmF5KDIwNzE0NTY0LCAtNDMzNjkxMSwgMjkwODgxOTUsIDc0MDY0ODcsIDExNDI2OTY3LCAtNTA5NTcwNSwgMTQ3OTI2NjcsIC0xNDYwODYxNywgNTI4OTQyMSwgLTQ3NzEyNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTY2NjU1MzMsIC0xMDY1MDc5MCwgLTYxNjAzNDUsIC0xMzMwNTc2MCwgOTE5MjAyMCwgLTE4MDI0NjIsIDE3MjcxNDkwLCAxMjM0OTA5NCwgMjY5Mzk2NjksIC0zNzUyMjk0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTI4ODk4OTgsIDkzNzM0NTgsIDMxNTk1ODQ4LCAxNjM3NDIxNSwgMjE0NzE3MjAsIDEzMjIxNTI1LCAtMjcyODM0OTUsIC0xMjM0ODU1OSwgLTM2OTg4MDYsIDExNzg4NyksCiAgICAgICAgICAgICAgICBhcnJheSgyMjI2MzMyNSwgLTY1NjAwNTAsIDM5ODQ1NzAsIC0xMTE3NDY0NiwgLTE1MTE0MDA4LCAtNTY2Nzg1LCAyODMxMTI1MywgNTM1ODA1NiwgLTIzMzE5NzgwLCA1NDE5NjQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTYyNTkyMTksIDMyNjE5NzAsIDIzMDkyNTQsIC0xNTUzNDQ3NCwgLTE2ODg1NzExLCAtNDU4MTkxNiwgMjQxMzQwNzAsIC0xNjcwNTgyOSwgLTEzMzM3MDY2LCAtMTM1NTIxOTUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDkzNzgxNjAsIC0xMzE0MDE4NiwgLTIyODQ1OTgyLCAtMTI3NDUyNjQsIDI4MTk4MjgxLCAtNzI0NDA5OCwgLTIzOTk2ODQsIC03MTczNTEsIDY5MDQyNiwgMTQ4NzYyNDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMjQ5NzczNTMsIC0zMTQzODQsIC04MjIzOTY5LCAtMTM0NjUwODYsIDI4NDMyMzQzLCAtMTE3NjM1MywgLTEzMDY4ODA0LCAtMTIyOTczNDgsIC0yMjM4MDk4NCwgNjYxODk5OSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTUzODE3NCwgMTE2ODU2NDYsIDEyOTQ0Mzc4LCAxMzY4MjMxNCwgLTI0Mzg5NTExLCAtMTQ0MTMxOTMsIDgwNDQ4MjksIC0xMzgxNzMyOCwgMzIyMzk4MjksIC01NjUyNzYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTg2MDMwNjYsIDQ3NjI5OTAsIC05MjYyNTAsIDg4ODUzMDQsIC0yODQxMjQ4MCwgLTMxODczMTUsIDk3ODE2NDcsIC0xMDM1MDA1OSwgMzI3NzkzNTksIDUwOTUyNzQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMzMDA4MTMwLCAtNTIxNDUwNiwgLTMyMjY0ODg3LCAtMzY4NTIxNiwgOTQ2MDQ2MSwgLTkzMjc0MjMsIC0yNDYwMTY1NiwgMTQ1MDY3MjQsIDIxNjM5NTYxLCAtMjYzMDIzNiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTY0MDA5NDMsIC0xMzExMjIxNSwgMjUyMzkzMzgsIDE1NTMxOTY5LCAzOTg3NzU4LCAtNDQ5OTMxOCwgLTEyODk1MDIsIC02ODYzNTM1LCAxNzg3NDU3NCwgNTU4NjA1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTM2MDAxMjksIDEwMjQwMDgxLCA5MTcxODgzLCAxNjEzMTA1MywgLTIwODY5MjU0LCA5NTk5NzAwLCAzMzQ5OTQ4NywgNTA4MDE1MSwgMjA4NTg5MiwgNTExOTc2MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjIyMDUxNDUsIC0yNTE5NTI4LCAtMTYzODE2MDEsIDQxNDY5MSwgLTI1MDE5NTUwLCAyMTcwNDMwLCAzMDYzNDc2MCwgLTgzNjM2MTQsIC0zMTk5OTk5MywgLTU3NTk4ODQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTY4NDU3MDQsIDE1NzkxMjAyLCA4NTUwMDc0LCAtMTMxMjY1NCwgMjk5Mjg4MDksIC0xMjA5MjI1NiwgMjc1MzQ0MzAsIC03MTkyMTQ1LCAtMjIzNTEzNzgsIDEyOTYxNDgyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ0OTIwNjAsIC05NTcwNzcxLCAxMDM2ODE5NCwgMTE1ODIzNDEsIC0yMzM5NzI5MywgLTIyNDUyODcsIDE2NTMzOTMwLCA4MjA2OTk2LCAtMzAxOTQ2NTIsIC01MTU5NjM4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTEyMTQ5NiwgLTMzODIyMzQsIDIzMDczNjYsIDYzNjIwMzEsIC0xMzU0NTUsIDg4NjgxNzcsIC0xNjgzNTYzMCwgNzAzMTI3NSwgNzU4OTY0MCwgODk0NTQ5MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzIxNTI3NDgsIDg5MTc5NjcsIDY2NjEyMjAsIC0xMTY3NzYxNiwgLTExOTIwNjAsIC0xNTc5MzM5MywgNzI1MTQ4OSwgLTExMTgyMTgwLCAyNDA5OTEwOSwgLTE0NDU2MTcwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg1MDE5NTU4LCAtNzkwNzQ3MCwgNDI0NDEyNywgLTE0NzE0MzU2LCAtMjY5MzMyNzIsIDY0NTMxNjUsIC0xOTExODE4MiwgLTEzMjg5MDI1LCAtNjIzMTg5NiwgLTEwMjgwNzM2KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwODUzNTk0LCAxMDcyMTY4NywgMjY0ODAwODksIDU4NjE4MjksIC0yMjk5NTgxOSwgMTk3MjE3NSwgLTE4NjY2NDcsIC0xMDU1Nzg5OCwgLTMzNjM0NTEsIC02NDQxMTI0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzAwMjQwOCwgNTkwNjc5MCwgMjIxNTk5LCAtNjU2MzE0NywgNzgyODIwOCwgLTEzMjQ4OTE4LCAyNDM2MjY2MSwgLTIwMDgxNjgsIC0xMzg2NjQwOCwgNzQyMTM5MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoODEzOTkyNywgLTY1NDY0OTcsIDMyMjU3NjQ2LCAtNTg5MDU0NiwgMzAzNzU3MTksIDE4ODYxODEsIC0yMTE3NTEwOCwgMTU0NDEyNTIsIDI4ODI2MzU4LCAtNDEyMzAyOSksCiAgICAgICAgICAgICAgICBhcnJheSg2MjY3MDg2LCA5Njk1MDUyLCA3NzA5MTM1LCAtMTY2MDM1OTcsIC0zMjg2OTA2OCwgLTE4ODYxMzUsIDE0Nzk1MTYwLCAtNzg0MDEyNCwgMTM3NDYwMjEsIC0xNzQyMDQ4KSwKICAgICAgICAgICAgICAgIGFycmF5KDI4NTg0OTAyLCA3Nzg3MTA4LCAtNjczMjk0MiwgLTE1MDUwNzI5LCAyMjg0NjA0MSwgLTc1NzEyMzYsIC0zMTgxOTM2LCAtMzYzNTI0LCA0NzcxMzYyLCAtODQxOTk1OCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNDk0OTI1NiwgNjM3NjI3OSwgLTI3NDY2NDgxLCAtODE3NDYwOCwgLTE4NjQ2MTU0LCAtOTkzMDYwNiwgMzM1NDM1NjksIC0xMjE0MTY5NSwgMzU2OTYyNywgMTEzNDI1OTMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjY1MTQ5ODksIDQ3NDAwODgsIDI3OTEyNjUxLCAzNjk3NTUwLCAxOTMzMTU3NSwgLTExNDcyMzM5LCA2ODA5ODg2LCA0NjA4NjA4LCA3MzI1OTc1LCAtMTQ4MDEwNzEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNjE4Mzk5LCAtMTQ1NTQ0MzAsIC0yNDMyMTIxMiwgNzY1NTEyOCwgLTEzNjkyNzQsIDUyMTQzMTIsIC0yNzQwMDU0MCwgMTAyNTgzOTAsIC0xNzY0NjY5NCwgLTgxODY2OTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDExNDMxMjA0LCAxNTgyMzAwNywgMjY1NzAyNDUsIDE0MzI5MTI0LCAxODAyOTk5MCwgNDc5NjA4MiwgLTMxNDQ2MTc5LCAxNTU4MDY2NCwgOTI4MDM1OCwgLTM5NzM2ODcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2MDc4MywgLTEwMzI2MjU3LCAtMjI4NTUzMTYsIC00MzA0OTk3LCAtMjA4NjEzNjcsIC0xMzYyMTAwMiwgLTMyODEwOTAxLCAtMTExODE2MjIsIC0xNTU0NTA5MSwgNDM4NzQ0MSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjA3OTkzNzgsIDEyMTk0NTEyLCAzOTM3NjE3LCAtNTgwNTg5MiwgLTI3MTU0ODIwLCA5MzQwMzcwLCAtMjQ1MTM5OTIsIDg1NDgxMzcsIDIwNjE3MDcxLCAtNzQ4MjAwMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTkzODgyNSwgLTM5MzA1ODYsIC04NzE0MzExLCAxNjEyNDcxOCwgMjQ2MDMxMjUsIC02MjI1MzkzLCAtMTM3NzUzNTIsIC0xMTg3NTgyMiwgMjQzNDU2ODMsIDEwMzI1NDYwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xOTg1NTI3NywgLTE1Njg4ODUsIC0yMjIwMjcwOCwgODcxNDAzNCwgMTQwMDc3NjYsIDY5Mjg1MjgsIDE2MzE4MTc1LCAtMTAxMDY4OSwgNDc2Njc0MywgMzU1MjAwNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjE3NTEzNjQsIC0xNjczMDkxNiwgMTM1MTc2MywgLTgwMzQyMSwgLTQwMDk2NzAsIDM5NTA5MzUsIDMyMTc1MTQsIDE0NDgxOTA5LCAxMDk4ODgyMiwgLTM5OTQ3NjIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE1NTY0MzA3LCAtMTQzMTE1NzAsIDMxMDEyNDMsIDU2ODQxNDgsIDMwNDQ2NzgwLCAtODA1MTM1NiwgMTI2NzcxMjcsIC02NTA1MzQzLCAtODI5NTg1MiwgMTMyOTYwMDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTk0NDIyOTAsIDY2MjQyOTYsIC0zMDI5ODk2NCwgLTExOTEzNjc3LCAtNDY3MDk4MSwgLTIwNTczNzksIDMxNTIxMjA0LCA5NjE0MDU0LCAtMzAwMDA4MjQsIDEyMDc0Njc0KSwKICAgICAgICAgICAgICAgIGFycmF5KDQ3NzExOTEsIC0xMzUyMzksIDE0MjkwNzQ5LCAtMTMwODk4NTIsIDI3OTkyMjk4LCAxNDk5ODMxOCwgLTE0MTM5MzYsIC0xNTU2NzE2LCAyOTgzMjYxMywgLTE2MzkxMDM1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg3MDY0ODg0LCAtNzU0MTE3NCwgLTE5MTYxOTYyLCAtNTA2NzUzNywgLTE4ODkxMjY5LCAtMjkxMjczNiwgMjU4MjUyNDIsIDUyOTMyOTcsIC0yNzEyMjY2MCwgMTMxMDE1OTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyOTg1NjMsIDI0Mzk2NzAsIC03NDY2NjEwLCAxNzE5OTY1LCAtMjcyNjc1NDEsIC0xNjMyODQ0NSwgMzI1MTI0NjksIC01MzE3NTkzLCAtMzAzNTYwNzAsIC00MTkwOTU3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDAwNjU0MCwgMTAxNjIzMTYsIC0zMzE4MDE3NiwgMzk4MTcyMywgLTE2NDgyMTM4LCAtMTMwNzAwNDQsIDE0NDEzOTc0LCA5NTE1ODk2LCAxOTU2ODk3OCwgOTYyODgxMiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzMwNTM4MDMsIDE5OTM1NywgMTU4OTQ1OTEsIDE1ODMwNTksIDI3MzgwMjQzLCAtNDU4MDQzNSwgLTE3ODM4ODk0LCAtNjEwNjgzOSwgLTYyOTE3ODYsIDM0Mzc3NDApLAogICAgICAgICAgICAgICAgYXJyYXkoLTE4OTc4ODc3LCAzODg0NDkzLCAxOTQ2OTg3NywgMTI3MjY0OTAsIDE1OTEzNTUyLCAxMzYxNDI5MCwgLTIyOTYxNzMzLCA3MDEwNCwgNzQ2MzMwNCwgNDE3NjEyMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjcxMjQwMDEsIDEwNjU5OTE3LCAxMTQ4MjQyNywgLTE2MDcwMzgxLCAxMjc3MTQ2NywgLTY2MzUxMTcsIC0zMjcxOTQwNCwgLTUzMjI3NTEsIDI0MjE2ODgyLCA1OTQ0MTU4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg4ODk0MTI1LCA3NDUwOTc0LCAtMjY2NDE0OSwgLTk3NjU3NTIsIC0yODA4MDUxNywgLTEyMzg5MTE1LCAxOTM0NTc0NiwgMTQ2ODA3OTYsIDExNjMyOTkzLCA1ODQ3ODg1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI2OTQyNzgxLCAtMjMxNTMxNywgOTEyOTU2NCwgLTQ5MDY2MDcsIDI2MDI0MTA1LCAxMTc2OTM5OSwgLTExNTE4ODM3LCA2MzY3MTk0LCAtOTcyNzIzMCwgNDc4MjE0MCksCiAgICAgICAgICAgICAgICBhcnJheSgxOTkxNjQ2MSwgLTQ4Mjg0MTAsIC0yMjkxMDcwNCwgLTExNDE0MzkxLCAyNTYwNjMyNCwgLTU5NzI0NDEsIDMzMjUzODUzLCA4MjIwOTExLCA2MzU4ODQ3LCAtMTg3Mzg1NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoODAxNDI4LCAtMjA4MTcwMiwgMTY1Njk0MjgsIDExMDY1MTY3LCAyOTg3NTcwNCwgOTY2MjcsIDc5MDgzODgsIC00NDgwNDgwLCAtMTM1Mzg1MDMsIDEzODcxNTUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTk2NDYwNTgsIDU3MjA2MzMsIC0xMTQxNjcwNiwgMTI4MTQyMDksIDExNjA3OTQ4LCAxMjc0OTc4OSwgMTQxNDcwNzUsIDE1MTU2MzU1LCAtMjE4NjY4MzEsIDExODM1MjYwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE5Mjk5NTEyLCAxMTU1OTEwLCAyODcwMzczNywgMTQ4OTA3OTQsIDI5MjUwMjYsIDcyNjkzOTksIDI2MTIxNTIzLCAxNTQ2Nzg2OSwgLTI2NTYwNTUwLCA1MDUyNDgzKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMDE3NDMyLCAxMDA1ODIwNiwgMTk4MDgzNywgMzk2NDI0MywgMjIxNjA5NjYsIDEyMzIyNTMzLCAtNjQzMTEyMywgLTEyNjE4MTg1LCAxMjIyODU1NywgLTcwMDM2NzcpLAogICAgICAgICAgICAgICAgYXJyYXkoMzI5NDQzODIsIDE0OTIyMjExLCAtMjI4NDQ4OTQsIDUxODg1MjgsIDIxOTEzNDUwLCAtODcxOTk0MywgNDAwMTQ2NSwgMTMyMzg1NjQsIC02MTE0ODAzLCA4NjUzODE1KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyODY1NTY5LCAtNDY1MjczNSwgMjc2MDM2NjgsIC0xMjU0NTM5NSwgMTQzNDg5NTgsIDgyMzQwMDUsIDI0ODA4NDA1LCA1NzE5ODc1LCAyODQ4MzI3NSwgMjg0MTc1MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE2NDIwOTY4LCAtMTExMzMwNSwgLTMyNzcxOSwgLTEyMTA3ODU2LCAyMTg4NjI4MiwgLTE1NTUyNzc0LCAtMTg4Nzk2NiwgLTMxNTY1OCwgMTk5MzIwNTgsIC0xMjczOTIwMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE2NTYwODYsIDEwMDg3NTIxLCAtODg2NDg4OCwgLTU1MzYxNDMsIC0xOTI3ODU3MywgLTMwNTU5MTIsIDM5OTkyMjgsIDEzMjM5MTM0LCAtNDc3NzQ2OSwgLTEzOTEwMjA4KSwKICAgICAgICAgICAgICAgIGFycmF5KDEzODIxNzQsIC0xMTY5NDcxOSwgMTcyNjY3OTAsIDkxOTQ2OTAsIC0xMzMyNDM1NiwgOTcyMDA4MSwgMjA0MDM5NDQsIDExMjg0NzA1LCAtMTQwMTM4MTgsIDMwOTMyMzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE2NjUwOTIxLCAtMTEwMzc5MzIsIC0xMDY0MTc4LCAxNTcwNjI5LCAtODMyOTc0NiwgNzM1Mjc1MywgLTMwMjQyNCwgMTYyNzEyMjUsIC0yNDA0OTQyMSwgLTY2OTE4NTApLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxOTExMDc3LCAtNTkyNzk0MSwgLTQ2MTEzMTYsIC01NTYwMTU2LCAtMzE3NDQxMDMsIC0xMDc4NTI5MywgMjQxMjM2MTQsIDE1MTkzNjE4LCAtMjE2NTIxMTcsIC0xNjczOTM4OSksCiAgICAgICAgICAgICAgICBhcnJheSgtOTkzNTkzNCwgLTQyODk0NDcsIC0yNTI3OTgyMywgNDM3Mjg0MiwgMjA4NzQ3MywgMTAzOTk0ODQsIDMxODcwOTA4LCAxNDY5MDc5OCwgMTczNjE2MjAsIDExODY0OTY4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTEzMDc2MTAsIDYyMTAzNzIsIDEzMjA2NTc0LCA1ODA2MzIwLCAtMjkwMTc2OTIsIC0xMzk2NzIwMCwgLTEyMzMxMjA1LCAtNzQ4NjYwMSwgLTI1NTc4NDYwLCAtMTYyNDA2ODkpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQ2Njg0NjIsIC0xMjI3MDIzNSwgMjYwMzkwMzksIDE1MzA1MjEwLCAyNTUxNTYxNywgNDU0MjQ4MCwgMTA0NTM4OTIsIDY1Nzc1MjQsIDkxNDU2NDUsIC02NDQzODgwKSwKICAgICAgICAgICAgICAgIGFycmF5KDU5NzQ4NzQsIDMwNTM4OTUsIC05NDMzMDQ5LCAtMTAzODUxOTEsIC0zMTg2NTEyNCwgMzIyNTAwOSwgLTc5NzI2NDIsIDM5MzYxMjgsIC01NjUyMjczLCAtMzA1MDMwNCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzA2MjUzODYsIC00NzI5NDAwLCAtMjU1NTU5NjEsIC0xMjc5Mjg2NiwgLTIwNDg0NTc1LCA3Njk1MDk5LCAxNzA5NzE4OCwgLTE2MzAzNDk2LCAtMjc5OTk3NzksIDE4MDM2MzIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTM1NTMwOTEsIDk4NjUwOTksIC01MjI4NTY2LCA0MjcyNzAxLCAtNTY3MzgzMiwgLTE2Njg5NzAwLCAxNDkxMTM0NCwgMTIxOTY1MTQsIC0yMTQwNTQ4OSwgNzA0NzQxMiksCiAgICAgICAgICAgICAgICBhcnJheSgyMDA5MzI3NywgOTkyMDk2NiwgLTExMTM4MTk0LCAtNTM0Mzg1NywgMTMxNjE1ODcsIDEyMDQ0ODA1LCAtMzI4NTY4NTEsIDQxMjQ2MDEsIC0zMjM0MzgyOCwgLTEwMjU3NTY2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjA3ODg4MjQsIDE0MDg0NjU0LCAtMTM1MzE3MTMsIDc4NDIxNDcsIDE5MTE5MDM4LCAtMTM4MjI2MDUsIDQ3NTIzNzcsIC04NzE0NjQwLCAtMjE2Nzk2NTgsIDIyODgwMzgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI2ODE5MjM2LCAtMzI4MzcxNSwgMjk5NjUwNTksIDMwMzk3ODYsIC0xNDQ3Mzc2NSwgMjU0MDQ1NywgMjk0NTc1MDIsIDE0NjI1NjkyLCAtMjQ4MTk2MTcsIDEyNTcwMjMyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDYzNTU4LCAtMTE1NTE4MjMsIDE2OTIwMzE4LCAxMjQ5NDg0MiwgMTI3ODI5MiwgLTU4NjkxMDksIC0yMTE1OTk0MywgLTM0OTg2ODAsIC0xMTk3NDcwNCwgNDcyNDk0MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTc5NjA5NzAsIC0xMTc3NTUzNCwgLTQxNDA5NjgsIC05NzAyNTMwLCAtODg3NjU2MiwgLTE0MTA2MTcsIC0xMjkwNzM4MywgLTg2NTk5MzIsIC0yOTU3NjMwMCwgMTkwMzg1NiksCiAgICAgICAgICAgICAgICBhcnJheSgyMzEzNDI3NCwgLTE0Mjc5MTMyLCAtMTA2ODE5OTcsIC0xNjExOTM2LCAyMDY4NDQ4NSwgMTU3NzA4MTYsIC0xMjk4OTc1MCwgMzE5MDI5NiwgMjY5NTUwOTcsIDE0MTA5NzM4KSwKICAgICAgICAgICAgICAgIGFycmF5KDE1MzA4Nzg4LCA1MzIwNzI3LCAtMzAxMTM4MDksIC0xNDMxODg3NywgMjI5MDIwMDgsIDc3NjcxNjQsIDI5NDI1MzI1LCAtMTEyNzc1NjIsIDMxOTYwOTQyLCAxMTkzNDk3MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI3Mzk1NzExLCA4NDM1Nzk2LCA0MTA5NjQ0LCAxMjIyMjYzOSwgLTI0NjI3ODY4LCAxNDgxODY2OSwgMjA2MzgxNzMsIDQ4NzUwMjgsIDEwNDkxMzkyLCAxMzc5NzE4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzE1OTQxNSwgOTE5Nzg0MSwgMzg3NTUwMywgLTg5MzYxMDgsIC0xMzgzNzEyLCAtNTg3OTgwMSwgMzM1MTg0NTksIDE2MTc2NjU4LCAyMTQzMjMxNCwgMTIxODA2OTcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTExNzg3MzA4LCAxMTUwMDgzOCwgMTM3ODc1ODEsIC0xMzgzMjU5MCwgLTIyNDMwNjc5LCAxMDE0MDIwNSwgMTQ2NTQyNSwgMTI2ODk1NDAsIC0xMDMwMTMxOSwgLTEzODcyODgzKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDU0MTQwOTEsIC0xNTM4NjA0MSwgLTIxMDA3NjY0LCA5NjQzNTcwLCAxMjgzNDk3MCwgMTE4NjE0OSwgLTI2MjI5MTYsIC0xMzQyMjMxLCAyNjEyODIzMSwgNjAzMjkxMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjYzMzczOTUsIC0xMzc2NjE2MiwgMzI0OTYwMjUsIC0xMzY1MzkxOSwgMTc4NDc4MDEsIC0xMjY2OTE1NiwgMzYwNDAyNSwgODMxNjg5NCwgLTI1ODc1MDM0LCAtMTA0MzczNTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMzI5NjQ4NCwgNjIyMzA0OCwgMjQ2ODA2NDYsIC0xMjI0NjQ2MCwgLTIzMDUyMDIwLCA1OTAzMjA1LCAtODg2MjI5NywgLTQ2MzkxNjQsIDEyMzc2NjE3LCAzMTg4ODQ5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyOTE5MDQ4OCwgLTE0NjU5MDQ2LCAyNzU0OTExMywgLTExODM1MTYsIDM1MjAwNjYsIC0xMDY5NzMwMSwgMzIwNDk1MTUsIC03MzA5MTEzLCAtMTYxMDkyMzQsIC05ODUyMzA3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNDc0NDQ4NiwgLTkzMDkxNTYsIDczNTgxOCwgLTU5ODk3OCwgLTIwNDA3Njg3LCAtNTA1NzkwNCwgMjUyNDYwNzgsIC0xNTc5NTY2OSwgMTg2NDA3NDEsIC05NjA5NzcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTY5Mjg4MzUsIC0xNjQzMDc5NSwgMTAzNjEzNzQsIDU2NDI5NjEsIDQ5MTA0NzQsIDEyMzQ1MjUyLCAtMzE2MzgzODYsIC00OTQ0MzAsIDEwNTMwNzQ3LCAxMDUzMzM1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjkyNjU5NjcsIC0xNDE4NjgwNSwgLTEzNTM4MjE2LCAtMTIxMTczNzMsIC0xOTQ1NzA1OSwgLTEwNjU1Mzg0LCAtMzE0NjIzNjksIC0yOTQ4OTg1LCAyNDAxODgzMSwgMTUwMjY2NDQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNTkyNTM1LCAtMzE0NTI3NywgLTIyODkyNzYsIDU5NTM4NDMsIC0xMzQ0MDE4OSwgOTQyNTYzMSwgMjUzMTA2NDMsIDEzMDAzNDk3LCAtMjMxNDc5MSwgLTE1MTQ1NjE2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNzQxOTk4NSwgLTYwMzMyMSwgLTgwNDM5ODQsIC0xNjY5MTE3LCAtMjYwOTIyNjUsIDEzOTg3ODE5LCAtMjcyOTc2MjIsIDE4Nzg5OSwgLTIzMTY2NDE5LCAtMjUzMTczNSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIxNzQ0Mzk4LCAtMTM4MTA0NzUsIDE4NDQ4NDAsIDUwMjE0MjgsIC0xMDQzNDM5OSwgLTE1OTExNDczLCA5NzE2NjY3LCAxNjI2NjkyMiwgLTUwNzAyMTcsIDcyNjA5OSksCiAgICAgICAgICAgICAgICBhcnJheSgyOTM3MDkyMiwgLTYwNTM5OTgsIDczMzQwNzEsIC0xNTM0MjI1OSwgOTM4NTI4NywgMjI0NzcwNywgLTEzNjYxOTYyLCAtNDgzOTQ2MSwgMzAwMDczODgsIC0xNTgyMzM0MSksCiAgICAgICAgICAgICAgICBhcnJheSgtOTM2Mzc5LCAxNjA4NjY5MSwgMjM3NTE5NDUsIC01NDMzMTgsIC0xMTY3NTM4LCAtNTE4OTAzNiwgOTEzNzEwOSwgNzMwNjYzLCA5ODM1ODQ4LCA0NTU1MzM2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjMzNzY0MzUsIDE0MTA0NDYsIC0yMjI1Mzc1MywgLTEyODk5NjE0LCAzMDg2NzYzNSwgMTU4MjY5NzcsIDE3NjkzOTMwLCA1NDQ2OTYsIC0xMTk4NTI5OCwgMTI0MjI2NDYpLAogICAgICAgICAgICAgICAgYXJyYXkoMzExMTcyMjYsIC0xMjIxNTczNCwgLTEzNTAyODM4LCA2NTYxOTQ3LCAtOTg3Njg2NywgLTEyNzU3NjcwLCAtNTExODY4NSwgLTQwOTY3MDYsIDI5MTIwMTUzLCAxMzkyNDQyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTc0MDA4NzksIC0xNDIzMzIwOSwgMTk2NzU3OTksIC0yNzM0NzU2LCAtMTEwMDY5NjIsIC01ODU4ODIwLCAtOTM4MzkzOSwgLTExMzE3NzAwLCA3MjQwOTMxLCAtMjM3Mzg4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzEzNjE3MzksIC0xMTM0Njc4MCwgLTE1MDA3NDQ3LCAtNTg1NjIxOCwgLTIyNDUzMzQwLCAtMTIxNTI3NzEsIDEyMjIzMzYsIDQzODk0ODMsIDMyOTM2MzcsIC0xNTU1MTc0MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTY2ODQ4MDEsIC0xNDQ0NDI0NSwgMTEwMzg1NDQsIDExMDU0OTU4LCAtMTM4MDExNzUsIC0zMzM4NTMzLCAtMjQzMTk1ODAsIDc3MzM1NDcsIDEyNzk2OTA1LCAtNjMzNTgyMiksCiAgICAgICAgICAgICAgICBhcnJheSgtODc1OTQxNCwgLTEwODE3ODM2LCAtMjU0MTg4NjQsIDEwNzgzNzY5LCAtMzA2MTU1NTcsIC05NzQ2ODExLCAtMjgyNTMzMzksIDM2NDc4MzYsIDMyMjIyMzEsIC0xMTE2MDQ2MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTg2MDYxMTMsIDE2OTMxMDAsIC0yNTQ0ODM4NiwgLTE1MTcwMjcyLCA0MTEyMzUzLCAxMDA0NTAyMSwgMjM2MDM4OTMsIC0yMDQ4MjM0LCAtNzU1MDc3NiwgMjQ4NDk4NSksCiAgICAgICAgICAgICAgICBhcnJheSg5MjU1MzE3LCAtMzEzMTE5NywgLTEyMTU2MTYyLCAtMTAwNDI1NiwgMTMwOTgwMTMsIC05MjE0ODY2LCAxNjM3NzIyMCwgLTIxMDI4MTIsIC0xOTgwMjA3NSwgLTMwMzQ3MDIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNzI5Mjg5LCA3NDk2MTYwLCAtNTc0MjE5OSwgMTEzMjkyNDksIDE5OTkxOTczLCAtMzM0NzUwMiwgLTMxNzE4MTQ4LCA5OTM2OTY2LCAtMzAwOTc2ODgsIC0xMDYxODc5NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjE4Nzg1OTAsIC01MDAxMjk3LCA0MzM4MzM2LCAxMzY0Mzg5NywgLTMwMzY4NjUsIDEzMTYwOTYwLCAxOTcwODg5NiwgNTQxNTQ5NywgLTczNjA1MDMsIC00MTA5MjkzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI3NzM2ODYxLCAxMDEwMzU3NiwgMTI1MDA1MDgsIDg1MDI0MTMsIC0zNDEzMDE2LCAtOTYzMzU1OCwgMTA0MzY5MTgsIC0xNTUwMjc2LCAtMjM2NTkxNDMsIC04MTMyMTAwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE5NDkyNTUwLCAtMTIxMDQzNjUsIC0yOTY4MTk3NiwgLTg1MjYzMCwgLTMyMDgxNzEsIDEyNDAzNDM3LCAzMDA2NjI2NiwgODM2NzMyOSwgMTMyNDM5NTcsIDg3MDk2ODgpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTIwMTUxMDUsIDI4MDEyNjEsIDI4MTk4MTMxLCAxMDE1MTAyMSwgMjQ4MTgxMjAsIC00NzQzMTMzLCAtMTExOTQxOTEsIC01NjQ1NzM0LCA1MTUwOTY4LCA3Mjc0MTg2KSwKICAgICAgICAgICAgICAgIGFycmF5KDI4MzEzNjYsIC0xMjQ5MjE0NiwgMTQ3ODk3NSwgNjEyMjA1NCwgMjM4MjUxMjgsIC0xMjczMzU4NiwgMzEwOTcyOTksIDYwODMwNTgsIDMxMDIxNjAzLCAtOTc5MzYxMCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjUyOTkzMiwgLTIyMjk2NDYsIDQ0NTYxMywgMTA3MjA4MjgsIC0xMzg0OTUyNywgLTExNTA1OTM3LCAtMjM1MDc3MzEsIDE2MzU0NDY1LCAxNTA2NzI4NSwgLTE0MTQ3NzA3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg3ODQwOTQyLCAxNDAzNzg3MywgLTMzMzY0ODYzLCAxNTkzNDAxNiwgLTcyODIxMywgLTM2NDI3MDYsIDIxNDAzOTg4LCAxMDU3NTg2LCAtMTkzNzk0NjIsIC0xMjQwMzIyMCksCiAgICAgICAgICAgICAgICBhcnJheSg5MTU4NjUsIC0xNjQ2OTI3NCwgMTU2MDgyODUsIC04Nzg5MTMwLCAtMjQzNTcwMjYsIDYwNjAwMzAsIC0xNzM3MTMxOSwgODQxMDk5NywgLTcyMjA0NjEsIDE2NTI3MDI1KSwKICAgICAgICAgICAgICAgIGFycmF5KDMyOTIyNTk3LCAtNTU2OTg3LCAyMDMzNjA3NCwgLTE2MTg0NTY4LCAxMDkwMzcwNSwgLTUzODQ0ODcsIDE2OTU3NTc0LCA1Mjk5MiwgMjM4MzQzMDEsIDY1ODgwNDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMyNzUyMDMwLCAxMTIzMjk1MCwgMzM4MTk5NSwgLTg3MTQ4NjYsIDIyNjUyOTg4LCAtMTA3NDQxMDMsIDE3MTU5Njk5LCAxNjY4OTEwNywgLTIwMzE0NTgwLCAtMTMwNTk5MiksCiAgICAgICAgICAgICAgICBhcnJheSgtNDY4OTY0OSwgOTE2Njc3NiwgLTI1NzEwMjk2LCAtMTA4NDczMDYsIDExNTc2NzUyLCAxMjczMzk0MywgNzkyNDI1MSwgLTI3NTIyODEsIDE5NzYxMjMsIC03MjQ5MDI3KSwKICAgICAgICAgICAgICAgIGFycmF5KDIxMjUxMjIyLCAxNjMwOTkwMSwgLTI5ODMwMTUsIC02NzgzMTIyLCAzMDgxMDU5NywgMTI5NjczMDMsIDE1NjA0MSwgLTMzNzEyNTIsIDEyMzMxMzQ1LCAtODIzNzE5NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoODY1MTYxNCwgLTQ0NzcwMzIsIC0xNjA4NTYzNiwgLTQ5OTY5OTQsIDEzMDAyNTA3LCAyOTUwODA1LCAyOTA1NDQyNywgLTUxMDY5NzAsIDEwMDA4MTM2LCAtNDY2NzkwMSksCiAgICAgICAgICAgICAgICBhcnJheSgzMTQ4NjA4MCwgMTUxMTQ1OTMsIC0xNDI2MTI1MCwgMTI5NTEzNTQsIDE0MzY5NDMxLCAtNzM4Nzg0NSwgMTYzNDczMjEsIC0xMzY2MjA4OSwgODY4NDE1NSwgLTEwNTMyOTUyKSwKICAgICAgICAgICAgICAgIGFycmF5KDE5NDQzODI1LCAxMTM4NTMyMCwgMjQ0Njg5NDMsIC05NjU5MDY4LCAtMjM5MTkyNTgsIDIxODc1NjksIC0yNjI2MzIwNywgLTYwODY5MjEsIDMxMzE2MzQ4LCAxNDIxOTg3OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI4NTk0NDkwLCAxMTkzNzg1LCAzMjI0NTIxOSwgMTEzOTI0ODUsIDMxMDkyMTY5LCAxNTcyMjgwMSwgMjcxNDYwMTQsIDY5OTI0MDksIDI5MTI2NTU1LCA5MjA3MzkwKSwKICAgICAgICAgICAgICAgIGFycmF5KDMyMzgyOTM1LCAxMTEwMDkzLCAxODQ3Nzc4MSwgMTEwMjgyNjIsIC0yNzQxMTc2MywgLTc1NDgxMTEsIC00OTgwNTE3LCAxMDg0Mzc4MiwgLTc5NTc2MDAsIC0xNDQzNTczMCksCiAgICAgICAgICAgICAgICBhcnJheSgyODE0OTE4LCA3ODM2NDAzLCAyNzUxOTg3OCwgLTc4NjgxNTYsIC0yMDg5NDAxNSwgLTExNTUzNjg5LCAtMjE0OTQ1NTksIDg1NTAxMzAsIDI4MzQ2MjU4LCAxOTk0NzMwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTk1NzgyOTksIDgwODU1NDUsIC0xNDAwMDUxOSwgLTM5NDg2MjIsIDI3ODU4MzgsIC0xNjIzMTMwNywgLTE5NTE2OTUxLCA3MTc0ODk0LCAyMjYyODEwMiwgODExNTE4MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzA0MDUxMzIsIDk1NTUxMSwgLTExMTMzODM4LCAtMTUwNzgwNjksIC0zMjQ0NzA4NywgLTEzMjc4MDc5LCAtMjU2NTE1NzgsIDMzMTcxNjAsIC05OTQzMDE3LCA5MzAyNzIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MzAzNjgxLCAtNjgzMzc2OSwgMjg4NTY0OTAsIDEzNTc0NDYsIDIzNDIxOTkzLCAxMDU3MTc3LCAyNDA5MTIxMiwgLTEzODg5NzAsIC0yMjc2NTM3NiwgLTEwNjUwNzE1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjI3NTEyMzEsIC01MzAzOTk3LCAtMTI5MDc2MDcsIC0xMjc2ODg2NiwgLTE1ODExNTExLCAtNzc5NzA1MywgLTE0ODM5MDE4LCAtMTY1NTQyMjAsIC0xODY3MDE4LCA4Mzk4OTcwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTk2OTMxMCwgMjEwNjQwMywgLTQ3MzYzNjAsIDEzNjI1MDEsIDEyODEzNzYzLCAxNjIwMDY3MCwgMjI5ODE1NDUsIC02MjkxMjczLCAxODAwOTQwOCwgLTE1NzcyNzcyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzIyMDkyMywgLTk1NDUyMjEsIC0yNzc4NDY1NCwgMTQxNjY4MzUsIDI5ODE1Mzk0LCA3NDQ0NDY5LCAyOTU1MTc4NywgLTM3Mjc0MTksIDE5Mjg4NTQ5LCAxMzI1ODY1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTEwMDE1NywgLTE1ODM1NzUyLCAtMjM5MjM5NzgsIC0xMDA1MDk4LCAtMjY0NTAxOTIsIDE1NTA5NDA4LCAxMjM3NjczMCwgLTM0NzkxNDYsIDMzMTY2MTA3LCAtODA0Mjc1MCksCiAgICAgICAgICAgICAgICBhcnJheSgyMDkwOTIzMSwgMTMwMjMxMjEsIC05MjA5NzUyLCAxNjI1MTc3OCwgLTU3Nzg0MTUsIC04MDk0OTE0LCAxMjQxMjE1MSwgMTAwMTg3MTUsIDIyMTMyNjMsIC0xMzg3ODM3MyksCiAgICAgICAgICAgICAgICBhcnJheSgzMjUyOTgxNCwgLTExMDc0Njg5LCAzMDM2MTQzOSwgLTE2Njg5NzUzLCAtOTEzNTk0MCwgMTUxMzIyNiwgMjI5MjIxMjEsIDYzODIxMzQsIC01NzY2OTI4LCA4MzcxMzQ4KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDk5MjM0NjIsIDExMjcxNTAwLCAxMjYxNjc5NCwgMzU0NDcyMiwgLTI5OTk4MzY4LCAtMTcyMTYyNiwgMTI4OTE2ODcsIC04MTkzMTMyLCAtMjY0NDI5NDMsIDEwNDg2MTQ0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjU5NzIwNywgLTcwMTI2NjUsIDg1ODcwMDMsIC04MjU3ODYxLCA0MDg0MzA5LCAtMTI5NzAwNjIsIDM2MTcyNiwgMjYxMDU5NiwgLTIzOTIxNTMwLCAtMTE0NTUxOTUpLAogICAgICAgICAgICAgICAgYXJyYXkoNTQwODQxMSwgLTExMzY2OTEsIC00OTY5MTIyLCAxMDU2MTY2OCwgMjQxNDU5MTgsIDE0MjQwNTY2LCAzMTMxOTczMSwgLTQyMzU1NDEsIDE5OTg1MTc1LCAtMzQzNjA4NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTEzOTk0NDU3LCAxNjYxNjgyMSwgMTQ1NDkyNDYsIDMzNDEwOTksIDMyMTU1OTU4LCAxMzY0ODk3NiwgLTE3NTc3MDY4LCA4ODQ5Mjk3LCA2NTAzMCwgODM3MDY4NCksCiAgICAgICAgICAgICAgICBhcnJheSgtODMyMDkyNiwgLTEyMDQ5NjI2LCAzMTIwNDU2MywgNTgzOTQwMCwgLTIwNjI3Mjg4LCAtMTA1NzI3NywgLTE5NDQyOTQyLCA2OTIyMTY0LCAxMjc0MzQ4MiwgLTk4MDA1MTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNjEzNzEsIDEyNjc4Nzg1LCAyODgxNTA1MCwgNDc1OTk3NCwgLTIzODkzMDQ3LCA0ODg0NzE3LCAyMzc4MzE0NSwgMTEwMzg1NjksIDE4ODAwNzA0LCAyNTUyMzMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC01MjY5NjU4LCAtMTc3Mzg4NiwgMTM5NTc4ODYsIDc5OTA3MTUsIDIzMTMyOTk1LCA3Mjg3NzMsIDEzMzkzODQ3LCA5MDY2OTU3LCAxOTI1ODY4OCwgLTE0NzUzNzkzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yOTM2NjU0LCAtMTA4Mjc1MzUsIC0xMDQzMjA4OSwgMTQ1MTY3OTMsIC0zNjQwNzg2LCA0MzcyNTQxLCAtMzE5MzQ5MjEsIDIyMDkzOTAsIC0xNTI0MDUzLCAyMDU1Nzk0KSwKICAgICAgICAgICAgICAgIGFycmF5KDU4MDg4MiwgMTY3MDUzMjcsIDU0Njg0MTUsIC0yNjgzMDE4LCAtMzA5MjY0MTksIC0xNDY5NjAwMCwgLTcyMDMzNDYsIC04OTk0Mzg5LCAtMzAwMjEwMTksIDczOTQ0MzUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIzODM4ODA5LCAxODIyNzI4LCAtMTU3Mzg0NDMsIDE1MjQyNzI3LCA4MzE4MDkyLCAtMzczMzEwNCwgLTIxNjcyMTgwLCAtMzQ5MjIwNSwgLTQ4MjE3NDEsIDE0Nzk5OTIxKSwKICAgICAgICAgICAgICAgIGFycmF5KDEzMzQ1NjEwLCA5NzU5MTUxLCAzMzcxMDM0LCAtMTYxMzc3OTEsIDE2MzUzMDM5LCA4NTc3OTQyLCAzMTEyOTgwNCwgMTM0OTY4NTYsIC05MDU2MDE4LCA3NDAyNTE4KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyODY4NzQsIC00NDM1OTMxLCAtMjAwNDI0NTgsIC0yMDA4MzM2LCAtMTM2OTYyMjcsIDUwMzgxMjIsIDExMDA2OTA2LCAtMTU3NjAzNTIsIDgyMDUwNjEsIDE2MDc1NjMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE0NDE0MDg2LCAtODAwMjEzMiwgMzMzMTgzMCwgLTMyMDgyMTcsIDIyMjQ5MTUxLCAtNTU5NDE4OCwgMTgzNjQ2NjEsIC0yOTA2OTU4LCAzMDAxOTU4NywgLTkwMjkyNzgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI3Njg4MDUxLCAxNTg1OTUzLCAtMTA3NzUwNTMsIDkzMTA2OSwgLTI5MTIwMjIxLCAtMTEwMDIzMTksIC0xNDQxMDgyOSwgMTIwMjkwOTMsIDk5NDQzNzgsIDgwMjQpLAogICAgICAgICAgICAgICAgYXJyYXkoNDM2ODcxNSwgLTM3MDk2MzAsIDI5ODc0MjAwLCAtMTUwMjI5ODMsIC0yMDIzMDM4NiwgLTExNDEwNzA0LCAtMTYxMTQ1OTQsIC05OTkwODUsIC04MTQyMzg4LCA1NjQwMDMwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMDI5OTYxMCwgMTM3NDY0ODMsIDExNjYxODI0LCAxNjIzNDg1NCwgNzYzMDIzOCwgNTk5ODM3NCwgOTgwOTg4NywgLTE2Njk0NTY0LCAxNTIxOTc5OCwgLTE0MzI3NzgzKSwKICAgICAgICAgICAgICAgIGFycmF5KDI3NDI1NTA1LCAtNTcxOTA4MSwgMzA1NTAwNiwgMTA2NjA2NjQsIDIzNDU4MDI0LCA1OTU1NzgsIC0xNTM5ODYwNSwgLTExNzMxOTUsIC0xODM0MjE4MywgOTc0MjcxNyksCiAgICAgICAgICAgICAgICBhcnJheSg2NzQ0MDc3LCAyNDI3Mjg0LCAyNjA0Mjc4OSwgMjcyMDc0MCwgLTg0NzkwNiwgMTExODk3NCwgMzIzMjQ2MTQsIDc0MDY0NDIsIDEyNDIwMTU1LCAxOTk0ODQ0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNDAxMjUyMSwgLTUwMjQ3MjAsIC0xODM4NDQ1MywgLTk1Nzg0NjksIC0yNjQ4NTM0MiwgLTM5MzY0MzksIC0xMzAzMzQ3OCwgLTEwOTA5ODAzLCAyNDMxOTkyOSwgLTY0NDYzMzMpLAogICAgICAgICAgICAgICAgYXJyYXkoMTY0MTI2OTAsIC00NTA3MzY3LCAxMDc3MjY0MSwgMTU5MjkzOTEsIC0xNzA2ODc4OCwgLTQ2NTg2MjEsIDEwNTU1OTQ1LCAtMTA0ODQwNDksIC0zMDEwMjM2OCwgLTQ3MzkwNDgpLAogICAgICAgICAgICAgICAgYXJyYXkoMjIzOTczODIsIC03NzY3Njg0LCAtOTI5MzE2MSwgLTEyNzkyODY4LCAxNzE2NjI4NywgLTk3NTUxMzYsIC0yNzMzMzA2NSwgNjE5OTM2NiwgMjE4ODAwMjEsIC0xMjI1MDc2MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQyODMzMDcsIDUzNjg1MjMsIC0zMTExNzAxOCwgODE2MzM4OSwgLTMwMzIzMDYzLCAzMjA5MTI4LCAxNjU1NzE1MSwgODg5MDcyOSwgODg0MDQ0NSwgNDk1Nzc2MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU0NDc3MjcsIDcwOTMyNywgLTY5MTk0NDYsIC0xMDg3MDE3OCwgLTI5Nzc3OTIyLCA2NTIyMzMyLCAtMjE3MjAxODEsIDEyMTMwMDcyLCAtMTQ3OTY1MDMsIDUwMDU3NTcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxMTQ3NTEsIC0xNDMwODEyOCwgMjMwMTkwNDIsIDE1NzY1NzM1LCAtMjUyNjk2ODMsIDYwMDI3NTIsIDEwMTgzMTk3LCAtMTMyMzkzMjYsIC0xNjM5NTI4NiwgLTIxNzYxMTIpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE5MDI1NzU2LCAxNjMyMDA1LCAxMzQ2NjI5MSwgLTc5OTUxMDAsIC0yMzY0MDQ1MSwgMTY1NzM1MzcsIC0zMjAxMzkwOCwgLTMwNTcxMDQsIDIyMjA4NjYyLCAyMDAwNDY4KSwKICAgICAgICAgICAgICAgIGFycmF5KDMwNjUwNzMsIC0xNDEyNzYxLCAtMjU1OTg2NzQsIC0zNjE0MzIsIC0xNzY4MzA2NSwgLTU3MDM0MTUsIC04MTY0MjEyLCAxMTI0ODUyNywgLTM2OTEyMTQsIC03NDE0MTg0KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwMzc5MjA4LCAtNjA0NTU1NCwgODg3NzMxOSwgMTQ3MzY0NywgLTI5MjkxMjg0LCAtMTI1MDc1ODAsIDE2NjkwOTE1LCAyNTUzMzMyLCAtMzEzMjY4OCwgMTY0MDAyODkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE1NzE2NjY4LCAxMjU0MjY2LCAtMTg0NzI2OTAsIDc0NDYyNzQsIC04NDQ4OTE4LCA2MzQ0MTY0LCAtMjIwOTcyNzEsIC03Mjg1NTgwLCAyNjg5NDkzNywgOTEzMjA2NiksCiAgICAgICAgICAgICAgICBhcnJheSgyNDE1ODg4NywgMTI5Mzg4MTcsIDExMDg1Mjk3LCAtODE3NzU5OCwgLTI4MDYzNDc4LCAtNDQ1NzA4MywgLTMwNTc2NDYzLCA2NDQ1MiwgLTY4MTcwODQsIC0yNjkyODgyKSwKICAgICAgICAgICAgICAgIGFycmF5KDEzNDg4NTM0LCA3Nzk0NzE2LCAyMjIzNjIzMSwgNTk4OTM1NiwgMjU0MjY0NzQsIC0xMjU3ODIwOCwgMjM1MDcxMCwgLTM0MTg1MTEsIC00Njg4MDA2LCAyMzY0MjI2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNjMzNTA1MiwgOTEzMjQzNCwgMjU2NDA1ODIsIDY2Nzg4ODgsIDE3MjU2MjgsIDg1MTc5MzcsIC0xMTgwNzAyNCwgLTExNjk3NDU3LCAxNTQ0NTg3NSwgLTc3OTgxMDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkwMDQyMDcsIC03ODY3MDgxLCAyODY2MTQwMiwgLTY0MDQxMiwgLTEyNzk0MDAzLCAtNzk0MzA4NiwgMzE4NjMyNTUsIC00MTM1NTQwLCAtMjc4MDUwLCAtMTU3NTkyNzkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTYxMjIwNjEsIC0xNDg2NjY2NSwgLTI4NjE0OTA1LCAxNDU2OTkxOSwgLTEwODU3OTk5LCAtMzU5MTgyOSwgMTAzNDM0MTIsIC02OTc2MjkwLCAtMjk4MjgyODcsIC0xMDgxNTgxMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjcwODE2NTAsIDM0NjM5ODQsIDE0MDk5MDQyLCAtNDUxNzYwNCwgMTYxNjMwMywgLTYyMDU2MDQsIDI5NTQyNjM2LCAxNTM3MjE3OSwgMTcyOTM3OTcsIDk2MDcwOSksCiAgICAgICAgICAgICAgICBhcnJheSgyMDI2MzkxNSwgMTE0MzQyMzcsIC01NzY1NDM1LCAxMTIzNjgxMCwgMTM1MDU5NTUsIC0xMDg1NzEwMiwgLTE2MTExMzQ1LCA2NDkzMTIyLCAtMTkzODQ1MTEsIDc2Mzk3MTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4MzA3OTgsIC0xNDgzOTIzMiwgMjU0MDMwMzgsIC04MjE1MTk2LCAtODMxNzAxMiwgLTE2MTczNjk5LCAxODAwNjI4NywgLTE2MDQzNzUwLCAyOTk5NDY3NywgLTE1ODA4MTIxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg5NzY5ODI4LCA1MjAyNjUxLCAtMjQxNTczOTgsIC0xMzYzMTM5MiwgLTI4MDUxMDAzLCAtMTE1NjE2MjQsIC0yNDYxMzE0MSwgLTEzODYwNzgyLCAtMzExODQ1NzUsIDcwOTQ2NCksCiAgICAgICAgICAgICAgICBhcnJheSgxMjI4NjM5NSwgMTMwNzYwNjYsIC0yMTc3NTE4OSwgLTExNzY2MjIsIC0yNTAwMzE5OCwgNDA1NzY1MiwgLTMyMDE4MTI4LCAtODg5MDg3NCwgMTYxMDIwMDcsIDEzMjA1ODQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KDEzNzMzMzYyLCA1NTk5OTQ2LCAxMDU1NzA3NiwgMzE5NTc1MSwgLTU1NTc5OTEsIDg1MzY5NzAsIC0yNTU0MDE3MCwgODUyNTk3MiwgMTAxNTEzNzksIDEwMzk0NDAwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg0MDI0NjYwLCAtMTYxMzc1NTEsIDIyNDM2MjYyLCAxMjI3NjUzNCwgLTkwOTkwMTUsIC0yNjg2MDk5LCAxOTY5ODIyOSwgMTE3NDMwMzksIC0zMzMwMjMzNCwgODkzNDQxNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTU4Nzk4MDAsIC00NTI1MjQwLCAtODU4MDc0NywgLTI5MzQwNjEsIDE0NjM0ODQ1LCAtNjk4Mjc4LCAtOTQ0OTA3NywgMzEzNzA5NCwgLTExNTM2ODg2LCAxMTcyMTE1OCksCiAgICAgICAgICAgICAgICBhcnJheSgxNzU1NTkzOSwgLTUwMTM5MzgsIDgyNjg2MDYsIDIzMzE3NTEsIC0yMjczODgxNSwgOTc2MTAxMywgOTMxOTIyOSwgODgzNTE1MywgLTkyMDU0ODksIC0xMjgwMDQ1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNDYxNDA5LCAtNzgzMDAxNCwgMjA2MTQxMTgsIDE2Njg4Mjg4LCAtNzUxNDc2NiwgLTQ4MDcxMTksIDIyMzAwMzA0LCA1MDU0MjksIDYxMDg0NjIsIC02MTgzNDE1KSwKICAgICAgICAgICAgICAgIGFycmF5KC01MDcwMjgxLCAxMjM2NzkxNywgLTMwNjYzNTM0LCAzMjM0NDczLCAzMjYxNzA4MCwgLTg0MjI2NDIsIDI5ODgwNTgzLCAtMTM0ODMzMzEsIC0yNjg5ODQ5MCwgLTc4Njc0NTkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxOTc1MjgzLCA1NzI2NTM5LCAyNjkzNDEzNCwgMTAyMzc2NzcsIC0zMTczNzE3LCAtNjA1MDUzLCAyNDE5OTMwNCwgMzc5NTA5NSwgNzU5MjY4OCwgLTE0OTkyMDc5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMTU5NDQzMiwgLTE0OTY0MjI4LCAxNzQ2NjQwOCwgLTQwNzcyMjIsIDMyNTM3MDg0LCAyNzM5ODk4LCA2NDA3NzIzLCAxMjAxODgzMywgLTI4MjU2MDUyLCA0Mjk4NDEyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMDY1MDUwMywgLTExOTYxNDk2LCAtMjcyMzYyNzUsIDU3MDQ5OCwgMzc2NzE0NCwgLTE3MTc1NDAsIDEzODkxOTQyLCAtMTU2OTE5NCwgMTM3MTcxNzQsIDEwODA1NzQzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNDY3NjYzMCwgLTE1NjQ0Mjk2LCAxNTI4NzE3NCwgMTE5MjcxMjMsIDI0MTc3ODQ3LCAtODE3NTU2OCwgLTc5NjQzMSwgMTQ4NjA2MDksIC0yNjkzODkzMCwgLTU4NjM4MzYpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTI5NjI1NDEsIDUzMTE3OTksIC0xMDA2MDc2OCwgMTE2NTgyODAsIDE4ODU1Mjg2LCAtNzk1NDIwMSwgMTMyODYyNjMsIC0xMjgwODcwNCwgLTQzODEwNTYsIDk4ODIwMjIpLAogICAgICAgICAgICAgICAgYXJyYXkoMTg1MTIwNzksIDExMzE5MzUwLCAtMjAxMjMxMjQsIDE1MDkwMzA5LCAxODgxODU5NCwgNTI3MTczNiwgLTIyNzI3OTA0LCAzNjY2ODc5LCAtMjM5Njc0MzAsIC0zMjk5NDI5KSwKICAgICAgICAgICAgICAgIGFycmF5KC02Nzg5MDIwLCAtMzE0NjA0MywgMTYxOTI0MjksIDEzMjQxMDcwLCAxNTg5ODYwNywgLTE0MjA2MTE0LCAtMTAwODQ4ODAsIC02NjYxMTEwLCAtMjQwMzA5OSwgNTI3NjA2NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzAxNjk4MDgsIC01MzE3NjQ4LCAyNjMwNjIwNiwgLTExNzUwODU5LCAyNzgxNDk2NCwgNzA2OTI2NywgNzE1Mjg1MSwgMzY4NDk4MiwgMTQ0OTIyNCwgMTMwODI4NjEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTAzNDI4MjYsIDMwOTg1MDUsIDIxMTkzMTEsIDE5MzIyMiwgMjU3MDI2MTIsIDEyMjMzODIwLCAyMzY5NzM4MiwgMTUwNTY3MzYsIC0yMTAxNjQzOCwgLTgyMDIwMDApLAogICAgICAgICAgICAgICAgYXJyYXkoLTMzMTUwMTEwLCAzMjYxNjA4LCAyMjc0NTg1MywgNzk0ODY4OCwgMTkzNzA1NTcsIC0xNTE3NzY2NSwgLTI2MTcxOTc2LCA2NDgyODE0LCAtMTAzMDAwODAsIC0xMTA2MDEwMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzI4Njk0NTgsIC01NDA4NTQ1LCAyNTYwOTc0MywgMTU2Nzg2NzAsIC0xMDY4Nzc2OSwgLTE1NDcxMDcxLCAyNjExMjQyMSwgMjUyMTAwOCwgLTIyNjY0Mjg4LCA2OTA0ODE1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI5NTA2OTIzLCA0NDU3NDk3LCAzMzc3OTM1LCAtOTc5NjQ0NCwgLTMwNTEwMDQ2LCAxMjkzNTA4MCwgMTU2MTczNywgMzg0MTA5NiwgLTI5MDAzNjM5LCAtNjY1NzY0MiksCiAgICAgICAgICAgICAgICBhcnJheSgxMDM0MDg0NCwgLTY2MzAzNzcsIC0xODY1NjYzMiwgLTIyNzg0MzAsIDEyNjIxMTUxLCAtMTMzMzkwNTUsIDMwODc4NDk3LCAtMTE4MjQzNzAsIC0yNTU4NDU1MSwgNTE4MTk2NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjU5NDAxMTUsIC0xMjY1ODAyNSwgMTczMjQxODgsIC0xMDMwNzM3NCwgLTg2NzE0NjgsIDE1MDI5MDk0LCAyNDM5NjI1MiwgLTE2NDUwOTIyLCAtMjMyMjg1MiwgLTEyMzg4NTc0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTc2NTY4NCwgOTkxNjgyMywgLTEzMDA0MDksIDQwNzk0OTgsIC0xMDI4MzQ2LCAxMTkwOTU1OSwgMTc4MjM5MCwgMTI2NDEwODcsIDIwNjAzNzcxLCAtNjU2MTc0MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTg4ODIyODcsIC0xMTY3MzM4MCwgMjQ4NDk0MjIsIDExNTAxNzA5LCAxMzE2MTcyMCwgLTQ3Njg4NzQsIDE5MjU1MjMsIDExOTE0MzkwLCA0NjYyNzgxLCA3ODIwNjg5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMjI0MTA1MCwgLTQyNTk4MiwgODEzMjY5MSwgOTM5MzkzNCwgMzI4NDY3NjAsIC0xNTk5NjIwLCAyOTc0OTQ1NiwgMTIxNzI5MjQsIDE2MTM2NzUyLCAxNTI2NDAyMCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTAzNDk5NTUsIC0xNDY4MDU2MywgLTgyMTE5NzksIDIzMzAyMjAsIC0xNzY2MjU0OSwgLTE0NTQ1NzgwLCAxMDY1ODIxMywgNjY3MTgyMiwgMTkwMTIwODcsIDM3NzI3NzIpLAogICAgICAgICAgICAgICAgYXJyYXkoMzc1MzUxMSwgLTM0MjEwNjYsIDEwNjE3MDc0LCAyMDI4NzA5LCAxNDg0MTAzMCwgLTY3MjE2NjQsIDI4NzE4NzMyLCAtMTU3NjI4ODQsIDIwNTI3NzcxLCAxMjk4ODk4MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE0ODIyNDg1LCAtNTc5NzI2OSwgLTM3MDc5ODcsIDEyNjg5NzczLCAtODk4OTgzLCAtMTA5MTQ4NjYsIC0yNDE4MzA0NiwgLTEwNTY0OTQzLCAzMjk5NjY1LCAtMTI0MjQ5NTMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2Nzc3NzAzLCAtMTUyNTMzMDEsIC05NjQyNDE3LCA0OTc4OTgzLCAzMzA4Nzg1LCA4NzU1NDM5LCA2OTQzMTk3LCA2NDYxMzMxLCAtMjU1ODMxNDcsIDg5OTEyMTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MjI2MjYzLCAxODE2MzYyLCAtMTY3MzI4OCwgLTYwODY0MzksIDMxNzgzODg4LCAtODE3NTk5MSwgLTMyOTQ4MTQ1LCA3NDE3OTUwLCAtMzAyNDIyODcsIDE1MDcyNjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI5NjkyNjYzLCA2ODI5ODkxLCAtMTA0OTg4MDAsIDQzMzQ4OTYsIDIwOTQ1OTc1LCAtMTE5MDY0OTYsIC0yODg4NzYwOCwgODIwOTM5MSwgMTQ2MDYzNjIsIC0xMDY0NzA3MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMzQ4MTU3MCwgODcwNzA4MSwgMzIxODgxMDIsIDU2NzIyOTQsIDIyMDk2NzAwLCAxNzExMjQwLCAtMzMwMjA2OTUsIDk3NjE0ODcsIDQxNzA0MDQsIC0yMDg1MzI1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTU4NzQ3MCwgMTQ4NTU5NDUsIC00MTI3Nzc4LCAtMTUzMTg1NywgLTI2NjQ5MDg5LCAxNTA4NDA0NiwgMjIxODY1MjIsIDE2MDAyMDAwLCAtMTQyNzY4MzcsIC04NDAwNzk4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNDgxMTQ1NiwgMTM3NjEwMjksIC0zMTcwMzg3NywgLTI0ODM5MTksIC0zMzEyNDcxLCA3ODY5MDQ3LCAtNzExMzU3MiwgLTk2MjAwOTIsIDEzMjQwODQ1LCAxMDk2NTg3MCksCiAgICAgICAgICAgICAgICBhcnJheSgtNzc0MjU2MywgLTgyNTY3NjIsIC0xNDc2ODMzNCwgLTEzNjU2MjYwLCAtMjMyMzIzODMsIDEyMzg3MTY2LCA0NDk4OTQ3LCAxNDE0NzQxMSwgMjk1MTQzOTAsIDQzMDI4NjMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEzNDEzNDA1LCAtMTI0MDc4NTksIDIwNzU3MzAyLCAtMTM4MDE4MzIsIDE0Nzg1MTQzLCA4OTc2MzY4LCAtNTA2MTI3NiwgLTIxNDQzNzMsIDE3ODQ2OTg4LCAtMTM5NzE5MjcpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNDQ0NTIsIC03NTQ3MjgsIC00NTk3MDMwLCAtMTA2NjMwOSwgLTYyNDcxNzIsIDE0NTUyOTksIC0yMTY0NzcyOCwgLTkyMTQ3ODksIC01MjIyNzAxLCAxMjY1MDI2NyksCiAgICAgICAgICAgICAgICBhcnJheSgtOTkwNjc5NywgLTE2MDcwMzEwLCAyMTEzNDE2MCwgMTIxOTgxNjYsIC0yNzA2NDU3NSwgNzA4MTI2LCAzODc4MTMsIDEzNzcwMjkzLCAtMTkxMzQzMjYsIDEwOTU4NjYzKSwKICAgICAgICAgICAgICAgIGFycmF5KDIyNDcwOTg0LCAxMjM2OTUyNiwgMjM0NDYwMTQsIC01NDQxMTA5LCAtMjE1MjA4MDIsIC05Njk4NzIzLCAtMTE3NzI0OTYsIC0xMTU3NDQ1NSwgLTI1MDgzODMwLCA0MjcxODYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjUxNjk1NjUsIC0xMDA1MzY0MiwgLTE5OTA5MzMyLCAxNTM2MTU5NSwgLTU5ODQzNTgsIDIxNTkxOTIsIDc1Mzc1LCAtNDI3ODUyOSwgLTMyNTI2MjIxLCA4NDY5NjczKSwKICAgICAgICAgICAgICAgIGFycmF5KDE1ODU0OTcwLCA0MTQ4MzE0LCAtODg5Mzg5MCwgNzI1OTAwMiwgMTE2NjY1NTEsIDEzODI0NzM0LCAtMzA1MzExOTgsIDI2OTczNzIsIDI0MTU0NzkxLCAtOTQ2MDk0MyksCiAgICAgICAgICAgICAgICBhcnJheSgxNTQ0NjEzNywgLTE1ODA2NjQ0LCAyOTc1OTc0NywgMTQwMTkzNjksIDMwODExMjIxLCAtOTYxMDE5MSwgLTMxNTgyMDA4LCAxMjg0MDEwNCwgMjQ5MTM4MDksIDk4MTUwMjApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC00NzA5Mjg2LCAtNTYxNDI2OSwgLTMxODQxNDk4LCAtMTIyODg4OTMsIC0xNDQ0MzUzNywgMTA3OTk0MTQsIC05MTAzNjc2LCAxMzQzODc2OSwgMTg3MzUxMjgsIDk0NjYyMzgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTE5MzMwNDUsIDkyODE0ODMsIDUwODEwNTUsIC01MTgzODI0LCAtMjYyODE2MiwgLTQ5MDU2MjksIC03NzI3ODIxLCAtMTA4OTYxMDMsIC0yMjcyODY1NSwgMTYxOTkwNjQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTQ1NzY4MTAsIDM3OTQ3MiwgLTI2Nzg2NTMzLCAtODMxNzIzNiwgLTI5NDI2NTA4LCAtMTA4MTI5NzQsIC0xMDI3NjYsIDE4NzY2OTksIDMwODAxMTE5LCAyMTY0Nzk1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTk5NTA4NiwgMzE5OTg3MywgMTM2NzI1NTUsIDEzNzEyMjQwLCAtMTkzNzg4MzUsIC00NjQ3NjQ2LCAtMTMwODE2MTAsIC0xNTQ5NjI2OSwgLTEzNDkyODA3LCAxMjY4MDUyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDI5MDYxNCwgLTM2NTkwMzksIC0zMjg2NTkyLCAxMDk0ODgxOCwgMjMwMzcwMjcsIDM3OTQ0NzUsIC0zNDcwMzM4LCAtMTI2MDAyMjEsIC0xNzA1NTM2OSwgMzU2NTkwNCksCiAgICAgICAgICAgICAgICBhcnJheSgyOTIxMDA4OCwgLTk0MTkzMzcsIC01OTE5NzkyLCAtNDk1Mjc4NSwgMTA4MzQ4MTEsIC0xMzMyNzcyNiwgLTE2NTEyMTAyLCAtMTA4MjA3MTMsIC0yNzE2MjIyMiwgLTE0MDMwNTMxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTMxNjE4OTAsIDE1NTA4NTg4LCAxNjY2MzcwNCwgLTgxNTYxNTAsIC0yODM0OTk0MiwgOTAxOTEyMywgLTI5MTgzNDIxLCAtMzc2OTQyMywgMjI0NDExMSwgLTE0MDAxOTc5KSwKICAgICAgICAgICAgICAgIGFycmF5KC01MTUyODc1LCAtMzgwMDkzNiwgLTkzMDY0NzUsIC02MDcxNTgzLCAxNjI0MzA2OSwgMTQ2ODQ0MzQsIC0yNTY3MzA4OCwgLTE2MTgwODAwLCAxMzQ5MTUwNiwgNDY0MTg0MSksCiAgICAgICAgICAgICAgICBhcnJheSgxMDgxMzQxNywgNjQzMzMwLCAtMTkxODg1MTUsIC03Mjg5MTYsIDMwMjkyMDYyLCAtMTY2MDAwNzgsIDI3NTQ4NDQ3LCAtNzcyMTI0MiwgMTQ0NzY5ODksIC0xMjc2NzQzMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTAyOTIwNzksIDk5ODQ5NDUsIDY0ODE0MzYsIDgyNzk5MDUsIC03MjUxNTE0LCA3MDMyNzQzLCAyNzI4MjkzNywgLTE2NDQyNTksIC0yNzkxMjgxMCwgMTI2NTEzMjQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxMTg1NTEzLCAtODEzMzgzLCAyMjI3MTIwNCwgMTE4MzUzMDgsIDEwMjAxNTQ1LCAxNTM1MTAyOCwgMTcwOTk2NjIsIDM5ODgwMzUsIDIxNzIxNTM2LCAtMzE0ODk0MCksCiAgICAgICAgICAgICAgICBhcnJheSgxMDIwMjE3NywgLTY1NDU4MzksIC0zMTM3MzIzMiwgLTk1NzQ2MzgsIC0zMjE1MDY0MiwgLTgxMTk2ODMsIC0xMjkwNjMyMCwgMzg1MjY5NCwgMTMyMTYyMDYsIDE0ODQyMzIwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTU4MTU2NDAsIC0xMDYwMTA2NiwgLTY1Mzg5NTIsIC03MjU4OTk1LCAtNjk4NDY1OSwgLTY1ODE3NzgsIC0zMTUwMDg0NywgMTM3NjU4MjQsIC0yNzQzNDM5NywgOTkwMDE4NCksCiAgICAgICAgICAgICAgICBhcnJheSgxNDQ2NTUwNSwgLTEzODMzMzMxLCAtMzIxMzM5ODQsIC0xNDczODg3MywgLTI3NDQzMTg3LCAxMjk5MDQ5MiwgMzMwNDYxOTMsIDE1Nzk2NDA2LCAtNzA1MTg2NiwgLTgwNDAxMTQpLAogICAgICAgICAgICAgICAgYXJyYXkoMzA5MjQ0MTcsIC04Mjc5NjIwLCA2MzU5MDE2LCAtMTI4MTYzMzUsIDE2NTA4Mzc3LCA5MDcxNzM1LCAtMjU0ODg2MDEsIDE1NDEzNjM1LCA5NTI0MzU2LCAtNzAxODg3OCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTIyNzQyMDEsIC0xMzE3NTU0NywgMzI2Mjc2NDEsIC0xNzg1MzI2LCA2NzM2NjI1LCAxMzI2NzMwNSwgNTIzNzY1OSwgLTUxMDk0ODMsIDE1NjYzNTE2LCA0MDM1Nzg0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yOTUxMzA5LCA4OTAzOTg1LCAxNzM0OTk0NiwgNjAxNjM1LCAtMTY0MzI4MTUsIC00NjEyNTU2LCAtMTM3MzI3MzksIC0xNTg4OTMzNCwgLTIyMjU4NDc4LCA0NjU5MDkxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNjkxNjI2MywgLTQ5NTI5NzMsIC0zMDM5MzcxMSwgLTE1MTU4ODIxLCAyMDc3NDgxMiwgMTU4OTc0OTgsIDU3MzYxODksIDE1MDI2OTk3LCAtMjE3ODI1NiwgLTEzNDU1NTg1KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC04ODU4OTgwLCAtMjIxOTA1NiwgMjg1NzE2NjYsIC0xMDE1NTUxOCwgLTQ3NDQ2NywgLTEwMTA1Njk4LCAtMzgwMTQ5NiwgMjc4MDk1LCAyMzQ0MDU2MiwgLTI5MDIwOCksCiAgICAgICAgICAgICAgICBhcnJheSgxMDIyNjI0MSwgLTU5Mjg3MDIsIDE1MTM5OTU2LCAxMjA4MTgsIC0xNDg2NzY5MywgNTIxODYwMywgMzI5MzcyNzUsIDExNTUxNDgzLCAtMTY1NzE5NjAsIC03NDQyODY0KSwKICAgICAgICAgICAgICAgIGFycmF5KDE3OTMyNzM5LCAtMTI0MzcyNzYsIC0yNDAzOTU1NywgMTA3NDkwNjAsIDExMzE2ODAzLCA3NTM1ODk3LCAyMjUwMzc2NywgNTU2MTU5NCwgLTM2NDY2MjQsIDM4OTg2NjEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDc3NDk5MDcsIC05Njk1NjcsIC0xNjMzOTczMSwgLTE2NDY0LCAtMjUwMTgxMTEsIDE1MTIyMTQzLCAtMTU3MzUzMSwgNzE1MjUzMCwgMjE4MzExNjIsIDEyNDUyMzMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjY5NTg0NTksIC0xNDY1ODAyNiwgNDMxNDU4NiwgODM0Njk5MSwgLTU2Nzc3NjQsIDExOTYwMDcyLCAtMzI1ODkyOTUsIC02MjAwMzUsIC0zMDQwMjA5MSwgLTE2NzE2MjEyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMjE2NTg5NiwgOTE2Njk0NywgMzM0OTEzODQsIDEzNjczNDc5LCAyOTc4NzA4NSwgMTMwOTY1MzUsIDYyODA4MzQsIDE0NTg3MzU3LCAtMjIzMzgwMjUsIDEzOTg3NTI1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQzNDk5MDksIDc3Nzg3NzUsIDIxMTE2MDAwLCAxNTU3MjU5NywgLTQ4MzMyNjYsIC01MzU3Nzc4LCAtNDMwMDg5OCwgLTUxMjQ2MzksIC03NDY5NzgxLCAtMjg1ODA2OCksCiAgICAgICAgICAgICAgICBhcnJheSg5NjgxOTA4LCAtNjczNzEyMywgLTMxOTUxNjQ0LCAxMzU5MTgzOCwgLTY4ODM4MjEsIDM4Njk1MCwgMzE2MjI3ODEsIDY0MzkyNDUsIC0xNDU4MTAxMiwgNDA5MTM5NyksCiAgICAgICAgICAgICAgICBhcnJheSgtODQyNjQyNywgMTQ3MDcyNywgLTI4MTA5Njc5LCAtMTU5Njk5MCwgMzk3ODYyNywgLTUxMjM2MjMsIC0xOTYyMjY4MywgMTIwOTIxNjMsIDI5MDc3ODc3LCAtMTQ3NDE5ODgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDUyNjkxNjgsIC02ODU5NzI2LCAtMTMyMzAyMTEsIC04MDIwNzE1LCAyNTkzMjU2MywgMTc2MzU1MiwgLTU2MDYxMTAsIC01NTA1ODgxLCAtMjAwMTc4NDcsIDIzNTc4ODkpLAogICAgICAgICAgICAgICAgYXJyYXkoMzIyNjQwMDgsIC0xNTQwNzY1MiwgLTUzODc3MzUsIC0xMTYwMDkzLCAtMjA5MTMyMiwgLTM5NDY5MDAsIDIzMTA0ODA0LCAtMTI4Njk5MDgsIDU3MjczMzgsIDE4OTAzOCksCiAgICAgICAgICAgICAgICBhcnJheSgxNDYwOTEyMywgLTg5NTQ0NzAsIC02MDAwNTY2LCAtMTY2MjI3ODEsIC0xNDU3NzM4NywgLTc3NDM4OTgsIC0yNjc0NTE2OSwgMTA5NDIxMTUsIC0yNTg4ODkzMSwgLTE0ODg0Njk3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMDUxMzUwMCwgNTU1NzkzMSwgLTE1NjA0NjEzLCA3ODI5NTMxLCAyNjQxMzk0MywgLTIwMTk0MDQsIC0yMTM3ODk2OCwgNzQ3MTc4MSwgMTM5MTM2NzcsIC01MTM3ODc1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNTU3NDM3NiwgMTE5Njc4MjYsIDI5MjMzMjQyLCAxMjk0ODIzNiwgLTY3NTQ0NjUsIDQ3MTMyMjcsIC04OTQwOTcwLCAxNDA1OTE4MCwgMTI4Nzg2NTIsIDg1MTE5MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NjU2ODAxLCAzMzkzNjMxLCAtMjk1NTQxNSwgLTcwNzU1MjYsIC0yMjUwNzA5LCA5MzY2OTA4LCAtMzAyMjM0MTgsIDY4MTI5NzQsIDU1Njg2NzYsIC0zMTI3NjU2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTYzMDAwNCwgMTIxNDQ0NTQsIDIxMTYzMzksIDEzNjA2MDM3LCAyNzM3ODg4NSwgMTU2NzY5MTcsIC0xNzQwODc1MywgLTEzNTA0MzczLCAtMTQzOTUxOTYsIDgwNzA4MTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMjcxMTc2OTYsIC0xMDAwNzM3OCwgLTMxMjgyNzcxLCAtNTU3MDA4OCwgMTEyNzI4MiwgMTI3NzI0ODgsIC0yOTg0NTkwNiwgMTA0ODMzMDYsIC0xMTU1Mjc0OSwgLTEwMjg3MTQpLAogICAgICAgICAgICAgICAgYXJyYXkoMTA2Mzc0NjcsIC01Njg4MDY0LCA1Njc0NzgxLCAxMDcyNzA4LCAtMjYzNDM1ODgsIC02OTgyMzAyLCAtMTY4Mzk3NSwgOTE3Nzg1MywgLTI3NDkzMTYyLCAxNTQzMTIwMyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjA1MjUxNDUsIDEwODkyNTY2LCAtMTI3NDI0NzIsIDEyNzc5NDQzLCAtMjk0OTMwMzQsIDE2MTUwMDc1LCAtMjgyNDA1MTksIDE0OTQzMTQyLCAtMTUwNTY3OTAsIC03OTM1OTMxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDAyNDQ2MiwgNTYyNjkyNiwgLTU1MTU2NywgLTk5ODEwODcsIDc1MzU5OCwgMTE5ODExOTEsIDI1MjQ0NzY3LCAtMzIzOTc2NiwgLTMzNTY1NTAsIDk1OTQwMjQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNzUyNjQ0LCAyNjM2ODcwLCAtNTE2MzkxMCwgLTEwMTAzODE4LCA1ODUxMzQsIDc4NzczODMsIDExMzQ1NjgzLCAtNjQ5MjI5MCwgMTMzNTIzMzUsIC0xMDk3NzA4NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE5MzE3OTksIC01NDA3NDU4LCAzMzA0NjQ5LCAtMTI4ODQ4NjksIDE3MDE1ODA2LCAtNDg3NzA5MSwgLTI5NzgzODUwLCAtNzc1MjQ4MiwgLTEzMjE1NTM3LCAtMzE5MjA0KSwKICAgICAgICAgICAgICAgIGFycmF5KDIwMjM5OTM5LCA2NjA3MDU4LCA2MjAzOTg1LCAzNDgzNzkzLCAtMTgzODY5NzYsIC03NzkyMjksIC0yMDcyMzc0MiwgMTUwNzc4NzAsIC0yMjc1MDc1OSwgMTQ1MjM4MTcpLAogICAgICAgICAgICAgICAgYXJyYXkoMjc0MDYwNDIsIC02MDQxNjU3LCAyNzQyMzU5NiwgLTQ0OTczOTQsIDQ5OTYyMTQsIDEwMDAyMzYwLCAtMjg4NDIwMzEsIC00NTQ1NDk0LCAtMzAxNzI3NDIsIC00ODA1NjY3KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDExMzc0MjQyLCAxMjY2MDcxNSwgMTc4NjEzODMsIC0xMjU0MDgzMywgMTA5MzU1NjgsIDEwOTkyMjcsIC0xMzg4NjA3NiwgLTkwOTE3NDAsIC0yNzcyNzA0NCwgMTEzNTg1MDQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyNzMwODA5LCAxMDMxMTg2NywgMTUxMDM3NSwgMTA3NzgwOTMsIC0yMTE5NDU1LCAtOTE0NTcwMiwgMzI2NzYwMDMsIDExMTQ5MzM2LCAtMjYxMjM2NTEsIDQ5ODU3NjgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5MDk2MzAzLCAzNDExNDcsIC02MTk3NDg1LCAtMjM5MDMzLCAxNTc1Njk3MywgLTg3OTY2NjIsIC05ODMwNDMsIDEzNzk0MTE0LCAtMTk0MTQzMDcsIC0xNTYyMTI1NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNjQ5MDA4MSwgMTE5NDAyODYsIDI1NDk1OTIzLCAtNzcyNjM2MCwgODY2ODM3MywgLTg3NTEzMTYsIDMzNjc2MDMsIDY5NzAwMDUsIC0xNjkxMDY1LCAtOTAwNDc5MCksCiAgICAgICAgICAgICAgICBhcnJheSgxNjU2NDk3LCAxMzQ1NzMxNywgMTUzNzA4MDcsIDYzNjQ5MTAsIDEzNjA1NzQ1LCA4MzYyMzM4LCAtMTkxNzQ2MjIsIC01NDc1NzIzLCAtMTY3OTY1OTYsIC01MDMxNDM4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMjI3MzMxNSwgLTEzNTI0NDI0LCAtNjQ2ODUsIC00MzM0MjIzLCAtMTg2MDU2MzYsIC0xMDkyMTk2OCwgLTIwNTcxMDY1LCAtNzAwNzk3OCwgLTk5ODUzLCAtMTAyMzczMzMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE3NzQ3NDY1LCAxMDAzOTI2MCwgMTkzNjgyOTksIC00MDUwNTkxLCAtMjA2MzA2MzUsIC0xNjA0MTI4NiwgMzE5OTI2ODMsIC0xNTg1Nzk3NiwgLTI5MjYwMzYzLCAtNTUxMTk3MSksCiAgICAgICAgICAgICAgICBhcnJheSgzMTkzMjAyNywgLTQ5ODYxNDEsIC0xOTYxMjM4MiwgMTYzNjY1ODAsIDIyMDIzNjE0LCA4ODQ1MCwgMTEzNzE5OTksIC0zNzQ0MjQ3LCA0ODgyMjQyLCAtMTA2MjY5MDUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjk3OTY1MDcsIDM3MTg2LCAxOTgxODA1MiwgMTAxMTU3NTYsIC0xMTgyOTAzMiwgMzM1MjczNiwgMTg1NTExOTgsIDMyNzI4MjgsIC01MTkwOTMyLCAtNDE2MjQwOSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTI1MDEyODYsIDQwNDQzODMsIC04NjEyOTU3LCAtMTMzOTIzODUsIC0zMjQzMDA1MiwgNTEzNjU5OSwgLTE5MjMwMzc4LCAtMzUyOTY5NywgMzMwMDcwLCAtMzY1OTQwOSksCiAgICAgICAgICAgICAgICBhcnJheSg2Mzg0ODc3LCAyODk5NTEzLCAxNzgwNzQ3NywgNzY2MzkxNywgLTIzNTg4ODgsIDEyMzYzMTY1LCAyNTM2NjUyMiwgLTg1NzM4OTIsIC0yNzEyOTUsIDEyMDcxNDk5KSwKICAgICAgICAgICAgICAgIGFycmF5KC04MzY1NTE1LCAtNDA0MjUyMSwgMjUxMzM0NDgsIC00NTE3MzU1LCAtNjIxMTAyNywgMjI2NTkyNywgLTMyNzY5NjE4LCAxOTM2Njc1LCAtNTE1OTY5NywgMzgyOTM2MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjg0MjU5NjYsIC01ODM1NDMzLCAtNTc3MDkwLCAtNDY5NzE5OCwgLTE0MjE3NTU1LCA2ODcwOTMwLCA3OTIxNTUwLCAtNjU2Nzc4NywgMjYzMzMxNDAsIDE0MjY3NjY0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTA2NzIxOSwgMTE4NzEyMzEsIDI3Mzg1NzE5LCAtMTA1NTk1NDQsIC00NTg1OTE0LCAtMTExODkzMTIsIDEwMDA0Nzg2LCAtODcwOTQ4OCwgLTIxNzYxMjI0LCA4OTMwMzI0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMTE5Nzc4NSwgLTE2Mzk2MDM1LCAyNTY1NDIxNiwgLTE3MjUzOTcsIDEyMjgyMDEyLCAxMTAwODkxOSwgMTU0MTk0MCwgNDc1NzkxMSwgLTI2NDkxNTAxLCAtMTY0MDg5NDApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEzNTM3MjYyLCAtNzc1OTQ5MCwgLTIwNjA0ODQwLCAxMDk2MTkyNywgLTU5MjI4MjAsIC0xMzIxODA2NSwgLTEzMTU2NTg0LCA2MjE3MjU0LCAtMTU5NDM2OTksIDEzODE0OTkwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzQyMjU3MywgMTUxNTc3OTAsIDE4NzA1NTQzLCAyOTYxOSwgMjQ0MDk3MTcsIC0yNjA0NzYsIDI3MzYxNjgxLCA5MjU3ODMzLCAtMTk1NjUyNiwgLTE3NzY5MTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1MDQ1MzAwLCAtMTAxOTE5NjYsIDE1MzY2NTg1LCAxNTE2NjUwOSwgLTEzMTA1MDg2LCA4NDIzNTU2LCAtMjkxNzE1NDAsIDEyMzYxMTM1LCAtMTg2ODU5NzgsIDQ1NzgyOTApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI0NTc5NzY4LCAzNzExNTcwLCAxMzQyMzIyLCAtMTExODAxMjYsIC0yNzAwNTEzNSwgMTQxMjQ5NTYsIC0yMjU0NDUyOSwgMTQwNzQ5MTksIDIxOTY0NDMyLCA4MjM1MjU3KSwKICAgICAgICAgICAgICAgIGFycmF5KC02NTI4NjEzLCAtMjQxMTQ5NywgOTQ0Mjk2NiwgLTU5MjU1ODgsIDEyMDI1NjQwLCAtMTQ4NzQyMCwgLTI5ODE1MTQsIC0xNjY5MjA2LCAxMzAwNjgwNiwgMjM1NTQzMyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTYzMDQ4OTksIC0xMzYwNTI1OSwgLTY2MzI0MjcsIC01MTQyMzQ5LCAxNjk3NDM1OSwgLTEwOTExMDgzLCAyNzIwMjA0NCwgMTcxOTM2NiwgMTE0MTY0OCwgLTEyNzk2MjM2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTI4NjM5NDQsIC0xMzIxOTk4NiwgLTgzMTgyNjYsIC0xMTAxODA5MSwgLTY4MTAxNDUsIC00ODQzODk0LCAxMzQ3NTA2NiwgLTMxMzM5NzIsIDMyNjc0ODk1LCAxMzcxNTA0NSksCiAgICAgICAgICAgICAgICBhcnJheSgxMTQyMzMzNSwgLTU0NjgwNTksIDMyMzQ0MjE2LCA4OTYyNzUxLCAyNDk4OTgwOSwgOTI0MTc1MiwgLTEzMjY1MjUzLCAxNjA4NjIxMiwgLTI4NzQwODgxLCAtMTU2NDIwOTMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE0MDk2NjgsIDEyNTMwNzI4LCAtNjM2ODcyNiwgMTA4NDczODcsIDE5NTMxMTg2LCAtMTQxMzIxNjAsIC0xMTcwOTE0OCwgNzc5MTc5NCwgLTI3MjQ1OTQzLCA0MzgzMzQ3KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODk3MDg5OCwgNTI3MTQ0NywgLTEyNjYwMDksIC05NzM2OTg5LCAtMTI0NTUyMzYsIDE2NzMyNTk5LCAtNDg2MjQwNywgLTQ5MDY0NDksIDI3MTkzNTU3LCA2MjQ1MTkxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTE5Mzk1NiwgNTM2MjI3OCwgLTE3ODM4OTMsIDI2OTU4MzQsIDQ5NjAyMjcsIDEyODQwNzI1LCAyMzA2MTg5OCwgMzI2MDQ5MiwgMjI1MTA0NTMsIDg1Nzc1MDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyNjMyNDUxLCAxMTI1NzM0NiwgLTMyNjkyOTk0LCAxMzU0ODE3NywgLTcyMTAwNCwgMTA4NzkwMTEsIDMxMTY4MDMwLCAxMzk1MjA5MiwgLTI5NTcxNDkyLCAtMzYzNTkwNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzg3NzMyMSwgLTk1NzI3MzksIDMyNDE2NjkyLCA1NDA1MzI0LCAtMTEwMDQ0MDcsIC0xMzY1NjYzNSwgMzc1OTc2OSwgMTE5MzUzMjAsIDU2MTE4NjAsIDgxNjQwMTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2Mjc1ODAyLCAxNDY2Nzc5NywgMTU5MDY0NjAsIDEyMTU1MjkxLCAtMjIxMTExNDksIC05MDM5NzE4LCAzMjAwMzAwMiwgLTg4MzIyODksIDU3NzMwODUsIC04NDIyMTA5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzc4ODExOCwgLTgyNTQzMDAsIDE5NTA4NzUsIDg5Mzc2MzMsIDE4Njg2NzI3LCAxNjQ1OTE3MCwgLTkwNTcyNSwgMTIzNzYzMjAsIDMxNjMyOTUzLCAxOTA5MjYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNDU5MzYwNywgLTE2MTM4ODg1LCAtODQyMzk5MSwgMTMzNzg3NDYsIDE0MTYyNDA3LCA2OTAxMzI4LCAtODI4ODc0OSwgNDUwODU2NCwgLTI1MzQxNTU1LCAtMzYyNzUyOCksCiAgICAgICAgICAgICAgICBhcnJheSg4ODg0NDM4LCAtNTg4NDAwOSwgNjAyMzk3NCwgMTAxMDQzNDEsIC02ODgxNTY5LCAtNDk0MTUzMywgMTg3MjI5NDEsIC0xNDc4NjAwNSwgLTE2NzI0ODgsIDgyNzYyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMzI3MjA1ODMsIC0xNjI4OTI5NiwgLTMyNTAzNTQ3LCA3MTAxMjEwLCAxMzM1NDYwNSwgMjY1OTA4MCwgLTE4MDA1NzUsIC0xNDEwODAzNiwgLTI0ODc4NDc4LCAxNTQxMjg2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyOTAxMzQ3LCAtMTExNzY4NywgMzg4MDM3NiwgLTEwMDU5Mzg4LCAtMTc2MjA5NDAsIC0zNjEyNzgxLCAtMjE4MDIxMTcsIC0zNTY3NDgxLCAyMDQ1Njg0NSwgLTE4ODUwMzMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjcwMTk2MTAsIDEyMjk5NDY3LCAtMTM2NTgyODgsIC0xNjAzMjM0LCAtMTI4NjE2NjAsIC00ODYxNDcxLCAtMTk1NDAxNTAsIC01MDE2MDU4LCAyOTQzOTY0MSwgMTUxMzg4NjYpLAogICAgICAgICAgICAgICAgYXJyYXkoMjE1MzYxMDQsIC02NjI2NDIwLCAtMzI0NDc4MTgsIC0xMDY5MDIwOCwgLTIyNDA4MDc3LCA1MTc1ODE0LCAtNTQyMDA0MCwgLTE2MzYxMTYzLCA3Nzc5MzI4LCAxMDk4OTYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwMjc5NzQ0LCAxNDY0ODc1MCwgLTgwNDQ4NzEsIDY0MjU1NTgsIDEzNjM5NjIxLCAtNzQzNTA5LCAyODY5ODM5MCwgMTIxODAxMTgsIDIzMTc3NzE5LCAtNTU0MDc1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI2NTcyODQ3LCAzNDA1OTI3LCAtMzE3MDE3MDAsIDEyODkwOTA1LCAtMTkyNjU2NjgsIDUzMzU4NjYsIC02NDkzNzY4LCAyMzc4NDkyLCA0NDM5MTU4LCAtMTMyNzkzNDcpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNzE2NzA2LCAzNDg5MDcwLCAtOTIyNTI2NiwgLTMzMjc1MywgMTg4NzU3MjIsIC0xMTQwMDk1LCAxNDgxOTQzNCwgLTEyNzMxNTI3LCAtMTc3MTc3NTcsIC01NDYxNDM3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNTA1NjQ4MywgMTY1NjY1NTEsIDE1OTUzNjYxLCAzNzY3NzUyLCAtMTA0MzY0OTksIDE1NjI3MDYwLCAtODIwOTU0LCAyMTc3MjI1LCA4NTUwMDgyLCAtMTUxMTQxNjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE4NDczMzAyLCAxNjU5Njc3NSwgLTM4MTY2MCwgMTU2NjM2MTEsIDIyODYwOTYwLCAxNTU4NTU4MSwgLTI3ODQ0MTA5LCAtMzU4MjczOSwgLTIzMjYwNDYwLCAtODQyODU4OCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzI0ODA1NTEsIDE1NzA3Mjc1LCAtODIwNTkxMiwgLTU2NTIwODEsIDI5NDY0NTU4LCAyNzEzODE1LCAtMjI3MjUxMzcsIDE1ODYwNDgyLCAtMjE5MDI1NzAsIDE0OTQxOTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xOTU2MjA5MSwgLTE0MDg3MzkzLCAtMjU1ODM4NzIsIC05Mjk5NTUyLCAxMzEyNzg0MiwgNzU5NzA5LCAyMTkyMzQ4MiwgMTY1MjkxMTIsIDg3NDI3MDQsIDEyOTY3MDE3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yODQ2NDg5OSwgMTU1MzIwNSwgMzI1MzY4NTYsIC0xMDQ3MzcyOSwgLTI0NjkxNjA1LCAtNDA2MTc0LCAtODkxNDYyNSwgLTI5MzM4OTYsIC0yOTkwMzc1OCwgMTU1NTM4ODMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjE4Nzc5MDksIDMyMzAwMDgsIDk4ODExNzQsIDEwNTM5MzU3LCAtNDc5NzExNSwgMjg0MTMzMiwgMTE1NDM1NzIsIDE0NTEzMjc0LCAxOTM3NTkyMywgLTEyNjQ3OTYxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg4ODMyMjY5LCAtMTQ0OTU0ODUsIDEzMjUzNTExLCA1MTM3NTc1LCA1MDM3ODcxLCA0MDc4Nzc3LCAyNDg4MDgxOCwgLTYyMjI3MTYsIDI4NjI2NTMsIDk0NTUwNDMpLAogICAgICAgICAgICAgICAgYXJyYXkoMjkzMDY3NTEsIDUxMjMxMDYsIDIwMjQ1MDQ5LCAtMTQxNDk4ODksIDk1OTI1NjYsIDg0NDcwNTksIC0yMDc3MTI0LCAtMjk5MDA4MCwgMTU1MTE0NDksIDQ3ODk2NjMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwNjc5NzU2LCA3MDA0NTQ3LCA4ODI0ODMxLCAtOTQzNDk3NywgLTQwNDU3MDQsIC0zNzUwNzM2LCAtNTc1NDc2MiwgMTA4ODkzLCAyMzUxMzIwMCwgMTY2NTIzNjIpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMzMjU2MTczLCA0MTQ0NzgyLCAtNDQ3NjAyOSwgLTY1NzkxMjMsIDEwNzcwMDM5LCAtNzE1NTU0MiwgLTY2NTA0MTYsIC0xMjkzNjMwMCwgLTE4MzE5MTk4LCAxMDIxMjg2MCksCiAgICAgICAgICAgICAgICBhcnJheSgyNzU2MDgxLCA4NTk4MTEwLCA3MzgzNzMxLCAtNjg1OTg5MiwgMjIzMTI3NTksIC0xMTA1MDEyLCAyMTE3OTgwMSwgMjYwMDk0MCwgLTk5ODgyOTgsIC0xMjUwNjQ2NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ2NDU2OTIsIDEzMzE3NDYyLCAtMzA0NDkyNTksIC0xNTY1MzkyOCwgMjEzNjU1NzQsIC0xMDg2OTY1NywgMTEzNDQ0MjQsIDg2NDQ0MCwgLTI0OTk2NzcsIC0xNjcxMDA2MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI2NDMyODAzLCA2MTQ4MzI5LCAtMTcxODQ0MTIsIC0xNDQ3NDE1NCwgMTg3ODI5MjksIC0yNzU5OTcsIC0yMjU2MTUzNCwgMjExMzAwLCAyNzE5NzU3LCA0OTQwOTk3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzIzODgyLCAzOTExMzEzLCAtNjk0ODc0NCwgMTQ3NTk3NjUsIC0zMDAyNzE1MCwgNzg1MTIwNywgMjE2OTAxMjYsIDg1MTg0NjMsIDI2Njk5ODQzLCA1Mjc2Mjk1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzE0OTg3MywgLTY0MjkwNjcsIDkzOTYyNDksIDM2NTAxMywgMjQ3MDMzMDEsIC0xMDQ4ODkzOSwgMTMyMTU4NiwgMTQ5NjM1LCAtMTU0NTI3NzQsIDcxNTkzNjkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDk5ODc3ODAsIC0zNDA0NzU5LCAxNzUwNzk2MiwgOTUwNTUzMCwgOTczMTUzNSwgLTIxNjU1MTQsIDIyMzU2MDA5LCA4MzEyMTc2LCAyMjQ3NzIxOCwgLTg0MDMzODUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTgxNTU4NTcsIC0xNjUwNDk5MCwgMTk3NDQ3MTYsIDkwMDY5MjMsIDE1MTU0MTU0LCAtMTA1Mzg5NzYsIDI0MjU2NDYwLCAtNDg2NDk5NSwgLTIyNTQ4MTczLCA5MzM0MTA5KSwKICAgICAgICAgICAgICAgIGFycmF5KDI5ODYwODgsIC00OTExODkzLCAxMDc3NjYyOCwgLTM0NzM4NDQsIDEwNjIwNTkwLCAtNzA4MzIwMywgLTIxNDEzODQ1LCAxNDI1MzU0NSwgLTIyNTg3MTQ5LCA1MzY5MDYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDQzNzc3NTYsIDgxMTU4MzYsIDI0NTY3MDc4LCAxNTQ5NTMxNCwgMTE2MjUwNzQsIDEzMDY0NTk5LCA3MzkwNTUxLCAxMDU4OTYyNSwgMTA4MzgwNjAsIC0xNTQyMDQyNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTkzNDI0MDQsIDg2Nzg4MCwgOTI3NzE3MSwgLTMyMTg0NTksIC0xNDQzMTU3MiwgLTE5ODY0NDMsIDE5Mjk1ODI2LCAtMTU3OTY5NTAsIDYzNzgyNjAsIDY5OTE4NSksCiAgICAgICAgICAgICAgICBhcnJheSg3ODk1MDI2LCA0MDU3MTEzLCAtNzA4MTc3MiwgLTEzMDc3NzU2LCAtMTc4ODY4MzEsIC0zMjMxMjYsIC03MTYwMzksIDE1NjkzMTU1LCAtNTA0NTA2NCwgLTEzMzczOTYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNzczNzU2MywgLTU4Njk0MDIsIC0xNDU2NjMxOSwgLTc0MDY5MTksIDExMzg1NjU0LCAxMzIwMTYxNiwgMzE3MzA2NzgsIC0xMDk2Mjg0MCwgLTM5MTg2MzYsIC05NjY5MzI1KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwMTg4Mjg2LCAtMTU3NzA4MzQsIC03MzM2MzYxLCAxMzQyNzU0MywgMjIyMjM0NDMsIDE0ODk2Mjg3LCAzMDc0MzQ1NSwgNzExNjU2OCwgLTIxNzg2NTA3LCA1NDI3NTkzKSwKICAgICAgICAgICAgICAgIGFycmF5KDY5NjEwMiwgMTMyMDY4OTksIDI3MDQ3NjQ3LCAtMTA2MzIwODIsIDE1Mjg1MzA1LCAtOTg1MzE3OSwgMTA3OTg0OTAsIC00NTc4NzIwLCAxOTIzNjI0MywgMTI0Nzc0MDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMTIyOTQzOSwgMTEyNDM3OTYsIC0xNzA1NDI3MCwgLTgwNDA4NjUsIC03ODgyMjgsIC04MTY3OTY3LCAtMzg5NzY2OSwgMTExODA1MDQsIC0yMzE2OTUxNiwgNzczMzY0NCksCiAgICAgICAgICAgICAgICBhcnJheSgxNzgwMDc5MCwgLTE0MDM2MTc5LCAtMjcwMDA0MjksIC0xMTc2NjY3MSwgMjM4ODc4MjcsIDMxNDk2NzEsIDIzNDY2MTc3LCAtMTA1MzgxNzEsIDEwMzIyMDI3LCAxNTMxMzgwMSksCiAgICAgICAgICAgICAgICBhcnJheSgyNjI0NjIzNCwgMTE5Njg4NzQsIDMyMjYzMzQzLCAtNTQ2ODcyOCwgNjgzMDc1NSwgLTEzMzIzMDMxLCAtMTU3OTQ3MDQsIC0xMDE5ODIsIC0yNDQ0OTI0MiwgMTA4OTA4MDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMTM2NTY0NywgMTAyNzEzNjMsIC0xMjY2MDYyNSwgLTYyNjcyNjgsIDE2NjkwMjA3LCAtMTMwNjI1NDQsIC0xNDk4MjIxMiwgMTY0ODQ5MzEsIDI1MTgwNzk3LCAtNTMzNDg4NCksCiAgICAgICAgICAgICAgICBhcnJheSgtNTg2NTc0LCAxMDM3NjQ0NCwgLTMyNTg2NDE0LCAtMTEyODYzNTYsIDE5ODAxODkzLCAxMDk5NzYxMCwgMjI3NjYzMiwgOTQ4Mjg4MywgMzE2ODc4LCAxMzgyMDU3NyksCiAgICAgICAgICAgICAgICBhcnJheSgtOTg4MjgwOCwgLTQ1MTAzNjcsIC0yMTE1NTA2LCAxNjQ1NzEzNiwgLTExMTAwMDgxLCAxMTY3NDk5NiwgMzA3NTYxNzgsIC03NTE1MDU0LCAzMDY5NjkzMCwgLTM3MTI4NDkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMyOTg4OTE3LCAtOTYwMzQxMiwgMTI0OTkzNjYsIDc5MTA3ODcsIC0xMDYxNzI1NywgLTExOTMxNTE0LCAtNzM0MjgxNiwgLTk5ODUzOTcsIC0zMjM0OTUxNywgNzM5MjQ3MyksCiAgICAgICAgICAgICAgICBhcnJheSgtODg1NTY2MSwgMTU5Mjc4NjEsIDk4NjY0MDYsIC0zNjQ5NDExLCAtMjM5NjkxNCwgLTE2NjU1NzgxLCAtMzA0MDk0NzYsIC05MTM0OTk1LCAyNTExMjk0NywgLTI5MjY2NDQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1MDQwNDQsIC00MzY5NjYsIDI1NjIxNzc0LCAtNTY3ODc3MiwgMTUwODUwNDIsIC01NDc5ODc3LCAtMjQ4ODQ4NzgsIC0xMzUyNjE5NCwgNTUzNzQzOCwgLTEzOTE0MzE5KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMTIyNTU4NCwgMjMyMDI4NSwgLTk1ODQyODAsIDEwMTQ5MTg3LCAtMzM0NDQ2NjMsIDU4MDg2NDgsIC0xNDg3NjI1MSwgLTE3Mjk2NjcsIDMxMjM0NTkwLCA2MDkwNTk5KSwKICAgICAgICAgICAgICAgIGFycmF5KC05NjMzMzE2LCAxMTY0MjYsIDI2MDgzOTM0LCAyODk3NDQ0LCAtNjM2NDQzNywgLTI2ODgwODYsIDYwOTcyMSwgMTU4Nzg3NTMsIC02OTcwNDA1LCAtOTAzNDc2OCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjc3NTc4NTcsIDI0Nzc0NCwgLTE1MTk0Nzc0LCAtOTAwMjU1MSwgMjMyODgxNjEsIC0xMDAxMTkzNiwgLTIzODY5NTk1LCA2NTAzNjQ2LCAyMDY1MDQ3NCwgMTgwNDA4NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI3NTg5Nzg2LCAxNTQ1NjQyNCwgODk3MjUxNywgODQ2OTYwOCwgMTU2NDA2MjIsIDQ0Mzk4NDcsIDMxMjE5OTUsIC0xMDMyOTcxMywgMjc4NDI2MTYsIC0yMDIzMjgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1MzA2OTczLCAyODM5NjQ0LCAyMjUzMDA3NCwgMTAwMjYzMzEsIDQ2MDIwNTgsIDUwNDg0NjIsIDI4MjQ4NjU2LCA1MDMxOTMyLCAtMTEzNzUwODIsIDEyNzE0MzY5KSwKICAgICAgICAgICAgICAgIGFycmF5KDIwODA3NjkxLCAtNzI3MDgyNSwgMjkyODYxNDEsIDExNDIxNzExLCAtMjc4NzY1MjMsIC0xMzg2ODIzMCwgLTIxMjI3NDc1LCAxMDM1NTQ2LCAtMTk3MzMyMjksIDEyNzk2OTIwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMjA3Njg5OSwgLTE0MzAxMjg2LCAtODc4NTAwMSwgLTExODQ4OTIyLCAtMjUwMTI3OTEsIDE2NDAwNjg0LCAtMTc1OTE0OTUsIC0xMjg5OTQzOCwgMzQ4MDY2NSwgLTE1MTgyODE1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMjM2MTU0OSwgNTQ1NzU5NywgMjg1NDgxMDcsIDc4MzMxODYsIDczMDMwNzAsIC0xMTk1MzU0NSwgLTI0MzYzMDY0LCAtMTU5MjE4NzUsIC0zMzM3NDA1NCwgMjc3MTAyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjEzODkyNjYsIDQyMTkzMiwgMjY1OTcyNjYsIDY4NjA4MjYsIDIyNDg2MDg0LCAtNjczNzE3MiwgLTE3MTM3NDg1LCAtNDIxMDIyNiwgLTI0NTUyMjgyLCAxNTY3MzM5NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMTg0NjIyLCAyMzM4MjE2LCAxOTc4ODY4NSwgLTk2MjA5NTYsIC00MDAxMjY1LCAtODc0MDg5MywgLTIwMjcxMTg0LCA0NzMzMjU0LCAzNzI3MTQ0LCAtMTI5MzQ0NDgpLAogICAgICAgICAgICAgICAgYXJyYXkoNjEyMDExOSwgODE0ODYzLCAtMTE3OTQ0MDIsIC02MjI3MTYsIDY4MTIyMDUsIC0xNTc0Nzc3MSwgMjAxOTU5NCwgNzk3NTY4MywgMzExMjM2OTcsIC0xMDk1ODk4MSksCiAgICAgICAgICAgICAgICBhcnJheSgzMDA2OTI1MCwgLTExNDM1MzMyLCAzMDQzNDY1NCwgMjk1ODQzOSwgMTgzOTk1NjQsIC05NzYyODksIDEyMjk2ODY5LCA5MjA0MjYwLCAtMTY0MzI0MzgsIDk2NDgxNjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMyNzA1NDMyLCAtMTU1MDk3NywgMzA3MDU2NTgsIDc0NTEwNjUsIC0xMTgwNTYwNiwgOTYzMTgxMywgMzMwNTI2NiwgNTI0ODYwNCwgLTI2MDA4MzMyLCAtMTEzNzc1MDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTcyMTk4NjUsIDIzNzUwMzksIC0zMTU3MDk0NywgLTU1NzU2MTUsIC0xOTQ1OTY3OSwgOTIxOTkwMywgMjk0NzExLCAxNTI5ODYzOSwgMjY2MjUwOSwgLTE2Mjk3MDczKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTcyOTI3LCAtNzU1ODY5NSwgLTQzNjY3NzAsIC00Mjg3NzQ0LCAtMjEzNDY0MTMsIC04NDM0MzI2LCAzMjA4NzUyOSwgLTEyMjI3NzcsIDMyMjQ3MjQ4LCAtMTQzODk4NjEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE0MzEyNjI4LCAxMjIxNTU2LCAxNzM5NTM5MCwgLTg3MDAxNDMsIC00OTQ1NzQxLCAtODY4NDYzNSwgLTI4MTk3NzQ0LCAtOTYzNzgxNywgLTE2MDI3NjIzLCAtMTMzNzg4NDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE0Mjg4MjUsIC05Njc4OTkwLCAtOTIzNTY4MSwgNjU0OTY4NywgLTczODMwNjksIC00Njg2NjQsIDIzMDQ2NTAyLCA5ODAzMTM3LCAxNzU5NzkzNCwgMjM0NjIxMSksCiAgICAgICAgICAgICAgICBhcnJheSgxODUxMDgwMCwgMTUzMzc1NzQsIDI2MTcxNTA0LCA5ODEzOTIsIC0yMjI0MTU1MiwgNzgyNzU1NiwgLTIzNDkxMTM0LCAtMTEzMjMzNTIsIDMwNTk4MzMsIC0xMTc4Mjg3MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTAxNDE1OTgsIDYwODI5MDcsIDE3ODI5MjkzLCAtMTk0NzY0MywgOTgzMDA5MiwgMTM2MTMxMzYsIC0yNTU1NjYzNiwgLTU1NDQ1ODYsIC0zMzUwMjIxMiwgMzU5MjA5NiksCiAgICAgICAgICAgICAgICBhcnJheSgzMzExNDE2OCwgLTE1ODg5MzUyLCAtMjY1MjU2ODYsIC0xMzM0MzM5NywgMzMwNzY3MDUsIDg3MTYxNzEsIDExNTE0NjIsIDE1MjE4OTcsIC05ODI2NjUsIC02ODM3ODAzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMjkzOTE2NSwgLTQyNTU4MTUsIDIzOTQ3MTgxLCAtMzI0MTc4LCAtMzMwNzI5NzQsIC0xMjMwNTYzNywgLTE2NjM3Njg2LCAzODkxNzA0LCAyNjM1MzE3OCwgNjkzMTY4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDM3NDIzOSwgMTU5NTU4MCwgLTE2ODg0MDM5LCAxMzE4NjkzMSwgNDYwMDM0NCwgNDA2OTA0LCA5NTg1Mjk0LCAtNDAwNjY4LCAzMTM3NTQ2NCwgMTQzNjk5NjUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE0MzcwNjU0LCAtNzc3MjUyOSwgMTUxMDMwMSwgNjQzNDE3MywgLTE4Nzg0Nzg5LCAtNjI2MjcyOCwgMzI3MzIyMzAsIC0xMzEwODgzOSwgMTc5MDE0NDEsIDE2MDExNTA1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4MTcxMjIzLCAtMTE5MzQ2MjYsIC0xMjUwMDQwMiwgMTUxOTcxMjIsIC0xMTAzODE0NywgLTE1MjMwMDM1LCAtMTkxNzIyNDAsIC0xNjA0NjM3NiwgODc2NDAzNSwgMTIzMDk1OTgpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNTk3NTkwOCwgLTUyNDMxODgsIC0xOTQ1OTM2MiwgLTk2ODE3NDcsIC0xMTU0MTI3NywgMTQwMTU3ODIsIC0yMzY2NTc1NywgMTIyODMxOSwgMTc1NDQwOTYsIC0xMDU5Mzc4MiksCiAgICAgICAgICAgICAgICBhcnJheSg1ODExOTMyLCAtMTcxNTI5MywgMzQ0Mjg4NywgLTIyNjkzMTAsIC0xODM2NzM0OCwgLTgzNTk1NDEsIC0xODA0NDA0MywgLTE1NDEwMTI3LCAtNTU2NTM4MSwgMTIzNDg5MDApLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxMzk5NjYwLCAxMTQwNzU1NSwgMjU3NTUzNjMsIDY4OTEzOTksIC0zMjU2OTM4LCAxNDg3MjI3NCwgLTI0ODQ5MzUzLCA4MTQxMjk1LCAtMTA2MzI1MzQsIC01ODU0NzkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xMjY3NTMwNCwgNjk0MDI2LCAtNTA3NjE0NSwgMTMzMDAzNDQsIDE0MDE1MjU4LCAtMTQ0NTEzOTQsIC05Njk4NjcyLCAtMTEzMjkwNTAsIDMwOTQ0NTkzLCAxMTMwMjA4KSwKICAgICAgICAgICAgICAgIGFycmF5KDgyNDc3NjYsIC02NzEwOTQyLCAtMjY1NjIzODEsIC03NzA5MzA5LCAtMTQ0MDE5MzksIC0xNDY0ODkxMCwgNDY1MjE1MiwgMjQ4ODU0MCwgMjM1NTAxNTYsIC0yNzEyMzIpLAogICAgICAgICAgICAgICAgYXJyYXkoMTcyOTQzMTYsIC0zNzg4NDM4LCA3MDI2NzQ4LCAxNTYyNjg1MSwgMjI5OTAwNDQsIDExMzQ4MSwgMjI2NzczNywgLTU5MDgxNDYsIC00MDg4MTgsIC0xMzc3MTkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE2MDkxMDg1LCAtMTYyNTM5MjYsIDE4NTk5MjUyLCA3MzQwNjc4LCAyMTM3NjM3LCAtMTIyMTY1NywgLTMzNjQxNjEsIDE0NTUwOTM2LCAzMjYwNTI1LCAtNzE2NjI3MSksCiAgICAgICAgICAgICAgICBhcnJheSgtNDkxMDEwNCwgLTEzMzMyODg3LCAxODU1MDg4NywgMTA4NjQ4OTMsIC0xNjQ1OTMyNSwgLTcyOTE1OTYsIC0yMzAyODg2OSwgLTEzMjA0OTA1LCAtMTI3NDg3MjIsIDI3MDEzMjYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTg1NzQ2OTUsIDE2MDk5NDE1LCA0NjI5OTc0LCAtMTYzNDA1MjQsIC0yMDc4NjIxMywgLTYwMDU0MzIsIC0xMDAxODM2MywgOTI3Njk3MSwgMTEzMjk5MjMsIDE4NjIxMzIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE0NzYzMDc2LCAtMTU5MDM2MDgsIC0zMDkxODI3MCwgMzY4OTg2NywgMzUxMTg5MiwgMTAzMTM1MjYsIC0yMTk1MTA4OCwgMTIyMTkyMzEsIC05MDM3OTYzLCAtOTQwMzAwKSwKICAgICAgICAgICAgICAgIGFycmF5KDg4OTQ5ODcsIC0zNDQ2MDk0LCA2MTUwNzUzLCAzMDEzOTMxLCAzMDEyMjAsIDE1NjkzNDUxLCAtMzE5ODEyMTYsIC0yOTA5NzE3LCAtMTU0MzgxNjgsIDExNTk1NTcwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE1MjE0OTYyLCAzNTM3NjAxLCAtMjYyMzg3MjIsIC0xNDA1ODg3MiwgNDQxODY1NywgLTE1MjMwNzYxLCAxMzk0NzI3NiwgMTA3MzA3OTQsIC0xMzQ4OTQ2MiwgLTQzNjM2NzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNTM4MzA2LCA3NjgyNzkzLCAzMjc1OTAxMywgMjYzMTA5LCAtMjk5ODQ3MzEsIC03OTU1NDUyLCAtMjIzMzIxMjQsIC0xMDE4ODYzNSwgOTc3MTA4LCA2OTk5OTQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEyNDY2NDcyLCA0MTk1MDg0LCAtOTIxMTUzMiwgNTUwOTA0LCAtMTU1NjUzMzcsIDEyOTE3OTIwLCAxOTExODExMCwgLTQzOTg0MSwgLTMwNTM0NTMzLCAtMTQzMzc5MTMpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE3ODg0NjEsIC0xNDUwNzY1NywgNDc5OTk4OSwgNzM3MjIzNywgODgwODU4NSwgLTE0NzQ3OTQzLCA5NDA4MjM3LCAtMTAwNTE3NzUsIDEyNDkzOTMyLCAtNTQwOTMxNyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NjgwNjA2LCA1MjYwNzQ0LCAtMTkyMzU4MDksIC02Mjg0NDcwLCAtMzY5NTk0MiwgMTY1NjYwODcsIDI3MjE4MjgwLCAyNjA3MTIxLCAyOTM3NTk1NSwgNjAyNDczMCksCiAgICAgICAgICAgICAgICBhcnJheSg4NDIxMzIsIC0yNzk0NjkzLCAtNDc2MzM4MSwgLTg3MjI4MTUsIDI2MzMyMDE4LCAtMTI0MDU2NDEsIDExODMxODgwLCA2OTg1MTg0LCAtOTk0MDM2MSwgMjg1NDA5NiksCiAgICAgICAgICAgICAgICBhcnJheSgtNDg0NzI2MiwgLTc5NjkzMzEsIDI1MTYyNDIsIC01ODQ3NzEzLCA5Njk1NjkxLCAtNzIyMTE4NiwgMTY1MTI2NDUsIDk2MDc3MCwgMTIxMjE4NjksIDE2NjQ4MDc4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTUyMTg2NTIsIDE0NjY3MDk2LCAtMTMzMzYyMjksIDIwMTM3MTcsIDMwNTk4Mjg3LCAtNDY0MTM3LCAtMzE1MDQ5MjIsIC03ODgyMDY0LCAyMDIzNzgwNiwgMjgzODQxMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTkyODgwNDcsIDQ0NTMxNTIsIDE1Mjk4NTQ2LCAtMTYxNzgzODgsIDIyMTE1MDQzLCAtMTU5NzI2MDQsIDEyNTQ0Mjk0LCAtMTM0NzA0NTcsIDEwNjg4ODEsIC0xMjQ5OTkwNSksCiAgICAgICAgICAgICAgICBhcnJheSgtOTU1ODg4MywgLTE2NTE4ODM1LCAzMzIzODQ5OCwgMTM1MDY5NTgsIDMwNTA1ODQ4LCAtMTExNDU5NiwgLTg0ODY5MDcsIC0yNjMwMDUzLCAxMjUyMTM3OCwgNDg0NTY1NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI4MTk4NTIxLCAxMDc0NDEwOCwgLTI5NTgzODAsIDEwMTk5NjY0LCA3NzU5MzExLCAtMTMwODg2MDAsIDM0MDkzNDgsIC04NzM0MDAsIC02NDgyMzA2LCAtMTI4ODU4NzApLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNTYxODIyLCA2MjMwMTU2LCAtMjAzODIwMTMsIDEwNjU1MzE0LCAtMjQwNDA1ODUsIC0xMTYyMTE3MiwgMTA0Nzc3MzQsIC0xMjQwMjE2LCAtMzExMzIyNywgMTM5NzQ0OTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTI5NjYyNjEsIDE1NTUwNjE2LCAtMzIwMzg5NDgsIC0xNjE1MzQ2LCAyMTAyNTk4MCwgLTYyOTQ0NCwgNTY0MjMyNSwgNzE4ODczNywgMTg4OTU3NjIsIDEyNjI5NTc5KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE0NzQxODc5LCAtMTQ5NDY4ODcsIDIyMTc3MjA4LCAtMTE3MjEyMzcsIDEyNzk3NDEsIDgwNTg2MDAsIDExNzU4MTQwLCA3ODk0NDMsIDMyMTk1MTgxLCAzODk1Njc3KSwKICAgICAgICAgICAgICAgIGFycmF5KDEwNzU4MjA1LCAxNTc1NTQzOSwgLTQ1MDk5NTAsIDkyNDM2OTgsIC00ODc5NDIyLCA2ODc5ODc5LCAtMjIwNDU3NSwgLTM1NjYxMTksIC04OTgyMDY5LCA0NDI5NjQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNDUzODk0LCAxNTcyNTk3MywgLTIwNDM2MzQyLCAtMTA0MTA2NzIsIC01ODAzOTA4LCAtMTEwNDAyMjAsIC03MTM1ODcwLCAtMTE2NDI4OTUsIDE4MDQ3NDM2LCAtMTUyODE3NDMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNTE3MzAwMSwgLTExMzA3MTY1LCAyOTc1OTk1NiwgMTE3NzY3ODQsIC0yMjI2MjM4MywgLTE1ODIwNDU1LCAxMDk5MzExNCwgLTEyODUwODM3LCAtMTc2MjA3MDEsIC05NDA4NDY4KSwKICAgICAgICAgICAgICAgIGFycmF5KDIxOTg3MjMzLCA3MDAzNjQsIC0yNDUwNTA0OCwgMTQ5NzIwMDgsIC03Nzc0MjY1LCAtNTcxODM5NSwgMzIxNTUwMjYsIDI1ODE0MzEsIC0yOTk1ODk4NSwgODc3MzM3NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjU1NjgzNTAsIDQ1NDQ2MywgLTEzMjExOTM1LCAxNjEyNjcxNSwgMjUyNDAwNjgsIDg1OTQ1NjcsIDIwNjU2ODQ2LCAxMjAxNzkzNSwgLTc4NzQzODksIC0xMzkyMDE1NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoNjAyODE4MiwgNjI2MzA3OCwgLTMxMDExODA2LCAtMTEzMDE3MTAsIC04MTg5MTksIDI0NjE3NzIsIC0zMTg0MTE3NCwgLTU0NjgwNDIsIC0xNzIxNzg4LCAtMjc3NjcyNSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTIyNzg5OTQsIDE2NjI0Mjc3LCA5ODc1NzksIC01OTIyNTk4LCAzMjkwODIwMywgMTI0ODYwOCwgNzcxOTg0NSwgLTQxNjY2OTgsIDI4NDA4ODIwLCA2ODE2NjEyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDM1ODA5NCwgLTgyMzc4MjksIDE5NTQ5NjUxLCAtMTIxNjkyMjIsIDIyMDgyNjIzLCAxNjE0NzgxNywgMjA2MTMxODEsIDEzOTgyNzAyLCAtMTAzMzk1NzAsIDUwNjc5NDMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMDUwNTk2NywgLTM4MjE3NjcsIDEyMDc0NjgxLCAxMzU4MjQxMiwgLTE5ODc3OTcyLCAyNDQzOTUxLCAtMTk3MTkyODYsIDEyNzQ2MTMyLCA1MzMxMjEwLCAtMTAxMDU5NDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMzA1Mjg4MTEsIDM2MDE4OTksIC0xOTU3MDkwLCA0NjE5Nzg1LCAtMjczNjE4MjIsIC0xNTQzNjM4OCwgMjQxODA3OTMsIC0xMjU3MDM5NCwgMjc2Nzk5MDgsIC0xNjQ4OTI4KSwKICAgICAgICAgICAgICAgIGFycmF5KDk0MDI0MDQsIC0xMzk1NzA2NSwgMzI4MzQwNDMsIDEwODM4NjM0LCAtMjY1ODAxNTAsIC0xMzIzNzE5NSwgMjY2NTMyNzQsIC04Njg1NTY1LCAyMjYxMTQ0NCwgLTEyNzE1NDA2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMjE5MDU5MCwgMTExODAyOSwgMjI3MzY0NDEsIDE1MTMwNDYzLCAtMzA0NjA2OTIsIC01OTkxMzIxLCAxOTE4OTYyNSwgLTQ2NDg5NDIsIDQ4NTQ4NTksIDY2MjIxMzkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTgzMTA3MzgsIC0yOTUzNDUwLCAtODI2MjU3OSwgLTMzODgwNDksIC0xMDQwMTczMSwgLTI3MTkyOSwgMTM0MjQ0MjYsIC0zNTY3MjI3LCAyNjQwNDQwOSwgMTMwMDE5NjMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxMjQxODM4LCAtMTU0MTU3MDAsIC0yOTk0MjUwLCA4OTM5MzQ2LCAxMTU2MjIzMCwgLTEyODQwNjcwLCAtMjYwNjQzNjUsIC0xMTYyMTcyMCwgLTE1NDA1MTU1LCAxMTAyMDY5MyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTg2NjA0MiwgLTc5NDk0ODksIC03ODk4NjQ5LCAtMTAzMDEwMTAsIDEyNDgzMzE1LCAxMzQ3NzU0NywgMzE3NTYzNiwgLTEyNDI0MTYzLCAyODc2MTc2MiwgMTQwNjczNCksCiAgICAgICAgICAgICAgICBhcnJheSgtNDQ4NTU1LCAtMTc3NzY2NiwgMTMwMTg1NTEsIDMxOTQ1MDEsIC05NTgwNDIwLCAtMTExNjE3MzcsIDI0NzYwNTg1LCAtNDM0NzA4OCwgMjU1Nzc0MTEsIC0xMzM3ODY4MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQyOTAzNzgsIDQ3NTkzNDUsIC02OTA2NTMsIC0xODUyODE2LCAyMDY2NzQ3LCAxMDY5Mzc2OSwgLTI5NTk1NzkwLCA5ODg0OTM2LCAtOTM2ODkyNiwgNDc0NTQxMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTkxNDEyODQsIDYwNDk3MTQsIC0xOTUzMTA2MSwgLTQzNDE0MTEsIC0zMTI2MDc5OCwgOTk0NDI3NiwgLTE1NDYyMDA4LCAtMTEzMTE4NTIsIDEwOTMxOTI0LCAtMTE5MzE5MzEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE2NTYxNTEzLCAxNDExMjY4MCwgLTgwMTI2NDUsIDQ4MTczMTgsIC04MDQwNDY0LCAtMTE0MTQ2MDYsIC0yMjg1MzQyOSwgMTA4NTY2NDEsIC0yMDQ3MDc3MCwgMTM0MzQ2NTQpLAogICAgICAgICAgICAgICAgYXJyYXkoMjI3NTk0ODksIC0xMDA3MzQzNCwgLTE2NzY2MjY0LCAtMTg3MTQyMiwgMTM2Mzc0NDIsIC0xMDE2ODA5MSwgMTc2NTE0NCwgLTEyNjU0MzI2LCAyODQ0NTMwNywgLTUzNjQ3MTApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDI5ODc1MDYzLCAxMjQ5MzYxMywgMjc5NTUzNiwgLTM3ODYzMzAsIDE3MTA2MjAsIDE1MTgxMTgyLCAtMTAxOTU3MTcsIC04Nzg4Njc1LCA5MDc0MjM0LCAxMTY3MTgwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjIwNTY4MywgMTEwMTQyMzMsIC05ODQyNjUxLCAtMjYzNTQ4NSwgLTI2OTA4MTIwLCA3NTMyMjk0LCAtMTg3MTY4ODgsIC05NTM1NDk4LCAzODQzOTAzLCA5MzY3Njg0KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDk2OTU5NSwgLTY0MDM3MTEsIDk1OTExMzQsIDk1ODIzMTAsIDExMzQ5MjU2LCAxMDg4NzksIDE2MjM1MTIzLCA4NjAxNjg0LCAtMTM5MTk3LCA0MjQyODk1KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIyMDkyOTU0LCAtMTMxOTExMjMsIC0yMDQyNzkzLCAtMTE5Njg1MTIsIDMyMTg2NzUzLCAtMTE1MTczODgsIC02NTc0MzQxLCAyNDcwNjYwLCAtMjc0MTczNjYsIDE2NjI1NTAxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMTA1NzcyMiwgMzA0MjAxNiwgMTM3NzAwODMsIC05MjU3OTIyLCA1ODQyMzYsIC01NDQ4NTUsIC03NzcwODU3LCAyNjAyNzI1LCAtMjczNTE2MTYsIDE0MjQ3NDEzKSwKICAgICAgICAgICAgICAgIGFycmF5KDYzMTQxNzUsIC0xMDI2NDg5MiwgLTMyNzcyNTAyLCAxNTk1NzU1NywgLTEwMTU3NzMwLCAxNjg3NTAsIC04NjE4ODA3LCAxNDI5MDA2MSwgMjcxMDg4NzcsIC0xMTgwODgwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtODU4NjU5NywgLTcxNzA5NjYsIDEzMjQxNzgyLCAxMDk2MDE1NiwgLTMyOTkxMDE1LCAtMTM3OTQ1OTYsIDMzNTQ3OTc2LCAtMTEwNTg4ODksIC0yNzE0ODQ1MSwgOTgxODc0KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyODMzNDQwLCA5MjkzNTk0LCAtMzI2NDk0NDgsIC0xMzYxODY2NywgLTkxMzY5NjYsIDE0NzU2ODE5LCAtMjI5Mjg4NTksIC0xMzk3MDc4MCwgLTEwNDc5ODA0LCAtMTYxOTc5NjIpLAogICAgICAgICAgICAgICAgYXJyYXkoLTc3Njg1ODcsIDMzMjY3ODYsIC0yODExMTc5NywgMTA3ODM4MjQsIDE5MTc4NzYxLCAxNDkwNTA2MCwgMjI2ODAwNDksIDEzOTA2OTY5LCAtMTU5MzM2OTAsIDM3OTc4OTkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDIxNzIxMzU2LCAtNDIxMjc0NiwgLTEyMjA2MTIzLCA5MzEwMTgyLCAtMzg4MjIzOSwgLTEzNjUzMTEwLCAyMzc0MDIyNCwgLTI3MDkyMzIsIDIwNDkxOTgzLCAtODA0MjE1MiksCiAgICAgICAgICAgICAgICBhcnJheSg5MjA5MjcwLCAtMTUxMzUwNTUsIC0xMzI1NjU1NywgLTYxNjc3OTgsIC03MzEwMTYsIDE1Mjg5NjczLCAyNTk0NzgwNSwgMTUyODY1ODcsIDMwOTk3MzE4LCAtNjcwMzA2MyksCiAgICAgICAgICAgICAgICBhcnJheSg3MzkyMDMyLCAxNjYxODM4NiwgMjM5NDY1ODMsIC04MDM5ODkyLCAtMTMyNjUxNjQsIC0xNTMzODU4LCAtMTQxOTc0NDUsIC0yMzIxNTc2LCAxNzY0OTk5OCwgLTI1MDA4MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTkzMDEwODgsIC0xNDE5MzgyNywgMzA2MDk1MjYsIC0zMDQ5NTQzLCAtMjUxNzUwNjksIC0xMjgzNzUyLCAtMTUyNDE1NjYsIC05NTI1NzI0LCAtMjIzMzI1MywgNzY2MjE0NiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTc1NTg2NzMsIDE3NjM1OTQsIC0zMzExNDMzNiwgMTU5MDg2MTAsIC0zMDA0MDg3MCwgLTEyMTc0Mjk1LCA3MzM1MDgwLCAtODQ3MjE5OSwgLTMxNzQ2NzQsIDM0NDAxODMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE5ODg5NzAwLCAtNTk3NzAwOCwgLTI0MTExMjkzLCAtOTY4ODg3MCwgMTA3OTk3NDMsIC0xNjU3MTk1NywgNDA0NTAsIC00NDMxODM1LCA0ODYyNDAwLCAxMTMzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzI4NTYyMDksIC03ODczOTU3LCAtNTQyMjM4OSwgMTQ4NjA5NTAsIC0xNjMxOTAzMSwgNzk1NjE0MiwgNzI1ODA2MSwgMzExODYxLCAtMzA1OTQ5OTEsIC03Mzc5NDIxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0zNzczNDI4LCAtMTU2NTkzNiwgMjg5ODUzNDAsIDc0OTk0NDAsIDI0NDQ1ODM4LCA5MzI1OTM3LCAyOTcyNzc2MywgMTY1MjcxOTYsIDE4Mjc4NDUzLCAxNTQwNTYyMiksCiAgICAgICAgICAgICAgICBhcnJheSgtNDM4MTkwNiwgODUwODY1MiwgLTE5ODk4MzY2LCAtMzY3NDQyNCwgLTU5ODQ0NTMsIDE1MTQ5OTcwLCAtMTMzMTM1OTgsIDg0MzUyMywgLTIxODc1MDYyLCAxMzYyNjE5NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjI4MTQ0OCwgLTEzNDg3MDU1LCAtMTA5MTU0MTgsIC0yNjA5OTEwLCAxODc5MzU4LCAxNjE2NDIwNywgLTEwNzgzODgyLCAzOTUzNzkyLCAxMzM0MDgzOSwgMTU5Mjg2NjMpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE3MjcxMjYsIC03MTc5ODU1LCAtMTg0Mzc1MDMsIC04MjgzNjUyLCAyODc1NzkzLCAtMTYzOTAzMzAsIC0yNTI2OTg5NCwgLTcwMTQ4MjYsIC0yMzQ1MjMwNiwgNTk2NDc1MyksCiAgICAgICAgICAgICAgICBhcnJheSg0MTAwNDIwLCAtNTk1OTQ1MiwgLTE3MTc5MzM3LCA2MDE3NzE0LCAtMTg3MDU4MzcsIDEyMjI3MTQxLCAtMjY2ODQ4MzUsIDExMzQ0MTQ0LCAyNTM4MjE1LCAtNzU3MDc1NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTk0MzM2MDUsIDYxMjMxMTMsIDExMTU5ODAzLCAtMjE1NjYwOCwgMzAwMTYyODAsIDE0OTY2MjQxLCAtMjA0NzQ5ODMsIDE0ODU0MjEsIC02MjkyNTYsIC0xNTk1ODg2MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjY4MDQ1NTgsIDQyNjA5MTksIDExODUxMzg5LCA5NjU4NTUxLCAtMzIwMTcxMDcsIDE2MzY3NDkyLCAtMjAyMDU0MjUsIC0xMzE5MTI4OCwgMTE2NTk5MjIsIC0xMTExNTExOCksCiAgICAgICAgICAgICAgICBhcnJheSgyNjE4MDM5NiwgMTAwMTUwMDksIC0zMDg0NDIyNCwgLTg1ODEyOTMsIDU0MTgxOTcsIDk0ODA2NjMsIDIyMzE1NjgsIC0xMDE3MDA4MCwgMzMxMDAzNzIsIC0xMzA2MTcxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNTEyMTExMywgLTUyMDE4NzEsIC0xMDM4OTkwNSwgMTU0Mjc4MjEsIC0yNzUwOTkzNywgLTE1OTkyNTA3LCAyMTY3MDk0NywgNDQ4NjY3NSwgLTU5MzE4MTAsIC0xNDQ2NjM4MCksCiAgICAgICAgICAgICAgICBhcnJheSgxNjE2NjQ4NiwgLTk0ODM3MzMsIC0xMTEwNDEzMCwgNjAyMzkwOCwgLTMxOTI2Nzk4LCAtMTM2NDkyMywgMjM0MDA2MCwgLTE2MjU0OTY4LCAtMTA3MzU3NzAsIC0xMDAzOTgyNCksCiAgICAgICAgICAgICAgICBhcnJheSgyODA0Mjg2NSwgLTM1NTcwODksIC0xMjEyNjUyNiwgMTIyNTk3MDYsIC0zNzE3NDk4LCAtNjk0NTg5OSwgNjc2NjQ1MywgLTg2ODk1OTksIDE4MDM2NDM2LCA1ODAzMjcwKSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC04MTc1ODEsIDY3NjM5MTIsIDExODAzNTYxLCAxNTg1NTg1LCAxMDk1ODQ0NywgLTI2NzExNjUsIDIzODU1MzkxLCA0NTk4MzMyLCAtNjE1OTQzMSwgLTE0MTE3NDM4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMTAzMTMwNiwgLTE0MjU2MTk0LCAxNzMzMjAyOSwgLTIzODM1MjAsIDMxMzEyNjgyLCAtNTk2NzE4MywgNjk2MzA5LCA1MDI5MiwgLTIwMDk1NzM5LCAxMTc2MzU4NCksCiAgICAgICAgICAgICAgICBhcnJheSgtNTk0NTYzLCAtMjUxNDI4MywgLTMyMjM0MTUzLCAxMjY0Mzk4MCwgMTI2NTA3NjEsIDE0ODExNDg5LCA2NjUxMTcsIC0xMjYxMzYzMiwgLTE5NzczMjExLCAtMTA3MTM1NjIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwNDY0NTkwLCAtMTEyNjI4NzIsIC00MTI3NDc2LCAtMTI3MzQ0NzgsIDE5ODM1MzI3LCAtNzEwNTYxMywgLTI0Mzk2MTc1LCAyMDc1NzczLCAtMTcwMjAxNTcsIDk5MjQ3MSksCiAgICAgICAgICAgICAgICBhcnJheSgxODM1NzE4NSwgLTY5OTQ0MzMsIDc3NjYzODIsIDE2MzQyNDc1LCAtMjkzMjQ5MTgsIDQxMTE3NCwgMTQ1Nzg4NDEsIDgwODAwMzMsIC0xMTU3NDMzNSwgLTEwNjAxNjEwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE5NTk4Mzk3LCAxMDMzNDYxMCwgMTI1NTUwNTQsIDI1NTU2NjQsIDE4ODIxODk5LCAtMTAzMzk3ODAsIDIxODczMjYzLCAxNjAxNDIzNCwgMjYyMjQ3ODAsIDE2NDUyMjY5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMzAyMjM5MjUsIDUxNDUxOTYsIDU5NDQ1NDgsIDE2Mzg1OTY2LCAzOTc2NzM1LCAyMDA5ODk3LCAtMTEzNzc4MDQsIC03NjE4MTg2LCAtMjA1MzM4MjksIDM2OTg2NTApLAogICAgICAgICAgICAgICAgYXJyYXkoMTQxODc0NDksIDM0NDg1NjksIC0xMDYzNjIzNiwgLTEwODEwOTM1LCAtMjI2NjM4ODAsIC0zNDMzNTk2LCA3MjY4NDEwLCAtMTA4OTA0NDQsIDI3Mzk0MzAxLCAxMjAxNTM2OSksCiAgICAgICAgICAgICAgICBhcnJheSgxOTY5NTc2MSwgMTYwODc2NDYsIDI4MDMyMDg1LCAxMjk5OTgyNywgNjgxNzc5MiwgMTE0Mjc2MTQsIDIwMjQ0MTg5LCAtMTMxMjc3NywgLTEzMjU5MTI3LCAtMzQwMjQ2MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMzA4NjAxMDMsIDEyNzM1MjA4LCAtMTg4ODI0NSwgLTQ2OTk3MzQsIC0xNjk3NDkwNiwgMjI1Njk0MCwgLTgxNjYwMTMsIDEyMjk4MzEyLCAtODU1MDUyNCwgLTEwMzkzNDYyKSwKICAgICAgICAgICAgICAgIGFycmF5KC01NzE5ODI2LCAtMTEyNDUzMjUsIC0xOTEwNjQ5LCAxNTU2OTAzNSwgMjY2NDI4NzYsIC03NTg3NzYwLCAtNTc4OTM1NCwgLTE1MTE4NjU0LCAtNDk3NjE2NCwgMTI2NTE3OTMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4NDgzOTUsIDk5NTM0MjEsIDExNTMxMzEzLCAtNTI4Mjg3OSwgMjY4OTUxMjMsIC0xMjY5NzA4OSwgLTEzMTE4ODIwLCAtMTY1MTc5MDIsIDk3Njg2OTgsIC0yNTMzMjE4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ3MTk0NTksIDE4OTQ2NTEsIC0yODc2OTgsIC00NzA0MDg1LCAxNTM0ODcxOSwgLTgxNTY1MzAsIDMyNzY3NTEzLCAxMjc2NTQ1MCwgNDk0MDA5NSwgMTA2NzgyMjYpLAogICAgICAgICAgICAgICAgYXJyYXkoMTg4NjAyMjQsIDE1OTgwMTQ5LCAtMTg5ODcyNDAsIC0xNTYyNTcwLCAtMjYyMzMwMTIsIC0xMTA3MTg1NiwgLTc4NDM4ODIsIDEzOTQ0MDI0LCAtMjQzNzIzNDgsIDE2NTgyMDE5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTUwNDI2MCwgNDk3MDI2OCwgLTI5ODkzMDQ0LCA0MTc1NTkzLCAtMjA5OTMyMTIsIC0yMTk5NzU2LCAtMTE3MDQwNTQsIDE1NDQ0NTYwLCAtMTEwMDM3NjEsIDc5ODkwMzcpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMxNDkwNDUyLCA1NTY4MDYxLCAtMjQxMjgwMywgMjE4MjM4MywgLTMyMzM2ODQ3LCA0NTMxNjg2LCAtMzIwNzgyNjksIDYyMDAyMDYsIC0xOTY4NjExMywgLTE0ODAwMTcxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzMwODY2OCwgLTE1ODc5OTQwLCAtMzE1MjI3NzcsIC0yODMxLCAtMzI4ODczODIsIDE2Mzc1NTQ5LCA4NjgwMTU4LCAtMTYzNzE3MTMsIDI4NTUwMDY4LCAtNjg1NzEzMiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjgxMjY4ODcsIC01Njg4MDkxLCAxNjgzNzg0NSwgLTE4MjA0NTgsIC02ODUwNjgxLCAxMjcwMDAxNiwgLTMwMDM5OTgxLCA0MzY0MDM4LCAxMTU1NjAyLCA1OTg4ODQxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMTg5MDQzNSwgLTEzMjcyOTA3LCAtMTI2MjQwMTEsIDEyMTU0MzQ5LCAtNzgzMTg3MywgMTUzMDA0OTYsIDIzMTQ4OTgzLCAtNDQ3MDQ4MSwgMjQ2MTg0MDcsIDgyODMxODEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMzMTM2MTA3LCAtMTA1MTI3NTEsIDk5NzU0MTYsIDY4NDEwNDEsIC0zMTU1OTc5MywgMTYzNTY1MzYsIDMwNzAxODcsIC03MDI1OTI4LCAxNDY2MTY5LCAxMDc0MDIxMCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTUwOTM5OSwgLTE1NDg4MTg1LCAtMTM1MDMzODUsIC0xMDY1NTkxNiwgMzI3OTkwNDQsIDkwOTM5NCwgLTEzOTM4OTAzLCAtNTc3OTcxOSwgLTMyMTY0NjQ5LCAtMTUzMjcwNDApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDM5NjA4MjMsIC0xNDI2NzgwMywgLTI4MDI2MDkwLCAtMTU5MTgwNTEsIC0xOTQwNDg1OCwgMTMxNDY4NjgsIDE1NTY3MzI3LCA5NTE1MDcsIC0zMjYwMzIxLCAtNTczOTM1KSwKICAgICAgICAgICAgICAgIGFycmF5KDI0NzQwODQxLCA1MDUyMjUzLCAtMzAwOTQxMzEsIDg5NjEzNjEsIDI1ODc3NDI4LCA2MTY1MTM1LCAtMjQzNjgxODAsIDE0Mzk3MzcyLCAtNzM4MDM2OSwgLTYxNDQxMDUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4ODg4MzY1LCAzNTEwODAzLCAtMjgxMDMyNzgsIC0xMTU4NDc4LCAtMTEyMzgxMjgsIC0xMDYzMTQ1NCwgLTE1NDQxNDYzLCAtMTQ0NTMxMjgsIC0xNjI1NDg2LCAtNjQ5NDgxNCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSg3OTMyOTksIC05MjMwNDc4LCA4ODM2MzAyLCAtNjIzNTcwNywgLTI3MzYwOTA4LCAtMjM2OTU5MywgMzMxNTI4NDMsIC00ODg1MjUxLCAtOTkwNjIwMCwgLTYyMTg1MiksCiAgICAgICAgICAgICAgICBhcnJheSg1NjY2MjMzLCA1MjU1ODIsIDIwNzgyNTc1LCAtODAzODQxOSwgLTI0NTM4NDk5LCAxNDY1Nzc0MCwgMTYwOTkzNzQsIDE0Njg4MjYsIC02MTcxNDI4LCAtMTUxODY1ODEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQ4NTkyNTUsIC0zNzc5MzQzLCAtMjkxNzc1OCwgLTY3NDgwMTksIDc3Nzg3NTAsIDExNjg4Mjg4LCAtMzA0MDQzNTMsIC05ODcxMjM4LCAtMTU1ODkyMywgLTk4NjM2NDYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDEwODk2MzMyLCAtNzcxOTcwNCwgODI0Mjc1LCA0NzI2MDEsIC0xOTQ2MDMwOCwgMzAwOTU4NywgMjUyNDg5NTgsIDE0NzgzMzM4LCAtMzA1ODE0NzYsIC0xNTc1Nzg0NCksCiAgICAgICAgICAgICAgICBhcnJheSgxMDU2NjkyOSwgMTI2MTI1NzIsIC0zMTk0NDIxMiwgMTExMTg3MDMsIC0xMjYzMzM3NiwgMTIzNjI4NzksIDIxNzUyNDAyLCA4ODIyNDk2LCAyNDAwMzc5MywgMTQyNjQwMjUpLAogICAgICAgICAgICAgICAgYXJyYXkoMjc3MTM4NjIsIC03MzU1OTczLCAtMTEwMDgyNDAsIDkyMjc1MzAsIDI3MDUwMTAxLCAyNTA0NzIxLCAyMzg4Njg3NSwgLTEzMTE3NTI1LCAxMzk1ODQ5NSwgLTU3MzI0NTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMzQ4MTYxMCwgNDg2NzIyNiwgLTI3MjQ3MTI4LCAzOTAwNTIxLCAyOTgzODM2OSwgLTgyMTIyOTEsIC0zMTg4OTM5OSwgLTEwMDQxNzgxLCA3MzQwNTIxLCAtMTU0MTAwNjgpLAogICAgICAgICAgICAgICAgYXJyYXkoNDY0NjUxNCwgLTgwMTExMjQsIC0yMjc2NjAyMywgLTExNTMyNjU0LCAyMzE4NDU1MywgODU2NjYxMywgMzEzNjY3MjYsIC0xMzgxMDYxLCAtMTUwNjY3ODQsIC0xMDM3NTE5MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTcyNzA1MTcsIDEyNzIzMDMyLCAtMTY5OTMwNjEsIDE0ODc4Nzk0LCAyMTYxOTY1MSwgLTYxOTc1NzYsIDI3NTg0ODE3LCAzMDkzODg4LCAtODg0MzY5NCwgMzg0OTkyMSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTkwNjQ5MTIsIDIxMDMxNzIsIDI1NTYxNjQwLCAtMTUxMjU3MzgsIC01MjM5ODI0LCA5NTgyOTU4LCAzMjQ3NzA0NSwgLTkwMTc5NTUsIDUwMDIyOTQsIC0xNTU1MDI1OSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTIwNTc1NTMsIC0xMTE3NzkwNiwgMjExMTU1ODUsIC0xMzM2NTE1NSwgODgwODcxMiwgLTEyMDMwNzA4LCAxNjQ4OTUzMCwgMTMzNzg0NDgsIC0yNTg0NTcxNiwgMTI3NDE0MjYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTU5NDYzNjcsIDEwNjQ1MTAzLCAtMzA5MTE1ODYsIDE1MzkwMjg0LCAtMzI4Njk4MiwgLTcxMTg2NzcsIDI0MzA2NDcyLCAxNTg1MjQ2NCwgMjg4MzQxMTgsIC03NjQ2MDcyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTczMzU3NDgsIC05MTA3MDU3LCAtMjQ1MzEyNzksIDk0MzQ5NTMsIC04NDcyMDg0LCAtNTgzMzYyLCAtMTMwOTA3NzEsIDQ1NTg0MSwgMjA0NjE4NTgsIDU0OTEzMDUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTM2NjkyNDgsIC0xNjA5NTQ4MiwgLTEyNDgxOTc0LCAtMTAyMDMwMzksIC0xNDU2OTc3MCwgLTExODkzMTk4LCAtMjQ5OTU5ODYsIDExMjkzODA3LCAtMjg1ODgyMDQsIC05NDIxODMyKSwKICAgICAgICAgICAgICAgIGFycmF5KDI4NDk3OTI4LCA2MjcyNzc3LCAtMzMwMjI5OTQsIDE0NDcwNTcwLCA4OTA2MTc5LCAtMTIyNTYzMCwgMTg1MDQ2NzQsIC0xNDE2NTE2NiwgMjk4Njc3NDUsIC04Nzk1OTQzKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTYyMDcwMjMsIDEzNTE3MTk2LCAtMjc3OTk2MzAsIC0xMzY5Nzc5OCwgMjQwMDkwNjQsIC02MzczODkxLCAtNjM2NzYwMCwgLTEzMTc1MzkyLCAyMjg1MzQyOSwgLTQwMTIwMTEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjQxOTEzNzgsIDE2NzEyMTQ1LCAtMTM5MzE3OTcsIDE1MjE3ODMxLCAxNDU0MjIzNywgMTY0NjEzMSwgMTg2MDM1MTQsIC0xMTAzNzg4NywgMTI4NzY2MjMsIC0yMTEyNDQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KDE3OTAyNjY4LCA0NTE4MjI5LCAtNDExNzAyLCAtMjgyOTI0NywgMjY4NzgyMTcsIDUyNTgwNTUsIC0xMjg2MDc1MywgNjA4Mzk3LCAxNjAzMTg0NCwgMzcyMzQ5NCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI4NjMyNzczLCAxMjc2MzcyOCwgLTIwNDQ2NDQ2LCA3NTc3NTA0LCAzMzAwMTM0OCwgLTEzMDE3NzQ1LCAxNzU1ODg0MiwgLTc4NzI4OTAsIDIzODk2OTU0LCAtNDMxNDI0NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjAwMDUzODEsIC0xMjAxMTk1MiwgMzE1MjA0NjQsIDYwNTIwMSwgMjU0MzUyMSwgNTk5MTgyMSwgLTI5NDUwNjQsIDcyMjkwNjQsIC05OTE5NjQ2LCAtODgyNjg1OSksCiAgICAgICAgICAgICAgICBhcnJheSgyODgxNjA0NSwgMjk4ODc5LCAtMjgxNjUwMTYsIC0xNTkyMDkzOCwgMTkwMDA5MjgsIC0xNjY1ODkwLCAtMTI2ODA4MzMsIC0yOTQ5MzI1LCAtMTgwNTE3NzgsIC0yMDgyOTE1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxNjAwMDg4MiwgLTM0NDg5NiwgMzQ5MzA5MiwgLTExNDQ3MTk4LCAtMjk1MDQ1OTUsIC0xMzE1OTc4OSwgMTI1Nzc3NDAsIDE2MDQxMjY4LCAtMTk3MTUyNDAsIDc4NDc3MDcpLAogICAgICAgICAgICAgICAgYXJyYXkoMTAxNTE4NjgsIDEwNTcyMDk4LCAyNzMxMjQ3NiwgNzkyMjY4MiwgMTQ4MjUzMzksIDQ3MjMxMjgsIC0zMjg1NTkzMSwgLTY1MTkwMTgsIC0xMDAyMDU2NywgMzg1Mjg0OCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTE0MzA0NzAsIDE1Njk3NTk2LCAtMjExMjE1NTcsIC00NDIwNjQ3LCA1Mzg2MzE0LCAxNTA2MzU5OCwgMTY1MTQ0OTMsIC0xNTkzMjExMCwgMjkzMzA4OTksIC0xNTA3NjIyNCksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjU0OTk3MzUsIC00Mzc4Nzk0LCAtMTUyMjI5MDgsIC02OTAxMjExLCAxNjYxNTczMSwgMjA1MTc4NCwgMzMwMzcwMiwgMTU0OTAsIC0yNzU0ODc5NiwgMTIzMTQzOTEpLAogICAgICAgICAgICAgICAgYXJyYXkoMTU2ODM1MjAsIC02MDAzMDQzLCAxODEwOTEyMCwgLTk5ODA2NDgsIDE1MzM3OTY4LCAtNTk5NzgyMywgLTE2NzE3NDM1LCAxNTkyMTg2NiwgMTYxMDM5OTYsIC0zNzMxMjE1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yMzE2OTgyNCwgLTEwNzgxMjQ5LCAxMzU4ODE5MiwgLTE2Mjg4MDcsIC0zNzk4NTU3LCAtMTA3NDkyOSwgLTE5MjczNjA3LCA1NDAyNjk5LCAtMjk4MTU3MTMsIC05ODQxMTAxKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMzE5MDY3NiwgMjM4NDU4MywgLTMyNzE0MzQwLCAzNDYyMTU0LCAtMjk5MDM2NTUsIC0xNTI5MTMyLCAtMTEyNjY4NTYsIDg5MTE1MTcsIC0yNTIwNTg1OSwgMjczOTcxMyksCiAgICAgICAgICAgICAgICBhcnJheSgyMTM3NDEwMSwgLTM1NTQyNTAsIC0zMzUyNDY0OSwgOTg3NDQxMSwgMTUzNzcxNzksIDExODMxMjQyLCAtMzM1Mjk5MDQsIDYxMzQ5MDcsIDQ5MzEyNTUsIDExOTg3ODQ5KSwKICAgICAgICAgICAgICAgIGFycmF5KC03NzMyLCAtMjk3ODg1OCwgLTE2MjIzNDg2LCA3Mjc3NTk3LCAxMDU1MjQsIC0zMjIwNTEsIC0zMTQ4MDUzOSwgMTM4NjEzODgsIC0zMDA3NjMxMCwgMTAxMTc5MzApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yOTUwMTE3MCwgLTEwNzQ0ODcyLCAtMjYxNjM3NjgsIDEzMDUxNTM5LCAtMjU2MjU1NjQsIDUwODk2NDMsIC02MzI1NTAzLCA2NzA0MDc5LCAxMjg5MDAxOSwgMTU3Mjg5NDApLAogICAgICAgICAgICAgICAgYXJyYXkoLTIxOTcyMzYwLCAtMTE3NzEzNzksIC05NTEwNTksIC00NDE4ODQwLCAxNDcwNDg0MCwgMjY5NTExNiwgOTAzMzc2LCAtMTA0MjgxMzksIDEyODg1MTY3LCA4MzExMDMxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNzUxNjQ4MiwgNTM1MjE5NCwgMTAzODQyMTMsIC0xMzgxMTY1OCwgNzUwNjQ1MSwgMTM0NTMxOTEsIDI2NDIzMjY3LCA0Mzg0NzMwLCAxODg4NzY1LCAtNTQzNTQwNCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1ODE3MzM4LCAtMzEwNzMxMiwgLTEzNDk0NTk5LCAtMzE4MjUwNiwgMzA4OTY0NTksIC0xMzkyMTcyOSwgLTMyMjUxNjQ0LCAtMTI3MDc4NjksIC0xOTQ2NDQzNCwgLTMzNDAyNDMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNjA3OTc3LCAtMjY2NTc3NCwgLTUyNjA5MSwgNDY1MTEzNiwgNTc2NTA4OSwgNDYxODMzMCwgNjA5MjI0NSwgMTQ4NDUxOTcsIDE3MTUxMjc5LCAtOTg1NDExNiksCiAgICAgICAgICAgICAgICBhcnJheSgtMjQ4MzA0NTgsIC0xMjczMzcyMCwgLTE1MTY1OTc4LCAxMDM2NzI1MCwgLTI5NTMwOTA4LCAtMjY1MzU2LCAyMjgyNTgwNSwgLTcwODcyNzksIC0xNjg2NjQ4NCwgMTYxNzY1MjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMzU4MzI1NiwgNjU2NDk2MSwgMjAwNjM2ODksIDM3OTgyMjgsIC00NzQwMTc4LCA3MzU5MjI1LCAyMDA2MTgyLCAtMTAzNjM0MjYsIC0yODc0NjI1MywgLTEwMTk3NTA5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDYyNjYwMCwgLTQ0ODY0MDIsIC0xMzMyMDU2MiwgLTUxMjUzMTcsIDM0MzIxMzYsIC02MzkzMjI5LCAyMzYzMjAzNywgLTE5NDA2MTAsIDMyODA4MzEwLCAxMDk5ODgzKSwKICAgICAgICAgICAgICAgIGFycmF5KDE1MDMwOTc3LCA1NzY4ODI1LCAtMjc0NTEyMzYsIC0yODg3Mjk5LCAtNjQyNzM3OCwgLTE1MzYxMzcxLCAtMTUyNzc4OTYsIC02ODA5MzUwLCAyMDUxNDQxLCAtMTUyMjU4NjUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMzYyMzIzLCAtNzIzOTM3MiwgNzUxNzg5MCwgOTgyNDk5MiwgMjM1NTU4NTAsIDI5NTM2OSwgNTE0ODM5OCwgLTE0MTU0MTg4LCAtMjI2ODYzNTQsIDE2NjMzNjYwKSwKICAgICAgICAgICAgICAgIGFycmF5KDQ1NzcwODYsIC0xNjc1MjI4OCwgMTMyNDk4NDEsIC0xNTMwNDMyOCwgMTk5NTg3NjMsIC0xNDUzNzI3NCwgMTg1NTk2NzAsIC0xMDc1OTU0OSwgODQwMjQ3OCwgLTk4NjQyNzMpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI4NDA2MzMwLCAtMTA1MTU4MSwgLTI2NzkwMTU1LCAtOTA3Njk4LCAtMTcyMTI0MTQsIC0xMTAzMDc4OSwgOTQ1MzQ1MSwgLTE0OTgwMDcyLCAxNzk4MzAxMCwgOTk2NzEzOCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI1NzYyNDk0LCA2NTI0NzIyLCAyNjU4NTQ4OCwgOTk2OTI3MCwgMjQ3MDkyOTgsIDEyMjAzNjAsIC0xNjc3OTkwLCA3ODA2MzM3LCAxNzUwNzM5NiwgMzY1MTU2MCksCiAgICAgICAgICAgICAgICBhcnJheSgtMTA0MjA0NTcsIC00MTE4MTExLCAxNDU4NDYzOSwgMTU5NzEwODcsIC0xNTc2ODMyMSwgODg2MTAxMCwgMjY1NTY4MDksIC01NTc0NTU3LCAtMTg1NTMzMjIsIC0xMTM1NzEzNSksCiAgICAgICAgICAgICAgICBhcnJheSgyODM5MTAxLCAxNDI4NDE0MiwgNDAyOTg5NSwgMzQ3MjY4NiwgMTQ0MDI5NTcsIDEyNjg5MzYzLCAtMjY2NDIxMjEsIDg0NTk0NDcsIC01NjA1NDYzLCAtNzYyMTk0MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTQ4MzkyODksIC0zNTM1NDQ0LCA5NzQ0OTYxLCAyODcxMDQ4LCAyNTExMzk3OCwgMzE4NzAxOCwgLTI1MTEwODEzLCAtODQ5MDY2LCAxNzI1ODA4NCwgLTc5Nzc3MzkpLAogICAgICAgICAgICAgICAgYXJyYXkoMTgxNjQ1NDEsIC0xMDU5NTE3NiwgLTE3MTU0ODgyLCAtMTU0MjQxNywgMTkyMzcwNzgsIC05NzQ1Mjk1LCAyMzM1NzUzMywgLTE1MjE3MDA4LCAyNjkwODI3MCwgMTIxNTA3NTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMwMjY0ODcwLCAtNzY0Nzg2NSwgNTExMjI0OSwgLTcwMzY2NzIsIC0xNDk5ODA3LCAtNjk3NDI1NywgNDMxNjgsIC01NTM3NzAxLCAtMzIzMDIwNzQsIDE2MjE1ODE5KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC02ODk4OTA1LCA5ODI0Mzk0LCAtMTIzMDQ3NzksIC00NDAxMDg5LCAtMzEzOTcxNDEsIC02Mjc2ODM1LCAzMjU3NDQ4OSwgMTI1MzI5MDUsIC03NTAzMDcyLCAtODY3NTM0NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjczNDM1MjIsIC0xNjUxNTQ2OCwgLTI3MTUxNTI0LCAtMTA3MjI5NTEsIDk0NjM0NiwgMTYyOTEwOTMsIDI1NDk2OCwgNzE2ODA4MCwgMjE2NzYxMDcsIC0xOTQzMDI4KSwKICAgICAgICAgICAgICAgIGFycmF5KDIxMjYwOTYxLCAtODQyNDc1MiwgLTE2ODMxODg2LCAtMTE5MjA4MjIsIC0yMzY3Nzk2MSwgMzk2ODEyMSwgLTM2NTE5NDksIC02MjE1NDY2LCAtMzU1NjE5MSwgLTc5MTMwNzUpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE2NTQ0NzU0LCAxMzI1MDM2NiwgLTE2ODA0NDI4LCAxNTU0NjI0MiwgLTQ1ODMwMDMsIDEyNzU3MjU4LCAtMjQ2MjMwOCwgLTg2ODAzMzYsIC0xODkwNzAzMiwgLTk2NjI3OTkpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI0MTUyMzksIC0xNTU3NzcyOCwgMTgzMTIzMDMsIDQ5NjQ0NDMsIC0xNTI3MjUzMCwgLTEyNjUzNTY0LCAyNjgyMDY1MSwgMTY2OTA2NTksIDI1NDU5NDM3LCAtNDU2NDYwOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjUxNDQ2OTAsIDExNDI1MDIwLCAyODQyMzAwMiwgLTExMDIwNTU3LCAtNjE0NDkyMSwgLTE1ODI2MjI0LCA5MTQyNzk1LCAtMjM5MTYwMiwgLTY0MzI0MTgsIC0xNjQ0ODE3KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjMxMDQ2NTIsIDYyNTM0NzYsIDE2OTY0MTQ3LCAtMzc2ODg3MiwgLTI1MTEzOTcyLCAtMTIyOTY0MzcsIC0yNzQ1NzIyNSwgLTE2MzQ0NjU4LCA2MzM1NjkyLCA3MjQ5OTg5KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMDMzMzIyNywgMTM5Nzk2NzUsIDc1MDMyMjIsIC0xMjM2ODMxNCwgLTExOTU2NzIxLCAtNDYyMTY5MywgLTMwMjcyMjY5LCAyNjgyMjQyLCAyNTk5MzE3MCwgLTEyNDc4NTIzKSwKICAgICAgICAgICAgICAgIGFycmF5KDQzNjQ2MjgsIDU5MzA2OTEsIDMyMzA0NjU2LCAtMTAwNDQ1NTQsIC04MDU0NzgxLCAxNTA5MTEzMSwgMjI4NTcwMTYsIC0xMDU5ODk1NSwgMzE4MjAzNjgsIDE1MDc1Mjc4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMTg3OTEzNCwgLTg5MTg2OTMsIDE3MjU4NzYxLCA5MDYyNiwgLTgwNDE4MzYsIC00OTE3NzA5LCAyNDE2Mjc4OCwgLTk2NTA4ODYsIC0xNzk3MDIzOCwgMTI4MzMwNDUpLAogICAgICAgICAgICAgICAgYXJyYXkoMTkwNzM2ODMsIDE0ODUxNDE0LCAtMjQ0MDMxNjksIC0xMTg2MDE2OCwgNzYyNTI3OCwgMTEwOTExMjUsIC0xOTYxOTE5MCwgMjA3NDQ0OSwgLTk0MTM5MzksIDE0OTA1Mzc3KSwKICAgICAgICAgICAgICAgIGFycmF5KDI0NDgzNjY3LCAtMTE5MzU1NjcsIC0yNTE4ODY2LCAtMTE1NDc0MTgsIC0xNTUzMTMwLCAxNTM1NTUwNiwgLTI1MjgyMDgwLCA5MjUzMTI5LCAyNzYyODUzMCwgLTc1NTU0ODApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE3NTk3NjA3LCA4MzQwNjAzLCAxOTM1NTYxNywgNTUyMTg3LCAyNjE5ODQ3MCwgLTMxNzY1ODMsIDQ1OTMzMjQsIC05MTU3NTgyLCAtMTQxMTA4NzUsIDE1Mjk3MDE2KSwKICAgICAgICAgICAgICAgIGFycmF5KDUxMDg4NiwgMTQzMzczOTAsIC0zMTc4NTI1NywgMTY2Mzg2MzIsIDYzMjgwOTUsIDI3MTMzNTUsIC0yMDIxNzQxNywgLTExODY0MjIwLCA4NjgzMjIxLCAyOTIxNDI2KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4NjA2NzkxLCAxMTg3NDE5NiwgMjcxNTUzNTUsIC01MjgxNDgyLCAtMjQwMzE3NDIsIDYyNjU0NDYsIC0yNTE3ODI0MCwgLTEyNzg5MjQsIDQ2NzQ2OTAsIDEzODkwNTI1KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMzYwOTYyNCwgMTMwNjkwMjIsIC0yNzM3MjM2MSwgLTEzMDU1OTA4LCAyNDM2MDU4NiwgOTU5Mjk3NCwgMTQ5NzcxNTcsIDk4MzUxMDUsIDQzODk2ODcsIDI4ODM5NiksCiAgICAgICAgICAgICAgICBhcnJheSg5OTIyNTA2LCAtNTE5Mzk0LCAxMzYxMzEwNywgNTg4MzU5NCwgLTE4NzU4MzQ1LCAtNDM0MjYzLCAtMTIzMDQwNjIsIDgzMTc2MjgsIDIzMzg4MDcwLCAxNjA1MjA4MCksCiAgICAgICAgICAgICAgICBhcnJheSgxMjcyMDAxNiwgMTE5Mzc1OTQsIC0zMTk3MDA2MCwgLTUwMjg2ODksIDI2OTAwMTIwLCA4NTYxMzI4LCAtMjAxNTU2ODcsIC0xMTYzMjk3OSwgLTE0NzU0MjcxLCAtMTA4MTI4OTIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDE1OTYxODU4LCAxNDE1MDQwOSwgMjY3MTY5MzEsIC02NjU4MzIsIC0yMjc5NDMyOCwgMTM2MDM1NjksIDExODI5NTczLCA3NDY3ODQ0LCAtMjg4MjIxMjgsIDkyOTI3NSksCiAgICAgICAgICAgICAgICBhcnJheSgxMTAzODIzMSwgLTExNTgyMzk2LCAtMjczMTA0ODIsIC03MzE2NTYyLCAtMTA0OTg1MjcsIC0xNjMwNzgzMSwgLTIzNDc5NTMzLCAtOTM3MTg2OSwgLTIxMzkzMTQzLCAyNDY1MDc0KSwKICAgICAgICAgICAgICAgIGFycmF5KDIwMDE3MTYzLCAtNDMyMzIyNiwgMjc5MTUyNDIsIDE1MjkxNDgsIDEyMzk2MzYyLCAxNTY3NTc2NCwgMTM4MTcyNjEsIC05NjU4MDY2LCAyNDYzMzkxLCAtNDYyMjE0MCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE2MzU4ODc4LCAtMTI2NjM5MTEsIC0xMjA2NTE4MywgNDk5NjQ1NCwgLTEyNTY0MjIsIDEwNzM1NzIsIDk1ODM1NTgsIDEyODUxMTA3LCA0MDAzODk2LCAxMjY3MzcxNyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTczMTU4OSwgLTE1MTU1ODcwLCAtMzI2MjkzMCwgMTYxNDMwODIsIDE5Mjk0MTM1LCAxMzM4NTMyNSwgMTQ3NDE1MTQsIC05MTAzNzI2LCA3OTAzODg2LCAyMzQ4MTAxKSwKICAgICAgICAgICAgICAgIGFycmF5KDI0NTM2MDE2LCAtMTY1MTUyMDcsIDEyNzE1NTkyLCAtMzg2MjE1NSwgMTUxMTI5MywgMTAwNDczODYsIC0zODQyMzQ2LCAtNzEyOTE1OSwgLTI4Mzc3NTM4LCAxMDA0ODEyNyksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTI2MjIyMjYsIC02MjA0ODIwLCAzMDcxODgyNSwgMjU5MTMxMiwgLTEwNjE3MDI4LCAxMjE5Mjg0MCwgMTg4NzMyOTgsIC03Mjk3MDkwLCAtMzIyOTc3NTYsIDE1MjIxNjMyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjQ3ODEyMiwgLTExMTAzODY0LCAxMTU0NjI0NCwgLTE4NTI0ODMsIDkxODA4ODAsIDc2NTY0MDksIC0yMTM0Mzk1MCwgMjA5NTc1NSwgMjk3Njk3NTgsIDY1OTM0MTUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTMxOTk0MjA4LCAtMjkwNzQ2MSwgNDE3NjkxMiwgMzI2NDc2NiwgMTI1Mzg5NjUsIC04NjgxMTEsIDI2MzEyMzQ1LCAtNjExODY3OCwgMzA5NTgwNTQsIDgyOTIxNjApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMxNDI5ODIyLCAtMTM5NTkxMTYsIDI5MTczNTMyLCAxNTYzMjQ0OCwgMTIxNzQ1MTEsIC0yNzYwMDk0LCAzMjgwODgzMSwgMzk3NzE4NiwgMjYxNDMxMzYsIC0zMTQ4ODc2KSwKICAgICAgICAgICAgICAgIGFycmF5KDIyNjQ4OTAxLCAxNDAyMTQzLCAtMjI3OTk5ODQsIDEzNzQ2MDU5LCA3OTM2MzQ3LCAzNjUzNDQsIC04NjY4NjMzLCAtMTY3NDQzMywgLTM3NTgyNDMsIC0yMzA0NjI1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTQ5MTkxNywgODAxMjMxMywgLTI1MTQ3MzAsIC0xMjcwMjQ2MiwgLTIzOTY1ODQ2LCAtMTAyNTQwMjksIC0xNjEyNzEzLCAtMTUzNTU2OSwgLTE2NjY0NDc1LCA4MTk0NDc4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNzMzODA2NiwgLTc1MDc0MjAsIC03NDE0MjI0LCAxMDE0MDQwNSwgLTE5MDI2NDI3LCAtNjU4OTg4OSwgMjcyNzcxOTEsIDg4NTUzNzYsIDI4NTcyMjg2LCAzMDA1MTY0KSwKICAgICAgICAgICAgICAgIGFycmF5KDI2Mjg3MTI0LCA0ODIxNzc2LCAyNTQ3NjYwMSwgLTQxNDU5MDMsIC0zNzY0NTEzLCAtMTU3ODg5ODQsIC0xODAwODU4MiwgMTE4MjQ3OSwgLTI2MDk0ODIxLCAtMTMwNzk1OTUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTcxNzExNTQsIDMxNzgwODAsIDIzOTcwMDcxLCA2MjAxODkzLCAtMTcxOTU1NzcsIC00NDg5MTkyLCAtMjE4NzYyNzUsIC0xMzk4MjYyNywgMzIyMDg2ODMsIC0xMTk4MjQ4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTY2NTc3MDIsIDI4MTc2NDMsIC0xMDI4NjM2MiwgMTQ4MTEyOTgsIDYwMjQ2NjcsIDEzMzQ5NTA1LCAtMjczMTU1MDQsIC0xMDQ5Nzg0MiwgLTI3NjcyNTg1LCAtMTE1Mzk4NTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTU5NDEwMjksIC05NDA1OTMyLCAtMjEzNjcwNTAsIDgwNjIwNTUsIDMxODc2MDczLCAtMjM4NjI5LCAtMTUyNzgzOTMsIC0xNDQ0NDI5LCAxNTM5NzMzMSwgLTQxMzAxOTMpLAogICAgICAgICAgICAgICAgYXJyYXkoODkzNDQ4NSwgLTEzNDg1NDY3LCAtMjMyODYzOTcsIC0xMzQyMzI0MSwgLTMyNDQ2MDkwLCAxNDA0Nzk4NiwgMzExNzAzOTgsIC0xNDQxMDIxLCAtMjc1MDU1NjYsIDE1MDg3MTg0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTgzNTcyNDMsIC0yMTU2NDkxLCAyNDUyNDkxMywgLTE2Njc3ODY4LCAxNTUyMDQyNywgLTYzNjA3NzYsIC0xNTUwMjQwNiwgMTE0NjE4OTYsIDE2Nzg4NTI4LCAtNTg2ODk0MiksCiAgICAgICAgICAgICAgICBhcnJheSgtMTk0NzM4NiwgMTYwMTM3NzMsIDIxNzUwNjY1LCAzNzE0NTUyLCAtMTc0MDE3ODIsIC0xNjA1NTQzMywgLTM3NzAyODcsIC0xMDMyMzMyMCwgMzEzMjI1MTQsIC0xMTYxNTYzNSksCiAgICAgICAgICAgICAgICBhcnJheSgyMTQyNjY1NSwgLTU2NTAyMTgsIC0xMzY0ODI4NywgLTUzNDc1MzcsIC0yODgxMjE4OSwgLTQ5MjA5NzAsIC0xODI3NTM5MSwgLTE0NjIxNDE0LCAxMzA0MDg2MiwgLTEyMTEyOTQ4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgxMTI5Mzg5NSwgMTI0NzgwODYsIC0yNzEzNjQwMSwgMTUwODM3NTAsIC0yOTMwNzQyMSwgMTQ3NDg4NzIsIDE0NTU1NTU4LCAtMTM0MTcxMDMsIDE2MTM3MTEsIDQ4OTY5MzUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI1ODk0ODgzLCAxNTMyMzI5NCwgLTg0ODk3OTEsIC04MDU3OTAwLCAyNTk2NzEyNiwgLTEzNDI1NDYwLCAyODI1OTYwLCAtNDg5NzA0NSwgLTIzOTcxNzc2LCAtMTEyNjc0MTUpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE1OTI0NzY2LCAtNTIyOTg4MCwgLTE3NDQzNTMyLCA2NDEwNjY0LCAzNjIyODQ3LCAxMDI0MzYxOCwgMjA2MTU0MDAsIDEyNDA1NDMzLCAtMjM3NTMwMzAsIC04NDM2NDE2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtNzA5MTI5NSwgMTI1NTYyMDgsIC0yMDE5MTM1MiwgOTAyNTE4NywgLTE3MDcyNDc5LCA0MzMzODAxLCA0Mzc4NDM2LCAyNDMyMDMwLCAyMzA5Nzk0OSwgLTU2NjAxOCksCiAgICAgICAgICAgICAgICBhcnJheSg0NTY1ODA0LCAtMTYwMjU2NTQsIDIwMDg0NDEyLCAtNzg0MjgxNywgMTcyNDk5OSwgMTg5MjU0LCAyNDc2NzI2NCwgMTAxMDMyMjEsIC0xODUxMjMxMywgMjQyNDc3OCksCiAgICAgICAgICAgICAgICBhcnJheSgzNjY2MzMsIC0xMTk3NjgwNiwgODE3MzA5MCwgLTY4OTAxMTksIDMwNzg4NjM0LCA1NzQ1NzA1LCAtNzE2ODY3OCwgMTM0NDEwOSwgLTM2NDI1NTMsIDEyNDEyNjU5KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjQwMDE3OTEsIDc2OTAyODYsIDE0OTI5NDE2LCAtMTY4MjU3LCAtMzIyMTA4MzUsIC0xMzQxMjk4NiwgMjQxNjI2OTcsIC0xNTMyNjUwNCwgLTMxNDE1MDEsIDExMTc5Mzg1KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4Mjg5NTIyLCAtMTQ3MjQ5NTQsIDgwNTY5NDUsIDE2NDMwMDU2LCAtMjE3Mjk3MjQsIDc4NDI1MTQsIC02MDAxNDQxLCAtMTQ4Njg5NywgLTE4Njg0NjQ1LCAtMTE0NDM1MDMpLAogICAgICAgICAgICAgICAgYXJyYXkoNDc2MjM5LCA2NjAxMDkxLCAtNjE1Mjc5MCwgLTk3MjMzNzUsIDE3NTAzNTQ1LCAtNDg2MzkwMCwgMjc2NzI5NTksIDEzNDAzODEzLCAxMTA1MjkwNCwgNTIxOTMyOSksCiAgICAgICAgICAgICksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMDY3ODU0NiwgLTgzNzU3MzgsIC0zMjY3MTg5OCwgODg0OTEyMywgLTUwMDk3NTgsIDE0NTc0NzUyLCAzMTE4Njk3MSwgLTM5NzM3MzAsIDkwMTQ3NjIsIC04NTc5MDU2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzY0NDA1MCwgLTEwMzUwMjM5LCAtMTU5NjI1MDgsIDUwNzU4MDgsIC0xNTE0NjYxLCAtMTE1MzQ2MDAsIC0zMzEwMjUwMCwgOTE2MDI4MCwgODQ3MzU1MCwgLTMyNTY4MzgpLAogICAgICAgICAgICAgICAgYXJyYXkoMjQ5MDA3NDksIDE0NDM1NzIyLCAxNzIwOTEyMCwgLTE1MjkyNTQxLCAtMjI1OTIyNzUsIDk4Nzg5ODMsIC03Njg5MzA5LCAtMTYzMzU4MjEsIC0yNDU2ODQ4MSwgMTE3ODg5NDgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0zMTE4MTU1LCAtMTEzOTUxOTQsIC0xMzgwMjA4OSwgMTQ3OTc0NDEsIDk2NTI0NDgsIC02ODQ1OTA0LCAtMjAwMzc0MzcsIDEwNDEwNzMzLCAtMjQ1Njg0NzAsIC0xNDU4NjkxKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xNTY1OTE2MSwgMTY3MzY3MDYsIC0yMjQ2NzE1MCwgMTAyMTU4NzgsIC05MDk3MTc3LCA3NTYzOTExLCAxMTg3MTg0MSwgLTEyNTA1MTk0LCAtMTg1MTMzMjUsIDg0NjQxMTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzNDAwNjEyLCA4MzQ4NTA3LCAtMTQ1ODU5NTEsIC04NjE3MTQsIC0zOTUwMjA1LCAtNjM3MzQxOSwgMTQzMjUyODksIDg2Mjg2MTIsIDMzMzEzODgxLCAtODM3MDUxNyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMTg2OTczLCAtNDk2NzkzNSwgMjIzNjczNTYsIDUyNzE1NDcsIC0xMDk3MTE3LCAtNDc4ODgzOCwgLTI0ODA1NjY3LCAtMTAyMzY4NTQsIC04OTQwNzM1LCAtNTgxODI2OSksCiAgICAgICAgICAgICAgICBhcnJheSgtNjk0ODc4NSwgLTE3OTUyMTIsIC0zMjYyNTY4MywgLTE2MDIxMTc5LCAzMjYzNTQxNCwgLTczNzQyNDUsIDE1OTg5MTk3LCAtMTI4MzgxODgsIDI4MzU4MTkyLCAtNDI1MzkwNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjM1NjE3ODEsIC0yNzk5MDU5LCAtMzIzNTE2ODIsIC0xNjYxOTYzLCAtOTE0NzcxOSwgMTA0MjkyNjcsIC0xNjYzNzY4NCwgNDA3MjAxNiwgLTUzNTE2NjQsIDU1OTY1ODkpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yODIzNjU5OCwgLTMzOTAwNDgsIDEyMzEyODk2LCA2MjEzMTc4LCAzMTE3MTQyLCAxNjA3ODU2NSwgMjkyNjYyMzksIDI1NTcyMjEsIDE3NjgzMDEsIDE1MzczMTkzKSwKICAgICAgICAgICAgICAgIGFycmF5KC03MjQzMzU4LCAtMzI0Njk2MCwgLTQ1OTM0NjcsIC03NTUzMzUzLCAtMTI3OTI3LCAtOTEyMjQ1LCAtMTA5MDkwMiwgLTQ1MDQ5OTEsIC0yNDY2MDQ5MSwgMzQ0MjkxMCksCiAgICAgICAgICAgICAgICBhcnJheSgtMzAyMTA1NzEsIDUxMjQwNDMsIDE0MTgxNzg0LCA4MTk3OTYxLCAxODk2NDczNCwgLTExOTM5MDkzLCAyMjU5NzkzMSwgNzE3NjQ1NSwgLTE4NTg1NDc4LCAxMzM2NTkzMCksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTc4NzczOTAsIC0xNDk5OTU4LCA4MzI0NjczLCA0NjkwMDc5LCA2MjYxODYwLCA4OTA0NDYsIDI0NTM4MTA3LCAtODU3MDE4NiwgLTk2ODk1OTksIC0zMDMxNjY3KSwKICAgICAgICAgICAgICAgIGFycmF5KDI1MDA4OTA0LCAtMTA3NzE1OTksIC00MzA1MDMxLCAtOTYzODAxMCwgMTYyNjUwMzYsIDE1NzIxNjM1LCA2ODM3OTMsIC0xMTgyMzc4NCwgMTU3MjM0NzksIC0xNTE2MzQ4MSksCiAgICAgICAgICAgICAgICBhcnJheSgtOTY2MDYyNSwgMTIzNzQzNzksIC0yNzAwNjk5OSwgLTcwMjYxNDgsIC03NzI0MTE0LCAtMTIzMTQ1MTQsIDExODc5NjgyLCA1NDAwMTcxLCA1MTk1MjYsIC0xMjM1ODc2KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMjI1ODM5NywgLTE2MzMyMjMzLCAtNzg2OTgxNywgMTQ2MTMwMTYsIC0yMjUyMDI1NSwgLTI5NTA5MjMsIC0yMDM1Mzg4MSwgNzMxNTk2NywgMTY2NDgzOTcsIDc2MDU2NDApLAogICAgICAgICAgICAgICAgYXJyYXkoLTgwODEzMDgsIC04NDY0NTk3LCAtODIyMzMxMSwgOTcxOTcxMCwgMTkyNTk0NTksIC0xNTM0ODIxMiwgMjM5OTQ5NDIsIC01MjgxNTU1LCAtOTQ2ODg0OCwgNDc2MzI3OCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjE2OTkyNDQsIDkyMjA5NjksIC0xNTczMDYyNCwgMTA4NDEzNywgLTI1NDc2MTA3LCAtMjg1MjM5MCwgMzEwODg0NDcsIC03NzY0NTIzLCAtMTEzNTY1MjksIDcyODExMiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMjYwNDcyMjAsIC0xMTc1MTQ3MSwgLTY5MDAzMjMsIC0xNjUyMTc5OCwgMjQwOTIwNjgsIDkxNTgxMTksIC00MjczNTQ1LCAtMTI1NTU1NTgsIC0yOTM2NTQzNiwgLTU0OTgyNzIpLAogICAgICAgICAgICAgICAgYXJyYXkoMTc1MTAzMzEsIC0zMjI4NTcsIDU4NTQyODksIDg0MDM1MjQsIDE3MTMzOTE4LCAtMzExMjYxMiwgLTI4MTExMDA3LCAxMjMyNzk0NSwgMTA3NTA0NDcsIDEwMDE0MDEyKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMDMxMjc2OCwgMzkzNjk1MiwgOTE1NjMxMywgLTg4OTc2ODMsIDE2NDk4NjkyLCAtOTk0NjQ3LCAtMjc0ODEwNTEsIC02NjY3MzIsIDM0MjQ2OTEsIDc1NDAyMjEpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwMzIyMzYxLCAtNjk2NDExMCwgMTEzNjEwMDUsIC00MTQzMzE3LCA3NDMzMzA0LCA0OTg5NzQ4LCAtNzA3MTQyMiwgLTE2MzE3MjE5LCAtOTI0NDI2NSwgMTUyNTgwNDYpLAogICAgICAgICAgICAgICAgYXJyYXkoMTMwNTQ1NjIsIC0yNzc5NDk3LCAxOTE1NTQ3NCwgNDY5MDQ1LCAtMTI0ODI3OTcsIDQ1NjYwNDIsIDU2MzE0MDYsIDI3MTEzOTUsIDEwNjI5MTUsIC01MTM2MzQ1KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xOTI0MDI0OCwgLTExMjU0NTk5LCAtMjk1MDkwMjksIC03NDk5OTY1LCAtNTgzNTc2MywgMTMwMDU0MTEsIC02MDY2NDg5LCAxMjE5NDQ5NywgMzI5NjAzODAsIDE0NTkzMTApLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTk4NTIwMzQsIDcwMjc5MjQsIDIzNjY5MzUzLCAxMDAyMDM2NiwgODU4NjUwMywgLTY2NTc5MDcsIDM5NDE5NywgLTYxMDE4ODUsIDE4NjM4MDAzLCAtMTExNzQ5MzcpLAogICAgICAgICAgICAgICAgYXJyYXkoMzEzOTU1MzQsIDE1MDk4MTA5LCAyNjU4MTAzMCwgODAzMDU2MiwgLTE2NTI3OTE0LCAtNTAwNzEzNCwgOTAxMjQ4NiwgLTc1ODQzNTQsIC02NjQzMDg3LCAtNTQ0MjYzNiksCiAgICAgICAgICAgICAgICBhcnJheSgtOTE5MjE2NSwgLTIzNDczNzcsIC0xOTk3MDk5LCA0NTI5NTM0LCAyNTc2Njg0NCwgNjA3OTg2LCAtMTMyMjIsIDk2Nzc1NDMsIC0zMjI5NDg4OSwgLTY0NTYwMDgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNDQ0NDk2LCAtMTQ5OTM3LCAyOTM0ODkwMiwgODE4NjY2NSwgMTg3Mzc2MCwgMTI0ODk4NjMsIC0zMDkzNDU3OSwgLTc4Mzk2OTIsIC03ODUyODQ0LCAtODEzODQyOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTUyMzYzNTYsIC0xNTQzMzUwOSwgNzc2NjQ3MCwgNzQ2ODYwLCAyNjM0NjkzMCwgLTEwMjIxNzYyLCAtMjczMzM0NTEsIDEwNzU0NTg4LCAtOTQzMTQ3NiwgNTIwMzU3NiksCiAgICAgICAgICAgICAgICBhcnJheSgzMTgzNDMxNCwgMTQxMzU0OTYsIC03NzAwMDcsIDUxNTkxMTgsIDIwOTE3NjcxLCAtMTY3NjgwOTYsIC03NDY3OTczLCAtNzMzNzUyNCwgMzE4MDkyNDMsIDczNDcwNjYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC05NjA2NzIzLCAtMTE4NzQyNDAsIDIwNDE0NDU5LCAxMzAzMzk4NiwgMTM3MTY1MjQsIC0xMTY5MTg4MSwgMTk3OTc5NzAsIC0xMjIxMTI1NSwgMTUxOTI4NzYsIC0yMDg3NDkwKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMjY2MzU2MywgLTIxODE3MTksIDExNjgxNjIsIC0zODA0ODA5LCAyNjc0Nzg3NywgLTE0MTM4MDkxLCAxMDYwOTMzMCwgMTI2OTQ0MjAsIDMzNDczMjQzLCAtMTMzODIxMDQpLAogICAgICAgICAgICAgICAgYXJyYXkoMzMxODQ5OTksIDExMTgwMzU1LCAxNTgzMjA4NSwgLTExMzg1NDMwLCAtMTYzMzY3MSwgMjI1ODg0LCAxNTA4OTMzNiwgLTExMDIzOTAzLCAtNjEzNTY2MiwgMTQ0ODAwNTMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMxMzA4NzE3LCAtNTYxOTk5OCwgMzEwMzA4NDAsIC0xODk3MDk5LCAxNTY3NDU0NywgLTY1ODI4ODMsIDU0OTYyMDgsIDEzNjg1MjI3LCAyNzU5NTA1MCwgODczNzI3NSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjAzMTg4NTIsIC0xNTE1MDIzOSwgMTA5MzM4NDMsIC0xNjE3ODAyMiwgODMzNTM1MiwgLTc1NDYwMjIsIC0zMTAwODM1MSwgLTEyNjEwNjA0LCAyNjQ5ODExNCwgNjY1MTEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjI2NDQ0NTQsIC04NzYxNzI5LCAtMTY2NzE3NzYsIDQ4ODQ1NjIsIC0zMTA1NjE0LCAtMTM1NTkzNjYsIDMwNTQwNzY2LCAtNDI4Njc0NywgLTEzMzI3Nzg3LCAtNzUxNTA5NSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTI4MDE3ODQ3LCA5ODM0ODQ1LCAxODYxNzIwNywgLTI2ODEzMTIsIC0zNDAxOTU2LCAtMTMzMDc1MDYsIDgyMDU1NDAsIDEzNTg1NDM3LCAtMTcxMjc0NjUsIDE1MTE1NDM5KSwKICAgICAgICAgICAgICAgIGFycmF5KDIzNzExNTQzLCAtNjcyOTE1LCAzMTIwNjU2MSwgLTgzNjI3MTEsIDYxNjQ2NDcsIC05NzA5OTg3LCAtMzM1MzU4ODIsIC0xNDI2MDk2LCA4MjM2OTIxLCAxNjQ5MjkzOSksCiAgICAgICAgICAgICAgICBhcnJheSgtMjM5MTA1NTksIC0xMzUxNTUyNiwgLTI2Mjk5NDgzLCAtNDUwMzg0MSwgMjUwMDU1OTAsIC03Njg3MjcwLCAxOTU3NDkwMiwgMTAwNzE1NjIsIDY3MDgzODAsIC02MjIyNDI0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyMTAxMzkxLCAtNDkzMDA1NCwgMTk3MDI3MzEsIDIzNjc1NzUsIC0xNTQyNzE2NywgMTA0NzY3NSwgNTMwMTAxNywgOTMyODcwMCwgMjk5NTU2MDEsIC0xMTY3ODMxMCksCiAgICAgICAgICAgICAgICBhcnJheSgzMDk2MzU5LCA5MjcxODE2LCAtMjE2MjA4NjQsIC0xNTUyMTg0NCwgLTE0ODQ3OTk2LCAtNzU5MjkzNywgLTI1ODkyMTQyLCAtMTI2MzU1OTUsIC05OTE3NTc1LCA2MjE2NjA4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMjYxNTg0OSwgMzM4NjYzLCAtMjUxOTU2MTEsIDI1MTA0MjIsIC0yOTIxMzU2NiwgLTEzODIwMjEzLCAyNDgyMjgzMCwgLTYxNDY1NjcsIC0yNjc2NzQ4MCwgNzUyNTA3OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIzMDY2NjQ5LCAtMTM5ODU2MjMsIDE2MTMzNDg3LCAtNzg5NjE3OCwgLTMzODk1NjUsIDc3ODc4OCwgLTkxMDMzNiwgLTI3ODI0OTUsIC0xOTM4NjYzMywgMTE5OTQxMDEpLAogICAgICAgICAgICAgICAgYXJyYXkoMjE2OTE1MDAsIC0xMzYyNDYyNiwgLTY0MTMzMSwgLTE0MzY3MDIxLCAzMjg1ODgxLCAtMzQ4MzU5NiwgLTI1MDY0NjY2LCA5NzE4MjU4LCAtNzQ3NzQzNywgMTMzODE0MTgpLAogICAgICAgICAgICAgICAgYXJyYXkoMTg0NDUzOTAsIC00MjAyMjM2LCAxNDk3OTg0NiwgMTE2MjI0NTgsIC0xNzI3MTEwLCAtMzU4Mjk4MCwgMjMxMTE2NDgsIC02Mzc1MjQ3LCAyODUzNTI4MiwgMTU3Nzk1NzYpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KDMwMDk4MDUzLCAzMDg5NjYyLCAtOTIzNDM4NywgMTY2NjIxMzUsIC0yMTMwNjk0MCwgMTEzMDg0MTEsIC0xNDA2ODQ1NCwgMTIwMjE3MzAsIDk5NTUyODUsIC0xNjMwMzM1NiksCiAgICAgICAgICAgICAgICBhcnJheSg5NzM0ODk0LCAtMTQ1NzY4MzAsIC03NDczNjMzLCAtOTEzODczNSwgMjA2MDM5MiwgMTEzMTM0OTYsIC0xODQyNjAyOSwgOTkyNDM5OSwgMjAxOTQ4NjEsIDEzMzgwOTk2KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjM3ODEwMiwgLTc5NjUyMDcsIC0yMjE2NzgyMSwgMTU3ODkyOTcsIC0xODA1NTM0MiwgLTYxNjg3OTIsIC0xOTg0OTE0LCAxNTcwNzc3MSwgMjYzNDIwMjMsIDEwMTQ2MDk5KSwKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yNjAxNjg3NCwgLTIxOTk0MywgMjEzMzkxOTEsIC00MTM4OCwgMTk3NDUyNTYsIC0yODc4NzAwLCAtMjk2MzcyODAsIDIyMjcwNDAsIDIxNjEyMzI2LCAtNTQ1NzI4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzA3NzM4NywgMTE4NDIyOCwgMjM1NjI4MTQsIC01OTcwNDQyLCAtMjAzNTEyNDQsIC02MzQ4NzE0LCAyNTc2NDQ2MSwgMTIyNDM3OTcsIC0yMDg1NjU2NiwgMTE2NDk2NTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTEwMDMxNDk0LCAxMTI2MjYyNiwgMjczODQxNzIsIDIyNzE5MDIsIDI2OTQ3NTA0LCAtMTU5OTc3NzEsIDM5OTQ0LCA2MTE0MDY0LCAzMzUxNDE5MCwgMjMzMzI0MiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIxNDMzNTg4LCAtMTI0MjE4MjEsIDgxMTk3ODIsIDcyMTk5MTMsIC0yMTgzMDUyMiwgLTkwMTYxMzQsIC02Njc5NzUwLCAtMTI2NzA2MzgsIDI0MzUwNTc4LCAtMTM0NTAwMDEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTQxMTYzMDcsIC0xMTI3MTUzMywgLTIzODg2MTg2LCA0ODQzNjE1LCAtMzAwODgzMzksIDY5MDYyMywgLTMxNTM2MDg4LCAtMTA0MDY4MzYsIDgzMTc4NjAsIDEyMzUyNzY2KSwKICAgICAgICAgICAgICAgIGFycmF5KDE4MjAwMTM4LCAtMTQ0NzU5MTEsIC0zMzA4Nzc1OSwgLTI2OTY2MTksIC0yMzcwMjUyMSwgLTkxMDI1MTEsIC0yMzU1MjA5NiwgLTIyODc1NTAsIDIwNzEyMTYzLCA2NzE5MzczKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNjY1NjIwOCwgNjA3NTI1MywgLTc4NTg1NTYsIDE4ODYwNzIsIC0yODM0NDA0MywgNDI2MjMyNiwgMTExMTc1MzAsIC0zNzYzMjEwLCAyNjIyNDIzNSwgLTMyOTc0NTgpLAogICAgICAgICAgICAgICAgYXJyYXkoLTE3MTY4OTM4LCAtMTQ4NTQwOTcsIC0zMzk1Njc2LCAtMTYzNjk4NzcsIC0xOTk1NDA0NSwgMTQwNTA0MjAsIDIxNzI4MzUyLCA5NDkzNjEwLCAxODYyMDYxMSwgLTE2NDI4NjI4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0xMzMyMzMyMSwgMTMzMjUzNDksIDExNDMyMTA2LCA1OTY0ODExLCAxODYwOTIyMSwgNjA2Mjk2NSwgLTUyNjk0NzEsIC05NzI1NTU2LCAtMzA3MDE1NzMsIC0xNjQ3OTY1NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIzODYwNTM4LCAtMTEyMzMxNTksIDI2OTYxMzU3LCAxNjQwODYxLCAtMzI0MTMxMTIsIC0xNjczNzk0MCwgMTIyNDg1MDksIC01MjQwNjM5LCAxMzczNTM0MiwgMTkzNDA2MiksCiAgICAgICAgICAgICAgICBhcnJheSgyNTA4OTc2OSwgNjc0MjU4OSwgMTcwODExNDUsIC0xMzQwNjI2NiwgMjE5MDkyOTMsIC0xNjA2Nzk4MSwgLTE1MTM2Mjk0LCAtMzc2NTM0NiwgLTIxMjc3OTk3LCA1NDczNjE2KSwKICAgICAgICAgICAgICAgIGFycmF5KDMxODgzNjc3LCAtNzk2MTEwMSwgMTA4MzQzMiwgLTExNTcyNDAzLCAyMjgyODQ3MSwgMTMyOTA2NzMsIC03MTI1MDg1LCAxMjQ2OTY1NiwgMjkxMTEyMTIsIC01NDUxMDE0KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgyNDI0NDk0NywgLTE1MDUwNDA3LCAtMjYyNjI5NzYsIDI3OTE1NDAsIC0xNDk5NzU5OSwgMTY2NjY2NzgsIDI0MzY3NDY2LCA2Mzg4ODM5LCAtMTAyOTU1ODcsIDQ1MjM4MyksCiAgICAgICAgICAgICAgICBhcnJheSgtMjU2NDA3ODIsIC0zNDE3ODQxLCA1MjE3OTE2LCAxNjIyNDYyNCwgMTk5ODcwMzYsIC00MDgyMjY5LCAtMjQyMzYyNTEsIC01OTE1MjQ4LCAxNTc2NjA2MiwgODQwNzgxNCksCiAgICAgICAgICAgICAgICBhcnJheSgtMjA0MDY5OTksIDEzOTkwMjMxLCAxNTQ5NTQyNSwgMTYzOTU1MjUsIDUzNzcxNjgsIDE1MTY2NDk1LCAtODkxNzAyMywgLTQzODg5NTMsIC04MDY3OTA5LCAyMjc2NzE4KSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgzMDE1NzkxOCwgMTI5MjQwNjYsIC0xNzcxMjA1MCwgOTI0NTc1MywgMTk4OTUwMjgsIDMzNjgxNDIsIC0yMzgyNzU4NywgNTA5NjIxOSwgMjI3NDAzNzYsIC03MzAzNDE3KSwKICAgICAgICAgICAgICAgIGFycmF5KDIwNDExMzksIC0xNDI1NjM1MCwgNzc4MzY4NywgMTM4NzYzNzcsIC0yNTk0Njk4NSwgLTEzMzUyNDU5LCAyNDA1MTEyNCwgMTM3NDIzODMsIC0xNTYzNzU5OSwgMTMyOTUyMjIpLAogICAgICAgICAgICAgICAgYXJyYXkoMzMzMzgyMzcsIC04NTA1NzMzLCAxMjUzMjExMywgNzk3NzUyNywgOTEwNjE4NiwgLTE3MTUyNTEsIC0xNzcyMDE5NSwgLTQ2MTI5NzIsIC00NDUxMzU3LCAtMTQ2Njk0NDQpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0yMDA0NTI4MSwgNTQ1NDA5NywgLTE0MzQ2NTQ4LCA2NDQ3MTQ2LCAyODg2MjA3MSwgMTg4MzY1MSwgLTI0NjkyNjYsIC00MTQxODgwLCA3NzcwNTY5LCA5NjIwNTk3KSwKICAgICAgICAgICAgICAgIGFycmF5KDIzMjA4MDY4LCA3OTc5NzEyLCAzMzA3MTQ2NiwgODE0OTIyOSwgMTc1ODIzMSwgLTEwODM0OTk1LCAzMDk0NTUyOCwgLTE2OTQzMjMsIC0zMzUwMjM0MCwgLTE0NzY3OTcwKSwKICAgICAgICAgICAgICAgIGFycmF5KDE0Mzk5NTgsIC0xNjI3MDQ4MCwgLTEwNzk5ODksIC03OTM3ODIsIDQ2MjU0MDIsIDEwNjQ3NzY2LCAtNTA0MzgwMSwgMTIyMDExOCwgMzA0OTQxNzAsIC0xMTQ0MDc5OSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTUwMzc1ODAsIC0xMzAyODI5NSwgLTI5NzA1NTksIC0zMDYxNzY3LCAxNTY0MDk3NCwgLTY3MDE2NjYsIC0yNjczOTAyNiwgOTI2MDUwLCAtMTY4NDMzOSwgLTEzMzMzNjQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KDEzOTA4NDk1LCAtMzU0OTI3MiwgMzA5MTk5MjgsIC02MjczODI1LCAtMjE1MjE4NjMsIDc5ODkwMzksIDkwMjEwMzQsIDkwNzg4NjUsIDMzNTM1MDksIDQwMzM1MTEpLAogICAgICAgICAgICAgICAgYXJyYXkoLTI5NjYzNDMxLCAtMTUxMTM2MTAsIDMyMjU5OTkxLCAtMzQ0NDgyLCAyNDI5NTg0OSwgLTEyOTEyMTIzLCAyMzE2MTE2MywgODgzOTEyNywgMjc0ODUwNDEsIDczNTYwMzIpLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoOTY2MTAyNywgNzA1NDQzLCAxMTk4MDA2NSwgLTUzNzAxNTQsIC0xNjI4NTQzLCAxNDY2MTE3MywgLTYzNDYxNDIsIDI2MjUwMTUsIDI4NDMxMDM2LCAtMTY3NzE4MzQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIzODM5MjMzLCAtODMxMTQxNSwgLTI1OTQ1NTExLCA3NDgwOTU4LCAtMTc2ODE2NjksIC04MzU0MTgzLCAtMjI1NDU5NzIsIDE0MTUwNTY1LCAxNTk3MDc2MiwgNDA5OTQ2MSksCiAgICAgICAgICAgICAgICBhcnJheSgyOTI2MjU3NiwgMTY3NTY1OTAsIDI2MzUwNTkyLCAtODc5MzU2MywgODUyOTY3MSwgLTExMjA4MDUwLCAxMzYxNzI5MywgLTk5MzcxNDMsIDExNDY1NzM5LCA4MzE3MDYyKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMjU0OTMwODEsIC02OTYyOTI4LCAzMjUwMDIwMCwgLTk0MTkwNTEsIC0yMzAzODcyNCwgLTIzMDIyMjIsIDE0ODk4NjM3LCAzODQ4NDU1LCAyMDk2OTMzNCwgLTUxNTc1MTYpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwMzg0NDUwLCAtMTQzNDc3MTMsIC0xODMzNjQwNSwgMTM4ODQ3MjIsIC0zMzAzOTQ1NCwgMjg0MjExNCwgLTIxNjEwODI2LCAtMzY0OTg4OCwgMTExNzcwOTUsIDE0OTg5NTQ3KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNDQ5NjcyMSwgLTExNzE2MDE2LCAxNjk1OTg5NiwgMjI3ODQ2MywgMTIwNjYzMDksIDEwMTM3NzcxLCAxMzUxNTY0MSwgMjU4MTI4NiwgLTI4NDg3NTA4LCA5OTMwMjQwKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgtMTc3NTE2MjIsIC0yMDk3ODI2LCAxNjU0NDMwMCwgLTEzMDA5MzAwLCAtMTU5MTQ4MDcsIC0xNDk0OTA4MSwgMTgzNDU3NjcsIC0xMzQwMzc1MywgMTYyOTE0ODEsIC01MzE0MDM4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0zMzIyOTE5NCwgMjU1MzI4OCwgMzI2NzgyMTMsIDk4NzU5ODQsIDg1MzQxMjksIDY4ODkzODcsIC05Njc2Nzc0LCA2OTU3NjE3LCA0MzY4ODkxLCA5Nzg4NzQxKSwKICAgICAgICAgICAgICAgIGFycmF5KDE2NjYwNzU2LCA3MjgxMDYwLCAtMTA4MzA3NTgsIDEyOTExODIwLCAyMDEwODU4NCwgLTgxMDE2NzYsIC0yMTcyMjUzNiwgLTg2MTMxNDgsIDE2MjUwNTUyLCAtMTExMTExMDMpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIGFycmF5KC0xOTc2NTUwNywgMjM5MDUyNiwgLTE2NTUxMDMxLCAxNDE2MTk4MCwgMTkwNTI4NiwgNjQxNDkwNywgNDY4OTU4NCwgMTA2MDQ4MDcsIC0zMDE5MDQwMywgNDc4Mjc0NyksCiAgICAgICAgICAgICAgICBhcnJheSgtMTM1NDUzOSwgMTQ3MzY5NDEsIC03MzY3NDQyLCAtMTMyOTI4ODYsIDc3MTA1NDIsIC0xNDE1NTU5MCwgLTk5ODE1NzEsIDQzODMwNDUsIDIyNTQ2NDAzLCA0MzczMjMpLAogICAgICAgICAgICAgICAgYXJyYXkoMzE2NjU1NzcsIC0xMjE4MDQ2NCwgLTE2MTg2ODMwLCAxNDkxMzM5LCAtMTgzNjg2MjUsIDMyOTQ2ODIsIDI3MzQzMDg0LCAyNzg2MjYxLCAtMzA2MzM1OTAsIC0xNDA5NzAxNiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTE0NDY3Mjc5LCAtNjgzNzE1LCAtMzMzNzQxMDcsIDc0NDg1NTIsIDE5Mjk0MzYwLCAxNDMzNDMyOSwgLTE5NjkwNjMxLCAyMzU1MzE5LCAtMTkyODQ2NzEsIC02MTE0MzczKSwKICAgICAgICAgICAgICAgIGFycmF5KDE1MTIxMzEyLCAtMTU3OTYxNjIsIDYzNzcwMjAsIC02MDMxMzYxLCAtMTA3OTgxMTEsIC0xMjk1Nzg0NSwgMTg5NTIxNzcsIDE1NDk2NDk4LCAtMjkzODAxMzMsIDExNzU0MjI4KSwKICAgICAgICAgICAgICAgIGFycmF5KC0yNjM3Mjc3LCAtMTM0ODMwNzUsIDg0ODg3MjcsIC0xNDMwMzg5NiwgMTI3Mjg3NjEsIC0xNjIyNDkzLCA3MTQxNTk2LCAxMTcyNDU1NiwgMjI3NjE2MTUsIC0xMDEzNDE0MSksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoMTY5MTg0MTYsIDExNzI5NjYzLCAtMTgwODM1NzksIDMwMjI5ODcsIC0zMTAxNTczMiwgLTEzMzM5NjU5LCAtMjg3NDExODUsIC0xMjIyNzM5MywgMzI4NTEyMjIsIDExNzE3Mzk5KSwKICAgICAgICAgICAgICAgIGFycmF5KDExMTY2NjM0LCA3MzM4MDQ5LCAtNjcyMjUyMywgNDUzMTUyMCwgLTI5NDY4NjcyLCAtNzMwMjA1NSwgMzE0NzQ4NzksIDM0ODM2MzMsIC0xMTkzMTc1LCAtNDAzMDgzMSksCiAgICAgICAgICAgICAgICBhcnJheSgtMTg1NjM1LCA5OTIxMzA1LCAzMTQ1NjYwOSwgLTEzNTM2NDM4LCAtMTIwMTM4MTgsIDEzMzQ4OTIzLCAzMzE0MjY1MiwgNjU0NjY2MCwgLTE5OTg1Mjc5LCAtMzk0ODM3NiksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTMyNDYwNTk2LCAxMTI2NjcxMiwgLTExMTk3MTA3LCAtNzg5OTEwMywgMzE3MDM2OTQsIDM4NTU5MDMsIC04NTM3MTMxLCAtMTI4MzMwNDgsIC0zMDc3MjAzNCwgLTE1NDg2MzEzKSwKICAgICAgICAgICAgICAgIGFycmF5KC0xODAwNjQ3NywgMTI3MDkwNjgsIDM5OTE3NDYsIC02NDc5MTg4LCAtMjE0OTE1MjMsIC0xMDU1MDQyNSwgLTMxMTM1MzQ3LCAtMTYwNDk4NzksIDEwOTI4OTE3LCAzMDExOTU4KSwKICAgICAgICAgICAgICAgIGFycmF5KC02OTU3NzU3LCAtMTU1OTQzMzcsIDMxNjk2MDU5LCAzMzQyNDAsIDI5NTc2NzE2LCAxNDc5NjA3NSwgLTMwODMxMDU2LCAtMTI4MDUxODAsIDE4MDA4MDMxLCAxMDI1ODU3NyksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgYXJyYXkoLTIyNDQ4NjQ0LCAxNTY1NTU2OSwgNzAxODQ3OSwgLTQ0MTAwMDMsIC0zMDMxNDI2NiwgLTEyMDE1OTEsIC0xODUzNDY1LCAxMzY3MTIwLCAyNTEyNzg3NCwgNjY3MTc0MyksCiAgICAgICAgICAgICAgICBhcnJheSgyOTcwMTE2NiwgLTE0MzczOTM0LCAtMTA4NzgxMjAsIDkyNzkyODgsIC0xNzU2OCwgMTMxMjcyMTAsIDIxMzgyOTEwLCAxMTA0MjI5MiwgMjU4Mzg3OTYsIDQ2NDI2ODQpLAogICAgICAgICAgICAgICAgYXJyYXkoLTIwNDMwMjM0LCAxNDk1NTUzNywgLTI0MTI2MzQ3LCA4MTI0NjE5LCAtNTM2OTI4OCwgLTU5OTA0NzAsIDMwNDY4MTQ3LCAtMTM5MDA2NDAsIDE4NDIzMjg5LCA0MTc3NDc2KSwKICAgICAgICAgICAgKSwKICAgICAgICApCiAgICApOwoKICAgIC8qKgogICAgICogU2VlOiBsaWJzb2RpdW0ncyBjcnlwdG9fY29yZS9jdXJ2ZTI1NTE5L3JlZjEwL2Jhc2UyLmgKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgYXJyYXk8aW50LCBhcnJheTxpbnQsIGludD4+PiBiYXNpY2FsbHkgaW50WzhdWzNdCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGJhc2UyID0gYXJyYXkoCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KDI1OTY3NDkzLCAtMTQzNTYwMzUsIDI5NTY2NDU2LCAzNjYwODk2LCAtMTI2OTQzNDUsIDQwMTQ3ODcsIDI3NTQ0NjI2LCAtMTE3NTQyNzEsIC02MDc5MTU2LCAyMDQ3NjA1KSwKICAgICAgICAgICAgYXJyYXkoLTEyNTQ1NzExLCA5MzQyNjIsIC0yNzIyOTEwLCAzMDQ5OTkwLCAtNzI3NDI4LCA5NDA2OTg2LCAxMjcyMDY5MiwgNTA0MzM4NCwgMTk1MDA5MjksIC0xNTQ2OTM3OCksCiAgICAgICAgICAgIGFycmF5KC04NzM4MTgxLCA0NDg5NTcwLCA5Njg4NDQxLCAtMTQ3ODUxOTQsIDEwMTg0NjA5LCAtMTIzNjMzODAsIDI5Mjg3OTE5LCAxMTg2NDg5OSwgLTI0NTE0MzYyLCAtNDQzODU0NiksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoMTU2MzYyOTEsIC05Njg4NTU3LCAyNDIwNDc3MywgLTc5MTIzOTgsIDYxNjk3NywgLTE2Njg1MjYyLCAyNzc4NzYwMCwgLTE0NzcyMTg5LCAyODk0NDQwMCwgLTE1NTAwMjQpLAogICAgICAgICAgICBhcnJheSgxNjU2ODkzMywgNDcxNzA5NywgLTExNTU2MTQ4LCAtMTEwMjMyMiwgMTU2ODI4OTYsIC0xMTgwNzA0MywgMTYzNTQ1NzcsIC0xMTc3NTk2MiwgNzY4OTY2MiwgMTExOTk1NzQpLAogICAgICAgICAgICBhcnJheSgzMDQ2NDE1NiwgLTU5NzYxMjUsIC0xMTc3OTQzNCwgLTE1NjcwODY1LCAyMzIyMDM2NSwgMTU5MTU4NTIsIDc1MTI3NzQsIDEwMDE3MzI2LCAtMTc3NDkwOTMsIC05OTIwMzU3KSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgxMDg2MTM2MywgMTE0NzMxNTQsIDI3Mjg0NTQ2LCAxOTgxMTc1LCAtMzAwNjQzNDksIDEyNTc3ODYxLCAzMjg2Nzg4NSwgMTQ1MTUxMDcsIC0xNTQzODMwNCwgMTA4MTkzODApLAogICAgICAgICAgICBhcnJheSg0NzA4MDI2LCA2MzM2NzQ1LCAyMDM3NzU4NiwgOTA2NjgwOSwgLTExMjcyMTA5LCA2NTk0Njk2LCAtMjU2NTM2NjgsIDEyNDgzNjg4LCAtMTI2Njg0OTEsIDU1ODEzMDYpLAogICAgICAgICAgICBhcnJheSgxOTU2MzE2MCwgMTYxODY0NjQsIC0yOTM4Njg1NywgNDA5NzUxOSwgMTAyMzc5ODQsIC00MzQ4MTE1LCAyODU0MjM1MCwgMTM4NTAyNDMsIC0yMzY3ODAyMSwgLTE1ODE1OTQyKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSg1MTUzNzQ2LCA5OTA5Mjg1LCAxNzIzNzQ3LCAtMjc3Nzg3NCwgMzA1MjM2MDUsIDU1MTY4NzMsIDE5NDgwODUyLCA1MjMwMTM0LCAtMjM5NTI0MzksIC0xNTE3NTc2NiksCiAgICAgICAgICAgIGFycmF5KC0zMDI2OTAwNywgLTM0NjM1MDksIDc2NjU0ODYsIDEwMDgzNzkzLCAyODQ3NTUyNSwgMTY0OTcyMiwgMjA2NTQwMjUsIDE2NTIwMTI1LCAzMDU5ODQ0OSwgNzcxNTcwMSksCiAgICAgICAgICAgIGFycmF5KDI4ODgxODQ1LCAxNDM4MTU2OCwgOTY1NzkwNCwgMzY4MDc1NywgLTIwMTgxNjM1LCA3ODQzMzE2LCAtMzE0MDA2NjAsIDEzNzA3MDgsIDI5Nzk0NTUzLCAtMTQwOTMwMCksCiAgICAgICAgKSwKICAgICAgICBhcnJheSgKICAgICAgICAgICAgYXJyYXkoLTIyNTE4OTkzLCAtNjY5MjE4MiwgMTQyMDE3MDIsIC04NzQ1NTAyLCAtMjM1MTA0MDYsIDg4NDQ3MjYsIDE4NDc0MjExLCAtMTM2MTQ1MCwgLTEzMDYyNjk2LCAxMzgyMTg3NyksCiAgICAgICAgICAgIGFycmF5KC02NDU1MTc3LCAtNzgzOTg3MSwgMzM3NDcwMiwgLTQ3NDA4NjIsIC0yNzA5ODYxNywgLTEwNTcxNzA3LCAzMTY1NTAyOCwgLTcyMTIzMjcsIDE4ODUzMzIyLCAtMTQyMjA5NTEpLAogICAgICAgICAgICBhcnJheSg0NTY2ODMwLCAtMTI5NjM4NjgsIC0yODk3NDg4OSwgLTEyMjQwNjg5LCAtNzYwMjY3MiwgLTI4MzA1NjksIC04NTE0MzU4LCAtMTA0MzExMzcsIDIyMDc3NTMsIC0zMjA5Nzg0KSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgtMjUxNTQ4MzEsIC00MTg1ODIxLCAyOTY4MTE0NCwgNzg2ODgwMSwgLTY4NTQ2NjEsIC05NDIzODY1LCAtMTI0MzczNjQsIC02NjMwMDAsIC0zMTExMTQ2MywgLTE2MTMyNDM2KSwKICAgICAgICAgICAgYXJyYXkoMjU1NzYyNjQsIC0yNzAzMjE0LCA3MzQ5ODA0LCAtMTE4MTQ4NDQsIDE2NDcyNzgyLCA5MzAwODg1LCAzODQ0Nzg5LCAxNTcyNTY4NCwgMTcxMzU2LCA2NDY2OTE4KSwKICAgICAgICAgICAgYXJyYXkoMjMxMDM5NzcsIDEzMzE2NDc5LCA5NzM5MDEzLCAtMTYxNDk0ODEsIDgxNzg3NSwgLTE1MDM4OTQyLCA4OTY1MzM5LCAtMTQwODgwNTgsIC0zMDcxNDkxMiwgMTYxOTM4NzcpLAogICAgICAgICksCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAgIGFycmF5KC0zMzUyMTgxMSwgMzE4MDcxMywgLTIzOTQxMzAsIDE0MDAzNjg3LCAtMTY5MDM0NzQsIC0xNjI3MDg0MCwgMTcyMzgzOTgsIDQ3Mjk0NTUsIC0xODA3NDUxMywgOTI1NjgwMCksCiAgICAgICAgICAgIGFycmF5KC0yNTE4MjMxNywgLTQxNzQxMzEsIDMyMzM2Mzk4LCA1MDM2OTg3LCAtMjEyMzY4MTcsIDExMzYwNjE3LCAyMjYxNjQwNSwgOTc2MTY5OCwgLTE5ODI3MTk4LCA2MzAzMDUpLAogICAgICAgICAgICBhcnJheSgtMTM3MjA2OTMsIDI2Mzk0NTMsIC0yNDIzNzQ2MCwgLTc0MDY0ODEsIDk0OTQ0MjcsIC01Nzc0MDI5LCAtNjU1NDU1MSwgLTE1OTYwOTk0LCAtMjQ0OTI1NiwgLTE0MjkxMzAwKSwKICAgICAgICApLAogICAgICAgIGFycmF5KAogICAgICAgICAgICBhcnJheSgtMzE1MTE4MSwgLTUwNDYwNzUsIDkyODI3MTQsIDY4NjYxNDUsIC0zMTkwNzA2MiwgLTg2MzAyMywgLTE4OTQwNTc1LCAxNTAzMzc4NCwgMjUxMDUxMTgsIC03ODk0ODc2KSwKICAgICAgICAgICAgYXJyYXkoLTI0MzI2MzcwLCAxNTk1MDIyNiwgLTMxODAxMjE1LCAtMTQ1OTI4MjMsIC0xMTY2MjczNywgLTUwOTA5MjUsIDE1NzM4OTIsIC0yNjI1ODg3LCAyMTk4NzkwLCAtMTU4MDQ2MTkpLAogICAgICAgICAgICBhcnJheSgtMzA5OTM1MSwgMTAzMjQ5NjcsIC0yMjQxNjEzLCA3NDUzMTgzLCAtNTQ0Njk3OSwgLTI3MzU1MDMsIC0xMzgxMjAyMiwgLTE2MjM2NDQyLCAtMzI0NjEyMzQsIC0xMjI5MDY4MyksCiAgICAgICAgKQogICAgKTsKCiAgICAvKioKICAgICAqIDM3MDk1NzA1OTM0NjY5NDM5MzQzMTM4MDgzNTA4NzU0NTY1MTg5NTQyMTEzODc5ODQzMjE5MDE2Mzg4Nzg1NTMzMDg1OTQwMjgzNTU1CiAgICAgKgogICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkZCA9IGFycmF5KAogICAgICAgIC0xMDkxMzYxMCwKICAgICAgICAxMzg1NzQxMywKICAgICAgICAtMTUzNzI2MTEsCiAgICAgICAgNjk0OTM5MSwKICAgICAgICAxMTQ3MjksCiAgICAgICAgLTg3ODc4MTYsCiAgICAgICAgLTYyNzU5MDgsCiAgICAgICAgLTMyNDc3MTksCiAgICAgICAgLTE4Njk2NDQ4LAogICAgICAgIC0xMjA1NTExNgogICAgKTsKCiAgICAvKioKICAgICAqIDIgKiBkID0gMTYyOTUzNjcyNTA2ODA3ODA5NzQ0OTA2NzQ1MTMxNjUxNzY0NTI0NDkyMzU0MjY4NjYxNTYwMTMwNDg3NzkwNjIyMTUzMTU3NDcxNjEKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRkMiA9IGFycmF5KAogICAgICAgIC0yMTgyNzIzOSwKICAgICAgICAtNTgzOTYwNiwKICAgICAgICAtMzA3NDUyMjEsCiAgICAgICAgMTM4OTg3ODIsCiAgICAgICAgMjI5NDU4LAogICAgICAgIDE1OTc4ODAwLAogICAgICAgIC0xMjU1MTgxNywKICAgICAgICAtNjQ5NTQzOCwKICAgICAgICAyOTcxNTk2OCwKICAgICAgICA5NDQ0MTk5CiAgICApOwoKICAgIC8qKgogICAgICogc3FydCgtMSkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRzcXJ0bTEgPSBhcnJheSgKICAgICAgICAtMzI1OTU3OTIsCiAgICAgICAgLTc5NDM3MjUsCiAgICAgICAgOTM3Nzk1MCwKICAgICAgICAzNTAwNDE1LAogICAgICAgIDEyMzg5NDcyLAogICAgICAgIC0yNzI0NzMsCiAgICAgICAgLTI1MTQ2MjA5LAogICAgICAgIC0yMDA1NjU0LAogICAgICAgIDMyNjY4NiwKICAgICAgICAxMTQwNjQ4MgogICAgKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDdXJ2ZTI1NTE5IERhdGEgU3RydWN0dXJlcwoKVGhlc2UgYXJlIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW3N0cnVjdHMgdXNlZCBpbiB0aGUgcmVmMTAgY3VydmUyNTUxOSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vamVkaXNjdDEvbGlic29kaXVtL2Jsb2IvbWFzdGVyL3NyYy9saWJzb2RpdW0vaW5jbHVkZS9zb2RpdW0vcHJpdmF0ZS9jdXJ2ZTI1NTE5X3JlZjEwLmgpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTknLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTkKICovCmFic3RyYWN0IGNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTkgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5CnsKICAgIGNvbnN0IEtFWVBBSVJfQllURVMgPSA5NjsKICAgIGNvbnN0IFNFRURfQllURVMgPSAzMjsKCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAoOTYgYnl0ZXMpCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ga2V5cGFpcigpCiAgICB7CiAgICAgICAgJHNlZWQgPSByYW5kb21fYnl0ZXMoc2VsZjo6U0VFRF9CWVRFUyk7CiAgICAgICAgJHBrID0gJyc7CiAgICAgICAgJHNrID0gJyc7CiAgICAgICAgc2VsZjo6c2VlZF9rZXlwYWlyKCRwaywgJHNrLCAkc2VlZCk7CiAgICAgICAgcmV0dXJuICRzayAuICRwazsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlZWQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWVkX2tleXBhaXIoJiRwaywgJiRzaywgJHNlZWQpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc2VlZCkgIT09IHNlbGY6OlNFRURfQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdjcnlwdG9fc2lnbiBrZXlwYWlyIHNlZWQgbXVzdCBiZSAzMiBieXRlcyBsb25nJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHBrICovCiAgICAgICAgJHBrID0gc2VsZjo6cHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzZWVkKTsKICAgICAgICAkc2sgPSAkc2VlZCAuICRwazsKICAgICAgICByZXR1cm4gJHNrOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlY3JldGtleSgka2V5cGFpcikKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXlwYWlyKSAhPT0gc2VsZjo6S0VZUEFJUl9CWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oJ2NyeXB0b19zaWduIGtleXBhaXIgbXVzdCBiZSA5NiBieXRlcyBsb25nJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpzdWJzdHIoJGtleXBhaXIsIDAsIDY0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBSYW5nZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwdWJsaWNrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5cGFpcikgIT09IHNlbGY6OktFWVBBSVJfQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdjcnlwdG9fc2lnbiBrZXlwYWlyIG11c3QgYmUgOTYgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6c3Vic3RyKCRrZXlwYWlyLCA2NCwgMzIpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzaykKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHNrICovCiAgICAgICAgJHNrID0gaGFzaCgnc2hhNTEyJywgc2VsZjo6c3Vic3RyKCRzaywgMCwgMzIpLCB0cnVlKTsKICAgICAgICAkc2tbMF0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJHNrWzBdKSAmIDI0OAogICAgICAgICk7CiAgICAgICAgJHNrWzMxXSA9IHNlbGY6OmludFRvQ2hyKAogICAgICAgICAgICAoc2VsZjo6Y2hyVG9JbnQoJHNrWzMxXSkgJiA2MykgfCA2NAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIHNlbGY6OnNrX3RvX3BrKCRzayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBrX3RvX2N1cnZlMjU1MTkoJHBrKQogICAgewogICAgICAgIGlmIChzZWxmOjpzbWFsbF9vcmRlcigkcGspKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1B1YmxpYyBrZXkgaXMgb24gYSBzbWFsbCBvcmRlcicpOwogICAgICAgIH0KICAgICAgICAkQSA9IHNlbGY6OmdlX2Zyb21ieXRlc19uZWdhdGVfdmFydGltZSgkcGspOwogICAgICAgICRwMSA9IHNlbGY6OmdlX211bF9sKCRBKTsKICAgICAgICBpZiAoIXNlbGY6OmZlX2lzbm9uemVybygkcDEtPlgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1VuZXhwZWN0ZWQgemVybyByZXN1bHQnKTsKICAgICAgICB9CgogICAgICAgICMgZmVfMShvbmVfbWludXNfeSk7CiAgICAgICAgIyBmZV9zdWIob25lX21pbnVzX3ksIG9uZV9taW51c195LCBBLlkpOwogICAgICAgICMgZmVfaW52ZXJ0KG9uZV9taW51c195LCBvbmVfbWludXNfeSk7CiAgICAgICAgJG9uZV9taW51eF95ID0gc2VsZjo6ZmVfaW52ZXJ0KAogICAgICAgICAgICBzZWxmOjpmZV9zdWIoCiAgICAgICAgICAgICAgICBzZWxmOjpmZV8xKCksCiAgICAgICAgICAgICAgICAkQS0+WQogICAgICAgICAgICApCiAgICAgICAgKTsKCgogICAgICAgICMgZmVfMSh4KTsKICAgICAgICAjIGZlX2FkZCh4LCB4LCBBLlkpOwogICAgICAgICMgZmVfbXVsKHgsIHgsIG9uZV9taW51c195KTsKICAgICAgICAkeCA9IHNlbGY6OmZlX211bCgKICAgICAgICAgICAgc2VsZjo6ZmVfYWRkKHNlbGY6OmZlXzEoKSwgJEEtPlkpLAogICAgICAgICAgICAkb25lX21pbnV4X3kKICAgICAgICApOwoKICAgICAgICAjIGZlX3RvYnl0ZXMoY3VydmUyNTUxOV9waywgeCk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZlX3RvYnl0ZXMoJHgpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2tfdG9fcGsoJHNrKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpnZV9wM190b2J5dGVzKAogICAgICAgICAgICBzZWxmOjpnZV9zY2FsYXJtdWx0X2Jhc2UoCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJHNrLCAwLCAzMikKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKCRtZXNzYWdlLCAkc2spCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzaWduYXR1cmUgKi8KICAgICAgICAkc2lnbmF0dXJlID0gc2VsZjo6c2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKTsKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZSAuICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgQSBzaWduZWQgbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsgICAgICBQdWJsaWMga2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgIE1lc3NhZ2UgKHdpdGhvdXQgc2lnbmF0dXJlKQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbl9vcGVuKCRtZXNzYWdlLCAkcGspCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzaWduYXR1cmUgKi8KICAgICAgICAkc2lnbmF0dXJlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAwLCA2NCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbWVzc2FnZSAqLwogICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2NCk7CgogICAgICAgIGlmIChzZWxmOjp2ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1lc3NhZ2UsICRwaykpIHsKICAgICAgICAgICAgcmV0dXJuICRtZXNzYWdlOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKQogICAgewogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyKGF6LCBzaywgMzIpOwogICAgICAgICRheiA9ICBoYXNoKCdzaGE1MTInLCBzZWxmOjpzdWJzdHIoJHNrLCAwLCAzMiksIHRydWUpOwoKICAgICAgICAjIGF6WzBdICY9IDI0ODsKICAgICAgICAjIGF6WzMxXSAmPSA2MzsKICAgICAgICAjIGF6WzMxXSB8PSA2NDsKICAgICAgICAkYXpbMF0gPSBzZWxmOjppbnRUb0NocihzZWxmOjpjaHJUb0ludCgkYXpbMF0pICYgMjQ4KTsKICAgICAgICAkYXpbMzFdID0gc2VsZjo6aW50VG9DaHIoKHNlbGY6OmNoclRvSW50KCRhelszMV0pICYgNjMpIHwgNjQpOwoKICAgICAgICAjIGNyeXB0b19oYXNoX3NoYTUxMl9pbml0KCZocyk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgYXogKyAzMiwgMzIpOwogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyX3VwZGF0ZSgmaHMsIG0sIG1sZW4pOwogICAgICAgICMgY3J5cHRvX2hhc2hfc2hhNTEyX2ZpbmFsKCZocywgbm9uY2UpOwogICAgICAgICRocyA9IGhhc2hfaW5pdCgnc2hhNTEyJyk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJGF6LCAzMiwgMzIpKTsKICAgICAgICBoYXNoX3VwZGF0ZSgkaHMsICRtZXNzYWdlKTsKICAgICAgICAkbm9uY2VIYXNoID0gaGFzaF9maW5hbCgkaHMsIHRydWUpOwoKICAgICAgICAjIG1lbW1vdmUoc2lnICsgMzIsIHNrICsgMzIsIDMyKTsKICAgICAgICAkcGsgPSBzZWxmOjpzdWJzdHIoJHNrLCAzMiwgMzIpOwoKICAgICAgICAjIHNjX3JlZHVjZShub25jZSk7CiAgICAgICAgIyBnZV9zY2FsYXJtdWx0X2Jhc2UoJlIsIG5vbmNlKTsKICAgICAgICAjIGdlX3AzX3RvYnl0ZXMoc2lnLCAmUik7CiAgICAgICAgJG5vbmNlID0gc2VsZjo6c2NfcmVkdWNlKCRub25jZUhhc2gpIC4gc2VsZjo6c3Vic3RyKCRub25jZUhhc2gsIDMyKTsKICAgICAgICAkc2lnID0gc2VsZjo6Z2VfcDNfdG9ieXRlcygKICAgICAgICAgICAgc2VsZjo6Z2Vfc2NhbGFybXVsdF9iYXNlKCRub25jZSkKICAgICAgICApOwoKICAgICAgICAjIGNyeXB0b19oYXNoX3NoYTUxMl9pbml0KCZocyk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgc2lnLCA2NCk7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfdXBkYXRlKCZocywgbSwgbWxlbik7CiAgICAgICAgIyBjcnlwdG9faGFzaF9zaGE1MTJfZmluYWwoJmhzLCBocmFtKTsKICAgICAgICAkaHMgPSBoYXNoX2luaXQoJ3NoYTUxMicpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJHBrLCAwLCAzMikpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgJG1lc3NhZ2UpOwogICAgICAgICRocmFtSGFzaCA9IGhhc2hfZmluYWwoJGhzLCB0cnVlKTsKCiAgICAgICAgIyBzY19yZWR1Y2UoaHJhbSk7CiAgICAgICAgIyBzY19tdWxhZGQoc2lnICsgMzIsIGhyYW0sIGF6LCBub25jZSk7CiAgICAgICAgJGhyYW0gPSBzZWxmOjpzY19yZWR1Y2UoJGhyYW1IYXNoKTsKICAgICAgICAkc2lnQWZ0ZXIgPSBzZWxmOjpzY19tdWxhZGQoJGhyYW0sICRheiwgJG5vbmNlKTsKICAgICAgICAkc2lnID0gc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSAuIHNlbGY6OnN1YnN0cigkc2lnQWZ0ZXIsIDAsIDMyKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGF6KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRheiA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZwogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyaWZ5X2RldGFjaGVkKCRzaWcsICRtZXNzYWdlLCAkcGspCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc2lnKSA8IDY0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1NpZ25hdHVyZSBpcyB0b28gc2hvcnQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OmNoZWNrX1NfbHRfTChzZWxmOjpzdWJzdHIoJHNpZywgMzIsIDMyKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignUyA8IEwgLSBJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c21hbGxfb3JkZXIoJHNpZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignU2lnbmF0dXJlIGlzIG9uIHRvbyBzbWFsbCBvZiBhbiBvcmRlcicpOwogICAgICAgIH0KICAgICAgICBpZiAoKHNlbGY6OmNoclRvSW50KCRzaWdbNjNdKSAmIDIyNCkgIT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignSW52YWxpZCBzaWduYXR1cmUnKTsKICAgICAgICB9CiAgICAgICAgJGQgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDMyOyArKyRpKSB7CiAgICAgICAgICAgICRkIHw9IHNlbGY6OmNoclRvSW50KCRwa1skaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoJGQgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQWxsIHplcm8gcHVibGljIGtleScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYm9vbCBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCAqLwogICAgICAgICRvcmlnID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdDsKCiAgICAgICAgLy8gU2V0IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgdG8gdHJ1ZSB0byBzcGVlZCB1cCB2ZXJpZmljYXRpb24uCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCA9IHRydWU7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDMgJEEgKi8KICAgICAgICAkQSA9IHNlbGY6OmdlX2Zyb21ieXRlc19uZWdhdGVfdmFydGltZSgkcGspOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGhEaWdlc3QgKi8KICAgICAgICAkaERpZ2VzdCA9IGhhc2goCiAgICAgICAgICAgICdzaGE1MTInLAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJHNpZywgMCwgMzIpIC4KICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRwaywgMCwgMzIpIC4KICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgIHRydWUKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGggKi8KICAgICAgICAkaCA9IHNlbGY6OnNjX3JlZHVjZSgkaERpZ2VzdCkgLiBzZWxmOjpzdWJzdHIoJGhEaWdlc3QsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMiAkUiAqLwogICAgICAgICRSID0gc2VsZjo6Z2VfZG91YmxlX3NjYWxhcm11bHRfdmFydGltZSgKICAgICAgICAgICAgJGgsCiAgICAgICAgICAgICRBLAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJHNpZywgMzIpCiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRyY2hlY2sgKi8KICAgICAgICAkcmNoZWNrID0gc2VsZjo6Z2VfdG9ieXRlcygkUik7CgogICAgICAgIC8vIFJlc2V0IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgdG8gd2hhdCBpdCB3YXMgYmVmb3JlLgogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgPSAkb3JpZzsKCiAgICAgICAgcmV0dXJuIHNlbGY6OnZlcmlmeV8zMigkcmNoZWNrLCBzZWxmOjpzdWJzdHIoJHNpZywgMCwgMzIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRTCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrX1NfbHRfTCgkUykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRTKSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1NpZ25hdHVyZSBtdXN0IGJlIDMyIGJ5dGVzJyk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyAkTCA9IGFycmF5KAogICAgICAgICAgICAweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LAogICAgICAgICAgICAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LAogICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwCiAgICAgICAgKTsKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJEwgKi8KICAgICAgICAkYyA9IDA7CiAgICAgICAgJG4gPSAxOwogICAgICAgICRpID0gMzI7CgogICAgICAgIGRvIHsKICAgICAgICAgICAgLS0kaTsKICAgICAgICAgICAgJHggPSBzZWxmOjpjaHJUb0ludCgkU1skaV0pOwogICAgICAgICAgICAkYyB8PSAoCiAgICAgICAgICAgICAgICAoKCR4IC0gJExbJGldKSA+PiA4KSAmICRuCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRuICY9ICgKICAgICAgICAgICAgICAgICgoJHggXiAkTFskaV0pIC0gMSkgPj4gOAogICAgICAgICAgICApOwogICAgICAgIH0gd2hpbGUgKCRpICE9PSAwKTsKCiAgICAgICAgcmV0dXJuICRjID09PSAwOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkUgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzbWFsbF9vcmRlcigkUikKICAgIHsKICAgICAgICBzdGF0aWMgJGJsYWNrbGlzdCA9IGFycmF5KAogICAgICAgICAgICAvKiAwIChvcmRlciA0KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogMSAob3JkZXIgMSkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIDI3MDczODU1MDExNDQ4NDA2NDkzMTgyMjUyODcyMjU2NTg3ODg5MzY4MDQyNjc1NzUzMTM1MTk0NjM3NDM2MDk3NTAzMDM0MDIwMjIgKG9yZGVyIDgpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHgyNiwgMHhlOCwgMHg5NSwgMHg4ZiwgMHhjMiwgMHhiMiwgMHgyNywgMHhiMCwKICAgICAgICAgICAgICAgIDB4NDUsIDB4YzMsIDB4ZjQsIDB4ODksIDB4ZjIsIDB4ZWYsIDB4OTgsIDB4ZjAsCiAgICAgICAgICAgICAgICAweGQ1LCAweGRmLCAweGFjLCAweDA1LCAweGQzLCAweGM2LCAweDMzLCAweDM5LAogICAgICAgICAgICAgICAgMHhiMSwgMHgzOCwgMHgwMiwgMHg4OCwgMHg2ZCwgMHg1MywgMHhmYywgMHgwNQogICAgICAgICAgICApLAogICAgICAgICAgICAvKiA1NTE4ODY1OTExNzUxMzI1NzA2MjQ2NzI2NzIxNzExODI5NTEzNzY5ODE4ODA2NTI0NDk2ODUwMDI2NTA0ODM5NDIwNjI2MTQxNzkyNyAob3JkZXIgOCkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweGM3LCAweDE3LCAweDZhLCAweDcwLCAweDNkLCAweDRkLCAweGQ4LCAweDRmLAogICAgICAgICAgICAgICAgMHhiYSwgMHgzYywgMHgwYiwgMHg3NiwgMHgwZCwgMHgxMCwgMHg2NywgMHgwZiwKICAgICAgICAgICAgICAgIDB4MmEsIDB4MjAsIDB4NTMsIDB4ZmEsIDB4MmMsIDB4MzksIDB4Y2MsIDB4YzYsCiAgICAgICAgICAgICAgICAweDRlLCAweGM3LCAweGZkLCAweDc3LCAweDkyLCAweGFjLCAweDAzLCAweDdhCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIHAtMSAob3JkZXIgMikgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweDEzLCAweGU4LCAweDk1LCAweDhmLCAweGMyLCAweGIyLCAweDI3LCAweGIwLAogICAgICAgICAgICAgICAgMHg0NSwgMHhjMywgMHhmNCwgMHg4OSwgMHhmMiwgMHhlZiwgMHg5OCwgMHhmMCwKICAgICAgICAgICAgICAgIDB4ZDUsIDB4ZGYsIDB4YWMsIDB4MDUsIDB4ZDMsIDB4YzYsIDB4MzMsIDB4MzksCiAgICAgICAgICAgICAgICAweGIxLCAweDM4LCAweDAyLCAweDg4LCAweDZkLCAweDUzLCAweGZjLCAweDg1CiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIHAgKG9yZGVyIDQpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhiNCwgMHgxNywgMHg2YSwgMHg3MCwgMHgzZCwgMHg0ZCwgMHhkOCwgMHg0ZiwKICAgICAgICAgICAgICAgIDB4YmEsIDB4M2MsIDB4MGIsIDB4NzYsIDB4MGQsIDB4MTAsIDB4NjcsIDB4MGYsCiAgICAgICAgICAgICAgICAweDJhLCAweDIwLCAweDUzLCAweGZhLCAweDJjLCAweDM5LCAweGNjLCAweGM2LAogICAgICAgICAgICAgICAgMHg0ZSwgMHhjNywgMHhmZCwgMHg3NywgMHg5MiwgMHhhYywgMHgwMywgMHhmYQogICAgICAgICAgICApLAogICAgICAgICAgICAvKiBwKzEgKG9yZGVyIDEpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhlYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZgogICAgICAgICAgICApLAogICAgICAgICAgICAvKiBwKzI3MDczODU1MDExNDQ4NDA2NDkzMTgyMjUyODcyMjU2NTg3ODg5MzY4MDQyNjc1NzUzMTM1MTk0NjM3NDM2MDk3NTAzMDM0MDIwMjIgKG9yZGVyIDgpICovCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgMHhlZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZgogICAgICAgICAgICApLAogICAgICAgICAgICAvKiBwKzU1MTg4NjU5MTE3NTEzMjU3MDYyNDY3MjY3MjE3MTE4Mjk1MTM3Njk4MTg4MDY1MjQ0OTY4NTAwMjY1MDQ4Mzk0MjA2MjYxNDE3OTI3IChvcmRlciA4KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogMnAtMSAob3JkZXIgMikgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweGQ5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCiAgICAgICAgICAgICksCiAgICAgICAgICAgIC8qIDJwIChvcmRlciA0KSAqLwogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDB4ZGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKICAgICAgICAgICAgKSwKICAgICAgICAgICAgLyogMnArMSAob3JkZXIgMSkgKi8KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAweGRiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCiAgICAgICAgICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgYXJyYXk8aW50LCBpbnQ+PiAkYmxhY2tsaXN0ICovCiAgICAgICAgJGNvdW50QmxhY2tsaXN0ID0gY291bnQoJGJsYWNrbGlzdCk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudEJsYWNrbGlzdDsgKyskaSkgewogICAgICAgICAgICAkYyA9IDA7CiAgICAgICAgICAgIGZvciAoJGogPSAwOyAkaiA8IDMyOyArKyRqKSB7CiAgICAgICAgICAgICAgICAkYyB8PSBzZWxmOjpjaHJUb0ludCgkUlskal0pIF4gJGJsYWNrbGlzdFskaV1bJGpdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/HChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0hDaGFDaGEyMCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0hDaGFDaGEyMAogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSENoYUNoYTIwIGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjAKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoQ2hhQ2hhMjAoJGluID0gJycsICRrZXkgPSAnJywgJGMgPSBudWxsKQogICAgewogICAgICAgICRjdHggPSBhcnJheSgpOwoKICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgJGN0eFswXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDYxNzAsIDB4Nzg2NSkpOwogICAgICAgICAgICAkY3R4WzFdID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDB4MzMyMCwgMHg2NDZlKSk7CiAgICAgICAgICAgICRjdHhbMl0gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg3OTYyLCAweDJkMzIpKTsKICAgICAgICAgICAgJGN0eFszXSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDZiMjAsIDB4NjU3NCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdHhbMF0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCAwLCA0KSk7CiAgICAgICAgICAgICRjdHhbMV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCA0LCA0KSk7CiAgICAgICAgICAgICRjdHhbMl0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCA4LCA0KSk7CiAgICAgICAgICAgICRjdHhbM10gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCAxMiwgNCkpOwogICAgICAgIH0KICAgICAgICAkY3R4WzRdICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMCwgNCkpOwogICAgICAgICRjdHhbNV0gID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigka2V5LCA0LCA0KSk7CiAgICAgICAgJGN0eFs2XSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDgsIDQpKTsKICAgICAgICAkY3R4WzddICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMTIsIDQpKTsKICAgICAgICAkY3R4WzhdICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMTYsIDQpKTsKICAgICAgICAkY3R4WzldICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMjAsIDQpKTsKICAgICAgICAkY3R4WzEwXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMjQsIDQpKTsKICAgICAgICAkY3R4WzExXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMjgsIDQpKTsKICAgICAgICAkY3R4WzEyXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCAwLCA0KSk7CiAgICAgICAgJGN0eFsxM10gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRpbiwgNCwgNCkpOwogICAgICAgICRjdHhbMTRdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaW4sIDgsIDQpKTsKICAgICAgICAkY3R4WzE1XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCAxMiwgNCkpOwoKICAgICAgICByZXR1cm4gc2VsZjo6aENoYUNoYTIwQnl0ZXMoJGN0eCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGN0eAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGhDaGFDaGEyMEJ5dGVzKGFycmF5ICRjdHgpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgwICovCiAgICAgICAgJHgwICA9ICRjdHhbMF07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxICovCiAgICAgICAgJHgxICA9ICRjdHhbMV07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgyICovCiAgICAgICAgJHgyICA9ICRjdHhbMl07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgzICovCiAgICAgICAgJHgzICA9ICRjdHhbM107CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg0ICovCiAgICAgICAgJHg0ICA9ICRjdHhbNF07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg1ICovCiAgICAgICAgJHg1ICA9ICRjdHhbNV07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg2ICovCiAgICAgICAgJHg2ICA9ICRjdHhbNl07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg3ICovCiAgICAgICAgJHg3ICA9ICRjdHhbN107CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg4ICovCiAgICAgICAgJHg4ICA9ICRjdHhbOF07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg5ICovCiAgICAgICAgJHg5ICA9ICRjdHhbOV07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMCAqLwogICAgICAgICR4MTAgPSAkY3R4WzEwXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDExICovCiAgICAgICAgJHgxMSA9ICRjdHhbMTFdOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MTIgKi8KICAgICAgICAkeDEyID0gJGN0eFsxMl07CiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMyAqLwogICAgICAgICR4MTMgPSAkY3R4WzEzXTsKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDE0ICovCiAgICAgICAgJHgxNCA9ICRjdHhbMTRdOwogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MTUgKi8KICAgICAgICAkeDE1ID0gJGN0eFsxNV07CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MCwgIHg0LCAgeDgsICB4MTIpCiAgICAgICAgICAgIGxpc3QoJHgwLCAkeDQsICR4OCwgJHgxMikgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgwLCAkeDQsICR4OCwgJHgxMik7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDEsICB4NSwgIHg5LCAgeDEzKQogICAgICAgICAgICBsaXN0KCR4MSwgJHg1LCAkeDksICR4MTMpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg1LCAkeDksICR4MTMpOwoKICAgICAgICAgICAgIyBRVUFSVEVSUk9VTkQoIHgyLCAgeDYsICB4MTAsICB4MTQpCiAgICAgICAgICAgIGxpc3QoJHgyLCAkeDYsICR4MTAsICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MiwgJHg2LCAkeDEwLCAkeDE0KTsKCiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MywgIHg3LCAgeDExLCAgeDE1KQogICAgICAgICAgICBsaXN0KCR4MywgJHg3LCAkeDExLCAkeDE1KSA9IHNlbGY6OnF1YXJ0ZXJSb3VuZCgkeDMsICR4NywgJHgxMSwgJHgxNSk7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDAsICB4NSwgIHgxMCwgIHgxNSkKICAgICAgICAgICAgbGlzdCgkeDAsICR4NSwgJHgxMCwgJHgxNSkgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgwLCAkeDUsICR4MTAsICR4MTUpOwoKICAgICAgICAgICAgIyBRVUFSVEVSUk9VTkQoIHgxLCAgeDYsICB4MTEsICB4MTIpCiAgICAgICAgICAgIGxpc3QoJHgxLCAkeDYsICR4MTEsICR4MTIpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MSwgJHg2LCAkeDExLCAkeDEyKTsKCiAgICAgICAgICAgICMgUVVBUlRFUlJPVU5EKCB4MiwgIHg3LCAgeDgsICB4MTMpCiAgICAgICAgICAgIGxpc3QoJHgyLCAkeDcsICR4OCwgJHgxMykgPSBzZWxmOjpxdWFydGVyUm91bmQoJHgyLCAkeDcsICR4OCwgJHgxMyk7CgogICAgICAgICAgICAjIFFVQVJURVJST1VORCggeDMsICB4NCwgIHg5LCAgeDE0KQogICAgICAgICAgICBsaXN0KCR4MywgJHg0LCAkeDksICR4MTQpID0gc2VsZjo6cXVhcnRlclJvdW5kKCR4MywgJHg0LCAkeDksICR4MTQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR4MC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHgyLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4My0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEyLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4MTMtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHgxNC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDE1LT50b1JldmVyc2VTdHJpbmcoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/HSalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0hTYWxzYTIwJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IU2Fsc2EyMAogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSFNhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9TYWxzYTIwCnsKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIGFuIGhzYWxzYTIwIGhhc2ggb2YgYSBzaW5nbGUgYmxvY2sKICAgICAqCiAgICAgKiBIU2Fsc2EyMCBkb2Vzbid0IGhhdmUgYSBjb3VudGVyIGFuZCB3aWxsIG5ldmVyIGJlIHVzZWQgZm9yIG1vcmUgdGhhbgogICAgICogb25lIGJsb2NrICh1c2VkIHRvIGRlcml2ZSBhIHN1YmtleSBmb3IgeHNhbHNhMjApLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbgogICAgICogQHBhcmFtIHN0cmluZyAkawogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaHNhbHNhMjAoJGluLCAkaywgJGMgPSBudWxsKQogICAgewogICAgICAgIC8qKgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDQKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4NQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDcKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4OAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg5CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDExCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDEzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDE0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDE1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGoyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGo1CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajYKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqNwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGo4CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajkKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTQKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMTUKICAgICAgICAgKi8KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrKSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignS2V5IG11c3QgYmUgMzIgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgJHgwICA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDYxNzAsIDB4Nzg2NSkpOwogICAgICAgICAgICAkeDUgID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDB4MzMyMCwgMHg2NDZlKSk7CiAgICAgICAgICAgICR4MTAgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg3OTYyLCAweDJkMzIpKTsKICAgICAgICAgICAgJHgxNSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDZiMjAsIDB4NjU3NCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR4MCAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCAwLCA0KSk7CiAgICAgICAgICAgICR4NSAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCA0LCA0KSk7CiAgICAgICAgICAgICR4MTAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCA4LCA0KSk7CiAgICAgICAgICAgICR4MTUgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRjLCAxMiwgNCkpOwogICAgICAgIH0KICAgICAgICAkeDEgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaywgMCwgNCkpOwogICAgICAgICR4MiAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCA0LCA0KSk7CiAgICAgICAgJHgzICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDgsIDQpKTsKICAgICAgICAkeDQgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaywgMTIsIDQpKTsKICAgICAgICAkeDYgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaW4sIDAsIDQpKTsKICAgICAgICAkeDcgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaW4sIDQsIDQpKTsKICAgICAgICAkeDggID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaW4sIDgsIDQpKTsKICAgICAgICAkeDkgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaW4sIDEyLCA0KSk7CiAgICAgICAgJHgxMSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDE2LCA0KSk7CiAgICAgICAgJHgxMiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDIwLCA0KSk7CiAgICAgICAgJHgxMyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDI0LCA0KSk7CiAgICAgICAgJHgxNCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDI4LCA0KSk7CgogICAgICAgIGZvciAoJGkgPSBzZWxmOjpST1VORFM7ICRpID4gMDsgJGkgLT0gMikgewogICAgICAgICAgICAkeDQgID0gJHg0LT54b3JJbnQzMigkeDAtPmFkZEludDMyKCR4MTIpLT5yb3RhdGVMZWZ0KDcpKTsKICAgICAgICAgICAgJHg4ICA9ICR4OC0+eG9ySW50MzIoJHg0LT5hZGRJbnQzMigkeDApLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHgxMiA9ICR4MTItPnhvckludDMyKCR4OC0+YWRkSW50MzIoJHg0KS0+cm90YXRlTGVmdCgxMykpOwogICAgICAgICAgICAkeDAgID0gJHgwLT54b3JJbnQzMigkeDEyLT5hZGRJbnQzMigkeDgpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDkgID0gJHg5LT54b3JJbnQzMigkeDUtPmFkZEludDMyKCR4MSktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDEzID0gJHgxMy0+eG9ySW50MzIoJHg5LT5hZGRJbnQzMigkeDUpLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHgxICA9ICR4MS0+eG9ySW50MzIoJHgxMy0+YWRkSW50MzIoJHg5KS0+cm90YXRlTGVmdCgxMykpOwogICAgICAgICAgICAkeDUgID0gJHg1LT54b3JJbnQzMigkeDEtPmFkZEludDMyKCR4MTMpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDE0ID0gJHgxNC0+eG9ySW50MzIoJHgxMC0+YWRkSW50MzIoJHg2KS0+cm90YXRlTGVmdCg3KSk7CiAgICAgICAgICAgICR4MiAgPSAkeDItPnhvckludDMyKCR4MTQtPmFkZEludDMyKCR4MTApLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHg2ICA9ICR4Ni0+eG9ySW50MzIoJHgyLT5hZGRJbnQzMigkeDE0KS0+cm90YXRlTGVmdCgxMykpOwogICAgICAgICAgICAkeDEwID0gJHgxMC0+eG9ySW50MzIoJHg2LT5hZGRJbnQzMigkeDIpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDMgID0gJHgzLT54b3JJbnQzMigkeDE1LT5hZGRJbnQzMigkeDExKS0+cm90YXRlTGVmdCg3KSk7CiAgICAgICAgICAgICR4NyAgPSAkeDctPnhvckludDMyKCR4My0+YWRkSW50MzIoJHgxNSktPnJvdGF0ZUxlZnQoOSkpOwogICAgICAgICAgICAkeDExID0gJHgxMS0+eG9ySW50MzIoJHg3LT5hZGRJbnQzMigkeDMpLT5yb3RhdGVMZWZ0KDEzKSk7CiAgICAgICAgICAgICR4MTUgPSAkeDE1LT54b3JJbnQzMigkeDExLT5hZGRJbnQzMigkeDcpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDEgID0gJHgxLT54b3JJbnQzMigkeDAtPmFkZEludDMyKCR4MyktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDIgID0gJHgyLT54b3JJbnQzMigkeDEtPmFkZEludDMyKCR4MCktPnJvdGF0ZUxlZnQoOSkpOwogICAgICAgICAgICAkeDMgID0gJHgzLT54b3JJbnQzMigkeDItPmFkZEludDMyKCR4MSktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHgwICA9ICR4MC0+eG9ySW50MzIoJHgzLT5hZGRJbnQzMigkeDIpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDYgID0gJHg2LT54b3JJbnQzMigkeDUtPmFkZEludDMyKCR4NCktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDcgID0gJHg3LT54b3JJbnQzMigkeDYtPmFkZEludDMyKCR4NSktPnJvdGF0ZUxlZnQoOSkpOwogICAgICAgICAgICAkeDQgID0gJHg0LT54b3JJbnQzMigkeDctPmFkZEludDMyKCR4NiktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHg1ICA9ICR4NS0+eG9ySW50MzIoJHg0LT5hZGRJbnQzMigkeDcpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDExID0gJHgxMS0+eG9ySW50MzIoJHgxMC0+YWRkSW50MzIoJHg5KS0+cm90YXRlTGVmdCg3KSk7CiAgICAgICAgICAgICR4OCAgPSAkeDgtPnhvckludDMyKCR4MTEtPmFkZEludDMyKCR4MTApLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHg5ICA9ICR4OS0+eG9ySW50MzIoJHg4LT5hZGRJbnQzMigkeDExKS0+cm90YXRlTGVmdCgxMykpOwogICAgICAgICAgICAkeDEwID0gJHgxMC0+eG9ySW50MzIoJHg5LT5hZGRJbnQzMigkeDgpLT5yb3RhdGVMZWZ0KDE4KSk7CgogICAgICAgICAgICAkeDEyID0gJHgxMi0+eG9ySW50MzIoJHgxNS0+YWRkSW50MzIoJHgxNCktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDEzID0gJHgxMy0+eG9ySW50MzIoJHgxMi0+YWRkSW50MzIoJHgxNSktPnJvdGF0ZUxlZnQoOSkpOwogICAgICAgICAgICAkeDE0ID0gJHgxNC0+eG9ySW50MzIoJHgxMy0+YWRkSW50MzIoJHgxMiktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHgxNSA9ICR4MTUtPnhvckludDMyKCR4MTQtPmFkZEludDMyKCR4MTMpLT5yb3RhdGVMZWZ0KDE4KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHgwLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4NS0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEwLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4MTUtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHg2LT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4Ny0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDgtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHg5LT50b1JldmVyc2VTdHJpbmcoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Int32.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogKgogKiBFbmNhcHN1bGF0ZXMgYSAzMi1iaXQgaW50ZWdlci4KICoKICogVGhlc2UgYXJlIGltbXV0YWJsZS4gSXQgYWx3YXlzIHJldHVybnMgYSBuZXcgaW5zdGFuY2UuCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBpbnQ+IC0gdHdvIDE2LWJpdCBpbnRlZ2VycwogICAgICoKICAgICAqIDAgaXMgdGhlIGhpZ2hlciAxNiBiaXRzCiAgICAgKiAxIGlzIHRoZSBsb3dlciAxNiBiaXRzCiAgICAgKi8KICAgIHB1YmxpYyAkbGltYnMgPSBhcnJheSgwLCAwKTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkb3ZlcmZsb3cgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkdW5zaWduZWRJbnQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIGFycmF5ICRhcnJheQogICAgICogQHBhcmFtIGJvb2wgJHVuc2lnbmVkSW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXJyYXkgPSBhcnJheSgwLCAwKSwgJHVuc2lnbmVkSW50ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPmxpbWJzID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICRhcnJheVswXSwKICAgICAgICAgICAgKGludCkgJGFycmF5WzFdCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+b3ZlcmZsb3cgPSAwOwogICAgICAgICR0aGlzLT51bnNpZ25lZEludCA9ICR1bnNpZ25lZEludDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgdHdvIGludDMyIG9iamVjdHMKICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGFkZGVuZAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkSW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGFkZGVuZCkKICAgIHsKICAgICAgICAkaTAgPSAkdGhpcy0+bGltYnNbMF07CiAgICAgICAgJGkxID0gJHRoaXMtPmxpbWJzWzFdOwogICAgICAgICRqMCA9ICRhZGRlbmQtPmxpbWJzWzBdOwogICAgICAgICRqMSA9ICRhZGRlbmQtPmxpbWJzWzFdOwoKICAgICAgICAkcjEgPSAkaTEgKyAoJGoxICYgMHhmZmZmKTsKICAgICAgICAkY2FycnkgPSAkcjEgPj4gMTY7CgogICAgICAgICRyMCA9ICRpMCArICgkajAgJiAweGZmZmYpICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMCA+PiAxNjsKCiAgICAgICAgJHIwICY9IDB4ZmZmZjsKICAgICAgICAkcjEgJj0gMHhmZmZmOwoKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKAogICAgICAgICAgICBhcnJheSgkcjAsICRyMSkKICAgICAgICApOwogICAgICAgICRyZXR1cm4tPm92ZXJmbG93ID0gJGNhcnJ5OwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBhIG5vcm1hbCBpbnRlZ2VyIHRvIGFuIGludDMyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGludAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJbnQoJGludCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkaW50LCAnaW50JywgMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRpbnQgKi8KICAgICAgICAkaW50ID0gKGludCkgJGludDsKCiAgICAgICAgJGludCA9IChpbnQpICRpbnQ7CgogICAgICAgICRpMCA9ICR0aGlzLT5saW1ic1swXTsKICAgICAgICAkaTEgPSAkdGhpcy0+bGltYnNbMV07CgogICAgICAgICRyMSA9ICRpMSArICgkaW50ICYgMHhmZmZmKTsKICAgICAgICAkY2FycnkgPSAkcjEgPj4gMTY7CgogICAgICAgICRyMCA9ICRpMCArICgoJGludCA+PiAxNikgJiAweGZmZmYpICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMCA+PiAxNjsKICAgICAgICAkcjAgJj0gMHhmZmZmOwogICAgICAgICRyMSAmPSAweGZmZmY7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigKICAgICAgICAgICAgYXJyYXkoJHIwLCAkcjEpCiAgICAgICAgKTsKICAgICAgICAkcmV0dXJuLT5vdmVyZmxvdyA9ICRjYXJyeTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlSW50KCRiID0gMCkKICAgIHsKICAgICAgICAkZ3QgPSAwOwogICAgICAgICRlcSA9IDE7CgogICAgICAgICRpID0gMjsKICAgICAgICAkaiA9IDA7CiAgICAgICAgd2hpbGUgKCRpID4gMCkgewogICAgICAgICAgICAtLSRpOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHgxICovCiAgICAgICAgICAgICR4MSA9ICR0aGlzLT5saW1ic1skaV07CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDIgKi8KICAgICAgICAgICAgJHgyID0gKCRiID4+ICgkaiA8PCA0KSkgJiAweGZmZmY7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkZ3QgKi8KICAgICAgICAgICAgJGd0IHw9ICgoJHgyIC0gJHgxKSA+PiA4KSAmICRlcTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRlcSAqLwogICAgICAgICAgICAkZXEgJj0gKCgkeDIgXiAkeDEpIC0gMSkgPj4gODsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICgkZ3QgKyAkZ3QgLSAkZXEpICsgMTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJG0KICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hc2soJG0gPSAwKQogICAgewogICAgICAgIC8qKiBAdmFyIGludCAkaGkgKi8KICAgICAgICAkaGkgPSAoJG0gPj4gMTYpICYgMHhmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkbG8gKi8KICAgICAgICAkbG8gPSAoJG0gJiAweGZmZmYpOwogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgKGludCkgKCR0aGlzLT5saW1ic1swXSAmICRoaSksCiAgICAgICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzFdICYgJGxvKQogICAgICAgICAgICApLAogICAgICAgICAgICAkdGhpcy0+dW5zaWduZWRJbnQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaW50CiAgICAgKiBAcGFyYW0gaW50ICRzaXplCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bEludCgkaW50ID0gMCwgJHNpemUgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRpbnQsICdpbnQnLCAxKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc2l6ZSwgJ2ludCcsIDIpOwogICAgICAgIC8qKiBAdmFyIGludCAkaW50ICovCiAgICAgICAgJGludCA9IChpbnQpICRpbnQ7CiAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgJHNpemUgPSAoaW50KSAkc2l6ZTsKCiAgICAgICAgaWYgKCEkc2l6ZSkgewogICAgICAgICAgICAkc2l6ZSA9IDMxOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KCiAgICAgICAgJGEgPSBjbG9uZSAkdGhpczsKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CgogICAgICAgIC8vIEluaXRpYWxpemU6CiAgICAgICAgJHJldDAgPSAwOwogICAgICAgICRyZXQxID0gMDsKICAgICAgICAkYTAgPSAkYS0+bGltYnNbMF07CiAgICAgICAgJGExID0gJGEtPmxpbWJzWzFdOwoKICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KICAgICAgICAvKiogQHZhciBpbnQgJGkgKi8KICAgICAgICBmb3IgKCRpID0gJHNpemU7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgJG0gPSAoaW50KSAoLSgkaW50ICYgMSkpOwogICAgICAgICAgICAkeDAgPSAkYTAgJiAkbTsKICAgICAgICAgICAgJHgxID0gJGExICYgJG07CgogICAgICAgICAgICAkcmV0MSArPSAkeDE7CiAgICAgICAgICAgICRjID0gJHJldDEgPj4gMTY7CgogICAgICAgICAgICAkcmV0MCArPSAkeDAgKyAkYzsKCiAgICAgICAgICAgICRyZXQwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJHJldDEgJj0gMHhmZmZmOwoKICAgICAgICAgICAgJGExID0gKCRhMSA8PCAxKTsKICAgICAgICAgICAgJHgxID0gJGExID4+IDE2OwogICAgICAgICAgICAkYTAgPSAoJGEwIDw8IDEpIHwgJHgxOwogICAgICAgICAgICAkYTAgJj0gMHhmZmZmOwogICAgICAgICAgICAkYTEgJj0gMHhmZmZmOwogICAgICAgICAgICAkaW50ID4+PSAxOwogICAgICAgIH0KICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9ICRyZXQwOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gJHJldDE7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGludAogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWxJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaW50LCAkc2l6ZSA9IDApCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNpemUsICdpbnQnLCAyKTsKICAgICAgICBpZiAoISRzaXplKSB7CiAgICAgICAgICAgICRzaXplID0gMzE7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwoKICAgICAgICAkYSA9IGNsb25lICR0aGlzOwogICAgICAgICRiID0gY2xvbmUgJGludDsKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CgogICAgICAgIC8vIEluaXRpYWxpemU6CiAgICAgICAgJHJldDAgPSAwOwogICAgICAgICRyZXQxID0gMDsKICAgICAgICAkYTAgPSAkYS0+bGltYnNbMF07CiAgICAgICAgJGExID0gJGEtPmxpbWJzWzFdOwogICAgICAgICRiMCA9ICRiLT5saW1ic1swXTsKICAgICAgICAkYjEgPSAkYi0+bGltYnNbMV07CgogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgIC8qKiBAdmFyIGludCAkaSAqLwogICAgICAgIGZvciAoJGkgPSAkc2l6ZTsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAkbSA9IChpbnQpICgtKCRiMSAmIDEpKTsKICAgICAgICAgICAgJHgwID0gJGEwICYgJG07CiAgICAgICAgICAgICR4MSA9ICRhMSAmICRtOwoKICAgICAgICAgICAgJHJldDEgKz0gJHgxOwogICAgICAgICAgICAkYyA9ICRyZXQxID4+IDE2OwoKICAgICAgICAgICAgJHJldDAgKz0gJHgwICsgJGM7CgogICAgICAgICAgICAkcmV0MCAmPSAweGZmZmY7CiAgICAgICAgICAgICRyZXQxICY9IDB4ZmZmZjsKCiAgICAgICAgICAgICRhMSA9ICgkYTEgPDwgMSk7CiAgICAgICAgICAgICR4MSA9ICRhMSA+PiAxNjsKICAgICAgICAgICAgJGEwID0gKCRhMCA8PCAxKSB8ICR4MTsKICAgICAgICAgICAgJGEwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGExICY9IDB4ZmZmZjsKCiAgICAgICAgICAgICR4MCA9ICgkYjAgJiAxKSA8PCAxNjsKICAgICAgICAgICAgJGIwID0gKCRiMCA+PiAxKTsKICAgICAgICAgICAgJGIxID0gKCgkYjEgfCAkeDApID4+IDEpOwoKICAgICAgICAgICAgJGIwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGIxICY9IDB4ZmZmZjsKCiAgICAgICAgfQogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdID0gJHJldDA7CiAgICAgICAgJHJldHVybi0+bGltYnNbMV0gPSAkcmV0MTsKCiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBPUiB0aGlzIDMyLWJpdCBpbnRlZ2VyIHdpdGggYW5vdGhlci4KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGIKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9ySW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGIpCiAgICB7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRyZXR1cm4tPmxpbWJzID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+bGltYnNbMF0gfCAkYi0+bGltYnNbMF0pLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzFdIHwgJGItPmxpbWJzWzFdKQogICAgICAgICk7CiAgICAgICAgLyoqIEB2YXIgaW50IG92ZXJmbG93ICovCiAgICAgICAgJHJldHVybi0+b3ZlcmZsb3cgPSAkdGhpcy0+b3ZlcmZsb3cgfCAkYi0+b3ZlcmZsb3c7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzR3JlYXRlclRoYW4oJGIgPSAwKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZUludCgkYikgPiAwOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkYgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0xlc3NUaGFuSW50KCRiID0gMCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbXBhcmVJbnQoJGIpIDwgMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdGF0ZUxlZnQoJGMgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjLCAnaW50JywgMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoaW50KSAkYzsKCiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRjICY9IDMxOwogICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAvLyBOT1AsIGJ1dCB3ZSB3YW50IGEgY29weS4KICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSAkdGhpcy0+bGltYnM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGlkeF9zaGlmdCAqLwogICAgICAgICAgICAkaWR4X3NoaWZ0ID0gKCRjID4+IDQpICYgMTsKCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkc3ViX3NoaWZ0ICovCiAgICAgICAgICAgICRzdWJfc2hpZnQgPSAkYyAmIDE1OwoKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRsaW1icyAqLwogICAgICAgICAgICAkbGltYnMgPSYgJHJldHVybi0+bGltYnM7CgogICAgICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJG15TGltYnMgKi8KICAgICAgICAgICAgJG15TGltYnMgPSYgJHRoaXMtPmxpbWJzOwoKICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaiAqLwogICAgICAgICAgICAgICAgJGogPSAoJGkgKyAkaWR4X3NoaWZ0KSAmIDE7CiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGsgKi8KICAgICAgICAgICAgICAgICRrID0gKCRpICsgJGlkeF9zaGlmdCArIDEpICYgMTsKICAgICAgICAgICAgICAgICRsaW1ic1skaV0gPSAoaW50KSAoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgKCRteUxpbWJzWyRqXSkgPDwgJHN1Yl9zaGlmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQpICgkbXlMaW1ic1ska10pID4+ICgxNiAtICRzdWJfc2hpZnQpKQogICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmYKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBSb3RhdGUgdG8gdGhlIHJpZ2h0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkYwogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBcnJheUFjY2VzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm90YXRlUmlnaHQoJGMgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjLCAnaW50JywgMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoaW50KSAkYzsKCiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRjICY9IDMxOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAvLyBOT1AsIGJ1dCB3ZSB3YW50IGEgY29weS4KICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSAkdGhpcy0+bGltYnM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGlkeF9zaGlmdCAqLwogICAgICAgICAgICAkaWR4X3NoaWZ0ID0gKCRjID4+IDQpICYgMTsKCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkc3ViX3NoaWZ0ICovCiAgICAgICAgICAgICRzdWJfc2hpZnQgPSAkYyAmIDE1OwoKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRsaW1icyAqLwogICAgICAgICAgICAkbGltYnMgPSYgJHJldHVybi0+bGltYnM7CgogICAgICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJG15TGltYnMgKi8KICAgICAgICAgICAgJG15TGltYnMgPSYgJHRoaXMtPmxpbWJzOwoKICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaiAqLwogICAgICAgICAgICAgICAgJGogPSAoJGkgLSAkaWR4X3NoaWZ0KSAmIDE7CiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGsgKi8KICAgICAgICAgICAgICAgICRrID0gKCRpIC0gJGlkeF9zaGlmdCAtIDEpICYgMTsKICAgICAgICAgICAgICAgICRsaW1ic1skaV0gPSAoaW50KSAoCiAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgKCRteUxpbWJzWyRqXSkgPj4gKGludCkgKCRzdWJfc2hpZnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAoKGludCkgKCRteUxpbWJzWyRrXSkgPDwgKDE2IC0gKGludCkgKCRzdWJfc2hpZnQpKSkKICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJGJvb2wKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VW5zaWduZWRJbnQoJGJvb2wgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdGhpcy0+dW5zaWduZWRJbnQgPSAhZW1wdHkoJGJvb2wpOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRjID0gMCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYywgJ2ludCcsIDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gKGludCkgJGM7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICAkYyAmPSA2MzsKICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICBpZiAoJGMgPT09IDApIHsKICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSAkdGhpcy0+bGltYnM7CiAgICAgICAgfSBlbHNlaWYgKCRjIDwgMCkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaGlmdFJpZ2h0KC0kYyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkdG1wICovCiAgICAgICAgICAgICR0bXAgPSAkdGhpcy0+bGltYnNbMV0gPDwgJGM7CiAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkoJHRtcCAmIDB4ZmZmZik7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkgKi8KICAgICAgICAgICAgJGNhcnJ5ID0gJHRtcCA+PiAxNjsKCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkdG1wICovCiAgICAgICAgICAgICR0bXAgPSAoJHRoaXMtPmxpbWJzWzBdIDw8ICRjKSB8ICgkY2FycnkgJiAweGZmZmYpOwogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgkdG1wICYgMHhmZmZmKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRjCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFzc2lnbm1lbnQKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZE9wZXJhbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNoaWZ0UmlnaHQoJGMgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjLCAnaW50JywgMSk7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoaW50KSAkYzsKCiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRjICY9IDYzOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgIGlmICgkYyA+PSAxNikgewogICAgICAgICAgICAkcmV0dXJuLT5saW1icyA9IGFycmF5KAogICAgICAgICAgICAgICAgKGludCkgKCR0aGlzLT5vdmVyZmxvdyAmIDB4ZmZmZiksCiAgICAgICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzBdKQogICAgICAgICAgICApOwogICAgICAgICAgICAkcmV0dXJuLT5vdmVyZmxvdyA9ICR0aGlzLT5vdmVyZmxvdyA+PiAxNjsKICAgICAgICAgICAgcmV0dXJuICRyZXR1cm4tPnNoaWZ0UmlnaHQoJGMgJiAxNSk7CiAgICAgICAgfQogICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAkcmV0dXJuLT5saW1icyA9ICR0aGlzLT5saW1iczsKICAgICAgICB9IGVsc2VpZiAoJGMgPCAwKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNoaWZ0TGVmdCgtJGMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpc19udWxsKCRjKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICAgICAvLyAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgoJHRoaXMtPmxpbWJzWzBdID4+ICRjKSAmIDB4ZmZmZik7CiAgICAgICAgICAgICRjYXJyeUxlZnQgPSAoaW50KSAoJHRoaXMtPm92ZXJmbG93ICYgKCgxIDw8ICgkYyArIDEpKSAtIDEpKTsKICAgICAgICAgICAgJHJldHVybi0+bGltYnNbMF0gPSAoaW50KSAoKCgkdGhpcy0+bGltYnNbMF0gPj4gJGMpIHwgKCRjYXJyeUxlZnQgPDwgKDE2IC0gJGMpKSkgJiAweGZmZmYpOwogICAgICAgICAgICAkY2FycnlSaWdodCA9IChpbnQpICgkdGhpcy0+bGltYnNbMF0gJiAoKDEgPDwgKCRjICsgMSkpIC0gMSkpOwogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSA9IChpbnQpICgoKCR0aGlzLT5saW1ic1sxXSA+PiAkYykgfCAoJGNhcnJ5UmlnaHQgPDwgKDE2IC0gJGMpKSkgJiAweGZmZmYpOwogICAgICAgICAgICAkcmV0dXJuLT5vdmVyZmxvdyA+Pj0gJGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogU3VidHJhY3QgYSBub3JtYWwgaW50ZWdlciBmcm9tIGFuIGludDMyIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbnQKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViSW50KCRpbnQpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGludCwgJ2ludCcsIDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkaW50ICovCiAgICAgICAgJGludCA9IChpbnQpICRpbnQ7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKCiAgICAgICAgLyoqIEB2YXIgaW50ICR0bXAgKi8KICAgICAgICAkdG1wID0gJHRoaXMtPmxpbWJzWzFdIC0gKCRpbnQgJiAweGZmZmYpOwogICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkgKi8KICAgICAgICAkY2FycnkgPSAkdG1wID4+IDE2OwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkgKCR0bXAgJiAweGZmZmYpOwoKICAgICAgICAvKiogQHZhciBpbnQgJHRtcCAqLwogICAgICAgICR0bXAgPSAkdGhpcy0+bGltYnNbMF0gLSAoKCRpbnQgPj4gMTYpICYgMHhmZmZmKSArICRjYXJyeTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgkdG1wICYgMHhmZmZmKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIFN1YnRyYWN0IHR3byBpbnQzMiBvYmplY3RzIGZyb20gZWFjaCBvdGhlcgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ViSW50MzIoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGIpCiAgICB7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMigpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwoKICAgICAgICAvKiogQHZhciBpbnQgJHRtcCAqLwogICAgICAgICR0bXAgPSAkdGhpcy0+bGltYnNbMV0gLSAoJGItPmxpbWJzWzFdICYgMHhmZmZmKTsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5ICovCiAgICAgICAgJGNhcnJ5ID0gJHRtcCA+PiAxNjsKICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSA9IChpbnQpICgkdG1wICYgMHhmZmZmKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICR0bXAgKi8KICAgICAgICAkdG1wID0gJHRoaXMtPmxpbWJzWzBdIC0gKCRiLT5saW1ic1swXSAmIDB4ZmZmZikgKyAkY2Fycnk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMF0gPSAoaW50KSAoJHRtcCAmIDB4ZmZmZik7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBYT1IgdGhpcyAzMi1iaXQgaW50ZWdlciB3aXRoIGFub3RoZXIuCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRiCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4b3JJbnQzMihQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkYikKICAgIHsKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5saW1ic1swXSBeICRiLT5saW1ic1swXSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+bGltYnNbMV0gXiAkYi0+bGltYnNbMV0pCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHNpZ25lZAogICAgICogQHJldHVybiBzZWxmCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tSW50KCRzaWduZWQpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNpZ25lZCwgJ2ludCcsIDEpOzsKICAgICAgICAvKiogQHZhciBpbnQgJHNpZ25lZCAqLwogICAgICAgICRzaWduZWQgPSAoaW50KSAkc2lnbmVkOwoKICAgICAgICByZXR1cm4gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChpbnQpICgoJHNpZ25lZCA+PiAxNikgJiAweGZmZmYpLAogICAgICAgICAgICAgICAgKGludCkgKCRzaWduZWQgJiAweGZmZmYpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21TdHJpbmcoJHN0cmluZykKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc3RyaW5nLCAnc3RyaW5nJywgMSk7CiAgICAgICAgJHN0cmluZyA9IChzdHJpbmcpICRzdHJpbmc7CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAhPT0gNCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnU3RyaW5nIG11c3QgYmUgNCBieXRlczsgJyAuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAuICcgZ2l2ZW4uJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCk7CgogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdICA9IChpbnQpICgoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1swXSkgJiAweGZmKSA8PCA4KTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSB8PSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1sxXSkgJiAweGZmKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSAgPSAoaW50KSAoKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbMl0pICYgMHhmZikgPDwgOCk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMV0gfD0gKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbM10pICYgMHhmZik7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICAgICAqIEByZXR1cm4gc2VsZgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVJldmVyc2VTdHJpbmcoJHN0cmluZykKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc3RyaW5nLCAnc3RyaW5nJywgMSk7CiAgICAgICAgJHN0cmluZyA9IChzdHJpbmcpICRzdHJpbmc7CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAhPT0gNCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnU3RyaW5nIG11c3QgYmUgNCBieXRlczsgJyAuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAuICcgZ2l2ZW4uJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKCk7CgogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdICA9IChpbnQpICgoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1szXSkgJiAweGZmKSA8PCA4KTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSB8PSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1syXSkgJiAweGZmKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSAgPSAoaW50KSAoKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbMV0pICYgMHhmZikgPDwgOCk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMV0gfD0gKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbMF0pICYgMHhmZik7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgaW50PgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KChpbnQpICgkdGhpcy0+bGltYnNbMF0gPDwgMTYgfCAkdGhpcy0+bGltYnNbMV0pKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigoJHRoaXMtPmxpbWJzWzBdID4+IDgpICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigkdGhpcy0+bGltYnNbMF0gJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbMV0gPj4gOCkgJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCR0aGlzLT5saW1ic1sxXSAmIDB4ZmYpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50KCkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgKAogICAgICAgICAgICAoKCR0aGlzLT5saW1ic1swXSAmIDB4ZmZmZikgPDwgMTYpCiAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICgkdGhpcy0+bGltYnNbMV0gJiAweGZmZmYpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50MzIoKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgkdGhpcy0+bGltYnNbMF0gJiAweGZmZmYpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkgKCR0aGlzLT5saW1ic1sxXSAmIDB4ZmZmZik7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgJHJldHVybi0+b3ZlcmZsb3cgPSAoaW50KSAoJHRoaXMtPm92ZXJmbG93ICYgMHg3ZmZmZmZmZik7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ludDY0KCkKICAgIHsKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgaWYgKCR0aGlzLT51bnNpZ25lZEludCkgewogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1swXSArPSAoKCR0aGlzLT5vdmVyZmxvdyA+PiAxNikgJiAweGZmZmYpOwogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSArPSAoKCR0aGlzLT5vdmVyZmxvdykgJiAweGZmZmYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuZWcgPSAtKCgkdGhpcy0+bGltYnNbMF0gPj4gMTUpICYgMSk7CiAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzWzBdID0gKGludCkoJG5lZyAmIDB4ZmZmZik7CiAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkoJG5lZyAmIDB4ZmZmZik7CiAgICAgICAgfQogICAgICAgICRyZXR1cm4tPmxpbWJzWzJdID0gKGludCkgKCR0aGlzLT5saW1ic1swXSAmIDB4ZmZmZik7CiAgICAgICAgJHJldHVybi0+bGltYnNbM10gPSAoaW50KSAoJHRoaXMtPmxpbWJzWzFdICYgMHhmZmZmKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9SZXZlcnNlU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50VG9DaHIoJHRoaXMtPmxpbWJzWzFdICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigoJHRoaXMtPmxpbWJzWzFdID4+IDgpICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigkdGhpcy0+bGltYnNbMF0gJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbMF0gPj4gOCkgJiAweGZmKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICAgICAgfSBjYXRjaCAoVHlwZUVycm9yICRleCkgewogICAgICAgICAgICAvLyBQSFAgZW5naW5lIGNhbid0IGhhbmRsZSBleGNlcHRpb25zIGZyb20gX190b1N0cmluZygpCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Int64.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogKgogKiBFbmNhcHN1bGF0ZXMgYSA2NC1iaXQgaW50ZWdlci4KICoKICogVGhlc2UgYXJlIGltbXV0YWJsZS4gSXQgYWx3YXlzIHJldHVybnMgYSBuZXcgaW5zdGFuY2UuCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBpbnQ+IC0gZm91ciAxNi1iaXQgaW50ZWdlcnMKICAgICAqLwogICAgcHVibGljICRsaW1icyA9IGFycmF5KDAsIDAsIDAsIDApOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRvdmVyZmxvdyA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICR1bnNpZ25lZEludCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgY29uc3RydWN0b3IuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5CiAgICAgKiBAcGFyYW0gYm9vbCAkdW5zaWduZWRJbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhcnJheSA9IGFycmF5KDAsIDAsIDAsIDApLCAkdW5zaWduZWRJbnQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdGhpcy0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgKGludCkgJGFycmF5WzBdLAogICAgICAgICAgICAoaW50KSAkYXJyYXlbMV0sCiAgICAgICAgICAgIChpbnQpICRhcnJheVsyXSwKICAgICAgICAgICAgKGludCkgJGFycmF5WzNdCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+b3ZlcmZsb3cgPSAwOwogICAgICAgICR0aGlzLT51bnNpZ25lZEludCA9ICR1bnNpZ25lZEludDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgdHdvIGludDY0IG9iamVjdHMKICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGFkZGVuZAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkSW50NjQoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGFkZGVuZCkKICAgIHsKICAgICAgICAkaTAgPSAkdGhpcy0+bGltYnNbMF07CiAgICAgICAgJGkxID0gJHRoaXMtPmxpbWJzWzFdOwogICAgICAgICRpMiA9ICR0aGlzLT5saW1ic1syXTsKICAgICAgICAkaTMgPSAkdGhpcy0+bGltYnNbM107CiAgICAgICAgJGowID0gJGFkZGVuZC0+bGltYnNbMF07CiAgICAgICAgJGoxID0gJGFkZGVuZC0+bGltYnNbMV07CiAgICAgICAgJGoyID0gJGFkZGVuZC0+bGltYnNbMl07CiAgICAgICAgJGozID0gJGFkZGVuZC0+bGltYnNbM107CgogICAgICAgICRyMyA9ICRpMyArICgkajMgJiAweGZmZmYpOwogICAgICAgICRjYXJyeSA9ICRyMyA+PiAxNjsKCiAgICAgICAgJHIyID0gJGkyICsgKCRqMiAmIDB4ZmZmZikgKyAkY2Fycnk7CiAgICAgICAgJGNhcnJ5ID0gJHIyID4+IDE2OwoKICAgICAgICAkcjEgPSAkaTEgKyAoJGoxICYgMHhmZmZmKSArICRjYXJyeTsKICAgICAgICAkY2FycnkgPSAkcjEgPj4gMTY7CgogICAgICAgICRyMCA9ICRpMCArICgkajAgJiAweGZmZmYpICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMCA+PiAxNjsKCiAgICAgICAgJHIwICY9IDB4ZmZmZjsKICAgICAgICAkcjEgJj0gMHhmZmZmOwogICAgICAgICRyMiAmPSAweGZmZmY7CiAgICAgICAgJHIzICY9IDB4ZmZmZjsKCiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgKICAgICAgICAgICAgYXJyYXkoJHIwLCAkcjEsICRyMiwgJHIzKQogICAgICAgICk7CiAgICAgICAgJHJldHVybi0+b3ZlcmZsb3cgPSAkY2Fycnk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbm9ybWFsIGludGVnZXIgdG8gYW4gaW50NjQgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW50CiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZEludCgkaW50KQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRpbnQsICdpbnQnLCAxKTsKICAgICAgICAvKiogQHZhciBpbnQgJGludCAqLwogICAgICAgICRpbnQgPSAoaW50KSAkaW50OwoKICAgICAgICAkaTAgPSAkdGhpcy0+bGltYnNbMF07CiAgICAgICAgJGkxID0gJHRoaXMtPmxpbWJzWzFdOwogICAgICAgICRpMiA9ICR0aGlzLT5saW1ic1syXTsKICAgICAgICAkaTMgPSAkdGhpcy0+bGltYnNbM107CgogICAgICAgICRyMyA9ICRpMyArICgkaW50ICYgMHhmZmZmKTsKICAgICAgICAkY2FycnkgPSAkcjMgPj4gMTY7CgogICAgICAgICRyMiA9ICRpMiArICgoJGludCA+PiAxNikgJiAweGZmZmYpICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMiA+PiAxNjsKCiAgICAgICAgJHIxID0gJGkxICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMSA+PiAxNjsKCiAgICAgICAgJHIwID0gJGkwICsgJGNhcnJ5OwogICAgICAgICRjYXJyeSA9ICRyMCA+PiAxNjsKCiAgICAgICAgJHIwICY9IDB4ZmZmZjsKICAgICAgICAkcjEgJj0gMHhmZmZmOwogICAgICAgICRyMiAmPSAweGZmZmY7CiAgICAgICAgJHIzICY9IDB4ZmZmZjsKICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KAogICAgICAgICAgICBhcnJheSgkcjAsICRyMSwgJHIyLCAkcjMpCiAgICAgICAgKTsKICAgICAgICAkcmV0dXJuLT5vdmVyZmxvdyA9ICRjYXJyeTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlSW50KCRiID0gMCkKICAgIHsKICAgICAgICAkZ3QgPSAwOwogICAgICAgICRlcSA9IDE7CgogICAgICAgICRpID0gNDsKICAgICAgICAkaiA9IDA7CiAgICAgICAgd2hpbGUgKCRpID4gMCkgewogICAgICAgICAgICAtLSRpOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHgxICovCiAgICAgICAgICAgICR4MSA9ICR0aGlzLT5saW1ic1skaV07CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkeDIgKi8KICAgICAgICAgICAgJHgyID0gKCRiID4+ICgkaiA8PCA0KSkgJiAweGZmZmY7CiAgICAgICAgICAgIC8qKiBpbnQgKi8KICAgICAgICAgICAgJGd0IHw9ICgoJHgyIC0gJHgxKSA+PiA4KSAmICRlcTsKICAgICAgICAgICAgLyoqIGludCAqLwogICAgICAgICAgICAkZXEgJj0gKCgkeDIgXiAkeDEpIC0gMSkgPj4gODsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICgkZ3QgKyAkZ3QgLSAkZXEpICsgMTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNHcmVhdGVyVGhhbigkYiA9IDApCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb21wYXJlSW50KCRiKSA+IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTGVzc1RoYW5JbnQoJGIgPSAwKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29tcGFyZUludCgkYikgPCAwOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaGkKICAgICAqIEBwYXJhbSBpbnQgJGxvCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXNrNjQoJGhpID0gMCwgJGxvID0gMCkKICAgIHsKICAgICAgICAvKiogQHZhciBpbnQgJGEgKi8KICAgICAgICAkYSA9ICgkaGkgPj4gMTYpICYgMHhmZmZmOwogICAgICAgIC8qKiBAdmFyIGludCAkYiAqLwogICAgICAgICRiID0gKCRoaSkgJiAweGZmZmY7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgJGMgPSAoJGxvID4+IDE2KSAmIDB4ZmZmZjsKICAgICAgICAvKiogQHZhciBpbnQgJGQgKi8KICAgICAgICAkZCA9ICgkbG8gJiAweGZmZmYpOwogICAgICAgIHJldHVybiBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJHRoaXMtPmxpbWJzWzBdICYgJGEsCiAgICAgICAgICAgICAgICAkdGhpcy0+bGltYnNbMV0gJiAkYiwKICAgICAgICAgICAgICAgICR0aGlzLT5saW1ic1syXSAmICRjLAogICAgICAgICAgICAgICAgJHRoaXMtPmxpbWJzWzNdICYgJGQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJHRoaXMtPnVuc2lnbmVkSW50CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGludAogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWxJbnQoJGludCA9IDAsICRzaXplID0gMCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkaW50LCAnaW50JywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJHNpemUsICdpbnQnLCAyKTsKICAgICAgICAvKiogQHZhciBpbnQgJGludCAqLwogICAgICAgICRpbnQgPSAoaW50KSAkaW50OwogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgICRzaXplID0gKGludCkgJHNpemU7CgogICAgICAgIGlmICghJHNpemUpIHsKICAgICAgICAgICAgJHNpemUgPSA2MzsKICAgICAgICB9CgogICAgICAgICRhID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwoKICAgICAgICAvLyBJbml0aWFsaXplOgogICAgICAgICRyZXQwID0gMDsKICAgICAgICAkcmV0MSA9IDA7CiAgICAgICAgJHJldDIgPSAwOwogICAgICAgICRyZXQzID0gMDsKICAgICAgICAkYTAgPSAkYS0+bGltYnNbMF07CiAgICAgICAgJGExID0gJGEtPmxpbWJzWzFdOwogICAgICAgICRhMiA9ICRhLT5saW1ic1syXTsKICAgICAgICAkYTMgPSAkYS0+bGltYnNbM107CgogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgIC8qKiBAdmFyIGludCAkaSAqLwogICAgICAgIGZvciAoJGkgPSAkc2l6ZTsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAkbWFzayA9IC0oJGludCAmIDEpOwogICAgICAgICAgICAkeDAgPSAkYTAgJiAkbWFzazsKICAgICAgICAgICAgJHgxID0gJGExICYgJG1hc2s7CiAgICAgICAgICAgICR4MiA9ICRhMiAmICRtYXNrOwogICAgICAgICAgICAkeDMgPSAkYTMgJiAkbWFzazsKCiAgICAgICAgICAgICRyZXQzICs9ICR4MzsKICAgICAgICAgICAgJGMgPSAkcmV0MyA+PiAxNjsKCiAgICAgICAgICAgICRyZXQyICs9ICR4MiArICRjOwogICAgICAgICAgICAkYyA9ICRyZXQyID4+IDE2OwoKICAgICAgICAgICAgJHJldDEgKz0gJHgxICsgJGM7CiAgICAgICAgICAgICRjID0gJHJldDEgPj4gMTY7CgogICAgICAgICAgICAkcmV0MCArPSAkeDAgKyAkYzsKCiAgICAgICAgICAgICRyZXQwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJHJldDEgJj0gMHhmZmZmOwogICAgICAgICAgICAkcmV0MiAmPSAweGZmZmY7CiAgICAgICAgICAgICRyZXQzICY9IDB4ZmZmZjsKCiAgICAgICAgICAgICRhMyA9ICRhMyA8PCAxOwogICAgICAgICAgICAkeDMgPSAkYTMgPj4gMTY7CiAgICAgICAgICAgICRhMiA9ICgkYTIgPDwgMSkgfCAkeDM7CiAgICAgICAgICAgICR4MiA9ICRhMiA+PiAxNjsKICAgICAgICAgICAgJGExID0gKCRhMSA8PCAxKSB8ICR4MjsKICAgICAgICAgICAgJHgxID0gJGExID4+IDE2OwogICAgICAgICAgICAkYTAgPSAoJGEwIDw8IDEpIHwgJHgxOwogICAgICAgICAgICAkYTAgJj0gMHhmZmZmOwogICAgICAgICAgICAkYTEgJj0gMHhmZmZmOwogICAgICAgICAgICAkYTIgJj0gMHhmZmZmOwogICAgICAgICAgICAkYTMgJj0gMHhmZmZmOwoKICAgICAgICAgICAgJGludCA+Pj0gMTsKICAgICAgICAgICAgJHJldHVybi0+bGltYnNbMF0gPSAkcmV0MDsKICAgICAgICAgICAgJHJldHVybi0+bGltYnNbMV0gPSAkcmV0MTsKICAgICAgICAgICAgJHJldHVybi0+bGltYnNbMl0gPSAkcmV0MjsKICAgICAgICAgICAgJHJldHVybi0+bGltYnNbM10gPSAkcmV0MzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJEEKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkQgogICAgICogQHJldHVybiBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0PgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRJbmZlcnJlZFJldHVyblR5cGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdFNlbGVjdCgKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkQSwKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkQgogICAgKSB7CiAgICAgICAgJGEgPSBjbG9uZSAkQTsKICAgICAgICAkYiA9IGNsb25lICRCOwogICAgICAgIC8qKiBAdmFyIGludCAkYU5lZyAqLwogICAgICAgICRhTmVnID0gKCRhLT5saW1ic1swXSA+PiAxNSkgJiAxOwogICAgICAgIC8qKiBAdmFyIGludCAkYk5lZyAqLwogICAgICAgICRiTmVnID0gKCRiLT5saW1ic1swXSA+PiAxNSkgJiAxOwogICAgICAgIC8qKiBAdmFyIGludCAkbSAqLwogICAgICAgICRtID0gKC0oJGFOZWcgJiAkYk5lZykpIHwgMTsKICAgICAgICAvKiogQHZhciBpbnQgJHN3YXAgKi8KICAgICAgICAkc3dhcCA9ICRiTmVnICYgfiRhTmVnOwogICAgICAgIC8qKiBAdmFyIGludCAkZCAqLwogICAgICAgICRkID0gLSRzd2FwOwoKICAgICAgICAvKgogICAgICAgIGlmICgkYk5lZyAmJiAhJGFOZWcpIHsKICAgICAgICAgICAgJGEgPSBjbG9uZSAkaW50OwogICAgICAgICAgICAkYiA9IGNsb25lICR0aGlzOwogICAgICAgIH0gZWxzZWlmKCRiTmVnICYmICRhTmVnKSB7CiAgICAgICAgICAgICRhID0gJHRoaXMtPm11bEludCgtMSk7CiAgICAgICAgICAgICRiID0gJGludC0+bXVsSW50KC0xKTsKICAgICAgICB9CiAgICAgICAgICovCiAgICAgICAgJHggPSAkYS0+eG9ySW50NjQoJGIpLT5tYXNrNjQoJGQsICRkKTsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICRhLT54b3JJbnQ2NCgkeCktPm11bEludCgkbSksCiAgICAgICAgICAgICRiLT54b3JJbnQ2NCgkeCktPm11bEludCgkbSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRpbnQKICAgICAqIEBwYXJhbSBpbnQgJHNpemUKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXNzaWdubWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsSW50NjQoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGludCwgJHNpemUgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzaXplLCAnaW50JywgMik7CiAgICAgICAgaWYgKCEkc2l6ZSkgewogICAgICAgICAgICAkc2l6ZSA9IDYzOwogICAgICAgIH0KICAgICAgICBsaXN0KCRhLCAkYikgPSBzZWxmOjpjdFNlbGVjdCgkdGhpcywgJGludCk7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZToKICAgICAgICAkcmV0MCA9IDA7CiAgICAgICAgJHJldDEgPSAwOwogICAgICAgICRyZXQyID0gMDsKICAgICAgICAkcmV0MyA9IDA7CiAgICAgICAgJGEwID0gJGEtPmxpbWJzWzBdOwogICAgICAgICRhMSA9ICRhLT5saW1ic1sxXTsKICAgICAgICAkYTIgPSAkYS0+bGltYnNbMl07CiAgICAgICAgJGEzID0gJGEtPmxpbWJzWzNdOwogICAgICAgICRiMCA9ICRiLT5saW1ic1swXTsKICAgICAgICAkYjEgPSAkYi0+bGltYnNbMV07CiAgICAgICAgJGIyID0gJGItPmxpbWJzWzJdOwogICAgICAgICRiMyA9ICRiLT5saW1ic1szXTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgLyoqIEB2YXIgaW50ICRpICovCiAgICAgICAgZm9yICgkaSA9IChpbnQpICRzaXplOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgICRtYXNrID0gLSgkYjMgJiAxKTsKICAgICAgICAgICAgJHgwID0gJGEwICYgJG1hc2s7CiAgICAgICAgICAgICR4MSA9ICRhMSAmICRtYXNrOwogICAgICAgICAgICAkeDIgPSAkYTIgJiAkbWFzazsKICAgICAgICAgICAgJHgzID0gJGEzICYgJG1hc2s7CgogICAgICAgICAgICAkcmV0MyArPSAkeDM7CiAgICAgICAgICAgICRjID0gJHJldDMgPj4gMTY7CgogICAgICAgICAgICAkcmV0MiArPSAkeDIgKyAkYzsKICAgICAgICAgICAgJGMgPSAkcmV0MiA+PiAxNjsKCiAgICAgICAgICAgICRyZXQxICs9ICR4MSArICRjOwogICAgICAgICAgICAkYyA9ICRyZXQxID4+IDE2OwoKICAgICAgICAgICAgJHJldDAgKz0gJHgwICsgJGM7CgogICAgICAgICAgICAkcmV0MCAmPSAweGZmZmY7CiAgICAgICAgICAgICRyZXQxICY9IDB4ZmZmZjsKICAgICAgICAgICAgJHJldDIgJj0gMHhmZmZmOwogICAgICAgICAgICAkcmV0MyAmPSAweGZmZmY7CgogICAgICAgICAgICAkYTMgPSAkYTMgPDwgMTsKICAgICAgICAgICAgJHgzID0gJGEzID4+IDE2OwogICAgICAgICAgICAkYTIgPSAoJGEyIDw8IDEpIHwgJHgzOwogICAgICAgICAgICAkeDIgPSAkYTIgPj4gMTY7CiAgICAgICAgICAgICRhMSA9ICgkYTEgPDwgMSkgfCAkeDI7CiAgICAgICAgICAgICR4MSA9ICRhMSA+PiAxNjsKICAgICAgICAgICAgJGEwID0gKCRhMCA8PCAxKSB8ICR4MTsKICAgICAgICAgICAgJGEwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGExICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGEyICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGEzICY9IDB4ZmZmZjsKCiAgICAgICAgICAgICR4MCA9ICgkYjAgJiAxKSA8PCAxNjsKICAgICAgICAgICAgJHgxID0gKCRiMSAmIDEpIDw8IDE2OwogICAgICAgICAgICAkeDIgPSAoJGIyICYgMSkgPDwgMTY7CgogICAgICAgICAgICAkYjAgPSAoJGIwID4+IDEpOwogICAgICAgICAgICAkYjEgPSAoKCRiMSB8ICR4MCkgPj4gMSk7CiAgICAgICAgICAgICRiMiA9ICgoJGIyIHwgJHgxKSA+PiAxKTsKICAgICAgICAgICAgJGIzID0gKCgkYjMgfCAkeDIpID4+IDEpOwoKICAgICAgICAgICAgJGIwICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGIxICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGIyICY9IDB4ZmZmZjsKICAgICAgICAgICAgJGIzICY9IDB4ZmZmZjsKCiAgICAgICAgfQogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdID0gJHJldDA7CiAgICAgICAgJHJldHVybi0+bGltYnNbMV0gPSAkcmV0MTsKICAgICAgICAkcmV0dXJuLT5saW1ic1syXSA9ICRyZXQyOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzNdID0gJHJldDM7CgogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogT1IgdGhpcyA2NC1iaXQgaW50ZWdlciB3aXRoIGFub3RoZXIuCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRiCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvckludDY0KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRiKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICAkcmV0dXJuLT5saW1icyA9IGFycmF5KAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzBdIHwgJGItPmxpbWJzWzBdKSwKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5saW1ic1sxXSB8ICRiLT5saW1ic1sxXSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+bGltYnNbMl0gfCAkYi0+bGltYnNbMl0pLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzNdIHwgJGItPmxpbWJzWzNdKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRjCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBNaXhlZEFycmF5QWNjZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3RhdGVMZWZ0KCRjID0gMCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYywgJ2ludCcsIDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gKGludCkgJGM7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICAkYyAmPSA2MzsKICAgICAgICBpZiAoJGMgPT09IDApIHsKICAgICAgICAgICAgLy8gTk9QLCBidXQgd2Ugd2FudCBhIGNvcHkuCiAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzID0gJHRoaXMtPmxpbWJzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkbGltYnMgKi8KICAgICAgICAgICAgJGxpbWJzID0mICRyZXR1cm4tPmxpbWJzOwoKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICRteUxpbWJzICovCiAgICAgICAgICAgICRteUxpbWJzID0mICR0aGlzLT5saW1iczsKCiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkaWR4X3NoaWZ0ICovCiAgICAgICAgICAgICRpZHhfc2hpZnQgPSAoJGMgPj4gNCkgJiAzOwogICAgICAgICAgICAvKiogQHZhciBpbnQgJHN1Yl9zaGlmdCAqLwogICAgICAgICAgICAkc3ViX3NoaWZ0ID0gJGMgJiAxNTsKCiAgICAgICAgICAgIGZvciAoJGkgPSAzOyAkaSA+PSAwOyAtLSRpKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBpbnQgJGogKi8KICAgICAgICAgICAgICAgICRqID0gKCRpICsgJGlkeF9zaGlmdCkgJiAzOwogICAgICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRrICovCiAgICAgICAgICAgICAgICAkayA9ICgkaSArICRpZHhfc2hpZnQgKyAxKSAmIDM7CiAgICAgICAgICAgICAgICAkbGltYnNbJGldID0gKGludCkgKAogICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgKChpbnQpICgkbXlMaW1ic1skal0pIDw8ICRzdWJfc2hpZnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSAoJG15TGltYnNbJGtdKSA+PiAoMTYgLSAkc3ViX3NoaWZ0KSkKICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogUm90YXRlIHRvIHRoZSByaWdodAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkQXJyYXlBY2Nlc3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdGF0ZVJpZ2h0KCRjID0gMCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYywgJ2ludCcsIDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gKGludCkgJGM7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRyZXR1cm4gKi8KICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgJGMgJj0gNjM7CiAgICAgICAgLyoqIEB2YXIgaW50ICRjICovCiAgICAgICAgaWYgKCRjID09PSAwKSB7CiAgICAgICAgICAgIC8vIE5PUCwgYnV0IHdlIHdhbnQgYSBjb3B5LgogICAgICAgICAgICAkcmV0dXJuLT5saW1icyA9ICR0aGlzLT5saW1iczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIGludD4gJGxpbWJzICovCiAgICAgICAgICAgICRsaW1icyA9JiAkcmV0dXJuLT5saW1iczsKCiAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAkbXlMaW1icyAqLwogICAgICAgICAgICAkbXlMaW1icyA9JiAkdGhpcy0+bGltYnM7CgogICAgICAgICAgICAvKiogQHZhciBpbnQgJGlkeF9zaGlmdCAqLwogICAgICAgICAgICAkaWR4X3NoaWZ0ID0gKCRjID4+IDQpICYgMzsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRzdWJfc2hpZnQgKi8KICAgICAgICAgICAgJHN1Yl9zaGlmdCA9ICRjICYgMTU7CgogICAgICAgICAgICBmb3IgKCRpID0gMzsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRqICovCiAgICAgICAgICAgICAgICAkaiA9ICgkaSAtICRpZHhfc2hpZnQpICYgMzsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkayAqLwogICAgICAgICAgICAgICAgJGsgPSAoJGkgLSAkaWR4X3NoaWZ0IC0gMSkgJiAzOwogICAgICAgICAgICAgICAgJGxpbWJzWyRpXSA9IChpbnQpICgKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSAoJG15TGltYnNbJGpdKSA+PiAoaW50KSAoJHN1Yl9zaGlmdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSAoJG15TGltYnNbJGtdKSA8PCAoMTYgLSAoaW50KSAoJHN1Yl9zaGlmdCkpKQogICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmYKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGMKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnRMZWZ0KCRjID0gMCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkYywgJ2ludCcsIDEpOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwogICAgICAgICRjID0gKGludCkgJGM7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICAkYyAmPSA2MzsKCiAgICAgICAgaWYgKCRjID49IDE2KSB7CiAgICAgICAgICAgIGlmICgkYyA+PSA0OCkgewogICAgICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGltYnNbM10sIDAsIDAsIDAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYyA+PSAzMikgewogICAgICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGltYnNbMl0sICR0aGlzLT5saW1ic1szXSwgMCwgMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbWJzWzFdLCAkdGhpcy0+bGltYnNbMl0sICR0aGlzLT5saW1ic1szXSwgMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHJldHVybi0+c2hpZnRMZWZ0KCRjICYgMTUpOwogICAgICAgIH0KICAgICAgICBpZiAoJGMgPT09IDApIHsKICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSAkdGhpcy0+bGltYnM7CiAgICAgICAgfSBlbHNlaWYgKCRjIDwgMCkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJGMgKi8KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zaGlmdFJpZ2h0KC0kYyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGlzX251bGwoJGMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeSAqLwogICAgICAgICAgICAkY2FycnkgPSAwOwogICAgICAgICAgICBmb3IgKCRpID0gMzsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR0bXAgKi8KICAgICAgICAgICAgICAgICR0bXAgPSAoJHRoaXMtPmxpbWJzWyRpXSA8PCAkYykgfCAoJGNhcnJ5ICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzWyRpXSA9IChpbnQpICgkdG1wICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkgKi8KICAgICAgICAgICAgICAgICRjYXJyeSA9ICR0bXAgPj4gMTY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRjCiAgICAgKiBAcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0CiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNoaWZ0UmlnaHQoJGMgPSAwKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRjLCAnaW50JywgMSk7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRjICY9IDYzOwogICAgICAgIC8qKiBAdmFyIGludCAkYyAqLwoKICAgICAgICAkbmVnYXRpdmUgPSAtKCgkdGhpcy0+bGltYnNbMF0gPj4gMTUpICYgMSk7CiAgICAgICAgaWYgKCRjID49IDE2KSB7CiAgICAgICAgICAgIGlmICgkYyA+PSA0OCkgewogICAgICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAkdGhpcy0+bGltYnNbMF0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYyA+PSAzMikgewogICAgICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAkdGhpcy0+bGltYnNbMF0sCiAgICAgICAgICAgICAgICAgICAgKGludCkgJHRoaXMtPmxpbWJzWzFdCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJldHVybi0+bGltYnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAoaW50KSAoJG5lZ2F0aXZlICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgICAgICAoaW50KSAkdGhpcy0+bGltYnNbMF0sCiAgICAgICAgICAgICAgICAgICAgKGludCkgJHRoaXMtPmxpbWJzWzFdLAogICAgICAgICAgICAgICAgICAgIChpbnQpICR0aGlzLT5saW1ic1syXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHJldHVybi0+c2hpZnRSaWdodCgkYyAmIDE1KTsKICAgICAgICB9CgogICAgICAgIGlmICgkYyA9PT0gMCkgewogICAgICAgICAgICAkcmV0dXJuLT5saW1icyA9ICR0aGlzLT5saW1iczsKICAgICAgICB9IGVsc2VpZiAoJGMgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2hpZnRMZWZ0KC0kYyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFpc19pbnQoJGMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeVJpZ2h0ICovCiAgICAgICAgICAgICRjYXJyeVJpZ2h0ID0gKCRuZWdhdGl2ZSAmIDB4ZmZmZik7CiAgICAgICAgICAgICRtYXNrID0gKGludCkgKCgoMSA8PCAoJGMgKyAxKSkgLSAxKSAmIDB4ZmZmZik7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDQ7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRyZXR1cm4tPmxpbWJzWyRpXSA9IChpbnQpICgKICAgICAgICAgICAgICAgICAgICAoKCR0aGlzLT5saW1ic1skaV0gPj4gJGMpIHwgKCRjYXJyeVJpZ2h0IDw8ICgxNiAtICRjKSkpICYgMHhmZmZmCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJGNhcnJ5UmlnaHQgPSAoaW50KSAoJHRoaXMtPmxpbWJzWyRpXSAmICRtYXNrKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdCBhIG5vcm1hbCBpbnRlZ2VyIGZyb20gYW4gaW50NjQgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGludAogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWJJbnQoJGludCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkaW50LCAnaW50JywgMSk7CiAgICAgICAgJGludCA9IChpbnQpICRpbnQ7CgogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeSAqLwogICAgICAgICRjYXJyeSA9IDA7CiAgICAgICAgZm9yICgkaSA9IDM7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICR0bXAgKi8KICAgICAgICAgICAgJHRtcCA9ICR0aGlzLT5saW1ic1skaV0gLSAoKCRpbnQgPj4gMTYpICYgMHhmZmZmKSArICRjYXJyeTsKICAgICAgICAgICAgLyoqIEB2YXIgaW50ICRjYXJyeSAqLwogICAgICAgICAgICAkY2FycnkgPSAkdG1wID4+IDE2OwogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1skaV0gPSAoaW50KSAoJHRtcCAmIDB4ZmZmZik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gSW50NjQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGIKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YkludDY0KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRiKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT51bnNpZ25lZEludCA9ICR0aGlzLT51bnNpZ25lZEludDsKICAgICAgICAvKiogQHZhciBpbnQgJGNhcnJ5ICovCiAgICAgICAgJGNhcnJ5ID0gMDsKICAgICAgICBmb3IgKCRpID0gMzsgJGkgPj0gMDsgLS0kaSkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJHRtcCAqLwogICAgICAgICAgICAkdG1wID0gJHRoaXMtPmxpbWJzWyRpXSAtICRiLT5saW1ic1skaV0gKyAkY2Fycnk7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkY2FycnkgKi8KICAgICAgICAgICAgJGNhcnJ5ID0gKCR0bXAgPj4gMTYpOwogICAgICAgICAgICAkcmV0dXJuLT5saW1ic1skaV0gPSAoaW50KSAoJHRtcCAmIDB4ZmZmZik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogWE9SIHRoaXMgNjQtYml0IGludGVnZXIgd2l0aCBhbm90aGVyLgogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkYgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geG9ySW50NjQoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGIpCiAgICB7CiAgICAgICAgJHJldHVybiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgpOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRyZXR1cm4tPmxpbWJzID0gYXJyYXkoCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+bGltYnNbMF0gXiAkYi0+bGltYnNbMF0pLAogICAgICAgICAgICAoaW50KSAoJHRoaXMtPmxpbWJzWzFdIF4gJGItPmxpbWJzWzFdKSwKICAgICAgICAgICAgKGludCkgKCR0aGlzLT5saW1ic1syXSBeICRiLT5saW1ic1syXSksCiAgICAgICAgICAgIChpbnQpICgkdGhpcy0+bGltYnNbM10gXiAkYi0+bGltYnNbM10pCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGxvdwogICAgICogQHBhcmFtIGludCAkaGlnaAogICAgICogQHJldHVybiBzZWxmCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tSW50cygkbG93LCAkaGlnaCkKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkbG93LCAnaW50JywgMSk7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGhpZ2gsICdpbnQnLCAyKTsKCiAgICAgICAgJGhpZ2ggPSAoaW50KSAkaGlnaDsKICAgICAgICAkbG93ID0gKGludCkgJGxvdzsKICAgICAgICByZXR1cm4gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIChpbnQpICgoJGhpZ2ggPj4gMTYpICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgIChpbnQpICgkaGlnaCAmIDB4ZmZmZiksCiAgICAgICAgICAgICAgICAoaW50KSAoKCRsb3cgPj4gMTYpICYgMHhmZmZmKSwKICAgICAgICAgICAgICAgIChpbnQpICgkbG93ICYgMHhmZmZmKQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGxvdwogICAgICogQHJldHVybiBzZWxmCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tSW50KCRsb3cpCiAgICB7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6ZGVjbGFyZVNjYWxhclR5cGUoJGxvdywgJ2ludCcsIDEpOwogICAgICAgICRsb3cgPSAoaW50KSAkbG93OwoKICAgICAgICByZXR1cm4gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKGludCkgKCgkbG93ID4+IDE2KSAmIDB4ZmZmZiksCiAgICAgICAgICAgICAgICAoaW50KSAoJGxvdyAmIDB4ZmZmZikKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9JbnQoKQogICAgewogICAgICAgIHJldHVybiAoaW50KSAoCiAgICAgICAgICAgICgoJHRoaXMtPmxpbWJzWzJdICYgMHhmZmZmKSA8PCAxNikKICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgKCR0aGlzLT5saW1ic1szXSAmIDB4ZmZmZikKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21TdHJpbmcoJHN0cmluZykKICAgIHsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpkZWNsYXJlU2NhbGFyVHlwZSgkc3RyaW5nLCAnc3RyaW5nJywgMSk7CiAgICAgICAgJHN0cmluZyA9IChzdHJpbmcpICRzdHJpbmc7CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAhPT0gOCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnU3RyaW5nIG11c3QgYmUgOCBieXRlczsgJyAuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkc3RyaW5nKSAuICcgZ2l2ZW4uJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkcmV0dXJuID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KCk7CgogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdICA9IChpbnQpICgoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1swXSkgJiAweGZmKSA8PCA4KTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSB8PSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1sxXSkgJiAweGZmKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSAgPSAoaW50KSAoKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbMl0pICYgMHhmZikgPDwgOCk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMV0gfD0gKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbM10pICYgMHhmZik7CiAgICAgICAgJHJldHVybi0+bGltYnNbMl0gID0gKGludCkgKChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzRdKSAmIDB4ZmYpIDw8IDgpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzJdIHw9IChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzVdKSAmIDB4ZmYpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzNdICA9IChpbnQpICgoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1s2XSkgJiAweGZmKSA8PCA4KTsKICAgICAgICAkcmV0dXJuLT5saW1ic1szXSB8PSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1s3XSkgJiAweGZmKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICogQHJldHVybiBzZWxmCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tUmV2ZXJzZVN0cmluZygkc3RyaW5nKQogICAgewogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmRlY2xhcmVTY2FsYXJUeXBlKCRzdHJpbmcsICdzdHJpbmcnLCAxKTsKICAgICAgICAkc3RyaW5nID0gKHN0cmluZykgJHN0cmluZzsKICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RybGVuKCRzdHJpbmcpICE9PSA4KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdTdHJpbmcgbXVzdCBiZSA4IGJ5dGVzOyAnIC4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RybGVuKCRzdHJpbmcpIC4gJyBnaXZlbi4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKCiAgICAgICAgJHJldHVybi0+bGltYnNbMF0gID0gKGludCkgKChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzddKSAmIDB4ZmYpIDw8IDgpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzBdIHw9IChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzZdKSAmIDB4ZmYpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdICA9IChpbnQpICgoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1s1XSkgJiAweGZmKSA8PCA4KTsKICAgICAgICAkcmV0dXJuLT5saW1ic1sxXSB8PSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6Y2hyVG9JbnQoJHN0cmluZ1s0XSkgJiAweGZmKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1syXSAgPSAoaW50KSAoKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbM10pICYgMHhmZikgPDwgOCk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMl0gfD0gKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRzdHJpbmdbMl0pICYgMHhmZik7CiAgICAgICAgJHJldHVybi0+bGltYnNbM10gID0gKGludCkgKChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzFdKSAmIDB4ZmYpIDw8IDgpOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzNdIHw9IChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpjaHJUb0ludCgkc3RyaW5nWzBdKSAmIDB4ZmYpOwogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxpbnQsIGludD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgKGludCkgKCgoJHRoaXMtPmxpbWJzWzBdICYgMHhmZmZmKSA8PCAxNikgfCAoJHRoaXMtPmxpbWJzWzFdICYgMHhmZmZmKSksCiAgICAgICAgICAgIChpbnQpICgoKCR0aGlzLT5saW1ic1syXSAmIDB4ZmZmZikgPDwgMTYpIHwgKCR0aGlzLT5saW1ic1szXSAmIDB4ZmZmZikpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50MzIoKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgkdGhpcy0+bGltYnNbMl0pOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkgKCR0aGlzLT5saW1ic1szXSk7CiAgICAgICAgJHJldHVybi0+dW5zaWduZWRJbnQgPSAkdGhpcy0+dW5zaWduZWRJbnQ7CiAgICAgICAgJHJldHVybi0+b3ZlcmZsb3cgPSAoaW50KSAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6YWJzKCR0aGlzLT5saW1ic1sxXSwgMTYpICYgMHhmZmZmKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSW50NjQoKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1swXSA9IChpbnQpICgkdGhpcy0+bGltYnNbMF0pOwogICAgICAgICRyZXR1cm4tPmxpbWJzWzFdID0gKGludCkgKCR0aGlzLT5saW1ic1sxXSk7CiAgICAgICAgJHJldHVybi0+bGltYnNbMl0gPSAoaW50KSAoJHRoaXMtPmxpbWJzWzJdKTsKICAgICAgICAkcmV0dXJuLT5saW1ic1szXSA9IChpbnQpICgkdGhpcy0+bGltYnNbM10pOwogICAgICAgICRyZXR1cm4tPnVuc2lnbmVkSW50ID0gJHRoaXMtPnVuc2lnbmVkSW50OwogICAgICAgICRyZXR1cm4tPm92ZXJmbG93ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6YWJzKCR0aGlzLT5vdmVyZmxvdyk7CiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkYm9vbAogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVbnNpZ25lZEludCgkYm9vbCA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT51bnNpZ25lZEludCA9ICFlbXB0eSgkYm9vbCk7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbMF0gPj4gOCkgJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCR0aGlzLT5saW1ic1swXSAmIDB4ZmYpIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50VG9DaHIoKCR0aGlzLT5saW1ic1sxXSA+PiA4KSAmIDB4ZmYpIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50VG9DaHIoJHRoaXMtPmxpbWJzWzFdICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigoJHRoaXMtPmxpbWJzWzJdID4+IDgpICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigkdGhpcy0+bGltYnNbMl0gJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbM10gPj4gOCkgJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCR0aGlzLT5saW1ic1szXSAmIDB4ZmYpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b1JldmVyc2VTdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigkdGhpcy0+bGltYnNbM10gJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbM10gPj4gOCkgJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCR0aGlzLT5saW1ic1syXSAmIDB4ZmYpIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50VG9DaHIoKCR0aGlzLT5saW1ic1syXSA+PiA4KSAmIDB4ZmYpIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50VG9DaHIoJHRoaXMtPmxpbWJzWzFdICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigoJHRoaXMtPmxpbWJzWzFdID4+IDgpICYgMHhmZikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRUb0NocigkdGhpcy0+bGltYnNbMF0gJiAweGZmKSAuCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmludFRvQ2hyKCgkdGhpcy0+bGltYnNbMF0gPj4gOCkgJiAweGZmKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnRvU3RyaW5nKCk7CiAgICAgICAgfSBjYXRjaCAoVHlwZUVycm9yICRleCkgewogICAgICAgICAgICAvLyBQSFAgZW5naW5lIGNhbid0IGhhbmRsZSBleGNlcHRpb25zIGZyb20gX190b1N0cmluZygpCiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Poly1305.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1JywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNQogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDUgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsCnsKICAgIGNvbnN0IEJMT0NLX1NJWkUgPSAxNjsKCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvbmV0aW1lYXV0aCgkbSwgJGtleSkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXkpIDwgMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdLZXkgbXVzdCBiZSAzMiBieXRlcyBsb25nLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1X1N0YXRlKAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGtleSwgMCwgMzIpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHN0YXRlCiAgICAgICAgICAgIC0+dXBkYXRlKCRtKQogICAgICAgICAgICAtPmZpbmlzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hYwogICAgICogQHBhcmFtIHN0cmluZyAkbQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uZXRpbWVhdXRoX3ZlcmlmeSgkbWFjLCAkbSwgJGtleSkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXkpIDwgMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdLZXkgbXVzdCBiZSAzMiBieXRlcyBsb25nLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1X1N0YXRlKAogICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGtleSwgMCwgMzIpCiAgICAgICAgKTsKICAgICAgICAkY2FsYyA9ICRzdGF0ZQogICAgICAgICAgICAtPnVwZGF0ZSgkbSkKICAgICAgICAgICAgLT5maW5pc2goKTsKICAgICAgICByZXR1cm4gc2VsZjo6dmVyaWZ5XzE2KCRjYWxjLCAkbWFjKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Poly1305/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1X1N0YXRlJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZQogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDVfU3RhdGUgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxpbnQsIGludD4KICAgICAqLwogICAgcHJvdGVjdGVkICRidWZmZXIgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmluYWwgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMj4KICAgICAqLwogICAgcHVibGljICRoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRsZWZ0b3ZlciA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI+CiAgICAgKi8KICAgIHB1YmxpYyAkcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2ND4KICAgICAqLwogICAgcHVibGljICRwYWQ7CgogICAgLyoqCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgka2V5ID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSA8IDMyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnUG9seTEzMDUgcmVxdWlyZXMgYSAzMi1ieXRlIGtleScKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLyogciAmPSAweGZmZmZmZmMwZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmYgKi8KICAgICAgICAkdGhpcy0+ciA9IGFycmF5KAogICAgICAgICAgICAvLyBzdC0+clswXSA9IC4uLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDAsIDQpKQogICAgICAgICAgICAgICAgLT5zZXRVbnNpZ25lZEludCh0cnVlKQogICAgICAgICAgICAgICAgLT5tYXNrKDB4M2ZmZmZmZiksCiAgICAgICAgICAgIC8vIHN0LT5yWzFdID0gLi4uCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMywgNCkpCiAgICAgICAgICAgICAgICAtPnNldFVuc2lnbmVkSW50KHRydWUpCiAgICAgICAgICAgICAgICAtPnNoaWZ0UmlnaHQoMikKICAgICAgICAgICAgICAgIC0+bWFzaygweDNmZmZmMDMpLAogICAgICAgICAgICAvLyBzdC0+clsyXSA9IC4uLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDYsIDQpKQogICAgICAgICAgICAgICAgLT5zZXRVbnNpZ25lZEludCh0cnVlKQogICAgICAgICAgICAgICAgLT5zaGlmdFJpZ2h0KDQpCiAgICAgICAgICAgICAgICAtPm1hc2soMHgzZmZjMGZmKSwKICAgICAgICAgICAgLy8gc3QtPnJbM10gPSAuLi4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigka2V5LCA5LCA0KSkKICAgICAgICAgICAgICAgIC0+c2V0VW5zaWduZWRJbnQodHJ1ZSkKICAgICAgICAgICAgICAgIC0+c2hpZnRSaWdodCg2KQogICAgICAgICAgICAgICAgLT5tYXNrKDB4M2YwM2ZmZiksCiAgICAgICAgICAgIC8vIHN0LT5yWzRdID0gLi4uCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMTIsIDQpKQogICAgICAgICAgICAgICAgLT5zZXRVbnNpZ25lZEludCh0cnVlKQogICAgICAgICAgICAgICAgLT5zaGlmdFJpZ2h0KDgpCiAgICAgICAgICAgICAgICAtPm1hc2soMHgwMGZmZmZmKQogICAgICAgICk7CgogICAgICAgIC8qIGggPSAwICovCiAgICAgICAgJHRoaXMtPmggPSBhcnJheSgKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDAsIDApLCB0cnVlKSwKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDAsIDApLCB0cnVlKSwKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDAsIDApLCB0cnVlKSwKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDAsIDApLCB0cnVlKSwKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDAsIDApLCB0cnVlKQogICAgICAgICk7CgogICAgICAgIC8qIHNhdmUgcGFkIGZvciBsYXRlciAqLwogICAgICAgICR0aGlzLT5wYWQgPSBhcnJheSgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigka2V5LCAxNiwgNCkpCiAgICAgICAgICAgICAgICAtPnNldFVuc2lnbmVkSW50KHRydWUpLT50b0ludDY0KCksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGtleSwgMjAsIDQpKQogICAgICAgICAgICAgICAgLT5zZXRVbnNpZ25lZEludCh0cnVlKS0+dG9JbnQ2NCgpLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrZXksIDI0LCA0KSkKICAgICAgICAgICAgICAgIC0+c2V0VW5zaWduZWRJbnQodHJ1ZSktPnRvSW50NjQoKSwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigka2V5LCAyOCwgNCkpCiAgICAgICAgICAgICAgICAtPnNldFVuc2lnbmVkSW50KHRydWUpLT50b0ludDY0KCksCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmxlZnRvdmVyID0gMDsKICAgICAgICAkdGhpcy0+ZmluYWwgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKCRtZXNzYWdlID0gJycpCiAgICB7CiAgICAgICAgJGJ5dGVzID0gc2VsZjo6c3RybGVuKCRtZXNzYWdlKTsKCiAgICAgICAgLyogaGFuZGxlIGxlZnRvdmVyICovCiAgICAgICAgaWYgKCR0aGlzLT5sZWZ0b3ZlcikgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJHdhbnQgKi8KICAgICAgICAgICAgJHdhbnQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNTo6QkxPQ0tfU0laRSAtICR0aGlzLT5sZWZ0b3ZlcjsKICAgICAgICAgICAgaWYgKCR3YW50ID4gJGJ5dGVzKSB7CiAgICAgICAgICAgICAgICAkd2FudCA9ICRieXRlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkd2FudDsgKyskaSkgewogICAgICAgICAgICAgICAgJG1pID0gc2VsZjo6Y2hyVG9JbnQoJG1lc3NhZ2VbJGldKTsKICAgICAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJHRoaXMtPmxlZnRvdmVyICsgJGldID0gJG1pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFdlIHNuaXAgb2ZmIHRoZSBsZWZ0bW9zdCBieXRlcy4KICAgICAgICAgICAgJG1lc3NhZ2UgPSBzZWxmOjpzdWJzdHIoJG1lc3NhZ2UsICR3YW50KTsKICAgICAgICAgICAgJGJ5dGVzID0gc2VsZjo6c3RybGVuKCRtZXNzYWdlKTsKICAgICAgICAgICAgJHRoaXMtPmxlZnRvdmVyICs9ICR3YW50OwogICAgICAgICAgICBpZiAoJHRoaXMtPmxlZnRvdmVyIDwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDU6OkJMT0NLX1NJWkUpIHsKICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGRvbid0IGhhdmUgZW5vdWdoIHRvIHJ1biAkdGhpcy0+YmxvY2tzKCkKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmJsb2NrcygKICAgICAgICAgICAgICAgIHN0YXRpYzo6aW50QXJyYXlUb1N0cmluZygkdGhpcy0+YnVmZmVyKSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1OjpCTE9DS19TSVpFCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICR0aGlzLT5sZWZ0b3ZlciA9IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBwcm9jZXNzIGZ1bGwgYmxvY2tzICovCiAgICAgICAgaWYgKCRieXRlcyA+PSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNTo6QkxPQ0tfU0laRSkgewogICAgICAgICAgICAvKiogQHZhciBpbnQgJHdhbnQgKi8KICAgICAgICAgICAgJHdhbnQgPSAkYnl0ZXMgJiB+KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1OjpCTE9DS19TSVpFIC0gMSk7CiAgICAgICAgICAgIGlmICgkd2FudCA+PSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNTo6QkxPQ0tfU0laRSkgewogICAgICAgICAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jayAqLwogICAgICAgICAgICAgICAgJGJsb2NrID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAwLCAkd2FudCk7CiAgICAgICAgICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRibG9jaykgPj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDU6OkJMT0NLX1NJWkUpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YmxvY2tzKCRibG9jaywgJHdhbnQpOwogICAgICAgICAgICAgICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAkd2FudCk7CiAgICAgICAgICAgICAgICAgICAgJGJ5dGVzID0gc2VsZjo6c3RybGVuKCRtZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyogc3RvcmUgbGVmdG92ZXIgKi8KICAgICAgICBpZiAoJGJ5dGVzKSB7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRieXRlczsgKyskaSkgewogICAgICAgICAgICAgICAgJG1pID0gc2VsZjo6Y2hyVG9JbnQoJG1lc3NhZ2VbJGldKTsKICAgICAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJHRoaXMtPmxlZnRvdmVyICsgJGldID0gJG1pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5sZWZ0b3ZlciA9IChpbnQpICR0aGlzLT5sZWZ0b3ZlciArICRieXRlczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBpbnQgJGJ5dGVzCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmxvY2tzKCRtZXNzYWdlLCAkYnl0ZXMpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkbWVzc2FnZSkgPCAxNikgewogICAgICAgICAgICAkbWVzc2FnZSA9IHN0cl9wYWQoJG1lc3NhZ2UsIDE2LCAiXHgwMCIsIFNUUl9QQURfUklHSFQpOwogICAgICAgIH0KICAgICAgICAkaGliaXQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgoaW50KSAoJHRoaXMtPmZpbmFsID8gMCA6IDEgPDwgMjQpKTsgLyogMSA8PCAxMjggKi8KICAgICAgICAkaGliaXQtPnNldFVuc2lnbmVkSW50KHRydWUpOwogICAgICAgICR6ZXJvID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KGFycmF5KDAsIDAsIDAsIDApLCB0cnVlKTsKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRkMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGQxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkZDIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRkMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJGQ0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkcjAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRyMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQgJHIyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCAkcjMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0ICRyNAogICAgICAgICAqCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRoMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGgyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRoNAogICAgICAgICAqLwogICAgICAgICRyMCA9ICR0aGlzLT5yWzBdLT50b0ludDY0KCk7CiAgICAgICAgJHIxID0gJHRoaXMtPnJbMV0tPnRvSW50NjQoKTsKICAgICAgICAkcjIgPSAkdGhpcy0+clsyXS0+dG9JbnQ2NCgpOwogICAgICAgICRyMyA9ICR0aGlzLT5yWzNdLT50b0ludDY0KCk7CiAgICAgICAgJHI0ID0gJHRoaXMtPnJbNF0tPnRvSW50NjQoKTsKCiAgICAgICAgJHMxID0gJHIxLT50b0ludDY0KCktPm11bEludCg1LCAzKTsKICAgICAgICAkczIgPSAkcjItPnRvSW50NjQoKS0+bXVsSW50KDUsIDMpOwogICAgICAgICRzMyA9ICRyMy0+dG9JbnQ2NCgpLT5tdWxJbnQoNSwgMyk7CiAgICAgICAgJHM0ID0gJHI0LT50b0ludDY0KCktPm11bEludCg1LCAzKTsKCiAgICAgICAgJGgwID0gJHRoaXMtPmhbMF07CiAgICAgICAgJGgxID0gJHRoaXMtPmhbMV07CiAgICAgICAgJGgyID0gJHRoaXMtPmhbMl07CiAgICAgICAgJGgzID0gJHRoaXMtPmhbM107CiAgICAgICAgJGg0ID0gJHRoaXMtPmhbNF07CgogICAgICAgIHdoaWxlICgkYnl0ZXMgPj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDU6OkJMT0NLX1NJWkUpIHsKICAgICAgICAgICAgLyogaCArPSBtW2ldICovCiAgICAgICAgICAgICRoMCA9ICRoMC0+YWRkSW50MzIoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAwLCA0KSkKICAgICAgICAgICAgICAgICAgICAtPm1hc2soMHgzZmZmZmZmKQogICAgICAgICAgICApLT50b0ludDY0KCk7CiAgICAgICAgICAgICRoMSA9ICRoMS0+YWRkSW50MzIoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAzLCA0KSkKICAgICAgICAgICAgICAgICAgICAtPnNoaWZ0UmlnaHQoMikKICAgICAgICAgICAgICAgICAgICAtPm1hc2soMHgzZmZmZmZmKQogICAgICAgICAgICApLT50b0ludDY0KCk7CiAgICAgICAgICAgICRoMiA9ICRoMi0+YWRkSW50MzIoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA2LCA0KSkKICAgICAgICAgICAgICAgICAgICAtPnNoaWZ0UmlnaHQoNCkKICAgICAgICAgICAgICAgICAgICAtPm1hc2soMHgzZmZmZmZmKQogICAgICAgICAgICApLT50b0ludDY0KCk7CiAgICAgICAgICAgICRoMyA9ICRoMy0+YWRkSW50MzIoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCA5LCA0KSkKICAgICAgICAgICAgICAgICAgICAtPnNoaWZ0UmlnaHQoNikKICAgICAgICAgICAgICAgICAgICAtPm1hc2soMHgzZmZmZmZmKQogICAgICAgICAgICApLT50b0ludDY0KCk7CiAgICAgICAgICAgICRoNCA9ICRoNC0+YWRkSW50MzIoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRtZXNzYWdlLCAxMiwgNCkpCiAgICAgICAgICAgICAgICAgICAgLT5zaGlmdFJpZ2h0KDgpCiAgICAgICAgICAgICAgICAgICAgLT5vckludDMyKCRoaWJpdCkKICAgICAgICAgICAgKS0+dG9JbnQ2NCgpOwoKICAgICAgICAgICAgLyogaCAqPSByICovCiAgICAgICAgICAgICRkMCA9ICR6ZXJvCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRoMC0+bXVsSW50NjQoJHIwLCAyNSkpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRzNC0+bXVsSW50NjQoJGgxLCAyNikpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRzMy0+bXVsSW50NjQoJGgyLCAyNikpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRzMi0+bXVsSW50NjQoJGgzLCAyNikpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRzMS0+bXVsSW50NjQoJGg0LCAyNikpOwoKICAgICAgICAgICAgJGQxID0gJHplcm8KICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgwLT5tdWxJbnQ2NCgkcjEsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgxLT5tdWxJbnQ2NCgkcjAsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJHM0LT5tdWxJbnQ2NCgkaDIsIDI2KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJHMzLT5tdWxJbnQ2NCgkaDMsIDI2KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJHMyLT5tdWxJbnQ2NCgkaDQsIDI2KSk7CgogICAgICAgICAgICAkZDIgPSAkemVybwogICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkaDAtPm11bEludDY0KCRyMiwgMjUpKQogICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkaDEtPm11bEludDY0KCRyMSwgMjUpKQogICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkaDItPm11bEludDY0KCRyMCwgMjUpKQogICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkczQtPm11bEludDY0KCRoMywgMjYpKQogICAgICAgICAgICAgICAgLT5hZGRJbnQ2NCgkczMtPm11bEludDY0KCRoNCwgMjYpKTsKCiAgICAgICAgICAgICRkMyA9ICR6ZXJvCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRoMC0+bXVsSW50NjQoJHIzLCAyNSkpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRoMS0+bXVsSW50NjQoJHIyLCAyNSkpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRoMi0+bXVsSW50NjQoJHIxLCAyNSkpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRoMy0+bXVsSW50NjQoJHIwLCAyNSkpCiAgICAgICAgICAgICAgICAtPmFkZEludDY0KCRzNC0+bXVsSW50NjQoJGg0LCAyNikpOwoKICAgICAgICAgICAgJGQ0ID0gJHplcm8KICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgwLT5tdWxJbnQ2NCgkcjQsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgxLT5tdWxJbnQ2NCgkcjMsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgyLT5tdWxJbnQ2NCgkcjIsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGgzLT5tdWxJbnQ2NCgkcjEsIDI1KSkKICAgICAgICAgICAgICAgIC0+YWRkSW50NjQoJGg0LT5tdWxJbnQ2NCgkcjAsIDI1KSk7CgogICAgICAgICAgICAvKiAocGFydGlhbCkgaCAlPSBwICovCiAgICAgICAgICAgICRjID0gJGQwLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAgICAgJGgwID0gJGQwLT50b0ludDMyKCktPm1hc2soMHgzZmZmZmZmKTsKICAgICAgICAgICAgJGQxID0gJGQxLT5hZGRJbnQ2NCgkYyk7CgogICAgICAgICAgICAkYyA9ICRkMS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgICAgICRoMSA9ICRkMS0+dG9JbnQzMigpLT5tYXNrKDB4M2ZmZmZmZik7CiAgICAgICAgICAgICRkMiA9ICRkMi0+YWRkSW50NjQoJGMpOwoKICAgICAgICAgICAgJGMgPSAkZDItPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICAgICAkaDIgPSAkZDItPnRvSW50MzIoKS0+bWFzaygweDNmZmZmZmYpOwogICAgICAgICAgICAkZDMgPSAkZDMtPmFkZEludDY0KCRjKTsKCiAgICAgICAgICAgICRjID0gJGQzLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAgICAgJGgzID0gJGQzLT50b0ludDMyKCktPm1hc2soMHgzZmZmZmZmKTsKICAgICAgICAgICAgJGQ0ID0gJGQ0LT5hZGRJbnQ2NCgkYyk7CgogICAgICAgICAgICAkYyA9ICRkNC0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgICAgICRoNCA9ICRkNC0+dG9JbnQzMigpLT5tYXNrKDB4M2ZmZmZmZik7CiAgICAgICAgICAgICRoMCA9ICRoMC0+YWRkSW50MzIoJGMtPnRvSW50MzIoKS0+bXVsSW50KDUsIDMpKTsKCiAgICAgICAgICAgICRjID0gJGgwLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAgICAgJGgwID0gJGgwLT5tYXNrKDB4M2ZmZmZmZik7CiAgICAgICAgICAgICRoMSA9ICRoMS0+YWRkSW50MzIoJGMpOwoKICAgICAgICAgICAgLy8gQ2hvcCBvZmYgdGhlIGxlZnQgMzIgYnl0ZXMuCiAgICAgICAgICAgICRtZXNzYWdlID0gc2VsZjo6c3Vic3RyKAogICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNTo6QkxPQ0tfU0laRQogICAgICAgICAgICApOwogICAgICAgICAgICAkYnl0ZXMgLT0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDU6OkJMT0NLX1NJWkU7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyPiAkaCAqLwogICAgICAgICR0aGlzLT5oID0gYXJyYXkoJGgwLCAkaDEsICRoMiwgJGgzLCAkaDQpOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5pc2goKQogICAgewogICAgICAgIC8qIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBibG9jayAqLwogICAgICAgIGlmICgkdGhpcy0+bGVmdG92ZXIpIHsKICAgICAgICAgICAgJGkgPSAkdGhpcy0+bGVmdG92ZXI7CiAgICAgICAgICAgICR0aGlzLT5idWZmZXJbJGkrK10gPSAxOwogICAgICAgICAgICBmb3IgKDsgJGkgPCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNTo6QkxPQ0tfU0laRTsgKyskaSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlclskaV0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5maW5hbCA9IHRydWU7CiAgICAgICAgICAgICR0aGlzLT5ibG9ja3MoCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgc3RhdGljOjppbnRBcnJheVRvU3RyaW5nKCR0aGlzLT5idWZmZXIpLAogICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDU6OkJMT0NLX1NJWkUKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAkYiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1OjpCTE9DS19TSVpFCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRmCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkZzAKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRnMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGcyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkZzMKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRnNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGgwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRoMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGgzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkaDQKICAgICAgICAgKi8KICAgICAgICAkaDAgPSAkdGhpcy0+aFswXTsKICAgICAgICAkaDEgPSAkdGhpcy0+aFsxXTsKICAgICAgICAkaDIgPSAkdGhpcy0+aFsyXTsKICAgICAgICAkaDMgPSAkdGhpcy0+aFszXTsKICAgICAgICAkaDQgPSAkdGhpcy0+aFs0XTsKCiAgICAgICAgJGMgPSAkaDEtPnNoaWZ0UmlnaHQoMjYpOyAgICAgICAgICAgIyAkYyA9ICRoMSA+PiAyNjsKICAgICAgICAkaDEgPSAkaDEtPm1hc2soMHgzZmZmZmZmKTsgICAgICAgICAjICRoMSAmPSAweDNmZmZmZmY7CgogICAgICAgICRoMiA9ICRoMi0+YWRkSW50MzIoJGMpOyAgICAgICAgICAgICMgJGgyICs9ICRjOwogICAgICAgICRjID0gJGgyLT5zaGlmdFJpZ2h0KDI2KTsgICAgICAgICAgICMgJGMgPSAkaDIgPj4gMjY7CiAgICAgICAgJGgyID0gJGgyLT5tYXNrKDB4M2ZmZmZmZik7ICAgICAgICAgIyAkaDIgJj0gMHgzZmZmZmZmOwoKICAgICAgICAkaDMgPSAkaDMtPmFkZEludDMyKCRjKTsgICAgICAgICAgICAjICRoMyArPSAkYzsKICAgICAgICAkYyA9ICRoMy0+c2hpZnRSaWdodCgyNik7ICAgICAgICAgICAjICRjID0gJGgzID4+IDI2OwogICAgICAgICRoMyA9ICRoMy0+bWFzaygweDNmZmZmZmYpOyAgICAgICAgICMgJGgzICY9IDB4M2ZmZmZmZjsKCiAgICAgICAgJGg0ID0gJGg0LT5hZGRJbnQzMigkYyk7ICAgICAgICAgICAgIyAkaDQgKz0gJGM7CiAgICAgICAgJGMgPSAkaDQtPnNoaWZ0UmlnaHQoMjYpOyAgICAgICAgICAgIyAkYyA9ICRoNCA+PiAyNjsKICAgICAgICAkaDQgPSAkaDQtPm1hc2soMHgzZmZmZmZmKTsgICAgICAgICAjICRoNCAmPSAweDNmZmZmZmY7CgogICAgICAgICRoMCA9ICRoMC0+YWRkSW50MzIoJGMtPm11bEludCg1LCAzKSk7ICMgJGgwICs9IHNlbGY6Om11bCgkYywgNSk7CiAgICAgICAgJGMgPSAkaDAtPnNoaWZ0UmlnaHQoMjYpOyAgICAgICAgICAgIyAkYyA9ICRoMCA+PiAyNjsKICAgICAgICAkaDAgPSAkaDAtPm1hc2soMHgzZmZmZmZmKTsgICAgICAgICAjICRoMCAmPSAweDNmZmZmZmY7CiAgICAgICAgJGgxID0gJGgxLT5hZGRJbnQzMigkYyk7ICAgICAgICAgICAgIyAkaDEgKz0gJGM7CgogICAgICAgIC8qIGNvbXB1dGUgaCArIC1wICovCiAgICAgICAgJGcwID0gJGgwLT5hZGRJbnQoNSk7CiAgICAgICAgJGMgID0gJGcwLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkZzAgPSAkZzAtPm1hc2soMHgzZmZmZmZmKTsKICAgICAgICAkZzEgPSAkaDEtPmFkZEludDMyKCRjKTsKICAgICAgICAkYyAgPSAkZzEtPnNoaWZ0UmlnaHQoMjYpOwogICAgICAgICRnMSA9ICRnMS0+bWFzaygweDNmZmZmZmYpOwogICAgICAgICRnMiA9ICRoMi0+YWRkSW50MzIoJGMpOwogICAgICAgICRjICA9ICRnMi0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGcyID0gJGcyLT5tYXNrKDB4M2ZmZmZmZik7CiAgICAgICAgJGczID0gJGgzLT5hZGRJbnQzMigkYyk7CiAgICAgICAgJGMgID0gJGczLT5zaGlmdFJpZ2h0KDI2KTsKICAgICAgICAkZzMgPSAkZzMtPm1hc2soMHgzZmZmZmZmKTsKICAgICAgICAkZzQgPSAkaDQtPmFkZEludDMyKCRjKS0+c3ViSW50KDEgPDwgMjYpOwoKICAgICAgICAjICRtYXNrID0gKCRnNCA+PiAzMSkgLSAxOwogICAgICAgIC8qIHNlbGVjdCBoIGlmIGggPCBwLCBvciBoICsgLXAgaWYgaCA+PSBwICovCiAgICAgICAgJG1hc2sgPSAoaW50KSAoKCRnNC0+dG9JbnQoKSA+PiAzMSkgKyAxKTsKCiAgICAgICAgJGcwID0gJGcwLT5tYXNrKCRtYXNrKTsKICAgICAgICAkZzEgPSAkZzEtPm1hc2soJG1hc2spOwogICAgICAgICRnMiA9ICRnMi0+bWFzaygkbWFzayk7CiAgICAgICAgJGczID0gJGczLT5tYXNrKCRtYXNrKTsKICAgICAgICAkZzQgPSAkZzQtPm1hc2soJG1hc2spOwoKICAgICAgICAvKiogQHZhciBpbnQgJG1hc2sgKi8KICAgICAgICAkbWFzayA9ICh+JG1hc2spICYgMHhmZmZmZmZmZjsKCiAgICAgICAgJGgwID0gJGgwLT5tYXNrKCRtYXNrKS0+b3JJbnQzMigkZzApOwogICAgICAgICRoMSA9ICRoMS0+bWFzaygkbWFzayktPm9ySW50MzIoJGcxKTsKICAgICAgICAkaDIgPSAkaDItPm1hc2soJG1hc2spLT5vckludDMyKCRnMik7CiAgICAgICAgJGgzID0gJGgzLT5tYXNrKCRtYXNrKS0+b3JJbnQzMigkZzMpOwogICAgICAgICRoNCA9ICRoNC0+bWFzaygkbWFzayktPm9ySW50MzIoJGc0KTsKCiAgICAgICAgLyogaCA9IGggJSAoMl4xMjgpICovCiAgICAgICAgJGgwID0gJGgwLT5vckludDMyKCRoMS0+c2hpZnRMZWZ0KDI2KSk7CiAgICAgICAgJGgxID0gJGgxLT5zaGlmdFJpZ2h0KDYpLT5vckludDMyKCRoMi0+c2hpZnRMZWZ0KDIwKSk7CiAgICAgICAgJGgyID0gJGgyLT5zaGlmdFJpZ2h0KDEyKS0+b3JJbnQzMigkaDMtPnNoaWZ0TGVmdCgxNCkpOwogICAgICAgICRoMyA9ICRoMy0+c2hpZnRSaWdodCgxOCktPm9ySW50MzIoJGg0LT5zaGlmdExlZnQoOCkpOwoKICAgICAgICAvKiBtYWMgPSAoaCArIHBhZCkgJSAoMl4xMjgpICovCiAgICAgICAgJGYgPSAkaDAtPnRvSW50NjQoKS0+YWRkSW50NjQoJHRoaXMtPnBhZFswXSk7CiAgICAgICAgJGgwID0gJGYtPnRvSW50MzIoKTsKICAgICAgICAkZiA9ICRoMS0+dG9JbnQ2NCgpLT5hZGRJbnQ2NCgkdGhpcy0+cGFkWzFdKS0+YWRkSW50KCRoMC0+b3ZlcmZsb3cpOwogICAgICAgICRoMSA9ICRmLT50b0ludDMyKCk7CiAgICAgICAgJGYgPSAkaDItPnRvSW50NjQoKS0+YWRkSW50NjQoJHRoaXMtPnBhZFsyXSktPmFkZEludCgkaDEtPm92ZXJmbG93KTsKICAgICAgICAkaDIgPSAkZi0+dG9JbnQzMigpOwogICAgICAgICRmID0gJGgzLT50b0ludDY0KCktPmFkZEludDY0KCR0aGlzLT5wYWRbM10pLT5hZGRJbnQoJGgyLT5vdmVyZmxvdyk7CiAgICAgICAgJGgzID0gJGYtPnRvSW50MzIoKTsKCiAgICAgICAgcmV0dXJuICRoMC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkaDEtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJGgyLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICRoMy0+dG9SZXZlcnNlU3RyaW5nKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Salsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NhbHNhMjAnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NhbHNhMjAKICovCmFic3RyYWN0IGNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsCnsKICAgIGNvbnN0IFJPVU5EUyA9IDIwOwoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIGFuIHNhbHNhMjAgaGFzaCBvZiBhIHNpbmdsZSBibG9jawogICAgICoKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbgogICAgICogQHBhcmFtIHN0cmluZyAkawogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29yZV9zYWxzYTIwKCRpbiwgJGssICRjID0gbnVsbCkKICAgIHsKICAgICAgICAvKioKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDIKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4MwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDUKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4NgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHg3CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkeDgKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICR4OQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxMwogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxNAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJHgxNQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGowCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqMgogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGozCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajQKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqNQogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGo2CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajcKICAgICAgICAgKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRqOAogICAgICAgICAqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIgJGo5CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEwCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajExCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEyCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajEzCiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajE0CiAgICAgICAgICogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMiAkajE1CiAgICAgICAgICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkaykgPCAzMikgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oJ0tleSBtdXN0IGJlIDMyIGJ5dGVzIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjID09PSBudWxsKSB7CiAgICAgICAgICAgICR4MCAgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg2MTcwLCAweDc4NjUpKTsKICAgICAgICAgICAgJHg1ICA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMihhcnJheSgweDMzMjAsIDB4NjQ2ZSkpOwogICAgICAgICAgICAkeDEwID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyKGFycmF5KDB4Nzk2MiwgMHgyZDMyKSk7CiAgICAgICAgICAgICR4MTUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzIoYXJyYXkoMHg2YjIwLCAweDY1NzQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkeDAgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkYywgMCwgNCkpOwogICAgICAgICAgICAkeDUgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkYywgNCwgNCkpOwogICAgICAgICAgICAkeDEwID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkYywgOCwgNCkpOwogICAgICAgICAgICAkeDE1ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkYywgMTIsIDQpKTsKICAgICAgICB9CiAgICAgICAgJHgxICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDAsIDQpKTsKICAgICAgICAkeDIgID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21SZXZlcnNlU3RyaW5nKHNlbGY6OnN1YnN0cigkaywgNCwgNCkpOwogICAgICAgICR4MyAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCA4LCA0KSk7CiAgICAgICAgJHg0ICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGssIDEyLCA0KSk7CiAgICAgICAgJHg2ICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCAwLCA0KSk7CiAgICAgICAgJHg3ICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCA0LCA0KSk7CiAgICAgICAgJHg4ICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCA4LCA0KSk7CiAgICAgICAgJHg5ICA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tUmV2ZXJzZVN0cmluZyhzZWxmOjpzdWJzdHIoJGluLCAxMiwgNCkpOwogICAgICAgICR4MTEgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCAxNiwgNCkpOwogICAgICAgICR4MTIgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCAyMCwgNCkpOwogICAgICAgICR4MTMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCAyNCwgNCkpOwogICAgICAgICR4MTQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbVJldmVyc2VTdHJpbmcoc2VsZjo6c3Vic3RyKCRrLCAyOCwgNCkpOwoKICAgICAgICAkajAgID0gY2xvbmUgJHgwOwogICAgICAgICRqMSAgPSBjbG9uZSAkeDE7CiAgICAgICAgJGoyICA9IGNsb25lICR4MjsKICAgICAgICAkajMgID0gY2xvbmUgJHgzOwogICAgICAgICRqNCAgPSBjbG9uZSAkeDQ7CiAgICAgICAgJGo1ICA9IGNsb25lICR4NTsKICAgICAgICAkajYgID0gY2xvbmUgJHg2OwogICAgICAgICRqNyAgPSBjbG9uZSAkeDc7CiAgICAgICAgJGo4ICA9IGNsb25lICR4ODsKICAgICAgICAkajkgID0gY2xvbmUgJHg5OwogICAgICAgICRqMTAgID0gY2xvbmUgJHgxMDsKICAgICAgICAkajExICA9IGNsb25lICR4MTE7CiAgICAgICAgJGoxMiAgPSBjbG9uZSAkeDEyOwogICAgICAgICRqMTMgID0gY2xvbmUgJHgxMzsKICAgICAgICAkajE0ICA9IGNsb25lICR4MTQ7CiAgICAgICAgJGoxNSAgPSBjbG9uZSAkeDE1OwoKICAgICAgICBmb3IgKCRpID0gc2VsZjo6Uk9VTkRTOyAkaSA+IDA7ICRpIC09IDIpIHsKICAgICAgICAgICAgJHg0ICA9ICR4NC0+eG9ySW50MzIoJHgwLT5hZGRJbnQzMigkeDEyKS0+cm90YXRlTGVmdCg3KSk7CiAgICAgICAgICAgICR4OCAgPSAkeDgtPnhvckludDMyKCR4NC0+YWRkSW50MzIoJHgwKS0+cm90YXRlTGVmdCg5KSk7CiAgICAgICAgICAgICR4MTIgPSAkeDEyLT54b3JJbnQzMigkeDgtPmFkZEludDMyKCR4NCktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHgwICA9ICR4MC0+eG9ySW50MzIoJHgxMi0+YWRkSW50MzIoJHg4KS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHg5ICA9ICR4OS0+eG9ySW50MzIoJHg1LT5hZGRJbnQzMigkeDEpLT5yb3RhdGVMZWZ0KDcpKTsKICAgICAgICAgICAgJHgxMyA9ICR4MTMtPnhvckludDMyKCR4OS0+YWRkSW50MzIoJHg1KS0+cm90YXRlTGVmdCg5KSk7CiAgICAgICAgICAgICR4MSAgPSAkeDEtPnhvckludDMyKCR4MTMtPmFkZEludDMyKCR4OSktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHg1ICA9ICR4NS0+eG9ySW50MzIoJHgxLT5hZGRJbnQzMigkeDEzKS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHgxNCA9ICR4MTQtPnhvckludDMyKCR4MTAtPmFkZEludDMyKCR4NiktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDIgID0gJHgyLT54b3JJbnQzMigkeDE0LT5hZGRJbnQzMigkeDEwKS0+cm90YXRlTGVmdCg5KSk7CiAgICAgICAgICAgICR4NiAgPSAkeDYtPnhvckludDMyKCR4Mi0+YWRkSW50MzIoJHgxNCktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHgxMCA9ICR4MTAtPnhvckludDMyKCR4Ni0+YWRkSW50MzIoJHgyKS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHgzICA9ICR4My0+eG9ySW50MzIoJHgxNS0+YWRkSW50MzIoJHgxMSktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDcgID0gJHg3LT54b3JJbnQzMigkeDMtPmFkZEludDMyKCR4MTUpLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHgxMSA9ICR4MTEtPnhvckludDMyKCR4Ny0+YWRkSW50MzIoJHgzKS0+cm90YXRlTGVmdCgxMykpOwogICAgICAgICAgICAkeDE1ID0gJHgxNS0+eG9ySW50MzIoJHgxMS0+YWRkSW50MzIoJHg3KS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHgxICA9ICR4MS0+eG9ySW50MzIoJHgwLT5hZGRJbnQzMigkeDMpLT5yb3RhdGVMZWZ0KDcpKTsKICAgICAgICAgICAgJHgyICA9ICR4Mi0+eG9ySW50MzIoJHgxLT5hZGRJbnQzMigkeDApLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHgzICA9ICR4My0+eG9ySW50MzIoJHgyLT5hZGRJbnQzMigkeDEpLT5yb3RhdGVMZWZ0KDEzKSk7CiAgICAgICAgICAgICR4MCAgPSAkeDAtPnhvckludDMyKCR4My0+YWRkSW50MzIoJHgyKS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHg2ICA9ICR4Ni0+eG9ySW50MzIoJHg1LT5hZGRJbnQzMigkeDQpLT5yb3RhdGVMZWZ0KDcpKTsKICAgICAgICAgICAgJHg3ICA9ICR4Ny0+eG9ySW50MzIoJHg2LT5hZGRJbnQzMigkeDUpLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHg0ICA9ICR4NC0+eG9ySW50MzIoJHg3LT5hZGRJbnQzMigkeDYpLT5yb3RhdGVMZWZ0KDEzKSk7CiAgICAgICAgICAgICR4NSAgPSAkeDUtPnhvckludDMyKCR4NC0+YWRkSW50MzIoJHg3KS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHgxMSA9ICR4MTEtPnhvckludDMyKCR4MTAtPmFkZEludDMyKCR4OSktPnJvdGF0ZUxlZnQoNykpOwogICAgICAgICAgICAkeDggID0gJHg4LT54b3JJbnQzMigkeDExLT5hZGRJbnQzMigkeDEwKS0+cm90YXRlTGVmdCg5KSk7CiAgICAgICAgICAgICR4OSAgPSAkeDktPnhvckludDMyKCR4OC0+YWRkSW50MzIoJHgxMSktPnJvdGF0ZUxlZnQoMTMpKTsKICAgICAgICAgICAgJHgxMCA9ICR4MTAtPnhvckludDMyKCR4OS0+YWRkSW50MzIoJHg4KS0+cm90YXRlTGVmdCgxOCkpOwoKICAgICAgICAgICAgJHgxMiA9ICR4MTItPnhvckludDMyKCR4MTUtPmFkZEludDMyKCR4MTQpLT5yb3RhdGVMZWZ0KDcpKTsKICAgICAgICAgICAgJHgxMyA9ICR4MTMtPnhvckludDMyKCR4MTItPmFkZEludDMyKCR4MTUpLT5yb3RhdGVMZWZ0KDkpKTsKICAgICAgICAgICAgJHgxNCA9ICR4MTQtPnhvckludDMyKCR4MTMtPmFkZEludDMyKCR4MTIpLT5yb3RhdGVMZWZ0KDEzKSk7CiAgICAgICAgICAgICR4MTUgPSAkeDE1LT54b3JJbnQzMigkeDE0LT5hZGRJbnQzMigkeDEzKS0+cm90YXRlTGVmdCgxOCkpOwogICAgICAgIH0KCiAgICAgICAgJHgwICA9ICR4MC0+YWRkSW50MzIoJGowKTsKICAgICAgICAkeDEgID0gJHgxLT5hZGRJbnQzMigkajEpOwogICAgICAgICR4MiAgPSAkeDItPmFkZEludDMyKCRqMik7CiAgICAgICAgJHgzICA9ICR4My0+YWRkSW50MzIoJGozKTsKICAgICAgICAkeDQgID0gJHg0LT5hZGRJbnQzMigkajQpOwogICAgICAgICR4NSAgPSAkeDUtPmFkZEludDMyKCRqNSk7CiAgICAgICAgJHg2ICA9ICR4Ni0+YWRkSW50MzIoJGo2KTsKICAgICAgICAkeDcgID0gJHg3LT5hZGRJbnQzMigkajcpOwogICAgICAgICR4OCAgPSAkeDgtPmFkZEludDMyKCRqOCk7CiAgICAgICAgJHg5ICA9ICR4OS0+YWRkSW50MzIoJGo5KTsKICAgICAgICAkeDEwID0gJHgxMC0+YWRkSW50MzIoJGoxMCk7CiAgICAgICAgJHgxMSA9ICR4MTEtPmFkZEludDMyKCRqMTEpOwogICAgICAgICR4MTIgPSAkeDEyLT5hZGRJbnQzMigkajEyKTsKICAgICAgICAkeDEzID0gJHgxMy0+YWRkSW50MzIoJGoxMyk7CiAgICAgICAgJHgxNCA9ICR4MTQtPmFkZEludDMyKCRqMTQpOwogICAgICAgICR4MTUgPSAkeDE1LT5hZGRJbnQzMigkajE1KTsKCiAgICAgICAgcmV0dXJuICR4MC0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHgyLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4My0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDQtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHg1LT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4Ni0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDctPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHg4LT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4OS0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEwLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4MTEtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHgxMi0+dG9SZXZlcnNlU3RyaW5nKCkgLgogICAgICAgICAgICAkeDEzLT50b1JldmVyc2VTdHJpbmcoKSAuCiAgICAgICAgICAgICR4MTQtPnRvUmV2ZXJzZVN0cmluZygpIC4KICAgICAgICAgICAgJHgxNS0+dG9SZXZlcnNlU3RyaW5nKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2Fsc2EyMCgkbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSAhPT0gMzIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdLZXkgbXVzdCBiZSAzMiBieXRlcyBsb25nJyk7CiAgICAgICAgfQogICAgICAgICRrY29weSA9ICcnIC4gJGtleTsKICAgICAgICAkaW4gPSBzZWxmOjpzdWJzdHIoJG5vbmNlLCAwLCA4KSAuIHN0cl9yZXBlYXQoIlwwIiwgOCk7CiAgICAgICAgJGMgPSAnJzsKICAgICAgICB3aGlsZSAoJGxlbiA+PSA2NCkgewogICAgICAgICAgICAkYyAuPSBzZWxmOjpjb3JlX3NhbHNhMjAoJGluLCAka2NvcHksIG51bGwpOwogICAgICAgICAgICAkdSA9IDE7CiAgICAgICAgICAgIC8vIEludGVybmFsIGNvdW50ZXIuCiAgICAgICAgICAgIGZvciAoJGkgPSA4OyAkaSA8IDE2OyArKyRpKSB7CiAgICAgICAgICAgICAgICAkdSArPSBzZWxmOjpjaHJUb0ludCgkaW5bJGldKTsKICAgICAgICAgICAgICAgICRpblskaV0gPSBzZWxmOjppbnRUb0NocigkdSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgJHUgPj49IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxlbiAtPSA2NDsKICAgICAgICB9CiAgICAgICAgaWYgKCRsZW4gPiAwKSB7CiAgICAgICAgICAgICRjIC49IHNlbGY6OnN1YnN0cigKICAgICAgICAgICAgICAgIHNlbGY6OmNvcmVfc2Fsc2EyMCgkaW4sICRrY29weSwgbnVsbCksCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgJGxlbgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygka2NvcHkpOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJGtjb3B5ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG4KICAgICAqIEBwYXJhbSBpbnQgJGljCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2Fsc2EyMF94b3JfaWMoJG0sICRuLCAkaWMsICRrKQogICAgewogICAgICAgICRtbGVuID0gc2VsZjo6c3RybGVuKCRtKTsKICAgICAgICBpZiAoJG1sZW4gPCAxKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICAgICAgJGtjb3B5ID0gc2VsZjo6c3Vic3RyKCRrLCAwLCAzMik7CiAgICAgICAgJGluID0gc2VsZjo6c3Vic3RyKCRuLCAwLCA4KTsKICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjb3VudGVyCiAgICAgICAgJGluIC49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoJGljKTsKCiAgICAgICAgJGMgPSAnJzsKICAgICAgICB3aGlsZSAoJG1sZW4gPj0gNjQpIHsKICAgICAgICAgICAgJGJsb2NrID0gc2VsZjo6Y29yZV9zYWxzYTIwKCRpbiwgJGtjb3B5LCBudWxsKTsKICAgICAgICAgICAgJGMgLj0gc2VsZjo6eG9yU3RyaW5ncygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkbSwgMCwgNjQpLAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRibG9jaywgMCwgNjQpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICR1ID0gMTsKICAgICAgICAgICAgZm9yICgkaSA9IDg7ICRpIDwgMTY7ICsrJGkpIHsKICAgICAgICAgICAgICAgICR1ICs9IHNlbGY6OmNoclRvSW50KCRpblskaV0pOwogICAgICAgICAgICAgICAgJGluWyRpXSA9IHNlbGY6OmludFRvQ2hyKCR1ICYgMHhmZik7CiAgICAgICAgICAgICAgICAkdSA+Pj0gODsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG1sZW4gLT0gNjQ7CiAgICAgICAgICAgICRtID0gc2VsZjo6c3Vic3RyKCRtLCA2NCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJG1sZW4pIHsKICAgICAgICAgICAgJGJsb2NrID0gc2VsZjo6Y29yZV9zYWxzYTIwKCRpbiwgJGtjb3B5LCBudWxsKTsKICAgICAgICAgICAgJGMgLj0gc2VsZjo6eG9yU3RyaW5ncygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkbSwgMCwgJG1sZW4pLAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRibG9jaywgMCwgJG1sZW4pCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jayk7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRrY29weSk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2sgPSBudWxsOwogICAgICAgICAgICAka2NvcHkgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYWxzYTIwX3hvcigkbWVzc2FnZSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBzZWxmOjp4b3JTdHJpbmdzKAogICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgc2VsZjo6c2Fsc2EyMCgKICAgICAgICAgICAgICAgIHNlbGY6OnN0cmxlbigkbWVzc2FnZSksCiAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICAka2V5CiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/SipHash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NpcEhhc2gnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1Db21wYXRfQ29yZTMyX1NpcEhhc2gKICoKICogT25seSB1c2VzIDMyLWJpdCBhcml0aG1ldGljLCB3aGlsZSB0aGUgb3JpZ2luYWwgU2lwSGFzaCB1c2VkIDY0LWJpdCBpbnRlZ2VycwogKi8KY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2lwSGFzaCBleHRlbmRzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWwKewogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ+ICR2CiAgICAgKiBAcmV0dXJuIGFycmF5PGludCwgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lwUm91bmQoYXJyYXkgJHYpCiAgICB7CiAgICAgICAgIyB2MCArPSB2MTsKICAgICAgICAkdlswXSA9ICR2WzBdLT5hZGRJbnQ2NCgkdlsxXSk7CgogICAgICAgICMgdjEgPSBST1RMKHYxLCAxMyk7CiAgICAgICAgJHZbMV0gPSAkdlsxXS0+cm90YXRlTGVmdCgxMyk7CgogICAgICAgICMgIHYxIF49IHYwOwogICAgICAgICR2WzFdID0gJHZbMV0tPnhvckludDY0KCR2WzBdKTsKCiAgICAgICAgIyAgdjA9Uk9UTCh2MCwzMik7CiAgICAgICAgJHZbMF0gPSAkdlswXS0+cm90YXRlTGVmdCgzMik7CgogICAgICAgICMgdjIgKz0gdjM7CiAgICAgICAgJHZbMl0gPSAkdlsyXS0+YWRkSW50NjQoJHZbM10pOwoKICAgICAgICAjIHYzPVJPVEwodjMsMTYpOwogICAgICAgICR2WzNdID0gJHZbM10tPnJvdGF0ZUxlZnQoMTYpOwoKICAgICAgICAjICB2MyBePSB2MjsKICAgICAgICAkdlszXSA9ICR2WzNdLT54b3JJbnQ2NCgkdlsyXSk7CgogICAgICAgICMgdjAgKz0gdjM7CiAgICAgICAgJHZbMF0gPSAkdlswXS0+YWRkSW50NjQoJHZbM10pOwoKICAgICAgICAjIHYzPVJPVEwodjMsMjEpOwogICAgICAgICR2WzNdID0gJHZbM10tPnJvdGF0ZUxlZnQoMjEpOwoKICAgICAgICAjIHYzIF49IHYwOwogICAgICAgICR2WzNdID0gJHZbM10tPnhvckludDY0KCR2WzBdKTsKCiAgICAgICAgIyB2MiArPSB2MTsKICAgICAgICAkdlsyXSA9ICR2WzJdLT5hZGRJbnQ2NCgkdlsxXSk7CgogICAgICAgICMgdjE9Uk9UTCh2MSwxNyk7CiAgICAgICAgJHZbMV0gPSAkdlsxXS0+cm90YXRlTGVmdCgxNyk7CgogICAgICAgICMgIHYxIF49IHYyOwogICAgICAgICR2WzFdID0gJHZbMV0tPnhvckludDY0KCR2WzJdKTsKCiAgICAgICAgIyB2Mj1ST1RMKHYyLDMyKQogICAgICAgICR2WzJdID0gJHZbMl0tPnJvdGF0ZUxlZnQoMzIpOwoKICAgICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpcEhhc2gyNCgkaW4sICRrZXkpCiAgICB7CiAgICAgICAgJGlubGVuID0gc2VsZjo6c3RybGVuKCRpbik7CgogICAgICAgICMgLyogInNvbWVwc2V1ZG9yYW5kb21seWdlbmVyYXRlZGJ5dGVzIiAqLwogICAgICAgICMgdTY0IHYwID0gMHg3MzZmNmQ2NTcwNzM2NTc1VUxMOwogICAgICAgICMgdTY0IHYxID0gMHg2NDZmNzI2MTZlNjQ2ZjZkVUxMOwogICAgICAgICMgdTY0IHYyID0gMHg2Yzc5Njc2NTZlNjU3MjYxVUxMOwogICAgICAgICMgdTY0IHYzID0gMHg3NDY1NjQ2Mjc5NzQ2NTczVUxMOwogICAgICAgICR2ID0gYXJyYXkoCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgKICAgICAgICAgICAgICAgIGFycmF5KDB4NzM2ZiwgMHg2ZDY1LCAweDcwNzMsIDB4NjU3NSkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0KAogICAgICAgICAgICAgICAgYXJyYXkoMHg2NDZmLCAweDcyNjEsIDB4NmU2NCwgMHg2ZjZkKQogICAgICAgICAgICApLAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQoCiAgICAgICAgICAgICAgICBhcnJheSgweDZjNzksIDB4Njc2NSwgMHg2ZTY1LCAweDcyNjEpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgKICAgICAgICAgICAgICAgIGFycmF5KDB4NzQ2NSwgMHg2NDYyLCAweDc5NzQsIDB4NjU3MykKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgICMgdTY0IGswID0gTE9BRDY0X0xFKCBrICk7CiAgICAgICAgIyB1NjQgazEgPSBMT0FENjRfTEUoIGsgKyA4ICk7CiAgICAgICAgJGsgPSBhcnJheSgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21SZXZlcnNlU3RyaW5nKAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRrZXksIDAsIDgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tUmV2ZXJzZVN0cmluZygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigka2V5LCA4LCA4KQogICAgICAgICAgICApCiAgICAgICAgKTsKCiAgICAgICAgIyBiID0gKCAoIHU2NCApaW5sZW4gKSA8PCA1NjsKICAgICAgICAkYiA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NCgKICAgICAgICAgICAgYXJyYXkoKCRpbmxlbiA8PCA4KSAmIDB4ZmZmZiwgMCwgMCwgMCkKICAgICAgICApOwoKICAgICAgICAjIHYzIF49IGsxOwogICAgICAgICR2WzNdID0gJHZbM10tPnhvckludDY0KCRrWzFdKTsKICAgICAgICAjIHYyIF49IGswOwogICAgICAgICR2WzJdID0gJHZbMl0tPnhvckludDY0KCRrWzBdKTsKICAgICAgICAjIHYxIF49IGsxOwogICAgICAgICR2WzFdID0gJHZbMV0tPnhvckludDY0KCRrWzFdKTsKICAgICAgICAjIHYwIF49IGswOwogICAgICAgICR2WzBdID0gJHZbMF0tPnhvckludDY0KCRrWzBdKTsKCiAgICAgICAgJGxlZnQgPSAkaW5sZW47CiAgICAgICAgIyBmb3IgKCA7IGluICE9IGVuZDsgaW4gKz0gOCApCiAgICAgICAgd2hpbGUgKCRsZWZ0ID49IDgpIHsKICAgICAgICAgICAgIyBtID0gTE9BRDY0X0xFKCBpbiApOwogICAgICAgICAgICAkbSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tUmV2ZXJzZVN0cmluZygKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkaW4sIDAsIDgpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHYzIF49IG07CiAgICAgICAgICAgICR2WzNdID0gJHZbM10tPnhvckludDY0KCRtKTsKCiAgICAgICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwogICAgICAgICAgICAkdiA9IHNlbGY6OnNpcFJvdW5kKCR2KTsKCiAgICAgICAgICAgICMgdjAgXj0gbTsKICAgICAgICAgICAgJHZbMF0gPSAkdlswXS0+eG9ySW50NjQoJG0pOwoKICAgICAgICAgICAgJGluID0gc2VsZjo6c3Vic3RyKCRpbiwgOCk7CiAgICAgICAgICAgICRsZWZ0IC09IDg7CiAgICAgICAgfQoKICAgICAgICAjIHN3aXRjaCggbGVmdCApCiAgICAgICAgIyAgewogICAgICAgICMgICAgIGNhc2UgNzogYiB8PSAoICggdTY0IClpblsgNl0gKSAgPDwgNDg7CiAgICAgICAgIyAgICAgY2FzZSA2OiBiIHw9ICggKCB1NjQgKWluWyA1XSApICA8PCA0MDsKICAgICAgICAjICAgICBjYXNlIDU6IGIgfD0gKCAoIHU2NCApaW5bIDRdICkgIDw8IDMyOwogICAgICAgICMgICAgIGNhc2UgNDogYiB8PSAoICggdTY0IClpblsgM10gKSAgPDwgMjQ7CiAgICAgICAgIyAgICAgY2FzZSAzOiBiIHw9ICggKCB1NjQgKWluWyAyXSApICA8PCAxNjsKICAgICAgICAjICAgICBjYXNlIDI6IGIgfD0gKCAoIHU2NCApaW5bIDFdICkgIDw8ICA4OwogICAgICAgICMgICAgIGNhc2UgMTogYiB8PSAoICggdTY0IClpblsgMF0gKTsgYnJlYWs7CiAgICAgICAgIyAgICAgY2FzZSAwOiBicmVhazsKICAgICAgICAjIH0KICAgICAgICBzd2l0Y2ggKCRsZWZ0KSB7CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICRiID0gJGItPm9ySW50NjQoCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmOjpjaHJUb0ludCgkaW5bNl0pIDw8IDE2CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgJGIgPSAkYi0+b3JJbnQ2NCgKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludHMoCiAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGY6OmNoclRvSW50KCRpbls1XSkgPDwgOAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICRiID0gJGItPm9ySW50NjQoCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmOjpjaHJUb0ludCgkaW5bNF0pCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgJGIgPSAkYi0+b3JJbnQ2NCgKICAgICAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQ2NDo6ZnJvbUludHMoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmNoclRvSW50KCRpblszXSkgPDwgMjQsIDAKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAkYiA9ICRiLT5vckludDY0KAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50cygKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGluWzJdKSA8PCAxNiwgMAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICRiID0gJGItPm9ySW50NjQoCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50NjQ6OmZyb21JbnRzKAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpjaHJUb0ludCgkaW5bMV0pIDw8IDgsIDAKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAkYiA9ICRiLT5vckludDY0KAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDY0Ojpmcm9tSW50cygKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGluWzBdKSwgMAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgIyB2MyBePSBiOwogICAgICAgICR2WzNdID0gJHZbM10tPnhvckludDY0KCRiKTsKCiAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAjIFNJUFJPVU5EOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwoKICAgICAgICAjIHYwIF49IGI7CiAgICAgICAgJHZbMF0gPSAkdlswXS0+eG9ySW50NjQoJGIpOwoKICAgICAgICAvLyBGbGlwIHRoZSBsb3dlciA4IGJpdHMgb2YgdjIgd2hpY2ggaXMgKCR2WzRdLCAkdls1XSkgaW4gb3VyIGltcGxlbWVudGF0aW9uCiAgICAgICAgIyB2MiBePSAweGZmOwogICAgICAgICR2WzJdLT5saW1ic1szXSBePSAweGZmOwoKICAgICAgICAjIFNJUFJPVU5EOwogICAgICAgICMgU0lQUk9VTkQ7CiAgICAgICAgIyBTSVBST1VORDsKICAgICAgICAjIFNJUFJPVU5EOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwogICAgICAgICR2ID0gc2VsZjo6c2lwUm91bmQoJHYpOwoKICAgICAgICAjIGIgPSB2MCBeIHYxIF4gdjIgXiB2MzsKICAgICAgICAjIFNUT1JFNjRfTEUoIG91dCwgYiApOwogICAgICAgIHJldHVybiAkdlswXQogICAgICAgICAgICAtPnhvckludDY0KCR2WzFdKQogICAgICAgICAgICAtPnhvckludDY0KCR2WzJdKQogICAgICAgICAgICAtPnhvckludDY0KCR2WzNdKQogICAgICAgICAgICAtPnRvUmV2ZXJzZVN0cmluZygpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/Util.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWwnLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsIGV4dGVuZHMgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWwKewoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/X25519.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1gyNTUxOScsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfWDI1NTE5CiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9YMjU1MTkgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5CnsKICAgIC8qKgogICAgICogQWx0ZXJzIHRoZSBvYmplY3RzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiBwbGFjZS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRnCiAgICAgKiBAcGFyYW0gaW50ICRiCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHBzYWxtLXN1cHByZXNzIE1peGVkTWV0aG9kQ2FsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZlX2Nzd2FwKAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYsCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZywKICAgICAgICAkYiA9IDAKICAgICkgewogICAgICAgICRmMCA9IChpbnQpICRmWzBdLT50b0ludCgpOwogICAgICAgICRmMSA9IChpbnQpICRmWzFdLT50b0ludCgpOwogICAgICAgICRmMiA9IChpbnQpICRmWzJdLT50b0ludCgpOwogICAgICAgICRmMyA9IChpbnQpICRmWzNdLT50b0ludCgpOwogICAgICAgICRmNCA9IChpbnQpICRmWzRdLT50b0ludCgpOwogICAgICAgICRmNSA9IChpbnQpICRmWzVdLT50b0ludCgpOwogICAgICAgICRmNiA9IChpbnQpICRmWzZdLT50b0ludCgpOwogICAgICAgICRmNyA9IChpbnQpICRmWzddLT50b0ludCgpOwogICAgICAgICRmOCA9IChpbnQpICRmWzhdLT50b0ludCgpOwogICAgICAgICRmOSA9IChpbnQpICRmWzldLT50b0ludCgpOwogICAgICAgICRnMCA9IChpbnQpICRnWzBdLT50b0ludCgpOwogICAgICAgICRnMSA9IChpbnQpICRnWzFdLT50b0ludCgpOwogICAgICAgICRnMiA9IChpbnQpICRnWzJdLT50b0ludCgpOwogICAgICAgICRnMyA9IChpbnQpICRnWzNdLT50b0ludCgpOwogICAgICAgICRnNCA9IChpbnQpICRnWzRdLT50b0ludCgpOwogICAgICAgICRnNSA9IChpbnQpICRnWzVdLT50b0ludCgpOwogICAgICAgICRnNiA9IChpbnQpICRnWzZdLT50b0ludCgpOwogICAgICAgICRnNyA9IChpbnQpICRnWzddLT50b0ludCgpOwogICAgICAgICRnOCA9IChpbnQpICRnWzhdLT50b0ludCgpOwogICAgICAgICRnOSA9IChpbnQpICRnWzldLT50b0ludCgpOwogICAgICAgICRiID0gLSRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDAgKi8KICAgICAgICAkeDAgPSAoJGYwIF4gJGcwKSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDEgKi8KICAgICAgICAkeDEgPSAoJGYxIF4gJGcxKSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDIgKi8KICAgICAgICAkeDIgPSAoJGYyIF4gJGcyKSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDMgKi8KICAgICAgICAkeDMgPSAoJGYzIF4gJGczKSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDQgKi8KICAgICAgICAkeDQgPSAoJGY0IF4gJGc0KSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDUgKi8KICAgICAgICAkeDUgPSAoJGY1IF4gJGc1KSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDYgKi8KICAgICAgICAkeDYgPSAoJGY2IF4gJGc2KSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDcgKi8KICAgICAgICAkeDcgPSAoJGY3IF4gJGc3KSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDggKi8KICAgICAgICAkeDggPSAoJGY4IF4gJGc4KSAmICRiOwogICAgICAgIC8qKiBAdmFyIGludCAkeDkgKi8KICAgICAgICAkeDkgPSAoJGY5IF4gJGc5KSAmICRiOwogICAgICAgICRmWzBdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGYwIF4gJHgwKTsKICAgICAgICAkZlsxXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRmMSBeICR4MSk7CiAgICAgICAgJGZbMl0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZjIgXiAkeDIpOwogICAgICAgICRmWzNdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGYzIF4gJHgzKTsKICAgICAgICAkZls0XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRmNCBeICR4NCk7CiAgICAgICAgJGZbNV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZjUgXiAkeDUpOwogICAgICAgICRmWzZdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGY2IF4gJHg2KTsKICAgICAgICAkZls3XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRmNyBeICR4Nyk7CiAgICAgICAgJGZbOF0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZjggXiAkeDgpOwogICAgICAgICRmWzldID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGY5IF4gJHg5KTsKICAgICAgICAkZ1swXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRnMCBeICR4MCk7CiAgICAgICAgJGdbMV0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZzEgXiAkeDEpOwogICAgICAgICRnWzJdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGcyIF4gJHgyKTsKICAgICAgICAkZ1szXSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRnMyBeICR4Myk7CiAgICAgICAgJGdbNF0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZzQgXiAkeDQpOwogICAgICAgICRnWzVdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGc1IF4gJHg1KTsKICAgICAgICAkZ1s2XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRnNiBeICR4Nik7CiAgICAgICAgJGdbN10gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMjo6ZnJvbUludCgkZzcgXiAkeDcpOwogICAgICAgICRnWzhdID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSW50MzI6OmZyb21JbnQoJGc4IF4gJHg4KTsKICAgICAgICAkZ1s5XSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyOjpmcm9tSW50KCRnOSBeICR4OSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYKICAgICAqIEByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRBc3NpZ25tZW50CiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgTWl4ZWRNZXRob2RDYWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmVfbXVsMTIxNjY2KFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfRmUgJGYpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9JbnQzMj4gJGggKi8KICAgICAgICAkaCA9IGFycmF5KCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMTA7ICsrJGkpIHsKICAgICAgICAgICAgJGhbJGldID0gJGZbJGldLT50b0ludDY0KCktPm11bEludCgxMjE2NjYsIDE3KTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTkgKi8KICAgICAgICAkY2Fycnk5ID0gJGhbOV0tPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGhbMF0gPSAkaFswXS0+YWRkSW50NjQoJGNhcnJ5OS0+bXVsSW50KDE5LCA1KSk7CiAgICAgICAgJGhbOV0gPSAkaFs5XS0+c3ViSW50NjQoJGNhcnJ5OS0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTEgKi8KICAgICAgICAkY2FycnkxID0gJGhbMV0tPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGhbMl0gPSAkaFsyXS0+YWRkSW50NjQoJGNhcnJ5MSk7CiAgICAgICAgJGhbMV0gPSAkaFsxXS0+c3ViSW50NjQoJGNhcnJ5MS0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTMgKi8KICAgICAgICAkY2FycnkzID0gJGhbM10tPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGhbNF0gPSAkaFs0XS0+YWRkSW50NjQoJGNhcnJ5Myk7CiAgICAgICAgJGhbM10gPSAkaFszXS0+c3ViSW50NjQoJGNhcnJ5My0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTUgKi8KICAgICAgICAkY2Fycnk1ID0gJGhbNV0tPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGhbNl0gPSAkaFs2XS0+YWRkSW50NjQoJGNhcnJ5NSk7CiAgICAgICAgJGhbNV0gPSAkaFs1XS0+c3ViSW50NjQoJGNhcnJ5NS0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTcgKi8KICAgICAgICAkY2Fycnk3ID0gJGhbN10tPmFkZEludCgxIDw8IDI0KS0+c2hpZnRSaWdodCgyNSk7CiAgICAgICAgJGhbOF0gPSAkaFs4XS0+YWRkSW50NjQoJGNhcnJ5Nyk7CiAgICAgICAgJGhbN10gPSAkaFs3XS0+c3ViSW50NjQoJGNhcnJ5Ny0+c2hpZnRMZWZ0KDI1KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTAgKi8KICAgICAgICAkY2FycnkwID0gJGhbMF0tPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGhbMV0gPSAkaFsxXS0+YWRkSW50NjQoJGNhcnJ5MCk7CiAgICAgICAgJGhbMF0gPSAkaFswXS0+c3ViSW50NjQoJGNhcnJ5MC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTIgKi8KICAgICAgICAkY2FycnkyID0gJGhbMl0tPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGhbM10gPSAkaFszXS0+YWRkSW50NjQoJGNhcnJ5Mik7CiAgICAgICAgJGhbMl0gPSAkaFsyXS0+c3ViSW50NjQoJGNhcnJ5Mi0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTQgKi8KICAgICAgICAkY2Fycnk0ID0gJGhbNF0tPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGhbNV0gPSAkaFs1XS0+YWRkSW50NjQoJGNhcnJ5NCk7CiAgICAgICAgJGhbNF0gPSAkaFs0XS0+c3ViSW50NjQoJGNhcnJ5NC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTYgKi8KICAgICAgICAkY2Fycnk2ID0gJGhbNl0tPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGhbN10gPSAkaFs3XS0+YWRkSW50NjQoJGNhcnJ5Nik7CiAgICAgICAgJGhbNl0gPSAkaFs2XS0+c3ViSW50NjQoJGNhcnJ5Ni0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyICRjYXJyeTggKi8KICAgICAgICAkY2Fycnk4ID0gJGhbOF0tPmFkZEludCgxIDw8IDI1KS0+c2hpZnRSaWdodCgyNik7CiAgICAgICAgJGhbOV0gPSAkaFs5XS0+YWRkSW50NjQoJGNhcnJ5OCk7CiAgICAgICAgJGhbOF0gPSAkaFs4XS0+c3ViSW50NjQoJGNhcnJ5OC0+c2hpZnRMZWZ0KDI2KSk7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDEwOyArKyRpKSB7CiAgICAgICAgICAgICRoWyRpXSA9ICRoWyRpXS0+dG9JbnQzMigpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBhcnJheTxpbnQsIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0ludDMyPiAkaCAqLwogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlOjpmcm9tQXJyYXkoJGgpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIElubGluZSBjb21tZW50cyBwcmVjZWRlZCBieSAjIGFyZSBmcm9tIGxpYnNvZGl1bSdzIHJlZjEwIGNvZGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbgogICAgICogQHBhcmFtIHN0cmluZyAkcAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2N1cnZlMjU1MTlfcmVmMTAoJG4sICRwKQogICAgewogICAgICAgICMgZm9yIChpID0gMDtpIDwgMzI7KytpKSBlW2ldID0gbltpXTsKICAgICAgICAkZSA9ICcnIC4gJG47CiAgICAgICAgIyBlWzBdICY9IDI0ODsKICAgICAgICAkZVswXSA9IHNlbGY6OmludFRvQ2hyKAogICAgICAgICAgICBzZWxmOjpjaHJUb0ludCgkZVswXSkgJiAyNDgKICAgICAgICApOwogICAgICAgICMgZVszMV0gJj0gMTI3OwogICAgICAgICMgZVszMV0gfD0gNjQ7CiAgICAgICAgJGVbMzFdID0gc2VsZjo6aW50VG9DaHIoCiAgICAgICAgICAgIChzZWxmOjpjaHJUb0ludCgkZVszMV0pICYgMTI3KSB8IDY0CiAgICAgICAgKTsKICAgICAgICAjIGZlX2Zyb21ieXRlcyh4MSxwKTsKICAgICAgICAkeDEgPSBzZWxmOjpmZV9mcm9tYnl0ZXMoJHApOwogICAgICAgICMgZmVfMSh4Mik7CiAgICAgICAgJHgyID0gc2VsZjo6ZmVfMSgpOwogICAgICAgICMgZmVfMCh6Mik7CiAgICAgICAgJHoyID0gc2VsZjo6ZmVfMCgpOwogICAgICAgICMgZmVfY29weSh4Myx4MSk7CiAgICAgICAgJHgzID0gc2VsZjo6ZmVfY29weSgkeDEpOwogICAgICAgICMgZmVfMSh6Myk7CiAgICAgICAgJHozID0gc2VsZjo6ZmVfMSgpOwoKICAgICAgICAjIHN3YXAgPSAwOwogICAgICAgIC8qKiBAdmFyIGludCAkc3dhcCAqLwogICAgICAgICRzd2FwID0gMDsKCiAgICAgICAgIyBmb3IgKHBvcyA9IDI1NDtwb3MgPj0gMDstLXBvcykgewogICAgICAgIGZvciAoJHBvcyA9IDI1NDsgJHBvcyA+PSAwOyAtLSRwb3MpIHsKICAgICAgICAgICAgIyBiID0gZVtwb3MgLyA4XSA+PiAocG9zICYgNyk7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkYiAqLwogICAgICAgICAgICAkYiA9IHNlbGY6OmNoclRvSW50KAogICAgICAgICAgICAgICAgICAgICRlWyhpbnQpIGZsb29yKCRwb3MgLyA4KV0KICAgICAgICAgICAgICAgICkgPj4gKCRwb3MgJiA3KTsKICAgICAgICAgICAgIyBiICY9IDE7CiAgICAgICAgICAgICRiICY9IDE7CgogICAgICAgICAgICAjIHN3YXAgXj0gYjsKICAgICAgICAgICAgJHN3YXAgXj0gJGI7CgogICAgICAgICAgICAjIGZlX2Nzd2FwKHgyLHgzLHN3YXApOwogICAgICAgICAgICBzZWxmOjpmZV9jc3dhcCgkeDIsICR4MywgJHN3YXApOwoKICAgICAgICAgICAgIyBmZV9jc3dhcCh6Mix6Myxzd2FwKTsKICAgICAgICAgICAgc2VsZjo6ZmVfY3N3YXAoJHoyLCAkejMsICRzd2FwKTsKCiAgICAgICAgICAgICMgc3dhcCA9IGI7CiAgICAgICAgICAgIC8qKiBAdmFyIGludCAkc3dhcCAqLwogICAgICAgICAgICAkc3dhcCA9ICRiOwoKICAgICAgICAgICAgIyBmZV9zdWIodG1wMCx4Myx6Myk7CiAgICAgICAgICAgICR0bXAwID0gc2VsZjo6ZmVfc3ViKCR4MywgJHozKTsKCiAgICAgICAgICAgICMgZmVfc3ViKHRtcDEseDIsejIpOwogICAgICAgICAgICAkdG1wMSA9IHNlbGY6OmZlX3N1YigkeDIsICR6Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh4Mix4Mix6Mik7CiAgICAgICAgICAgICR4MiA9IHNlbGY6OmZlX2FkZCgkeDIsICR6Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh6Mix4Myx6Myk7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX2FkZCgkeDMsICR6Myk7CgogICAgICAgICAgICAjIGZlX211bCh6Myx0bXAwLHgyKTsKICAgICAgICAgICAgJHozID0gc2VsZjo6ZmVfbXVsKCR0bXAwLCAkeDIpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejIsejIsdG1wMSk7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX211bCgkejIsICR0bXAxKTsKCiAgICAgICAgICAgICMgZmVfc3EodG1wMCx0bXAxKTsKICAgICAgICAgICAgJHRtcDAgPSBzZWxmOjpmZV9zcSgkdG1wMSk7CgogICAgICAgICAgICAjIGZlX3NxKHRtcDEseDIpOwogICAgICAgICAgICAkdG1wMSA9IHNlbGY6OmZlX3NxKCR4Mik7CgogICAgICAgICAgICAjIGZlX2FkZCh4Myx6Myx6Mik7CiAgICAgICAgICAgICR4MyA9IHNlbGY6OmZlX2FkZCgkejMsICR6Mik7CgogICAgICAgICAgICAjIGZlX3N1Yih6Mix6Myx6Mik7CiAgICAgICAgICAgICR6MiA9IHNlbGY6OmZlX3N1YigkejMsICR6Mik7CgogICAgICAgICAgICAjIGZlX211bCh4Mix0bXAxLHRtcDApOwogICAgICAgICAgICAkeDIgPSBzZWxmOjpmZV9tdWwoJHRtcDEsICR0bXAwKTsKCiAgICAgICAgICAgICMgZmVfc3ViKHRtcDEsdG1wMSx0bXAwKTsKICAgICAgICAgICAgJHRtcDEgPSBzZWxmOjpmZV9zdWIoJHRtcDEsICR0bXAwKTsKCiAgICAgICAgICAgICMgZmVfc3EoejIsejIpOwogICAgICAgICAgICAkejIgPSBzZWxmOjpmZV9zcSgkejIpOwoKICAgICAgICAgICAgIyBmZV9tdWwxMjE2NjYoejMsdG1wMSk7CiAgICAgICAgICAgICR6MyA9IHNlbGY6OmZlX211bDEyMTY2NigkdG1wMSk7CgogICAgICAgICAgICAjIGZlX3NxKHgzLHgzKTsKICAgICAgICAgICAgJHgzID0gc2VsZjo6ZmVfc3EoJHgzKTsKCiAgICAgICAgICAgICMgZmVfYWRkKHRtcDAsdG1wMCx6Myk7CiAgICAgICAgICAgICR0bXAwID0gc2VsZjo6ZmVfYWRkKCR0bXAwLCAkejMpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejMseDEsejIpOwogICAgICAgICAgICAkejMgPSBzZWxmOjpmZV9tdWwoJHgxLCAkejIpOwoKICAgICAgICAgICAgIyBmZV9tdWwoejIsdG1wMSx0bXAwKTsKICAgICAgICAgICAgJHoyID0gc2VsZjo6ZmVfbXVsKCR0bXAxLCAkdG1wMCk7CiAgICAgICAgfQoKICAgICAgICAjIGZlX2Nzd2FwKHgyLHgzLHN3YXApOwogICAgICAgIHNlbGY6OmZlX2Nzd2FwKCR4MiwgJHgzLCAkc3dhcCk7CgogICAgICAgICMgZmVfY3N3YXAoejIsejMsc3dhcCk7CiAgICAgICAgc2VsZjo6ZmVfY3N3YXAoJHoyLCAkejMsICRzd2FwKTsKCiAgICAgICAgIyBmZV9pbnZlcnQoejIsejIpOwogICAgICAgICR6MiA9IHNlbGY6OmZlX2ludmVydCgkejIpOwoKICAgICAgICAjIGZlX211bCh4Mix4Mix6Mik7CiAgICAgICAgJHgyID0gc2VsZjo6ZmVfbXVsKCR4MiwgJHoyKTsKICAgICAgICAjIGZlX3RvYnl0ZXMocSx4Mik7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6OmZlX3RvYnl0ZXMoJHgyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZWR3YXJkc1kKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlICRlZHdhcmRzWgogICAgICogQHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlZHdhcmRzX3RvX21vbnRnb21lcnkoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZWR3YXJkc1ksCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSAkZWR3YXJkc1oKICAgICkgewogICAgICAgICR0ZW1wWCA9IHNlbGY6OmZlX2FkZCgkZWR3YXJkc1osICRlZHdhcmRzWSk7CiAgICAgICAgJHRlbXBaID0gc2VsZjo6ZmVfc3ViKCRlZHdhcmRzWiwgJGVkd2FyZHNZKTsKICAgICAgICAkdGVtcFogPSBzZWxmOjpmZV9pbnZlcnQoJHRlbXBaKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmVfbXVsKCR0ZW1wWCwgJHRlbXBaKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBkaXJlY3RseSBmcm9tIGFub3RoZXIgYXBwbGljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9yZWYxMF9iYXNlKCRuKQogICAgewogICAgICAgICMgZm9yIChpID0gMDtpIDwgMzI7KytpKSBlW2ldID0gbltpXTsKICAgICAgICAkZSA9ICcnIC4gJG47CgogICAgICAgICMgZVswXSAmPSAyNDg7CiAgICAgICAgJGVbMF0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgc2VsZjo6Y2hyVG9JbnQoJGVbMF0pICYgMjQ4CiAgICAgICAgKTsKCiAgICAgICAgIyBlWzMxXSAmPSAxMjc7CiAgICAgICAgIyBlWzMxXSB8PSA2NDsKICAgICAgICAkZVszMV0gPSBzZWxmOjppbnRUb0NocigKICAgICAgICAgICAgKHNlbGY6OmNoclRvSW50KCRlWzMxXSkgJiAxMjcpIHwgNjQKICAgICAgICApOwoKICAgICAgICAkQSA9IHNlbGY6OmdlX3NjYWxhcm11bHRfYmFzZSgkZSk7CiAgICAgICAgaWYgKAogICAgICAgICAgICAhKCRBLT5ZIGluc3RhbmNlb2YgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9GZSkKICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICEoJEEtPlogaW5zdGFuY2VvZiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DdXJ2ZTI1NTE5X0ZlKQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOdWxsIHBvaW50cyBlbmNvdW50ZXJlZCcpOwogICAgICAgIH0KICAgICAgICAkcGsgPSBzZWxmOjplZHdhcmRzX3RvX21vbnRnb21lcnkoJEEtPlksICRBLT5aKTsKICAgICAgICByZXR1cm4gc2VsZjo6ZmVfdG9ieXRlcygkcGspOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1hDaGFDaGEyMCcsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9CgovKioKICogQ2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfWENoYUNoYTIwCiAqLwpjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9YQ2hhQ2hhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IQ2hhQ2hhMjAKewogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtKCRsZW4gPSA2NCwgJG5vbmNlID0gJycsICRrZXkgPSAnJykKICAgIHsKICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRub25jZSkgIT09IDI0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ05vbmNlIG11c3QgYmUgMjQgYnl0ZXMgbG9uZycpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6ZW5jcnlwdEJ5dGVzKAogICAgICAgICAgICBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjBfQ3R4KAogICAgICAgICAgICAgICAgc2VsZjo6aENoYUNoYTIwKAogICAgICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkbm9uY2UsIDAsIDE2KSwKICAgICAgICAgICAgICAgICAgICAka2V5CiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRub25jZSwgMTYsIDgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIHN0cl9yZXBlYXQoIlx4MDAiLCAkbGVuKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkaWMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdHJlYW1Yb3JJYygkbWVzc2FnZSwgJG5vbmNlID0gJycsICRrZXkgPSAnJywgJGljID0gJycpCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkbm9uY2UpICE9PSAyNCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdOb25jZSBtdXN0IGJlIDI0IGJ5dGVzIGxvbmcnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OmVuY3J5cHRCeXRlcygKICAgICAgICAgICAgbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwX0N0eCgKICAgICAgICAgICAgICAgIHNlbGY6OmhDaGFDaGEyMChzZWxmOjpzdWJzdHIoJG5vbmNlLCAwLCAxNiksICRrZXkpLAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAgICAgJGljCiAgICAgICAgICAgICksCiAgICAgICAgICAgICRtZXNzYWdlCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Core32/XSalsa20.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1hTYWxzYTIwJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9YU2Fsc2EyMAogKi8KYWJzdHJhY3QgY2xhc3MgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfWFNhbHNhMjAgZXh0ZW5kcyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IU2Fsc2EyMAp7CiAgICAvKioKICAgICAqIEV4cGFuZCBhIGtleSBhbmQgbm9uY2UgaW50byBhbiB4c2Fsc2EyMCBrZXlzdHJlYW0uCiAgICAgKgogICAgICogQGludGVybmFsIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzIGRpcmVjdGx5IGZyb20gYW5vdGhlciBhcHBsaWNhdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHhzYWxzYTIwKCRsZW4sICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAkcmV0ID0gc2VsZjo6c2Fsc2EyMCgKICAgICAgICAgICAgJGxlbiwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICBzZWxmOjpoc2Fsc2EyMCgkbm9uY2UsICRrZXkpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgYSBzdHJpbmcgd2l0aCBYU2Fsc2EyMC4gRG9lc24ndCBwcm92aWRlIGludGVncml0eS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHhzYWxzYTIwX3hvcigkbWVzc2FnZSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBzZWxmOjp4b3JTdHJpbmdzKAogICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgc2VsZjo6eHNhbHNhMjAoCiAgICAgICAgICAgICAgICBzZWxmOjpzdHJsZW4oJG1lc3NhZ2UpLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgJGtleQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Crypto.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvJywgZmFsc2UpKSB7CiAgICByZXR1cm47Cn0KCi8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bwogKgogKiBBVFRFTlRJT04hCiAqCiAqIElmIHlvdSBhcmUgdXNpbmcgdGhpcyBsaWJyYXJ5LCB5b3Ugc2hvdWxkIGJlIHVzaW5nCiAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0IGluIHlvdXIgY29kZSwgbm90IHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bwp7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9OU0VDQllURVMgPSAwOwogICAgY29uc3QgYWVhZF9jaGFjaGEyMHBvbHkxMzA1X05QVUJCWVRFUyA9IDg7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfQUJZVEVTID0gMTY7CgogICAgY29uc3QgYWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9JRVRGX05TRUNCWVRFUyA9IDA7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfSUVURl9OUFVCQllURVMgPSAxMjsKICAgIGNvbnN0IGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9JRVRGX0FCWVRFUyA9IDE2OwoKICAgIGNvbnN0IGFlYWRfeGNoYWNoYTIwcG9seTEzMDVfSUVURl9LRVlCWVRFUyA9IDMyOwogICAgY29uc3QgYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9JRVRGX05TRUNCWVRFUyA9IDA7CiAgICBjb25zdCBhZWFkX3hjaGFjaGEyMHBvbHkxMzA1X0lFVEZfTlBVQkJZVEVTID0gMjQ7CiAgICBjb25zdCBhZWFkX3hjaGFjaGEyMHBvbHkxMzA1X0lFVEZfQUJZVEVTID0gMTY7CgogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X1NFRURCWVRFUyA9IDMyOwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X1BVQkxJQ0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBib3hfY3VydmUyNTUxOXhzYWxzYTIwcG9seTEzMDVfU0VDUkVUS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IGJveF9jdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNV9CRUZPUkVOTUJZVEVTID0gMzI7CiAgICBjb25zdCBib3hfY3VydmUyNTUxOXhzYWxzYTIwcG9seTEzMDVfTk9OQ0VCWVRFUyA9IDI0OwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X01BQ0JZVEVTID0gMTY7CiAgICBjb25zdCBib3hfY3VydmUyNTUxOXhzYWxzYTIwcG9seTEzMDVfQk9YWkVST0JZVEVTID0gMTY7CiAgICBjb25zdCBib3hfY3VydmUyNTUxOXhzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTID0gMzI7CgogICAgY29uc3Qgb25ldGltZWF1dGhfcG9seTEzMDVfQllURVMgPSAxNjsKICAgIGNvbnN0IG9uZXRpbWVhdXRoX3BvbHkxMzA1X0tFWUJZVEVTID0gMzI7CgogICAgY29uc3Qgc2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IHNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X05PTkNFQllURVMgPSAyNDsKICAgIGNvbnN0IHNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X01BQ0JZVEVTID0gMTY7CiAgICBjb25zdCBzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9CT1haRVJPQllURVMgPSAxNjsKICAgIGNvbnN0IHNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X1pFUk9CWVRFUyA9IDMyOwoKICAgIGNvbnN0IHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9LRVlCWVRFUyA9IDMyOwogICAgY29uc3Qgc2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X05PTkNFQllURVMgPSAyNDsKICAgIGNvbnN0IHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9NQUNCWVRFUyA9IDE2OwogICAgY29uc3Qgc2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X0JPWFpFUk9CWVRFUyA9IDE2OwogICAgY29uc3Qgc2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUyA9IDMyOwoKICAgIGNvbnN0IHN0cmVhbV9zYWxzYTIwX0tFWUJZVEVTID0gMzI7CgogICAgLyoqCiAgICAgKiBBRUFEIERlY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KAogICAgICAgICRtZXNzYWdlID0gJycsCiAgICAgICAgJGFkID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiogQHZhciBpbnQgJGxlbiAtIExlbmd0aCBvZiBtZXNzYWdlIChjaXBoZXJ0ZXh0ICsgTUFDKSAqLwogICAgICAgICRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRtZXNzYWdlKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICAkY2xlbiAtIExlbmd0aCBvZiBjaXBoZXJ0ZXh0ICovCiAgICAgICAgJGNsZW4gPSAkbGVuIC0gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0FCWVRFUzsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRhZGxlbiAtIExlbmd0aCBvZiBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRhZCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbWFjIC0gTWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlICovCiAgICAgICAgJG1hYyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAkY2xlbiwKICAgICAgICAgICAgc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0FCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCAtIFRoZSBlbmNyeXB0ZWQgbWVzc2FnZSAoc2FucyBNQUMpICovCiAgICAgICAgJGNpcGhlcnRleHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRtZXNzYWdlLCAwLCAkY2xlbik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyBUaGUgZmlyc3QgYmxvY2sgb2YgdGhlIGNoYWNoYTIwIGtleXN0cmVhbSwgdXNlZCBhcyBhIHBvbHkxMzA1IGtleSAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OnN0cmVhbSgKICAgICAgICAgICAgMzIsCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgJGtleQogICAgICAgICk7CgogICAgICAgIC8qIFJlY2FsY3VsYXRlIHRoZSBQb2x5MTMwNSBhdXRoZW50aWNhdGlvbiB0YWcgKE1BQyk6ICovCiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZSgkYmxvY2swKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkYmxvY2swKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jazAgPSBudWxsOwogICAgICAgIH0KICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkYWQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKCRhZGxlbikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjaXBoZXJ0ZXh0KTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgkY2xlbikpOwogICAgICAgICRjb21wdXRlZF9tYWMgPSAkc3RhdGUtPmZpbmlzaCgpOwoKICAgICAgICAvKiBDb21wYXJlIHRoZSBnaXZlbiBNQUMgd2l0aCB0aGUgcmVjYWxjdWxhdGVkIE1BQzogKi8KICAgICAgICBpZiAoIVBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjp2ZXJpZnlfMTYoJGNvbXB1dGVkX21hYywgJG1hYykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignSW52YWxpZCBNQUMnKTsKICAgICAgICB9CgogICAgICAgIC8vIEhlcmUsIHdlIGtub3cgdGhhdCB0aGUgTUFDIGlzIHZhbGlkLCBzbyB3ZSBkZWNyeXB0IGFuZCByZXR1cm4gdGhlIHBsYWludGV4dAogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OnN0cmVhbVhvckljKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgxKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIEVuY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KAogICAgICAgICRtZXNzYWdlID0gJycsCiAgICAgICAgJGFkID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAvKiogQHZhciBpbnQgJGxlbiAtIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IG1lc3NhZ2UgKi8KICAgICAgICAkbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkbWVzc2FnZSk7CgogICAgICAgIC8qKiBAdmFyIGludCAkYWRsZW4gLSBMZW5ndGggb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSAqLwogICAgICAgICRhZGxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGFkKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nIFRoZSBmaXJzdCBibG9jayBvZiB0aGUgY2hhY2hhMjAga2V5c3RyZWFtLCB1c2VkIGFzIGEgcG9seTEzMDUga2V5ICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMDo6c3RyZWFtKAogICAgICAgICAgICAzMiwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlKCRibG9jazApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJGJsb2NrMCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGNpcGhlcnRleHQgLSBSYXcgZW5jcnlwdGVkIGRhdGEgKi8KICAgICAgICAkY2lwaGVydGV4dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMDo6c3RyZWFtWG9ySWMoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgKTsKCiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGFkKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgkYWRsZW4pKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkY2lwaGVydGV4dCk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0b3JlNjRfbGUoJGxlbikpOwogICAgICAgIHJldHVybiAkY2lwaGVydGV4dCAuICRzdGF0ZS0+ZmluaXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIERlY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNSwgSUVURiBtb2RlICg5Ni1iaXQgbm9uY2UpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgKICAgICAgICAkbWVzc2FnZSA9ICcnLAogICAgICAgICRhZCA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRhZGxlbiAtIExlbmd0aCBvZiBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRhZCk7CgogICAgICAgIC8qKiBAdmFyIGludCAkbGVuIC0gTGVuZ3RoIG9mIG1lc3NhZ2UgKGNpcGhlcnRleHQgKyBNQUMpICovCiAgICAgICAgJGxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiogQHZhciBpbnQgICRjbGVuIC0gTGVuZ3RoIG9mIGNpcGhlcnRleHQgKi8KICAgICAgICAkY2xlbiA9ICRsZW4gLSBzZWxmOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfSUVURl9BQllURVM7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyBUaGUgZmlyc3QgYmxvY2sgb2YgdGhlIGNoYWNoYTIwIGtleXN0cmVhbSwgdXNlZCBhcyBhIHBvbHkxMzA1IGtleSAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OmlldGZTdHJlYW0oCiAgICAgICAgICAgIDMyLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG1hYyAtIE1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSAqLwogICAgICAgICRtYWMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgJGxlbiAtIHNlbGY6OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9JRVRGX0FCWVRFUywKICAgICAgICAgICAgc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfQUJZVEVTCiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjaXBoZXJ0ZXh0IC0gVGhlIGVuY3J5cHRlZCBtZXNzYWdlIChzYW5zIE1BQykgKi8KICAgICAgICAkY2lwaGVydGV4dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAwLAogICAgICAgICAgICAkbGVuIC0gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfQUJZVEVTCiAgICAgICAgKTsKCiAgICAgICAgLyogUmVjYWxjdWxhdGUgdGhlIFBvbHkxMzA1IGF1dGhlbnRpY2F0aW9uIHRhZyAoTUFDKTogKi8KICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlKCRibG9jazApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJGJsb2NrMCA9IG51bGw7CiAgICAgICAgfQogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRhZCk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoc3RyX3JlcGVhdCgiXHgwMCIsICgoMHgxMCAtICRhZGxlbikgJiAweGYpKSk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNpcGhlcnRleHQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKHN0cl9yZXBlYXQoIlx4MDAiLCAoMHgxMCAtICRjbGVuKSAmIDB4ZikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKCRhZGxlbikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKCRjbGVuKSk7CiAgICAgICAgJGNvbXB1dGVkX21hYyA9ICRzdGF0ZS0+ZmluaXNoKCk7CgogICAgICAgIC8qIENvbXBhcmUgdGhlIGdpdmVuIE1BQyB3aXRoIHRoZSByZWNhbGN1bGF0ZWQgTUFDOiAqLwogICAgICAgIGlmICghUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnZlcmlmeV8xNigkY29tcHV0ZWRfbWFjLCAkbWFjKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIE1BQycpOwogICAgICAgIH0KCiAgICAgICAgLy8gSGVyZSwgd2Uga25vdyB0aGF0IHRoZSBNQUMgaXMgdmFsaWQsIHNvIHdlIGRlY3J5cHQgYW5kIHJldHVybiB0aGUgcGxhaW50ZXh0CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMDo6aWV0ZlN0cmVhbVhvckljKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgxKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIEVuY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNSwgSUVURiBtb2RlICg5Ni1iaXQgbm9uY2UpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgKICAgICAgICAkbWVzc2FnZSA9ICcnLAogICAgICAgICRhZCA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRsZW4gLSBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBtZXNzYWdlICovCiAgICAgICAgJGxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGFkbGVuIC0gTGVuZ3RoIG9mIHRoZSBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRhZCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyBUaGUgZmlyc3QgYmxvY2sgb2YgdGhlIGNoYWNoYTIwIGtleXN0cmVhbSwgdXNlZCBhcyBhIHBvbHkxMzA1IGtleSAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OmlldGZTdHJlYW0oCiAgICAgICAgICAgIDMyLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDVfU3RhdGUoJGJsb2NrMCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGJsb2NrMCk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2swID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCAtIFJhdyBlbmNyeXB0ZWQgZGF0YSAqLwogICAgICAgICRjaXBoZXJ0ZXh0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwOjppZXRmU3RyZWFtWG9ySWMoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgKTsKCiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGFkKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShzdHJfcmVwZWF0KCJceDAwIiwgKCgweDEwIC0gJGFkbGVuKSAmIDB4ZikpKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkY2lwaGVydGV4dCk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoc3RyX3JlcGVhdCgiXHgwMCIsICgoMHgxMCAtICRsZW4pICYgMHhmKSkpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKCRhZGxlbikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKCRsZW4pKTsKICAgICAgICByZXR1cm4gJGNpcGhlcnRleHQgLiAkc3RhdGUtPmZpbmlzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogQUVBRCBEZWNyeXB0aW9uIHdpdGggQ2hhQ2hhMjAtUG9seTEzMDUsIElFVEYgbW9kZSAoOTYtYml0IG5vbmNlKQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0KAogICAgICAgICRtZXNzYWdlID0gJycsCiAgICAgICAgJGFkID0gJycsCiAgICAgICAgJG5vbmNlID0gJycsCiAgICAgICAgJGtleSA9ICcnCiAgICApIHsKICAgICAgICAkc3Via2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0hDaGFDaGEyMDo6aENoYUNoYTIwKAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMCwgMTYpLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgICAgICAkbm9uY2VMYXN0ID0gIlx4MDBceDAwXHgwMFx4MDAiIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkbm9uY2UsIDE2LCA4KTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoJG1lc3NhZ2UsICRhZCwgJG5vbmNlTGFzdCwgJHN1YmtleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIEVuY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNSwgSUVURiBtb2RlICg5Ni1iaXQgbm9uY2UpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoCiAgICAgICAgJG1lc3NhZ2UgPSAnJywKICAgICAgICAkYWQgPSAnJywKICAgICAgICAkbm9uY2UgPSAnJywKICAgICAgICAka2V5ID0gJycKICAgICkgewogICAgICAgICRzdWJrZXkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfSENoYUNoYTIwOjpoQ2hhQ2hhMjAoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJG5vbmNlLCAwLCAxNiksCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgICAgICRub25jZUxhc3QgPSAiXHgwMFx4MDBceDAwXHgwMCIgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpOwoKICAgICAgICByZXR1cm4gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgkbWVzc2FnZSwgJGFkLCAkbm9uY2VMYXN0LCAkc3Via2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEhNQUMtU0hBLTUxMi0yNTYgKGEuay5hLiB0aGUgbGVmdG1vc3QgMjU2IGJpdHMgb2YgSE1BQy1TSEEtNTEyKQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF1dGgoJG1lc3NhZ2UsICRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgIGhhc2hfaG1hYygnc2hhNTEyJywgJG1lc3NhZ2UsICRrZXksIHRydWUpLAogICAgICAgICAgICAwLAogICAgICAgICAgICAzMgogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBITUFDLVNIQS01MTItMjU2IHZhbGlkYXRpb24uIENvbnN0YW50LXRpbWUgdmlhIGhhc2hfZXF1YWxzKCkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hYwogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF1dGhfdmVyaWZ5KCRtYWMsICRtZXNzYWdlLCAka2V5KQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6aGFzaEVxdWFscygKICAgICAgICAgICAgJG1hYywKICAgICAgICAgICAgc2VsZjo6YXV0aCgkbWVzc2FnZSwgJGtleSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogWDI1NTE5IGtleSBleGNoYW5nZSBmb2xsb3dlZCBieSBYU2Fsc2EyMFBvbHkxMzA1IHN5bW1ldHJpYyBlbmNyeXB0aW9uCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5cGFpcikKICAgIHsKICAgICAgICAkYyA9IHNlbGY6OnNlY3JldGJveCgKICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICBzZWxmOjpib3hfYmVmb3Jlbm0oCiAgICAgICAgICAgICAgICBzZWxmOjpib3hfc2VjcmV0a2V5KCRrZXlwYWlyKSwKICAgICAgICAgICAgICAgIHNlbGY6OmJveF9wdWJsaWNrZXkoJGtleXBhaXIpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgIHJldHVybiAkYzsKICAgIH0KCiAgICAvKioKICAgICAqIFgyNTUxOS1YU2Fsc2EyMC1Qb2x5MTMwNSB3aXRoIG9uZSBlcGhlbWVyYWwgWDI1NTE5IGtleXBhaXIuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY0tleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9zZWFsKCRtZXNzYWdlLCAkcHVibGljS2V5KQogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkZXBoZW1lcmFsS2V5cGFpciAqLwogICAgICAgICRlcGhlbWVyYWxLZXlwYWlyID0gc2VsZjo6Ym94X2tleXBhaXIoKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRlcGhlbWVyYWxTSyAqLwogICAgICAgICRlcGhlbWVyYWxTSyA9IHNlbGY6OmJveF9zZWNyZXRrZXkoJGVwaGVtZXJhbEtleXBhaXIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGVwaGVtZXJhbFBLICovCiAgICAgICAgJGVwaGVtZXJhbFBLID0gc2VsZjo6Ym94X3B1YmxpY2tleSgkZXBoZW1lcmFsS2V5cGFpcik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbm9uY2UgKi8KICAgICAgICAkbm9uY2UgPSBzZWxmOjpnZW5lcmljaGFzaCgKICAgICAgICAgICAgJGVwaGVtZXJhbFBLIC4gJHB1YmxpY0tleSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIDI0CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRrZXlwYWlyIC0gVGhlIGNvbWJpbmVkIGtleXBhaXIgdXNlZCBpbiBjcnlwdG9fYm94KCkgKi8KICAgICAgICAka2V5cGFpciA9IHNlbGY6OmJveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkoJGVwaGVtZXJhbFNLLCAkcHVibGljS2V5KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjaXBoZXJ0ZXh0IENpcGhlcnRleHQgKyBNQUMgZnJvbSBjcnlwdG9fYm94ICovCiAgICAgICAgJGNpcGhlcnRleHQgPSBzZWxmOjpib3goJG1lc3NhZ2UsICRub25jZSwgJGtleXBhaXIpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRlcGhlbWVyYWxLZXlwYWlyKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGVwaGVtZXJhbFNLKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJG5vbmNlKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRlcGhlbWVyYWxLZXlwYWlyID0gbnVsbDsKICAgICAgICAgICAgJGVwaGVtZXJhbFNLID0gbnVsbDsKICAgICAgICAgICAgJG5vbmNlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRlcGhlbWVyYWxQSyAuICRjaXBoZXJ0ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogT3BlbnMgYSBtZXNzYWdlIGVuY3J5cHRlZCB2aWEgYm94X3NlYWwoKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9zZWFsX29wZW4oJG1lc3NhZ2UsICRrZXlwYWlyKQogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkZXBoZW1lcmFsUEsgKi8KICAgICAgICAkZXBoZW1lcmFsUEsgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRtZXNzYWdlLCAwLCAzMik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCAoY2lwaGVydGV4dCArIE1BQykgKi8KICAgICAgICAkY2lwaGVydGV4dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJG1lc3NhZ2UsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzZWNyZXRLZXkgKi8KICAgICAgICAkc2VjcmV0S2V5ID0gc2VsZjo6Ym94X3NlY3JldGtleSgka2V5cGFpcik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcHVibGljS2V5ICovCiAgICAgICAgJHB1YmxpY0tleSA9IHNlbGY6OmJveF9wdWJsaWNrZXkoJGtleXBhaXIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG5vbmNlICovCiAgICAgICAgJG5vbmNlID0gc2VsZjo6Z2VuZXJpY2hhc2goCiAgICAgICAgICAgICRlcGhlbWVyYWxQSyAuICRwdWJsaWNLZXksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAyNAogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAka2V5cGFpciAqLwogICAgICAgICRrZXlwYWlyID0gc2VsZjo6Ym94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleSgkc2VjcmV0S2V5LCAkZXBoZW1lcmFsUEspOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG0gKi8KICAgICAgICAkbSA9IHNlbGY6OmJveF9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXlwYWlyKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkc2VjcmV0S2V5KTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGVwaGVtZXJhbFBLKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJG5vbmNlKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRzZWNyZXRLZXkgPSBudWxsOwogICAgICAgICAgICAkZXBoZW1lcmFsUEsgPSBudWxsOwogICAgICAgICAgICAkbm9uY2UgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG07CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2VkIGJ5IGNyeXB0b19ib3goKSB0byBnZXQgdGhlIGNyeXB0b19zZWNyZXRib3goKSBrZXkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9iZWZvcmVubSgkc2ssICRwaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0hTYWxzYTIwOjpoc2Fsc2EyMCgKICAgICAgICAgICAgc3RyX3JlcGVhdCgiXHgwMCIsIDE2KSwKICAgICAgICAgICAgc2VsZjo6c2NhbGFybXVsdCgkc2ssICRwaykKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X2tleXBhaXIoKQogICAgewogICAgICAgICRzS2V5ID0gcmFuZG9tX2J5dGVzKDMyKTsKICAgICAgICAkcEtleSA9IHNlbGY6OnNjYWxhcm11bHRfYmFzZSgkc0tleSk7CiAgICAgICAgcmV0dXJuICRzS2V5IC4gJHBLZXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X3NlZWRfa2V5cGFpcigkc2VlZCkKICAgIHsKICAgICAgICAkc0tleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgIGhhc2goJ3NoYTUxMicsICRzZWVkLCB0cnVlKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMzIKICAgICAgICApOwogICAgICAgICRwS2V5ID0gc2VsZjo6c2NhbGFybXVsdF9iYXNlKCRzS2V5KTsKICAgICAgICByZXR1cm4gJHNLZXkgLiAkcEtleTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwS2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzS2V5LCAkcEtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkc0tleSwgMCwgMzIpIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkcEtleSwgMCwgMzIpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9zZWNyZXRrZXkoJGtleXBhaXIpCiAgICB7CiAgICAgICAgaWYgKFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJGtleXBhaXIpICE9PSA2NCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTXVzdCBiZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMgYnl0ZXMgbG9uZy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRrZXlwYWlyLCAwLCAzMik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgUmFuZ2VFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X3B1YmxpY2tleSgka2V5cGFpcikKICAgIHsKICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigka2V5cGFpcikgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX0tFWVBBSVJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTXVzdCBiZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMgYnl0ZXMgbG9uZy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRrZXlwYWlyLCAzMiwgMzIpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNLZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzS2V5KQogICAgewogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RybGVuKCRzS2V5KSAhPT0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfU0VDUkVUS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ011c3QgYmUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfU0VDUkVUS0VZQllURVMgYnl0ZXMgbG9uZy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpzY2FsYXJtdWx0X2Jhc2UoJHNLZXkpOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBhIG1lc3NhZ2UgZW5jcnlwdGVkIHdpdGggYm94KCkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleXBhaXIpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnNlY3JldGJveF9vcGVuKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICBzZWxmOjpib3hfYmVmb3Jlbm0oCiAgICAgICAgICAgICAgICBzZWxmOjpib3hfc2VjcmV0a2V5KCRrZXlwYWlyKSwKICAgICAgICAgICAgICAgIHNlbGY6OmJveF9wdWJsaWNrZXkoJGtleXBhaXIpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIGEgQkxBS0UyYiBoYXNoLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHBhcmFtIGludCAkb3V0bGVuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBSYW5nZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJpY2hhc2goJG1lc3NhZ2UsICRrZXkgPSAnJywgJG91dGxlbiA9IDMyKQogICAgewogICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjokaXYgaXMgaW5pdGlhbGl6ZWQKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6cHNldWRvQ29uc3RydWN0b3IoKTsKCiAgICAgICAgJGsgPSBudWxsOwogICAgICAgIGlmICghZW1wdHkoJGtleSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgU3BsRml4ZWRBcnJheSAkayAqLwogICAgICAgICAgICAkayA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjpzdHJpbmdUb1NwbEZpeGVkQXJyYXkoJGtleSk7CiAgICAgICAgICAgIGlmICgkay0+Y291bnQoKSA+IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjpLRVlCWVRFUykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdJbnZhbGlkIGtleSBzaXplJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGluICovCiAgICAgICAgJGluID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OnN0cmluZ1RvU3BsRml4ZWRBcnJheSgkbWVzc2FnZSk7CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGN0eCAqLwogICAgICAgICRjdHggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6aW5pdCgkaywgJG91dGxlbik7CiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OnVwZGF0ZSgkY3R4LCAkaW4sICRpbi0+Y291bnQoKSk7CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJG91dCAqLwogICAgICAgICRvdXQgPSBuZXcgU3BsRml4ZWRBcnJheSgkb3V0bGVuKTsKICAgICAgICAkb3V0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OmZpbmlzaCgkY3R4LCAkb3V0KTsKCiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICovCiAgICAgICAgJG91dEFycmF5ID0gJG91dC0+dG9BcnJheSgpOwogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6aW50QXJyYXlUb1N0cmluZygkb3V0QXJyYXkpOwogICAgfQoKICAgIC8qKgogICAgICogRmluYWxpemUgYSBCTEFLRTJiIGhhc2hpbmcgY29udGV4dCwgcmV0dXJuaW5nIHRoZSBoYXNoLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjdHgKICAgICAqIEBwYXJhbSBpbnQgJG91dGxlbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlbmVyaWNoYXNoX2ZpbmFsKCRjdHgsICRvdXRsZW4gPSAzMikKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkY3R4KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb250ZXh0IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CiAgICAgICAgJG91dCA9IG5ldyBTcGxGaXhlZEFycmF5KCRvdXRsZW4pOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRjb250ZXh0ICovCiAgICAgICAgJGNvbnRleHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6c3RyaW5nVG9Db250ZXh0KCRjdHgpOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRvdXQgKi8KICAgICAgICAkb3V0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OmZpbmlzaCgkY29udGV4dCwgJG91dCk7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAqLwogICAgICAgICRvdXRBcnJheSA9ICRvdXQtPnRvQXJyYXkoKTsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OmludEFycmF5VG9TdHJpbmcoJG91dEFycmF5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYSBoYXNoaW5nIGNvbnRleHQgZm9yIEJMQUtFMmIuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGludCAkb3V0cHV0TGVuZ3RoCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBSYW5nZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJpY2hhc2hfaW5pdCgka2V5ID0gJycsICRvdXRwdXRMZW5ndGggPSAzMikKICAgIHsKICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6JGl2IGlzIGluaXRpYWxpemVkCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OnBzZXVkb0NvbnN0cnVjdG9yKCk7CgogICAgICAgICRrID0gbnVsbDsKICAgICAgICBpZiAoIWVtcHR5KCRrZXkpKSB7CiAgICAgICAgICAgICRrID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OnN0cmluZ1RvU3BsRml4ZWRBcnJheSgka2V5KTsKICAgICAgICAgICAgaWYgKCRrLT5jb3VudCgpID4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OktFWUJZVEVTKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oJ0ludmFsaWQga2V5IHNpemUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgU3BsRml4ZWRBcnJheSAkY3R4ICovCiAgICAgICAgJGN0eCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjppbml0KCRrLCAkb3V0cHV0TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjpjb250ZXh0VG9TdHJpbmcoJGN0eCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBoYXNoaW5nIGNvbnRleHQgZm9yIEJMQUtFMmIgd2l0aCAkbWVzc2FnZQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjdHgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmljaGFzaF91cGRhdGUoJGN0eCwgJG1lc3NhZ2UpCiAgICB7CiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0JMQUtFMmI6OiRpdiBpcyBpbml0aWFsaXplZAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjpwc2V1ZG9Db25zdHJ1Y3RvcigpOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRjb250ZXh0ICovCiAgICAgICAgJGNvbnRleHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6c3RyaW5nVG9Db250ZXh0KCRjdHgpOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRpbiAqLwogICAgICAgICRpbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9CTEFLRTJiOjpzdHJpbmdUb1NwbEZpeGVkQXJyYXkoJG1lc3NhZ2UpOwoKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6dXBkYXRlKCRjb250ZXh0LCAkaW4sICRpbi0+Y291bnQoKSk7CgogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQkxBS0UyYjo6Y29udGV4dFRvU3RyaW5nKCRjb250ZXh0KTsKICAgIH0KCiAgICAvKioKICAgICAqIExpYnNvZGl1bSdzIGNyeXB0b19reCgpLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRteV9zawogICAgICogQHBhcmFtIHN0cmluZyAkdGhlaXJfcGsKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsaWVudF9wawogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX3BrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ga2V5RXhjaGFuZ2UoJG15X3NrLCAkdGhlaXJfcGssICRjbGllbnRfcGssICRzZXJ2ZXJfcGspCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2goCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2NhbGFybXVsdCgkbXlfc2ssICR0aGVpcl9waykgLgogICAgICAgICAgICAkY2xpZW50X3BrIC4KICAgICAgICAgICAgJHNlcnZlcl9wawogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFQ0RIIG92ZXIgQ3VydmUyNTUxOQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwS2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjYWxhcm11bHQoJHNLZXksICRwS2V5KQogICAgewogICAgICAgICRxID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1gyNTUxOTo6Y3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9yZWYxMCgkc0tleSwgJHBLZXkpOwogICAgICAgIHNlbGY6OnNjYWxhcm11bHRfdGhyb3dfaWZfemVybygkcSk7CiAgICAgICAgcmV0dXJuICRxOwogICAgfQoKICAgIC8qKgogICAgICogRUNESCBvdmVyIEN1cnZlMjU1MTksIHVzaW5nIHRoZSBiYXNlcG9pbnQuCiAgICAgKiBVc2VkIHRvIGdldCBhIHNlY3JldCBrZXkgZnJvbSBhIHB1YmxpYyBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VjcmV0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjYWxhcm11bHRfYmFzZSgkc2VjcmV0KQogICAgewogICAgICAgICRxID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1gyNTUxOTo6Y3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9yZWYxMF9iYXNlKCRzZWNyZXQpOwogICAgICAgIHNlbGY6OnNjYWxhcm11bHRfdGhyb3dfaWZfemVybygkcSk7CiAgICAgICAgcmV0dXJuICRxOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyB0aHJvd3MgYW4gRXJyb3IgaWYgYSB6ZXJvIHB1YmxpYyBrZXkgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzY2FsYXJtdWx0X3Rocm93X2lmX3plcm8oJHEpCiAgICB7CiAgICAgICAgJGQgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IHNlbGY6OmJveF9jdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNV9TRUNSRVRLRVlCWVRFUzsgKyskaSkgewogICAgICAgICAgICAkZCB8PSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6Y2hyVG9JbnQoJHFbJGldKTsKICAgICAgICB9CgogICAgICAgIC8qIGJyYW5jaC1mcmVlIHZhcmlhbnQgb2YgPT09IDAgKi8KICAgICAgICBpZiAoLSgxICYgKCgkZCAtIDEpID4+IDgpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdaZXJvIHB1YmxpYyBrZXkgaXMgbm90IGFsbG93ZWQnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBYU2Fsc2EyMC1Qb2x5MTMwNSBhdXRoZW50aWNhdGVkIHN5bW1ldHJpYy1rZXkgZW5jcnlwdGlvbi4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGxhaW50ZXh0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VjcmV0Ym94KCRwbGFpbnRleHQsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHN1YmtleSAqLwogICAgICAgICRzdWJrZXkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfSFNhbHNhMjA6OmhzYWxzYTIwKCRub25jZSwgJGtleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IHN0cl9yZXBlYXQoIlx4MDAiLCAzMik7CgogICAgICAgIC8qKiBAdmFyIGludCAkbWxlbiAtIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IG1lc3NhZ2UgKi8KICAgICAgICAkbWxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHBsYWludGV4dCk7CiAgICAgICAgJG1sZW4wID0gJG1sZW47CiAgICAgICAgaWYgKCRtbGVuMCA+IDY0IC0gc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKSB7CiAgICAgICAgICAgICRtbGVuMCA9IDY0IC0gc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTOwogICAgICAgIH0KICAgICAgICAkYmxvY2swIC49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJHBsYWludGV4dCwgMCwgJG1sZW4wKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjA6OnNhbHNhMjBfeG9yKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMKICAgICAgICApOwogICAgICAgIGlmICgkbWxlbiA+ICRtbGVuMCkgewogICAgICAgICAgICAkYyAuPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAgICAgICAgICRwbGFpbnRleHQsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkbm9uY2UsIDE2LCA4KSwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAkc3Via2V5CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDVfU3RhdGUoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIHNlbGY6Om9uZXRpbWVhdXRoX3BvbHkxMzA1X0tFWUJZVEVTCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkc3Via2V5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jazAgPSBudWxsOwogICAgICAgICAgICAkc3Via2V5ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjIC0gTUFDIHx8IGNpcGhlcnRleHQgKi8KICAgICAgICAkYyA9ICRzdGF0ZS0+ZmluaXNoKCkgLiAkYzsKICAgICAgICB1bnNldCgkc3RhdGUpOwoKICAgICAgICByZXR1cm4gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IGEgY2lwaGVydGV4dCBnZW5lcmF0ZWQgdmlhIHNlY3JldGJveCgpLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VjcmV0Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG1hYyAqLwogICAgICAgICRtYWMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfTUFDQllURVMKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGMgKi8KICAgICAgICAkYyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9NQUNCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2xlbiAqLwogICAgICAgICRjbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkYyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IU2Fsc2EyMDo6aHNhbHNhMjAoJG5vbmNlLCAka2V5KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjA6OnNhbHNhMjAoCiAgICAgICAgICAgIDY0LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKICAgICAgICAkdmVyaWZpZWQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfUG9seTEzMDU6Om9uZXRpbWVhdXRoX3ZlcmlmeSgKICAgICAgICAgICAgJG1hYywKICAgICAgICAgICAgJGMsCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJGJsb2NrMCwgMCwgMzIpCiAgICAgICAgKTsKICAgICAgICBpZiAoISR2ZXJpZmllZCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN1YmtleSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgICAgICRzdWJrZXkgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgTUFDJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG0gLSBEZWNyeXB0ZWQgbWVzc2FnZSAqLwogICAgICAgICRtID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnhvclN0cmluZ3MoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJGJsb2NrMCwgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKSwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkYywgMCwgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKQogICAgICAgICk7CiAgICAgICAgaWYgKCRjbGVuID4gc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKSB7CiAgICAgICAgICAgIC8vIFdlIGhhZCBtb3JlIHRoYW4gMSBibG9jaywgc28gbGV0J3MgY29udGludWUgdG8gZGVjcnlwdCB0aGUgcmVzdC4KICAgICAgICAgICAgJG0gLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjA6OnNhbHNhMjBfeG9yX2ljKAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgICAgICAgICAkYywKICAgICAgICAgICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRzdWJrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRtOwogICAgfQoKICAgIC8qKgogICAgICogWENoYUNoYTIwLVBvbHkxMzA1IGF1dGhlbnRpY2F0ZWQgc3ltbWV0cmljLWtleSBlbmNyeXB0aW9uLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IQ2hhQ2hhMjA6OmhDaGFDaGEyMCgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkbm9uY2UsIDAsIDE2KSwKICAgICAgICAgICAgJGtleQogICAgICAgICk7CiAgICAgICAgJG5vbmNlTGFzdCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IHN0cl9yZXBlYXQoIlx4MDAiLCAzMik7CgogICAgICAgIC8qKiBAdmFyIGludCAkbWxlbiAtIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IG1lc3NhZ2UgKi8KICAgICAgICAkbWxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdHJsZW4oJHBsYWludGV4dCk7CiAgICAgICAgJG1sZW4wID0gJG1sZW47CiAgICAgICAgaWYgKCRtbGVuMCA+IDY0IC0gc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUykgewogICAgICAgICAgICAkbWxlbjAgPSA2NCAtIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVM7CiAgICAgICAgfQogICAgICAgICRibG9jazAgLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkcGxhaW50ZXh0LCAwLCAkbWxlbjApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJsb2NrMCAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OnN0cmVhbVhvckljKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICAkbm9uY2VMYXN0LAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgKTsKICAgICAgICBpZiAoJG1sZW4gPiAkbWxlbjApIHsKICAgICAgICAgICAgJGMgLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0NoYUNoYTIwOjpzdHJlYW1Yb3JJYygKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgJG5vbmNlTGFzdCwKICAgICAgICAgICAgICAgICRzdWJrZXksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3RvcmU2NF9sZSgxKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlKAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBzZWxmOjpvbmV0aW1lYXV0aF9wb2x5MTMwNV9LRVlCWVRFUwogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkYmxvY2swKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN1YmtleSk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2swID0gbnVsbDsKICAgICAgICAgICAgJHN1YmtleSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkYyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYyAtIE1BQyB8fCBjaXBoZXJ0ZXh0ICovCiAgICAgICAgJGMgPSAkc3RhdGUtPmZpbmlzaCgpIC4gJGM7CiAgICAgICAgdW5zZXQoJHN0YXRlKTsKCiAgICAgICAgcmV0dXJuICRjOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBhIGNpcGhlcnRleHQgZ2VuZXJhdGVkIHZpYSBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRtYWMgKi8KICAgICAgICAkbWFjID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9NQUNCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYyAqLwogICAgICAgICRjID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9NQUNCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2xlbiAqLwogICAgICAgICRjbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN0cmxlbigkYyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IQ2hhQ2hhMjA6OmhjaGFjaGEyMCgkbm9uY2UsICRrZXkpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJsb2NrMCAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ2hhQ2hhMjA6OnN0cmVhbSgKICAgICAgICAgICAgNjQsCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICRzdWJrZXkKICAgICAgICApOwogICAgICAgICR2ZXJpZmllZCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNTo6b25ldGltZWF1dGhfdmVyaWZ5KAogICAgICAgICAgICAkbWFjLAogICAgICAgICAgICAkYywKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkYmxvY2swLCAwLCAzMikKICAgICAgICApOwoKICAgICAgICBpZiAoISR2ZXJpZmllZCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN1YmtleSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgICAgICRzdWJrZXkgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgTUFDJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG0gLSBEZWNyeXB0ZWQgbWVzc2FnZSAqLwogICAgICAgICRtID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnhvclN0cmluZ3MoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJGJsb2NrMCwgc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUyksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJGMsIDAsIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVMpCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRjbGVuID4gc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUykgewogICAgICAgICAgICAvLyBXZSBoYWQgbW9yZSB0aGFuIDEgYmxvY2ssIHNvIGxldCdzIGNvbnRpbnVlIHRvIGRlY3J5cHQgdGhlIHJlc3QuCiAgICAgICAgICAgICRtIC49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DaGFDaGEyMDo6c3RyZWFtWG9ySWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAgICAgICAgICRjLAogICAgICAgICAgICAgICAgICAgIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVMKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAgICAgKHN0cmluZykgJHN1YmtleSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFjaGVkIEVkMjU1MTkgc2lnbmF0dXJlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OnNpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRhY2hlZCBFZDI1NTE5IHNpZ25hdHVyZS4gKFJldHVybnMgYSBzaWduZWQgbWVzc2FnZS4pCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbigkbWVzc2FnZSwgJHNrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2lnbigkbWVzc2FnZSwgJHNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIE9wZW5zIGEgc2lnbmVkIG1lc3NhZ2UuIElmIHZhbGlkLCByZXR1cm5zIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduZWRNZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25fb3Blbigkc2lnbmVkTWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2lnbl9vcGVuKCRzaWduZWRNZXNzYWdlLCAkcGspOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZ5IGEgZGV0YWNoZWQgc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gbWVzc2FnZSBhbmQgcHVibGljIGtleS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6dmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRtZXNzYWdlLCAkcGspOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/Crypto32.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzInLCBmYWxzZSkpIHsKICAgIHJldHVybjsKfQoKLyoqCiAqIENsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvCiAqCiAqIEFUVEVOVElPTiEKICoKICogSWYgeW91IGFyZSB1c2luZyB0aGlzIGxpYnJhcnksIHlvdSBzaG91bGQgYmUgdXNpbmcKICogUGFyYWdvbklFX1NvZGl1bV9Db21wYXQgaW4geW91ciBjb2RlLCBub3QgdGhpcyBjbGFzcy4KICovCmFic3RyYWN0IGNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzIKewogICAgY29uc3QgYWVhZF9jaGFjaGEyMHBvbHkxMzA1X0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfTlNFQ0JZVEVTID0gMDsKICAgIGNvbnN0IGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9OUFVCQllURVMgPSA4OwogICAgY29uc3QgYWVhZF9jaGFjaGEyMHBvbHkxMzA1X0FCWVRFUyA9IDE2OwoKICAgIGNvbnN0IGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9JRVRGX0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfSUVURl9OU0VDQllURVMgPSAwOwogICAgY29uc3QgYWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfTlBVQkJZVEVTID0gMTI7CiAgICBjb25zdCBhZWFkX2NoYWNoYTIwcG9seTEzMDVfSUVURl9BQllURVMgPSAxNjsKCiAgICBjb25zdCBhZWFkX3hjaGFjaGEyMHBvbHkxMzA1X0lFVEZfS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IGFlYWRfeGNoYWNoYTIwcG9seTEzMDVfSUVURl9OU0VDQllURVMgPSAwOwogICAgY29uc3QgYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9JRVRGX05QVUJCWVRFUyA9IDI0OwogICAgY29uc3QgYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9JRVRGX0FCWVRFUyA9IDE2OwoKICAgIGNvbnN0IGJveF9jdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNV9TRUVEQllURVMgPSAzMjsKICAgIGNvbnN0IGJveF9jdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNV9QVUJMSUNLRVlCWVRFUyA9IDMyOwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X1NFQ1JFVEtFWUJZVEVTID0gMzI7CiAgICBjb25zdCBib3hfY3VydmUyNTUxOXhzYWxzYTIwcG9seTEzMDVfQkVGT1JFTk1CWVRFUyA9IDMyOwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X05PTkNFQllURVMgPSAyNDsKICAgIGNvbnN0IGJveF9jdXJ2ZTI1NTE5eHNhbHNhMjBwb2x5MTMwNV9NQUNCWVRFUyA9IDE2OwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X0JPWFpFUk9CWVRFUyA9IDE2OwogICAgY29uc3QgYm94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X1pFUk9CWVRFUyA9IDMyOwoKICAgIGNvbnN0IG9uZXRpbWVhdXRoX3BvbHkxMzA1X0JZVEVTID0gMTY7CiAgICBjb25zdCBvbmV0aW1lYXV0aF9wb2x5MTMwNV9LRVlCWVRFUyA9IDMyOwoKICAgIGNvbnN0IHNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X0tFWUJZVEVTID0gMzI7CiAgICBjb25zdCBzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9OT05DRUJZVEVTID0gMjQ7CiAgICBjb25zdCBzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9NQUNCWVRFUyA9IDE2OwogICAgY29uc3Qgc2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfQk9YWkVST0JZVEVTID0gMTY7CiAgICBjb25zdCBzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMgPSAzMjsKCiAgICBjb25zdCBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfS0VZQllURVMgPSAzMjsKICAgIGNvbnN0IHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9OT05DRUJZVEVTID0gMjQ7CiAgICBjb25zdCBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfTUFDQllURVMgPSAxNjsKICAgIGNvbnN0IHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9CT1haRVJPQllURVMgPSAxNjsKICAgIGNvbnN0IHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVMgPSAzMjsKCiAgICBjb25zdCBzdHJlYW1fc2Fsc2EyMF9LRVlCWVRFUyA9IDMyOwoKICAgIC8qKgogICAgICogQUVBRCBEZWNyeXB0aW9uIHdpdGggQ2hhQ2hhMjAtUG9seTEzMDUKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgKICAgICAgICAkbWVzc2FnZSA9ICcnLAogICAgICAgICRhZCA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRsZW4gLSBMZW5ndGggb2YgbWVzc2FnZSAoY2lwaGVydGV4dCArIE1BQykgKi8KICAgICAgICAkbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RybGVuKCRtZXNzYWdlKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICAkY2xlbiAtIExlbmd0aCBvZiBjaXBoZXJ0ZXh0ICovCiAgICAgICAgJGNsZW4gPSAkbGVuIC0gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0FCWVRFUzsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRhZGxlbiAtIExlbmd0aCBvZiBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGFkKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRtYWMgLSBNZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgKi8KICAgICAgICAkbWFjID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgJGNsZW4sCiAgICAgICAgICAgIHNlbGY6OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9BQllURVMKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGNpcGhlcnRleHQgLSBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UgKHNhbnMgTUFDKSAqLwogICAgICAgICRjaXBoZXJ0ZXh0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRtZXNzYWdlLCAwLCAkY2xlbik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyBUaGUgZmlyc3QgYmxvY2sgb2YgdGhlIGNoYWNoYTIwIGtleXN0cmVhbSwgdXNlZCBhcyBhIHBvbHkxMzA1IGtleSAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMDo6c3RyZWFtKAogICAgICAgICAgICAzMiwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKCiAgICAgICAgLyogUmVjYWxjdWxhdGUgdGhlIFBvbHkxMzA1IGF1dGhlbnRpY2F0aW9uIHRhZyAoTUFDKTogKi8KICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDVfU3RhdGUoJGJsb2NrMCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGJsb2NrMCk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2swID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGFkKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKCRhZGxlbikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjaXBoZXJ0ZXh0KTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKCRjbGVuKSk7CiAgICAgICAgJGNvbXB1dGVkX21hYyA9ICRzdGF0ZS0+ZmluaXNoKCk7CgogICAgICAgIC8qIENvbXBhcmUgdGhlIGdpdmVuIE1BQyB3aXRoIHRoZSByZWNhbGN1bGF0ZWQgTUFDOiAqLwogICAgICAgIGlmICghUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6dmVyaWZ5XzE2KCRjb21wdXRlZF9tYWMsICRtYWMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgTUFDJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBIZXJlLCB3ZSBrbm93IHRoYXQgdGhlIE1BQyBpcyB2YWxpZCwgc28gd2UgZGVjcnlwdCBhbmQgcmV0dXJuIHRoZSBwbGFpbnRleHQKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjA6OnN0cmVhbVhvckljKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFFQUQgRW5jcnlwdGlvbiB3aXRoIENoYUNoYTIwLVBvbHkxMzA1CiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoCiAgICAgICAgJG1lc3NhZ2UgPSAnJywKICAgICAgICAkYWQgPSAnJywKICAgICAgICAkbm9uY2UgPSAnJywKICAgICAgICAka2V5ID0gJycKICAgICkgewogICAgICAgIC8qKiBAdmFyIGludCAkbGVuIC0gTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgbWVzc2FnZSAqLwogICAgICAgICRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGFkbGVuIC0gTGVuZ3RoIG9mIHRoZSBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGFkKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nIFRoZSBmaXJzdCBibG9jayBvZiB0aGUgY2hhY2hhMjAga2V5c3RyZWFtLCB1c2VkIGFzIGEgcG9seTEzMDUga2V5ICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwOjpzdHJlYW0oCiAgICAgICAgICAgIDMyLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSgkYmxvY2swKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkYmxvY2swKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jazAgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjaXBoZXJ0ZXh0IC0gUmF3IGVuY3J5cHRlZCBkYXRhICovCiAgICAgICAgJGNpcGhlcnRleHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMDo6c3RyZWFtWG9ySWMoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoMSkKICAgICAgICApOwoKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkYWQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoJGFkbGVuKSk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNpcGhlcnRleHQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoJGxlbikpOwogICAgICAgIHJldHVybiAkY2lwaGVydGV4dCAuICRzdGF0ZS0+ZmluaXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIERlY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNSwgSUVURiBtb2RlICg5Ni1iaXQgbm9uY2UpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgKICAgICAgICAkbWVzc2FnZSA9ICcnLAogICAgICAgICRhZCA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgLyoqIEB2YXIgaW50ICRhZGxlbiAtIExlbmd0aCBvZiBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGFkKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRsZW4gLSBMZW5ndGggb2YgbWVzc2FnZSAoY2lwaGVydGV4dCArIE1BQykgKi8KICAgICAgICAkbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RybGVuKCRtZXNzYWdlKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICAkY2xlbiAtIExlbmd0aCBvZiBjaXBoZXJ0ZXh0ICovCiAgICAgICAgJGNsZW4gPSAkbGVuIC0gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfQUJZVEVTOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgVGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBjaGFjaGEyMCBrZXlzdHJlYW0sIHVzZWQgYXMgYSBwb2x5MTMwNSBrZXkgKi8KICAgICAgICAkYmxvY2swID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjA6OmlldGZTdHJlYW0oCiAgICAgICAgICAgIDMyLAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG1hYyAtIE1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSAqLwogICAgICAgICRtYWMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRtZXNzYWdlLAogICAgICAgICAgICAkbGVuIC0gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X0lFVEZfQUJZVEVTLAogICAgICAgICAgICBzZWxmOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfSUVURl9BQllURVMKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGNpcGhlcnRleHQgLSBUaGUgZW5jcnlwdGVkIG1lc3NhZ2UgKHNhbnMgTUFDKSAqLwogICAgICAgICRjaXBoZXJ0ZXh0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgJGxlbiAtIHNlbGY6OmFlYWRfY2hhY2hhMjBwb2x5MTMwNV9JRVRGX0FCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qIFJlY2FsY3VsYXRlIHRoZSBQb2x5MTMwNSBhdXRoZW50aWNhdGlvbiB0YWcgKE1BQyk6ICovCiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1X1N0YXRlKCRibG9jazApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJGJsb2NrMCA9IG51bGw7CiAgICAgICAgfQogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRhZCk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoc3RyX3JlcGVhdCgiXHgwMCIsICgoMHgxMCAtICRhZGxlbikgJiAweGYpKSk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNpcGhlcnRleHQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKHN0cl9yZXBlYXQoIlx4MDAiLCAoMHgxMCAtICRjbGVuKSAmIDB4ZikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoJGFkbGVuKSk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RvcmU2NF9sZSgkY2xlbikpOwogICAgICAgICRjb21wdXRlZF9tYWMgPSAkc3RhdGUtPmZpbmlzaCgpOwoKICAgICAgICAvKiBDb21wYXJlIHRoZSBnaXZlbiBNQUMgd2l0aCB0aGUgcmVjYWxjdWxhdGVkIE1BQzogKi8KICAgICAgICBpZiAoIVBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnZlcmlmeV8xNigkY29tcHV0ZWRfbWFjLCAkbWFjKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIE1BQycpOwogICAgICAgIH0KCiAgICAgICAgLy8gSGVyZSwgd2Uga25vdyB0aGF0IHRoZSBNQUMgaXMgdmFsaWQsIHNvIHdlIGRlY3J5cHQgYW5kIHJldHVybiB0aGUgcGxhaW50ZXh0CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwOjppZXRmU3RyZWFtWG9ySWMoCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoMSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQUVBRCBFbmNyeXB0aW9uIHdpdGggQ2hhQ2hhMjAtUG9seTEzMDUsIElFVEYgbW9kZSAoOTYtYml0IG5vbmNlKQogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQoCiAgICAgICAgJG1lc3NhZ2UgPSAnJywKICAgICAgICAkYWQgPSAnJywKICAgICAgICAkbm9uY2UgPSAnJywKICAgICAgICAka2V5ID0gJycKICAgICkgewogICAgICAgIC8qKiBAdmFyIGludCAkbGVuIC0gTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgbWVzc2FnZSAqLwogICAgICAgICRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJG1lc3NhZ2UpOwoKICAgICAgICAvKiogQHZhciBpbnQgJGFkbGVuIC0gTGVuZ3RoIG9mIHRoZSBhc3NvY2lhdGVkIGRhdGEgKi8KICAgICAgICAkYWRsZW4gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGFkKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nIFRoZSBmaXJzdCBibG9jayBvZiB0aGUgY2hhY2hhMjAga2V5c3RyZWFtLCB1c2VkIGFzIGEgcG9seTEzMDUga2V5ICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwOjppZXRmU3RyZWFtKAogICAgICAgICAgICAzMiwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDVfU3RhdGUoJGJsb2NrMCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGJsb2NrMCk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2swID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCAtIFJhdyBlbmNyeXB0ZWQgZGF0YSAqLwogICAgICAgICRjaXBoZXJ0ZXh0ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjA6OmlldGZTdHJlYW1Yb3JJYygKICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgJGtleSwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RvcmU2NF9sZSgxKQogICAgICAgICk7CgogICAgICAgICRzdGF0ZS0+dXBkYXRlKCRhZCk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoc3RyX3JlcGVhdCgiXHgwMCIsICgoMHgxMCAtICRhZGxlbikgJiAweGYpKSk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNpcGhlcnRleHQpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKHN0cl9yZXBlYXQoIlx4MDAiLCAoKDB4MTAgLSAkbGVuKSAmIDB4ZikpKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZShQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKCRhZGxlbikpOwogICAgICAgICRzdGF0ZS0+dXBkYXRlKFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0b3JlNjRfbGUoJGxlbikpOwogICAgICAgIHJldHVybiAkY2lwaGVydGV4dCAuICRzdGF0ZS0+ZmluaXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBRUFEIERlY3J5cHRpb24gd2l0aCBDaGFDaGEyMC1Qb2x5MTMwNSwgSUVURiBtb2RlICg5Ni1iaXQgbm9uY2UpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoCiAgICAgICAgJG1lc3NhZ2UgPSAnJywKICAgICAgICAkYWQgPSAnJywKICAgICAgICAkbm9uY2UgPSAnJywKICAgICAgICAka2V5ID0gJycKICAgICkgewogICAgICAgICRzdWJrZXkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IQ2hhQ2hhMjA6OmhDaGFDaGEyMCgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRub25jZSwgMCwgMTYpLAogICAgICAgICAgICAka2V5CiAgICAgICAgKTsKICAgICAgICAkbm9uY2VMYXN0ID0gIlx4MDBceDAwXHgwMFx4MDAiIC4KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpOwoKICAgICAgICByZXR1cm4gc2VsZjo6YWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCgkbWVzc2FnZSwgJGFkLCAkbm9uY2VMYXN0LCAkc3Via2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEFFQUQgRW5jcnlwdGlvbiB3aXRoIENoYUNoYTIwLVBvbHkxMzA1LCBJRVRGIG1vZGUgKDk2LWJpdCBub25jZSkKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkYWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgKICAgICAgICAkbWVzc2FnZSA9ICcnLAogICAgICAgICRhZCA9ICcnLAogICAgICAgICRub25jZSA9ICcnLAogICAgICAgICRrZXkgPSAnJwogICAgKSB7CiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0hDaGFDaGEyMDo6aENoYUNoYTIwKAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAwLCAxNiksCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgICAgICRub25jZUxhc3QgPSAiXHgwMFx4MDBceDAwXHgwMCIgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCk7CgogICAgICAgIHJldHVybiBzZWxmOjphZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KCRtZXNzYWdlLCAkYWQsICRub25jZUxhc3QsICRzdWJrZXkpOwogICAgfQoKICAgIC8qKgogICAgICogSE1BQy1TSEEtNTEyLTI1NiAoYS5rLmEuIHRoZSBsZWZ0bW9zdCAyNTYgYml0cyBvZiBITUFDLVNIQS01MTIpCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0aCgkbWVzc2FnZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICBoYXNoX2htYWMoJ3NoYTUxMicsICRtZXNzYWdlLCAka2V5LCB0cnVlKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMzIKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogSE1BQy1TSEEtNTEyLTI1NiB2YWxpZGF0aW9uLiBDb25zdGFudC10aW1lIHZpYSBoYXNoX2VxdWFscygpLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYWMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdXRoX3ZlcmlmeSgkbWFjLCAkbWVzc2FnZSwgJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aGFzaEVxdWFscygKICAgICAgICAgICAgJG1hYywKICAgICAgICAgICAgc2VsZjo6YXV0aCgkbWVzc2FnZSwgJGtleSkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogWDI1NTE5IGtleSBleGNoYW5nZSBmb2xsb3dlZCBieSBYU2Fsc2EyMFBvbHkxMzA1IHN5bW1ldHJpYyBlbmNyeXB0aW9uCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3goJHBsYWludGV4dCwgJG5vbmNlLCAka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6c2VjcmV0Ym94KAogICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgIHNlbGY6OmJveF9iZWZvcmVubSgKICAgICAgICAgICAgICAgIHNlbGY6OmJveF9zZWNyZXRrZXkoJGtleXBhaXIpLAogICAgICAgICAgICAgICAgc2VsZjo6Ym94X3B1YmxpY2tleSgka2V5cGFpcikKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBYMjU1MTktWFNhbHNhMjAtUG9seTEzMDUgd2l0aCBvbmUgZXBoZW1lcmFsIFgyNTUxOSBrZXlwYWlyLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfc2VhbCgkbWVzc2FnZSwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGVwaGVtZXJhbEtleXBhaXIgKi8KICAgICAgICAkZXBoZW1lcmFsS2V5cGFpciA9IHNlbGY6OmJveF9rZXlwYWlyKCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkZXBoZW1lcmFsU0sgKi8KICAgICAgICAkZXBoZW1lcmFsU0sgPSBzZWxmOjpib3hfc2VjcmV0a2V5KCRlcGhlbWVyYWxLZXlwYWlyKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRlcGhlbWVyYWxQSyAqLwogICAgICAgICRlcGhlbWVyYWxQSyA9IHNlbGY6OmJveF9wdWJsaWNrZXkoJGVwaGVtZXJhbEtleXBhaXIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG5vbmNlICovCiAgICAgICAgJG5vbmNlID0gc2VsZjo6Z2VuZXJpY2hhc2goCiAgICAgICAgICAgICRlcGhlbWVyYWxQSyAuICRwdWJsaWNLZXksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAyNAogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAka2V5cGFpciAtIFRoZSBjb21iaW5lZCBrZXlwYWlyIHVzZWQgaW4gY3J5cHRvX2JveCgpICovCiAgICAgICAgJGtleXBhaXIgPSBzZWxmOjpib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRlcGhlbWVyYWxTSywgJHB1YmxpY0tleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCBDaXBoZXJ0ZXh0ICsgTUFDIGZyb20gY3J5cHRvX2JveCAqLwogICAgICAgICRjaXBoZXJ0ZXh0ID0gc2VsZjo6Ym94KCRtZXNzYWdlLCAkbm9uY2UsICRrZXlwYWlyKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkZXBoZW1lcmFsS2V5cGFpcik7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRlcGhlbWVyYWxTSyk7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRub25jZSk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkZXBoZW1lcmFsS2V5cGFpciA9IG51bGw7CiAgICAgICAgICAgICRlcGhlbWVyYWxTSyA9IG51bGw7CiAgICAgICAgICAgICRub25jZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZXBoZW1lcmFsUEsgLiAkY2lwaGVydGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIE9wZW5zIGEgbWVzc2FnZSBlbmNyeXB0ZWQgdmlhIGJveF9zZWFsKCkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfc2VhbF9vcGVuKCRtZXNzYWdlLCAka2V5cGFpcikKICAgIHsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGVwaGVtZXJhbFBLICovCiAgICAgICAgJGVwaGVtZXJhbFBLID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRtZXNzYWdlLCAwLCAzMik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkY2lwaGVydGV4dCAoY2lwaGVydGV4dCArIE1BQykgKi8KICAgICAgICAkY2lwaGVydGV4dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkbWVzc2FnZSwgMzIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHNlY3JldEtleSAqLwogICAgICAgICRzZWNyZXRLZXkgPSBzZWxmOjpib3hfc2VjcmV0a2V5KCRrZXlwYWlyKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRwdWJsaWNLZXkgKi8KICAgICAgICAkcHVibGljS2V5ID0gc2VsZjo6Ym94X3B1YmxpY2tleSgka2V5cGFpcik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbm9uY2UgKi8KICAgICAgICAkbm9uY2UgPSBzZWxmOjpnZW5lcmljaGFzaCgKICAgICAgICAgICAgJGVwaGVtZXJhbFBLIC4gJHB1YmxpY0tleSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIDI0CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRrZXlwYWlyICovCiAgICAgICAgJGtleXBhaXIgPSBzZWxmOjpib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzZWNyZXRLZXksICRlcGhlbWVyYWxQSyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbSAqLwogICAgICAgICRtID0gc2VsZjo6Ym94X29wZW4oJGNpcGhlcnRleHQsICRub25jZSwgJGtleXBhaXIpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRzZWNyZXRLZXkpOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkZXBoZW1lcmFsUEspOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkbm9uY2UpOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJHNlY3JldEtleSA9IG51bGw7CiAgICAgICAgICAgICRlcGhlbWVyYWxQSyA9IG51bGw7CiAgICAgICAgICAgICRub25jZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbTsKICAgIH0KCiAgICAvKioKICAgICAqIFVzZWQgYnkgY3J5cHRvX2JveCgpIHRvIGdldCB0aGUgY3J5cHRvX3NlY3JldGJveCgpIGtleS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBrCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X2JlZm9yZW5tKCRzaywgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IU2Fsc2EyMDo6aHNhbHNhMjAoCiAgICAgICAgICAgIHN0cl9yZXBlYXQoIlx4MDAiLCAxNiksCiAgICAgICAgICAgIHNlbGY6OnNjYWxhcm11bHQoJHNrLCAkcGspCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9rZXlwYWlyKCkKICAgIHsKICAgICAgICAkc0tleSA9IHJhbmRvbV9ieXRlcygzMik7CiAgICAgICAgJHBLZXkgPSBzZWxmOjpzY2FsYXJtdWx0X2Jhc2UoJHNLZXkpOwogICAgICAgIHJldHVybiAkc0tleSAuICRwS2V5OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VlZAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9zZWVkX2tleXBhaXIoJHNlZWQpCiAgICB7CiAgICAgICAgJHNLZXkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgIGhhc2goJ3NoYTUxMicsICRzZWVkLCB0cnVlKSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMzIKICAgICAgICApOwogICAgICAgICRwS2V5ID0gc2VsZjo6c2NhbGFybXVsdF9iYXNlKCRzS2V5KTsKICAgICAgICByZXR1cm4gJHNLZXkgLiAkcEtleTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzS2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwS2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KCRzS2V5LCAkcEtleSkKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRzS2V5LCAwLCAzMikgLgogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJHBLZXksIDAsIDMyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBSYW5nZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfc2VjcmV0a2V5KCRrZXlwYWlyKQogICAgewogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGtleXBhaXIpICE9PSA2NCkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTXVzdCBiZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMgYnl0ZXMgbG9uZy4nCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJGtleXBhaXIsIDAsIDMyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBSYW5nZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfcHVibGlja2V5KCRrZXlwYWlyKQogICAgewogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJGtleXBhaXIpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ011c3QgYmUgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfS0VZUEFJUkJZVEVTIGJ5dGVzIGxvbmcuJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRrZXlwYWlyLCAzMiwgMzIpOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNLZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KCRzS2V5KQogICAgewogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdHJsZW4oJHNLZXkpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnTXVzdCBiZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUyBieXRlcyBsb25nLicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OnNjYWxhcm11bHRfYmFzZSgkc0tleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IGEgbWVzc2FnZSBlbmNyeXB0ZWQgd2l0aCBib3goKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfb3BlbigkY2lwaGVydGV4dCwgJG5vbmNlLCAka2V5cGFpcikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6c2VjcmV0Ym94X29wZW4oCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgIHNlbGY6OmJveF9iZWZvcmVubSgKICAgICAgICAgICAgICAgIHNlbGY6OmJveF9zZWNyZXRrZXkoJGtleXBhaXIpLAogICAgICAgICAgICAgICAgc2VsZjo6Ym94X3B1YmxpY2tleSgka2V5cGFpcikKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgYSBCTEFLRTJiIGhhc2guCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAka2V5CiAgICAgKiBAcGFyYW0gaW50ICRvdXRsZW4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmljaGFzaCgkbWVzc2FnZSwgJGtleSA9ICcnLCAkb3V0bGVuID0gMzIpCiAgICB7CiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6JGl2IGlzIGluaXRpYWxpemVkCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6cHNldWRvQ29uc3RydWN0b3IoKTsKCiAgICAgICAgJGsgPSBudWxsOwogICAgICAgIGlmICghZW1wdHkoJGtleSkpIHsKICAgICAgICAgICAgLyoqIEB2YXIgU3BsRml4ZWRBcnJheSAkayAqLwogICAgICAgICAgICAkayA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OnN0cmluZ1RvU3BsRml4ZWRBcnJheSgka2V5KTsKICAgICAgICAgICAgaWYgKCRrLT5jb3VudCgpID4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6S0VZQllURVMpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbignSW52YWxpZCBrZXkgc2l6ZScpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRpbiAqLwogICAgICAgICRpbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OnN0cmluZ1RvU3BsRml4ZWRBcnJheSgkbWVzc2FnZSk7CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGN0eCAqLwogICAgICAgICRjdHggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjppbml0KCRrLCAkb3V0bGVuKTsKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjp1cGRhdGUoJGN0eCwgJGluLCAkaW4tPmNvdW50KCkpOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRvdXQgKi8KICAgICAgICAkb3V0ID0gbmV3IFNwbEZpeGVkQXJyYXkoJG91dGxlbik7CiAgICAgICAgJG91dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OmZpbmlzaCgkY3R4LCAkb3V0KTsKCiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50LCBpbnQ+ICovCiAgICAgICAgJG91dEFycmF5ID0gJG91dC0+dG9BcnJheSgpOwogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjppbnRBcnJheVRvU3RyaW5nKCRvdXRBcnJheSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5hbGl6ZSBhIEJMQUtFMmIgaGFzaGluZyBjb250ZXh0LCByZXR1cm5pbmcgdGhlIGhhc2guCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGN0eAogICAgICogQHBhcmFtIGludCAkb3V0bGVuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJpY2hhc2hfZmluYWwoJGN0eCwgJG91dGxlbiA9IDMyKQogICAgewogICAgICAgIGlmICghaXNfc3RyaW5nKCRjdHgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnRleHQgbXVzdCBiZSBhIHN0cmluZycpOwogICAgICAgIH0KICAgICAgICAkb3V0ID0gbmV3IFNwbEZpeGVkQXJyYXkoJG91dGxlbik7CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGNvbnRleHQgKi8KICAgICAgICAkY29udGV4dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OnN0cmluZ1RvQ29udGV4dCgkY3R4KTsKCiAgICAgICAgLyoqIEB2YXIgU3BsRml4ZWRBcnJheSAkb3V0ICovCiAgICAgICAgJG91dCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OmZpbmlzaCgkY29udGV4dCwgJG91dCk7CgogICAgICAgIC8qKiBAdmFyIGFycmF5PGludCwgaW50PiAqLwogICAgICAgICRvdXRBcnJheSA9ICRvdXQtPnRvQXJyYXkoKTsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6aW50QXJyYXlUb1N0cmluZygkb3V0QXJyYXkpOwogICAgfQoKICAgIC8qKgogICAgICogSW5pdGlhbGl6ZSBhIGhhc2hpbmcgY29udGV4dCBmb3IgQkxBS0UyYi4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gaW50ICRvdXRwdXRMZW5ndGgKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFJhbmdlRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmljaGFzaF9pbml0KCRrZXkgPSAnJywgJG91dHB1dExlbmd0aCA9IDMyKQogICAgewogICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OiRpdiBpcyBpbml0aWFsaXplZAogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OnBzZXVkb0NvbnN0cnVjdG9yKCk7CgogICAgICAgICRrID0gbnVsbDsKICAgICAgICBpZiAoIWVtcHR5KCRrZXkpKSB7CiAgICAgICAgICAgICRrID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6c3RyaW5nVG9TcGxGaXhlZEFycmF5KCRrZXkpOwogICAgICAgICAgICBpZiAoJGstPmNvdW50KCkgPiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjpLRVlCWVRFUykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXhjZXB0aW9uKCdJbnZhbGlkIGtleSBzaXplJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGN0eCAqLwogICAgICAgICRjdHggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjppbml0KCRrLCAkb3V0cHV0TGVuZ3RoKTsKCiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0JMQUtFMmI6OmNvbnRleHRUb1N0cmluZygkY3R4KTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhIGhhc2hpbmcgY29udGV4dCBmb3IgQkxBS0UyYiB3aXRoICRtZXNzYWdlCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGN0eAogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlbmVyaWNoYXNoX3VwZGF0ZSgkY3R4LCAkbWVzc2FnZSkKICAgIHsKICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjokaXYgaXMgaW5pdGlhbGl6ZWQKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjpwc2V1ZG9Db25zdHJ1Y3RvcigpOwoKICAgICAgICAvKiogQHZhciBTcGxGaXhlZEFycmF5ICRjb250ZXh0ICovCiAgICAgICAgJGNvbnRleHQgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjpzdHJpbmdUb0NvbnRleHQoJGN0eCk7CgogICAgICAgIC8qKiBAdmFyIFNwbEZpeGVkQXJyYXkgJGluICovCiAgICAgICAgJGluID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6c3RyaW5nVG9TcGxGaXhlZEFycmF5KCRtZXNzYWdlKTsKCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQkxBS0UyYjo6dXBkYXRlKCRjb250ZXh0LCAkaW4sICRpbi0+Y291bnQoKSk7CgogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9CTEFLRTJiOjpjb250ZXh0VG9TdHJpbmcoJGNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogTGlic29kaXVtJ3MgY3J5cHRvX2t4KCkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG15X3NrCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aGVpcl9wawogICAgICogQHBhcmFtIHN0cmluZyAkY2xpZW50X3BrCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBrZXlFeGNoYW5nZSgkbXlfc2ssICR0aGVpcl9waywgJGNsaWVudF9waywgJHNlcnZlcl9waykKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Z2VuZXJpY2hhc2goCiAgICAgICAgICAgIHNlbGY6OnNjYWxhcm11bHQoJG15X3NrLCAkdGhlaXJfcGspIC4KICAgICAgICAgICAgJGNsaWVudF9wayAuCiAgICAgICAgICAgICRzZXJ2ZXJfcGsKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogRUNESCBvdmVyIEN1cnZlMjU1MTkKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc0tleQogICAgICogQHBhcmFtIHN0cmluZyAkcEtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzY2FsYXJtdWx0KCRzS2V5LCAkcEtleSkKICAgIHsKICAgICAgICAkcSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1gyNTUxOTo6Y3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9yZWYxMCgkc0tleSwgJHBLZXkpOwogICAgICAgIHNlbGY6OnNjYWxhcm11bHRfdGhyb3dfaWZfemVybygkcSk7CiAgICAgICAgcmV0dXJuICRxOwogICAgfQoKICAgIC8qKgogICAgICogRUNESCBvdmVyIEN1cnZlMjU1MTksIHVzaW5nIHRoZSBiYXNlcG9pbnQuCiAgICAgKiBVc2VkIHRvIGdldCBhIHNlY3JldCBrZXkgZnJvbSBhIHB1YmxpYyBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VjcmV0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNjYWxhcm11bHRfYmFzZSgkc2VjcmV0KQogICAgewogICAgICAgICRxID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfWDI1NTE5OjpjcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X3JlZjEwX2Jhc2UoJHNlY3JldCk7CiAgICAgICAgc2VsZjo6c2NhbGFybXVsdF90aHJvd19pZl96ZXJvKCRxKTsKICAgICAgICByZXR1cm4gJHE7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIHRocm93cyBhbiBFcnJvciBpZiBhIHplcm8gcHVibGljIGtleSB3YXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNjYWxhcm11bHRfdGhyb3dfaWZfemVybygkcSkKICAgIHsKICAgICAgICAkZCA9IDA7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgc2VsZjo6Ym94X2N1cnZlMjU1MTl4c2Fsc2EyMHBvbHkxMzA1X1NFQ1JFVEtFWUJZVEVTOyArKyRpKSB7CiAgICAgICAgICAgICRkIHw9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OmNoclRvSW50KCRxWyRpXSk7CiAgICAgICAgfQoKICAgICAgICAvKiBicmFuY2gtZnJlZSB2YXJpYW50IG9mID09PSAwICovCiAgICAgICAgaWYgKC0oMSAmICgoJGQgLSAxKSA+PiA4KSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignWmVybyBwdWJsaWMga2V5IGlzIG5vdCBhbGxvd2VkJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogWFNhbHNhMjAtUG9seTEzMDUgYXV0aGVudGljYXRlZCBzeW1tZXRyaWMta2V5IGVuY3J5cHRpb24uCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlY3JldGJveCgkcGxhaW50ZXh0LCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzdWJrZXkgKi8KICAgICAgICAkc3Via2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSFNhbHNhMjA6OmhzYWxzYTIwKCRub25jZSwgJGtleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IHN0cl9yZXBlYXQoIlx4MDAiLCAzMik7CgogICAgICAgIC8qKiBAdmFyIGludCAkbWxlbiAtIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IG1lc3NhZ2UgKi8KICAgICAgICAkbWxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkcGxhaW50ZXh0KTsKICAgICAgICAkbWxlbjAgPSAkbWxlbjsKICAgICAgICBpZiAoJG1sZW4wID4gNjQgLSBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMpIHsKICAgICAgICAgICAgJG1sZW4wID0gNjQgLSBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVM7CiAgICAgICAgfQogICAgICAgICRibG9jazAgLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRwbGFpbnRleHQsIDAsICRtbGVuMCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NhbHNhMjA6OnNhbHNhMjBfeG9yKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICRzdWJrZXkKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGMgKi8KICAgICAgICAkYyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgKTsKICAgICAgICBpZiAoJG1sZW4gPiAkbWxlbjApIHsKICAgICAgICAgICAgJGMgLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgJHN1YmtleQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkc3RhdGUgPSBuZXcgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfUG9seTEzMDVfU3RhdGUoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgICAgICRibG9jazAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgc2VsZjo6b25ldGltZWF1dGhfcG9seTEzMDVfS0VZQllURVMKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGJsb2NrMCk7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRzdWJrZXkpOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgJGJsb2NrMCA9IG51bGw7CiAgICAgICAgICAgICRzdWJrZXkgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGMpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGMgLSBNQUMgfHwgY2lwaGVydGV4dCAqLwogICAgICAgICRjID0gJHN0YXRlLT5maW5pc2goKSAuICRjOwogICAgICAgIHVuc2V0KCRzdGF0ZSk7CgogICAgICAgIHJldHVybiAkYzsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHQgYSBjaXBoZXJ0ZXh0IGdlbmVyYXRlZCB2aWEgc2VjcmV0Ym94KCkuCiAgICAgKgogICAgICogQGludGVybmFsIERvIG5vdCB1c2UgdGhpcyBkaXJlY3RseS4gVXNlIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3hfb3BlbigkY2lwaGVydGV4dCwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbWFjICovCiAgICAgICAgJG1hYyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgJGNpcGhlcnRleHQsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIHNlbGY6OnNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X01BQ0JZVEVTCiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9NQUNCWVRFUwogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIGludCAkY2xlbiAqLwogICAgICAgICRjbGVuID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3RybGVuKCRjKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzdWJrZXkgKi8KICAgICAgICAkc3Via2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSFNhbHNhMjA6OmhzYWxzYTIwKCRub25jZSwgJGtleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1NhbHNhMjA6OnNhbHNhMjAoCiAgICAgICAgICAgIDY0LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICRzdWJrZXkKICAgICAgICApOwogICAgICAgICR2ZXJpZmllZCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1OjpvbmV0aW1lYXV0aF92ZXJpZnkoCiAgICAgICAgICAgICRtYWMsCiAgICAgICAgICAgICRjLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJGJsb2NrMCwgMCwgMzIpCiAgICAgICAgKTsKICAgICAgICBpZiAoISR2ZXJpZmllZCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN1YmtleSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgICAgICRzdWJrZXkgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgTUFDJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG0gLSBEZWNyeXB0ZWQgbWVzc2FnZSAqLwogICAgICAgICRtID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6eG9yU3RyaW5ncygKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRibG9jazAsIHNlbGY6OnNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X1pFUk9CWVRFUyksCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkYywgMCwgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKQogICAgICAgICk7CiAgICAgICAgaWYgKCRjbGVuID4gc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTKSB7CiAgICAgICAgICAgIC8vIFdlIGhhZCBtb3JlIHRoYW4gMSBibG9jaywgc28gbGV0J3MgY29udGludWUgdG8gZGVjcnlwdCB0aGUgcmVzdC4KICAgICAgICAgICAgJG0gLj0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgJGMsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRzdWJrZXkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRtOwogICAgfQoKICAgIC8qKgogICAgICogWENoYUNoYTIwLVBvbHkxMzA1IGF1dGhlbnRpY2F0ZWQgc3ltbWV0cmljLWtleSBlbmNyeXB0aW9uLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoJHBsYWludGV4dCwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0hDaGFDaGEyMDo6aENoYUNoYTIwKAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAwLCAxNiksCiAgICAgICAgICAgICRrZXkKICAgICAgICApOwogICAgICAgICRub25jZUxhc3QgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IHN0cl9yZXBlYXQoIlx4MDAiLCAzMik7CgogICAgICAgIC8qKiBAdmFyIGludCAkbWxlbiAtIExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IG1lc3NhZ2UgKi8KICAgICAgICAkbWxlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkcGxhaW50ZXh0KTsKICAgICAgICAkbWxlbjAgPSAkbWxlbjsKICAgICAgICBpZiAoJG1sZW4wID4gNjQgLSBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTKSB7CiAgICAgICAgICAgICRtbGVuMCA9IDY0IC0gc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUzsKICAgICAgICB9CiAgICAgICAgJGJsb2NrMCAuPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJHBsYWludGV4dCwgMCwgJG1sZW4wKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ2hhQ2hhMjA6OnN0cmVhbVhvckljKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICAkbm9uY2VMYXN0LAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRibG9jazAsCiAgICAgICAgICAgIHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVMKICAgICAgICApOwogICAgICAgIGlmICgkbWxlbiA+ICRtbGVuMCkgewogICAgICAgICAgICAkYyAuPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMDo6c3RyZWFtWG9ySWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgJHBsYWludGV4dCwKICAgICAgICAgICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgJG5vbmNlTGFzdCwKICAgICAgICAgICAgICAgICRzdWJrZXksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBzZWxmOjpvbmV0aW1lYXV0aF9wb2x5MTMwNV9LRVlCWVRFUwogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkYmxvY2swKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJHN1YmtleSk7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYmxvY2swID0gbnVsbDsKICAgICAgICAgICAgJHN1YmtleSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkYyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYyAtIE1BQyB8fCBjaXBoZXJ0ZXh0ICovCiAgICAgICAgJGMgPSAkc3RhdGUtPmZpbmlzaCgpIC4gJGM7CiAgICAgICAgdW5zZXQoJHN0YXRlKTsKCiAgICAgICAgcmV0dXJuICRjOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBhIGNpcGhlcnRleHQgZ2VuZXJhdGVkIHZpYSBzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDUoKS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9vcGVuKCRjaXBoZXJ0ZXh0LCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRtYWMgKi8KICAgICAgICAkbWFjID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X01BQ0JZVEVTCiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICRjaXBoZXJ0ZXh0LAogICAgICAgICAgICBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfTUFDQllURVMKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGNsZW4gKi8KICAgICAgICAkY2xlbiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN0cmxlbigkYyk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0hDaGFDaGEyMDo6aGNoYWNoYTIwKCRub25jZSwgJGtleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYmxvY2swICovCiAgICAgICAgJGJsb2NrMCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0NoYUNoYTIwOjpzdHJlYW0oCiAgICAgICAgICAgIDY0LAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICRzdWJrZXkKICAgICAgICApOwogICAgICAgICR2ZXJpZmllZCA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1BvbHkxMzA1OjpvbmV0aW1lYXV0aF92ZXJpZnkoCiAgICAgICAgICAgICRtYWMsCiAgICAgICAgICAgICRjLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoJGJsb2NrMCwgMCwgMzIpCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCEkdmVyaWZpZWQpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRzdWJrZXkpOwogICAgICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICAgICAkc3Via2V5ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIE1BQycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRtIC0gRGVjcnlwdGVkIG1lc3NhZ2UgKi8KICAgICAgICAkbSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnhvclN0cmluZ3MoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkYmxvY2swLCBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTKSwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRjLCAwLCBzZWxmOjpzZWNyZXRib3hfeGNoYWNoYTIwcG9seTEzMDVfWkVST0JZVEVTKQogICAgICAgICk7CgogICAgICAgIGlmICgkY2xlbiA+IHNlbGY6OnNlY3JldGJveF94Y2hhY2hhMjBwb2x5MTMwNV9aRVJPQllURVMpIHsKICAgICAgICAgICAgLy8gV2UgaGFkIG1vcmUgdGhhbiAxIGJsb2NrLCBzbyBsZXQncyBjb250aW51ZSB0byBkZWNyeXB0IHRoZSByZXN0LgogICAgICAgICAgICAkbSAuPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9DaGFDaGEyMDo6c3RyZWFtWG9ySWMoCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdWJzdHIoCiAgICAgICAgICAgICAgICAgICAgJGMsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6c2VjcmV0Ym94X3hjaGFjaGEyMHBvbHkxMzA1X1pFUk9CWVRFUwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkbm9uY2UsIDE2LCA4KSwKICAgICAgICAgICAgICAgIChzdHJpbmcpICRzdWJrZXksCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjpzdG9yZTY0X2xlKDEpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGFjaGVkIEVkMjU1MTkgc2lnbmF0dXJlLgogICAgICoKICAgICAqIEBpbnRlcm5hbCBEbyBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFVzZSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzawogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25fZGV0YWNoZWQoJG1lc3NhZ2UsICRzaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6c2lnbl9kZXRhY2hlZCgkbWVzc2FnZSwgJHNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEF0dGFjaGVkIEVkMjU1MTkgc2lnbmF0dXJlLiAoUmV0dXJucyBhIHNpZ25lZCBtZXNzYWdlLikKICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkc2sKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKCRtZXNzYWdlLCAkc2spCiAgICB7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OnNpZ24oJG1lc3NhZ2UsICRzayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcGVucyBhIHNpZ25lZCBtZXNzYWdlLiBJZiB2YWxpZCwgcmV0dXJucyB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmVkTWVzc2FnZQogICAgICogQHBhcmFtIHN0cmluZyAkcGsKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduX29wZW4oJHNpZ25lZE1lc3NhZ2UsICRwaykKICAgIHsKICAgICAgICByZXR1cm4gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6c2lnbl9vcGVuKCRzaWduZWRNZXNzYWdlLCAkcGspOwogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZ5IGEgZGV0YWNoZWQgc2lnbmF0dXJlIG9mIGEgZ2l2ZW4gbWVzc2FnZSBhbmQgcHVibGljIGtleS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgRG8gbm90IHVzZSB0aGlzIGRpcmVjdGx5LiBVc2UgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwawogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduX3ZlcmlmeV9kZXRhY2hlZCgkc2lnbmF0dXJlLCAkbWVzc2FnZSwgJHBrKQogICAgewogICAgICAgIHJldHVybiBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5Ojp2ZXJpZnlfZGV0YWNoZWQoJHNpZ25hdHVyZSwgJG1lc3NhZ2UsICRwayk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmIChjbGFzc19leGlzdHMoJ1BhcmFnb25JRV9Tb2RpdW1fRmlsZScsIGZhbHNlKSkgewogICAgcmV0dXJuOwp9Ci8qKgogKiBDbGFzcyBQYXJhZ29uSUVfU29kaXVtX0ZpbGUKICovCmNsYXNzIFBhcmFnb25JRV9Tb2RpdW1fRmlsZSBleHRlbmRzIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsCnsKICAgIC8qIFBIUCdzIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgODE5MiBmb3IgZnJlYWQoKS9md3JpdGUoKS4gKi8KICAgIGNvbnN0IEJVRkZFUl9TSVpFID0gODE5MjsKCiAgICAvKioKICAgICAqIEJveCBhIGZpbGUgKHJhdGhlciB0aGFuIGEgc3RyaW5nKS4gVXNlcyBsZXNzIG1lbW9yeSB0aGFuCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveCgpLCBidXQgcHJvZHVjZXMKICAgICAqIHRoZSBzYW1lIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dEZpbGUgIEFic29sdXRlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRGaWxlIEFic29sdXRlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZSAgICAgIE51bWJlciB0byBiZSB1c2VkIG9ubHkgb25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5UGFpciAgICBFQ0RIIHNlY3JldCBrZXkgYW5kIEVDREggcHVibGljIGtleSBjb25jYXRlbmF0ZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveCgkaW5wdXRGaWxlLCAkb3V0cHV0RmlsZSwgJG5vbmNlLCAka2V5UGFpcikKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkaW5wdXRGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRpbnB1dEZpbGUpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJG91dHB1dEZpbGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDIgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJG91dHB1dEZpbGUpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJG5vbmNlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAzIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRub25jZSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygka2V5UGFpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgNCBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgka2V5UGFpcikgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRub25jZSkgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19CT1hfTk9OQ0VCWVRFUyBieXRlcycpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXlQYWlyKSAhPT0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfS0VZUEFJUkJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDQgbXVzdCBiZSBDUllQVE9fQk9YX0tFWVBBSVJCWVRFUyBieXRlcycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgJHNpemUgPSBmaWxlc2l6ZSgkaW5wdXRGaWxlKTsKICAgICAgICBpZiAoIWlzX2ludCgkc2l6ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9idGFpbiB0aGUgZmlsZSBzaXplJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaWZwICovCiAgICAgICAgJGlmcCA9IGZvcGVuKCRpbnB1dEZpbGUsICdyYicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGlmcCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJG9mcCAqLwogICAgICAgICRvZnAgPSBmb3Blbigkb3V0cHV0RmlsZSwgJ3diJyk7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkb2ZwKSkgewogICAgICAgICAgICBmY2xvc2UoJGlmcCk7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIGZvciB3cml0aW5nJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gc2VsZjo6Ym94X2VuY3J5cHQoJGlmcCwgJG9mcCwgJHNpemUsICRub25jZSwgJGtleVBhaXIpOwogICAgICAgIGZjbG9zZSgkaWZwKTsKICAgICAgICBmY2xvc2UoJG9mcCk7CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcGVuIGEgYm94ZWQgZmlsZSAocmF0aGVyIHRoYW4gYSBzdHJpbmcpLiBVc2VzIGxlc3MgbWVtb3J5IHRoYW4KICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X29wZW4oKSwgYnV0IHByb2R1Y2VzCiAgICAgKiB0aGUgc2FtZSByZXN1bHQuCiAgICAgKgogICAgICogV2FybmluZzogRG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IFRPQ1RPVSBhdHRhY2tzLiBZb3Ugc2hvdWxkCiAgICAgKiBqdXN0IGxvYWQgdGhlIGZpbGUgaW50byBtZW1vcnkgYW5kIHVzZSBjcnlwdG9fYm94X29wZW4oKSBpZgogICAgICogeW91IGFyZSB3b3JyaWVkIGFib3V0IHRob3NlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0RmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYm94X29wZW4oJGlucHV0RmlsZSwgJG91dHB1dEZpbGUsICRub25jZSwgJGtleXBhaXIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGlucHV0RmlsZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkaW5wdXRGaWxlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRvdXRwdXRGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRvdXRwdXRGaWxlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRub25jZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkbm9uY2UpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGtleXBhaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDQgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGtleXBhaXIpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkbm9uY2UpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9OT05DRUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDQgbXVzdCBiZSBDUllQVE9fQk9YX05PTkNFQllURVMgYnl0ZXMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5cGFpcikgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX0tFWVBBSVJCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCA0IG11c3QgYmUgQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgYnl0ZXMnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgICRzaXplID0gZmlsZXNpemUoJGlucHV0RmlsZSk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGlmcCAqLwogICAgICAgICRpZnAgPSBmb3BlbigkaW5wdXRGaWxlLCAncmInKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRpZnApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgZm9yIHJlYWRpbmcnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRvZnAgKi8KICAgICAgICAkb2ZwID0gZm9wZW4oJG91dHB1dEZpbGUsICd3YicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJG9mcCkpIHsKICAgICAgICAgICAgZmNsb3NlKCRpZnApOwogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBmb3Igd3JpdGluZycpOwogICAgICAgIH0KCiAgICAgICAgJHJlcyA9IHNlbGY6OmJveF9kZWNyeXB0KCRpZnAsICRvZnAsICRzaXplLCAkbm9uY2UsICRrZXlwYWlyKTsKICAgICAgICBmY2xvc2UoJGlmcCk7CiAgICAgICAgZmNsb3NlKCRvZnApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRub25jZSk7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRlcGhLZXlwYWlyKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHVuc2V0KCRlcGhLZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZWFsIGEgZmlsZSAocmF0aGVyIHRoYW4gYSBzdHJpbmcpLiBVc2VzIGxlc3MgbWVtb3J5IHRoYW4KICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlYWwoKSwgYnV0IHByb2R1Y2VzCiAgICAgKiB0aGUgc2FtZSByZXN1bHQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXRGaWxlICBBYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZSBBYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbQogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljS2V5ICBFQ0RIIHB1YmxpYyBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJveF9zZWFsKCRpbnB1dEZpbGUsICRvdXRwdXRGaWxlLCAkcHVibGljS2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfc3RyaW5nKCRpbnB1dEZpbGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGlucHV0RmlsZSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkb3V0cHV0RmlsZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMiBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkb3V0cHV0RmlsZSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkcHVibGljS2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAzIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRwdWJsaWNLZXkpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkcHVibGljS2V5KSAhPT0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19CT1hfUFVCTElDS0VZQllURVMgYnl0ZXMnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgICRzaXplID0gZmlsZXNpemUoJGlucHV0RmlsZSk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGlmcCAqLwogICAgICAgICRpZnAgPSBmb3BlbigkaW5wdXRGaWxlLCAncmInKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRpZnApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgZm9yIHJlYWRpbmcnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRvZnAgKi8KICAgICAgICAkb2ZwID0gZm9wZW4oJG91dHB1dEZpbGUsICd3YicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJG9mcCkpIHsKICAgICAgICAgICAgZmNsb3NlKCRpZnApOwogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBmb3Igd3JpdGluZycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRlcGhLZXlwYWlyICovCiAgICAgICAgJGVwaEtleXBhaXIgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9rZXlwYWlyKCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbXNnS2V5cGFpciAqLwogICAgICAgICRtc2dLZXlwYWlyID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWNyZXRrZXkoJGVwaEtleXBhaXIpLAogICAgICAgICAgICAkcHVibGljS2V5CiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRlcGhlbWVyYWxQSyAqLwogICAgICAgICRlcGhlbWVyYWxQSyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3B1YmxpY2tleSgkZXBoS2V5cGFpcik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbm9uY2UgKi8KICAgICAgICAkbm9uY2UgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2dlbmVyaWNoYXNoKAogICAgICAgICAgICAkZXBoZW1lcmFsUEsgLiAkcHVibGljS2V5LAogICAgICAgICAgICAnJywKICAgICAgICAgICAgMjQKICAgICAgICApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGZpcnN0V3JpdGUgKi8KICAgICAgICAkZmlyc3RXcml0ZSA9IGZ3cml0ZSgKICAgICAgICAgICAgJG9mcCwKICAgICAgICAgICAgJGVwaGVtZXJhbFBLLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUwogICAgICAgICk7CiAgICAgICAgaWYgKCFpc19pbnQoJGZpcnN0V3JpdGUpKSB7CiAgICAgICAgICAgIGZjbG9zZSgkaWZwKTsKICAgICAgICAgICAgZmNsb3NlKCRvZnApOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkZXBoS2V5cGFpcik7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCB3cml0ZSB0byBvdXRwdXQgZmlsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoJGZpcnN0V3JpdGUgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRlcGhLZXlwYWlyKTsKICAgICAgICAgICAgZmNsb3NlKCRpZnApOwogICAgICAgICAgICBmY2xvc2UoJG9mcCk7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0Vycm9yIHdyaXRpbmcgcHVibGljIGtleSB0byBvdXRwdXQgZmlsZScpOwogICAgICAgIH0KCiAgICAgICAgJHJlcyA9IHNlbGY6OmJveF9lbmNyeXB0KCRpZnAsICRvZnAsICRzaXplLCAkbm9uY2UsICRtc2dLZXlwYWlyKTsKICAgICAgICBmY2xvc2UoJGlmcCk7CiAgICAgICAgZmNsb3NlKCRvZnApOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRub25jZSk7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRlcGhLZXlwYWlyKTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHVuc2V0KCRlcGhLZXlwYWlyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBPcGVuIGEgc2VhbGVkIGZpbGUgKHJhdGhlciB0aGFuIGEgc3RyaW5nKS4gVXNlcyBsZXNzIG1lbW9yeSB0aGFuCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9zZWFsX29wZW4oKSwgYnV0IHByb2R1Y2VzCiAgICAgKiB0aGUgc2FtZSByZXN1bHQuCiAgICAgKgogICAgICogV2FybmluZzogRG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IFRPQ1RPVSBhdHRhY2tzLiBZb3Ugc2hvdWxkCiAgICAgKiBqdXN0IGxvYWQgdGhlIGZpbGUgaW50byBtZW1vcnkgYW5kIHVzZSBjcnlwdG9fYm94X3NlYWxfb3BlbigpIGlmCiAgICAgKiB5b3UgYXJlIHdvcnJpZWQgYWJvdXQgdGhvc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXRGaWxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRGaWxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlY2RoS2V5cGFpcgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib3hfc2VhbF9vcGVuKCRpbnB1dEZpbGUsICRvdXRwdXRGaWxlLCAkZWNkaEtleXBhaXIpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGlucHV0RmlsZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkaW5wdXRGaWxlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRvdXRwdXRGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRvdXRwdXRGaWxlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRlY2RoS2V5cGFpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkZWNkaEtleXBhaXIpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkZWNkaEtleXBhaXIpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0JPWF9LRVlQQUlSQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19CT1hfS0VZUEFJUkJZVEVTIGJ5dGVzJyk7CiAgICAgICAgfQoKICAgICAgICAkcHVibGljS2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19ib3hfcHVibGlja2V5KCRlY2RoS2V5cGFpcik7CgogICAgICAgIC8qKiBAdmFyIGludCAkc2l6ZSAqLwogICAgICAgICRzaXplID0gZmlsZXNpemUoJGlucHV0RmlsZSk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGlmcCAqLwogICAgICAgICRpZnAgPSBmb3BlbigkaW5wdXRGaWxlLCAncmInKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRpZnApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgZm9yIHJlYWRpbmcnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRvZnAgKi8KICAgICAgICAkb2ZwID0gZm9wZW4oJG91dHB1dEZpbGUsICd3YicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJG9mcCkpIHsKICAgICAgICAgICAgZmNsb3NlKCRpZnApOwogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBmb3Igd3JpdGluZycpOwogICAgICAgIH0KCiAgICAgICAgJGVwaGVtZXJhbFBLID0gZnJlYWQoJGlmcCwgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19CT1hfUFVCTElDS0VZQllURVMpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRlcGhlbWVyYWxQSykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRlcGhlbWVyYWxQSykgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTKSB7CiAgICAgICAgICAgIGZjbG9zZSgkaWZwKTsKICAgICAgICAgICAgZmNsb3NlKCRvZnApOwogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBwdWJsaWMga2V5IGZyb20gc2VhbGVkIGZpbGUnKTsKICAgICAgICB9CgogICAgICAgICRub25jZSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2goCiAgICAgICAgICAgICRlcGhlbWVyYWxQSyAuICRwdWJsaWNLZXksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAyNAogICAgICAgICk7CiAgICAgICAgJG1zZ0tleXBhaXIgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkoCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fYm94X3NlY3JldGtleSgkZWNkaEtleXBhaXIpLAogICAgICAgICAgICAkZXBoZW1lcmFsUEsKICAgICAgICApOwoKICAgICAgICAkcmVzID0gc2VsZjo6Ym94X2RlY3J5cHQoJGlmcCwgJG9mcCwgJHNpemUsICRub25jZSwgJG1zZ0tleXBhaXIpOwogICAgICAgIGZjbG9zZSgkaWZwKTsKICAgICAgICBmY2xvc2UoJG9mcCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJG5vbmNlKTsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGVwaEtleXBhaXIpOwogICAgICAgIH0gY2F0Y2ggKFNvZGl1bUV4Y2VwdGlvbiAkZXgpIHsKICAgICAgICAgICAgdW5zZXQoJGVwaEtleXBhaXIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgQkxBS0UyYiBoYXNoIG9mIGEgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGZpbGVQYXRoICAgICBBYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRrZXkgICAgICAgICAgQkxBS0UyYiBrZXkKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAkb3V0cHV0TGVuZ3RoIExlbmd0aCBvZiBoYXNoIG91dHB1dAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICAgICAgICAgIEJMQUtFMmIgaGFzaAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKiBAcHNhbG0tc3VwcHJlc3MgRmFpbGVkVHlwZVJlc29sdXRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmljaGFzaCgkZmlsZVBhdGgsICRrZXkgPSAnJywgJG91dHB1dExlbmd0aCA9IDMyKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfc3RyaW5nKCRmaWxlUGF0aCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkZmlsZVBhdGgpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgICAgICAgICRrZXkgPSAnJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDIgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGtleSkgLiAnIGdpdmVuLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghaXNfaW50KCRvdXRwdXRMZW5ndGgpKSB7CiAgICAgICAgICAgIGlmICghaXNfbnVtZXJpYygkb3V0cHV0TGVuZ3RoKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIGFuIGludGVnZXIsICcgLiBnZXR0eXBlKCRvdXRwdXRMZW5ndGgpIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3V0cHV0TGVuZ3RoID0gKGludCkgJG91dHB1dExlbmd0aDsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKCFlbXB0eSgka2V5KSkgewogICAgICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXkpIDwgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NSU4pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDIgbXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOIGJ5dGVzJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigka2V5KSA+IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYXQgbW9zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYIGJ5dGVzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRvdXRwdXRMZW5ndGggPCBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01JTikgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBcmd1bWVudCAzIG11c3QgYmUgYXQgbGVhc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01JTicpOwogICAgICAgIH0KICAgICAgICBpZiAoJG91dHB1dExlbmd0aCA+IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0FyZ3VtZW50IDMgbXVzdCBiZSBhdCBsZWFzdCBDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRmaWxlUGF0aCk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGZwICovCiAgICAgICAgJGZwID0gZm9wZW4oJGZpbGVQYXRoLCAncmInKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRmcCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZycpOwogICAgICAgIH0KICAgICAgICAkY3R4ID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF9pbml0KCRrZXksICRvdXRwdXRMZW5ndGgpOwogICAgICAgIHdoaWxlICgkc2l6ZSA+IDApIHsKICAgICAgICAgICAgJGJsb2NrU2l6ZSA9ICRzaXplID4gNjQKICAgICAgICAgICAgICAgID8gNjQKICAgICAgICAgICAgICAgIDogJHNpemU7CiAgICAgICAgICAgICRyZWFkID0gZnJlYWQoJGZwLCAkYmxvY2tTaXplKTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJHJlYWQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19nZW5lcmljaGFzaF91cGRhdGUoJGN0eCwgJHJlYWQpOwogICAgICAgICAgICAkc2l6ZSAtPSAkYmxvY2tTaXplOwogICAgICAgIH0KCiAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgcmV0dXJuIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWwoJGN0eCwgJG91dHB1dExlbmd0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0IGEgZmlsZSAocmF0aGVyIHRoYW4gYSBzdHJpbmcpLiBVc2VzIGxlc3MgbWVtb3J5IHRoYW4KICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94KCksIGJ1dCBwcm9kdWNlcwogICAgICogdGhlIHNhbWUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0RmlsZSAgQWJzb2x1dGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dEZpbGUgQWJzb2x1dGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlICAgICAgTnVtYmVyIHRvIGJlIHVzZWQgb25seSBvbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgICAgICAgIEVuY3J5cHRpb24ga2V5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3goJGlucHV0RmlsZSwgJG91dHB1dEZpbGUsICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkaW5wdXRGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRpbnB1dEZpbGUpIC4gJyBnaXZlbi4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRvdXRwdXRGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRvdXRwdXRGaWxlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRub25jZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkbm9uY2UpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkbm9uY2UpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDMgbXVzdCBiZSBDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMgYnl0ZXMnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGtleSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgNCBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgka2V5KSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJGtleSkgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDQgbXVzdCBiZSBDUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTIGJ5dGVzJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRpbnB1dEZpbGUpOwogICAgICAgIGlmICghaXNfaW50KCRzaXplKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb2J0YWluIHRoZSBmaWxlIHNpemUnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRpZnAgKi8KICAgICAgICAkaWZwID0gZm9wZW4oJGlucHV0RmlsZSwgJ3JiJyk7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkaWZwKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIGZvciByZWFkaW5nJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkb2ZwICovCiAgICAgICAgJG9mcCA9IGZvcGVuKCRvdXRwdXRGaWxlLCAnd2InKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRvZnApKSB7CiAgICAgICAgICAgIGZjbG9zZSgkaWZwKTsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgZm9yIHdyaXRpbmcnKTsKICAgICAgICB9CgogICAgICAgICRyZXMgPSBzZWxmOjpzZWNyZXRib3hfZW5jcnlwdCgkaWZwLCAkb2ZwLCAkc2l6ZSwgJG5vbmNlLCAka2V5KTsKICAgICAgICBmY2xvc2UoJGlmcCk7CiAgICAgICAgZmNsb3NlKCRvZnApOwogICAgICAgIHJldHVybiAkcmVzOwogICAgfQogICAgLyoqCiAgICAgKiBTZWFsIGEgZmlsZSAocmF0aGVyIHRoYW4gYSBzdHJpbmcpLiBVc2VzIGxlc3MgbWVtb3J5IHRoYW4KICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2VjcmV0Ym94X29wZW4oKSwgYnV0IHByb2R1Y2VzCiAgICAgKiB0aGUgc2FtZSByZXN1bHQuCiAgICAgKgogICAgICogV2FybmluZzogRG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IFRPQ1RPVSBhdHRhY2tzLiBZb3Ugc2hvdWxkCiAgICAgKiBqdXN0IGxvYWQgdGhlIGZpbGUgaW50byBtZW1vcnkgYW5kIHVzZSBjcnlwdG9fc2VjcmV0Ym94X29wZW4oKSBpZgogICAgICogeW91IGFyZSB3b3JyaWVkIGFib3V0IHRob3NlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0RmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3hfb3BlbigkaW5wdXRGaWxlLCAkb3V0cHV0RmlsZSwgJG5vbmNlLCAka2V5KQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmICghaXNfc3RyaW5nKCRpbnB1dEZpbGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGlucHV0RmlsZSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkb3V0cHV0RmlsZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMiBtdXN0IGJlIGEgc3RyaW5nLCAnIC4gZ2V0dHlwZSgkb3V0cHV0RmlsZSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkbm9uY2UpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDMgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJG5vbmNlKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNfc3RyaW5nKCRrZXkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDQgbXVzdCBiZSBhIHN0cmluZywgJyAuIGdldHR5cGUoJGtleSkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KCiAgICAgICAgLyogSW5wdXQgdmFsaWRhdGlvbjogKi8KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRub25jZSkgIT09IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpDUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgNCBtdXN0IGJlIENSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyBieXRlcycpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRrZXkpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NFQ1JFVEJPWF9LRVlCWVRFUykgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCA0IG11c3QgYmUgQ1JZUFRPX1NFQ1JFVEJPWEJPWF9LRVlCWVRFUyBieXRlcycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgJHNpemUgPSBmaWxlc2l6ZSgkaW5wdXRGaWxlKTsKICAgICAgICBpZiAoIWlzX2ludCgkc2l6ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9idGFpbiB0aGUgZmlsZSBzaXplJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaWZwICovCiAgICAgICAgJGlmcCA9IGZvcGVuKCRpbnB1dEZpbGUsICdyYicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGlmcCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJG9mcCAqLwogICAgICAgICRvZnAgPSBmb3Blbigkb3V0cHV0RmlsZSwgJ3diJyk7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkb2ZwKSkgewogICAgICAgICAgICBmY2xvc2UoJGlmcCk7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIGZvciB3cml0aW5nJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzID0gc2VsZjo6c2VjcmV0Ym94X2RlY3J5cHQoJGlmcCwgJG9mcCwgJHNpemUsICRub25jZSwgJGtleSk7CiAgICAgICAgZmNsb3NlKCRpZnApOwogICAgICAgIGZjbG9zZSgkb2ZwKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygka2V5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgIHVuc2V0KCRrZXkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIFNpZ24gYSBmaWxlIChyYXRoZXIgdGhhbiBhIHN0cmluZykuIFVzZXMgbGVzcyBtZW1vcnkgdGhhbgogICAgICogUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OmNyeXB0b19zaWduX2RldGFjaGVkKCksIGJ1dCBwcm9kdWNlcwogICAgICogdGhlIHNhbWUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVQYXRoICBBYnNvbHV0ZSBwYXRoIHRvIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbQogICAgICogQHBhcmFtIHN0cmluZyAkc2VjcmV0S2V5IFNlY3JldCBzaWduaW5nIGtleQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgICBFZDI1NTE5IHNpZ25hdHVyZQogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lnbigkZmlsZVBhdGgsICRzZWNyZXRLZXkpCiAgICB7CiAgICAgICAgLyogVHlwZSBjaGVja3M6ICovCiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGZpbGVQYXRoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRmaWxlUGF0aCkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkc2VjcmV0S2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRzZWNyZXRLZXkpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc2VjcmV0S2V5KSAhPT0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TSUdOX1NFQ1JFVEtFWUJZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDIgbXVzdCBiZSBDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUyBieXRlcycpOwogICAgICAgIH0KICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpzaWduX2NvcmUzMigkZmlsZVBhdGgsICRzZWNyZXRLZXkpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50ICRzaXplICovCiAgICAgICAgJHNpemUgPSBmaWxlc2l6ZSgkZmlsZVBhdGgpOwogICAgICAgIGlmICghaXNfaW50KCRzaXplKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb2J0YWluIHRoZSBmaWxlIHNpemUnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRmcCAqLwogICAgICAgICRmcCA9IGZvcGVuKCRmaWxlUGF0aCwgJ3JiJyk7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkZnApKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvcGVuIGlucHV0IGZpbGUgZm9yIHJlYWRpbmcnKTsKICAgICAgICB9CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYXogKi8KICAgICAgICAkYXogPSBoYXNoKCdzaGE1MTInLCBzZWxmOjpzdWJzdHIoJHNlY3JldEtleSwgMCwgMzIpLCB0cnVlKTsKCiAgICAgICAgJGF6WzBdID0gc2VsZjo6aW50VG9DaHIoc2VsZjo6Y2hyVG9JbnQoJGF6WzBdKSAmIDI0OCk7CiAgICAgICAgJGF6WzMxXSA9IHNlbGY6OmludFRvQ2hyKChzZWxmOjpjaHJUb0ludCgkYXpbMzFdKSAmIDYzKSB8IDY0KTsKCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGhzICovCiAgICAgICAgJGhzID0gaGFzaF9pbml0KCdzaGE1MTInKTsKICAgICAgICBoYXNoX3VwZGF0ZSgkaHMsIHNlbGY6OnN1YnN0cigkYXosIDMyLCAzMikpOwogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRocyAqLwogICAgICAgICRocyA9IHNlbGY6OnVwZGF0ZUhhc2hXaXRoRmlsZSgkaHMsICRmcCwgJHNpemUpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJG5vbmNlSGFzaCAqLwogICAgICAgICRub25jZUhhc2ggPSBoYXNoX2ZpbmFsKCRocywgdHJ1ZSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcGsgKi8KICAgICAgICAkcGsgPSBzZWxmOjpzdWJzdHIoJHNlY3JldEtleSwgMzIsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRub25jZSAqLwogICAgICAgICRub25jZSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5OjpzY19yZWR1Y2UoJG5vbmNlSGFzaCkgLiBzZWxmOjpzdWJzdHIoJG5vbmNlSGFzaCwgMzIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHNpZyAqLwogICAgICAgICRzaWcgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6Z2VfcDNfdG9ieXRlcygKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OmdlX3NjYWxhcm11bHRfYmFzZSgkbm9uY2UpCiAgICAgICAgKTsKCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGhzICovCiAgICAgICAgJGhzID0gaGFzaF9pbml0KCdzaGE1MTInKTsKICAgICAgICBoYXNoX3VwZGF0ZSgkaHMsIHNlbGY6OnN1YnN0cigkc2lnLCAwLCAzMikpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgc2VsZjo6c3Vic3RyKCRwaywgMCwgMzIpKTsKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBzZWxmOjp1cGRhdGVIYXNoV2l0aEZpbGUoJGhzLCAkZnAsICRzaXplKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRocmFtSGFzaCAqLwogICAgICAgICRocmFtSGFzaCA9IGhhc2hfZmluYWwoJGhzLCB0cnVlKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRocmFtICovCiAgICAgICAgJGhyYW0gPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2NfcmVkdWNlKCRocmFtSGFzaCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc2lnQWZ0ZXIgKi8KICAgICAgICAkc2lnQWZ0ZXIgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2NfbXVsYWRkKCRocmFtLCAkYXosICRub25jZSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc2lnICovCiAgICAgICAgJHNpZyA9IHNlbGY6OnN1YnN0cigkc2lnLCAwLCAzMikgLiBzZWxmOjpzdWJzdHIoJHNpZ0FmdGVyLCAwLCAzMik7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRheik7CiAgICAgICAgfSBjYXRjaCAoU29kaXVtRXhjZXB0aW9uICRleCkgewogICAgICAgICAgICAkYXogPSBudWxsOwogICAgICAgIH0KICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICByZXR1cm4gJHNpZzsKICAgIH0KCiAgICAvKioKICAgICAqIFZlcmlmeSBhIGZpbGUgKHJhdGhlciB0aGFuIGEgc3RyaW5nKS4gVXNlcyBsZXNzIG1lbW9yeSB0aGFuCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCksIGJ1dAogICAgICogcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZyAgICAgICBFZDI1NTE5IHNpZ25hdHVyZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZVBhdGggIEFic29sdXRlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkgU2lnbmluZyBwdWJsaWMga2V5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyaWZ5KCRzaWcsICRmaWxlUGF0aCwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICAvKiBUeXBlIGNoZWNrczogKi8KICAgICAgICBpZiAoIWlzX3N0cmluZygkc2lnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRzaWcpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGZpbGVQYXRoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAyIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRmaWxlUGF0aCkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3N0cmluZygkcHVibGljS2V5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAzIG11c3QgYmUgYSBzdHJpbmcsICcgLiBnZXR0eXBlKCRwdWJsaWNLZXkpIC4gJyBnaXZlbi4nKTsKICAgICAgICB9CgogICAgICAgIC8qIElucHV0IHZhbGlkYXRpb246ICovCiAgICAgICAgaWYgKHNlbGY6OnN0cmxlbigkc2lnKSAhPT0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OkNSWVBUT19TSUdOX0JZVEVTKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBDUllQVE9fU0lHTl9CWVRFUyBieXRlcycpOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6c3RybGVuKCRwdWJsaWNLZXkpICE9PSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTIGJ5dGVzJyk7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjpzdHJsZW4oJHNpZykgPCA2NCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdTaWduYXR1cmUgaXMgdG9vIHNob3J0Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjp2ZXJpZnlfY29yZTMyKCRzaWcsICRmaWxlUGF0aCwgJHB1YmxpY0tleSk7CiAgICAgICAgfQoKICAgICAgICAvKiBTZWN1cml0eSBjaGVja3MgKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OmNoZWNrX1NfbHRfTChzZWxmOjpzdWJzdHIoJHNpZywgMzIsIDMyKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignUyA8IEwgLSBJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgICAgIH0KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OnNtYWxsX29yZGVyKCRzaWcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ1NpZ25hdHVyZSBpcyBvbiB0b28gc21hbGwgb2YgYW4gb3JkZXInKTsKICAgICAgICB9CiAgICAgICAgaWYgKChzZWxmOjpjaHJUb0ludCgkc2lnWzYzXSkgJiAyMjQpICE9PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0ludmFsaWQgc2lnbmF0dXJlJyk7CiAgICAgICAgfQogICAgICAgICRkID0gMDsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAzMjsgKyskaSkgewogICAgICAgICAgICAkZCB8PSBzZWxmOjpjaHJUb0ludCgkcHVibGljS2V5WyRpXSk7CiAgICAgICAgfQogICAgICAgIGlmICgkZCA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdBbGwgemVybyBwdWJsaWMga2V5Jyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRmaWxlUGF0aCk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGZwICovCiAgICAgICAgJGZwID0gZm9wZW4oJGZpbGVQYXRoLCAncmInKTsKICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRmcCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gaW5wdXQgZmlsZSBmb3IgcmVhZGluZycpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgYm9vbCBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCAqLwogICAgICAgICRvcmlnID0gUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdDsKCiAgICAgICAgLy8gU2V0IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgdG8gdHJ1ZSB0byBzcGVlZCB1cCB2ZXJpZmljYXRpb24uCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCA9IHRydWU7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9DdXJ2ZTI1NTE5X0dlX1AzICRBICovCiAgICAgICAgJEEgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6Z2VfZnJvbWJ5dGVzX25lZ2F0ZV92YXJ0aW1lKCRwdWJsaWNLZXkpOwoKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBoYXNoX2luaXQoJ3NoYTUxMicpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJHB1YmxpY0tleSwgMCwgMzIpKTsKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBzZWxmOjp1cGRhdGVIYXNoV2l0aEZpbGUoJGhzLCAkZnAsICRzaXplKTsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGhEaWdlc3QgKi8KICAgICAgICAkaERpZ2VzdCA9IGhhc2hfZmluYWwoJGhzLCB0cnVlKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRoICovCiAgICAgICAgJGggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfRWQyNTUxOTo6c2NfcmVkdWNlKCRoRGlnZXN0KSAuIHNlbGY6OnN1YnN0cigkaERpZ2VzdCwgMzIpOwoKICAgICAgICAvKiogQHZhciBQYXJhZ29uSUVfU29kaXVtX0NvcmVfQ3VydmUyNTUxOV9HZV9QMiAkUiAqLwogICAgICAgICRSID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0VkMjU1MTk6OmdlX2RvdWJsZV9zY2FsYXJtdWx0X3ZhcnRpbWUoCiAgICAgICAgICAgICRoLAogICAgICAgICAgICAkQSwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRzaWcsIDMyKQogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmNoZWNrICovCiAgICAgICAgJHJjaGVjayA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9FZDI1NTE5OjpnZV90b2J5dGVzKCRSKTsKCiAgICAgICAgLy8gQ2xvc2UgdGhlIGZpbGUgaGFuZGxlCiAgICAgICAgZmNsb3NlKCRmcCk7CgogICAgICAgIC8vIFJlc2V0IFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgdG8gd2hhdCBpdCB3YXMgYmVmb3JlLgogICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjokZmFzdE11bHQgPSAkb3JpZzsKICAgICAgICByZXR1cm4gc2VsZjo6dmVyaWZ5XzMyKCRyY2hlY2ssIHNlbGY6OnN1YnN0cigkc2lnLCAwLCAzMikpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRpZnAKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkb2ZwCiAgICAgKiBAcGFyYW0gaW50ICAgICAgJG1sZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkYm94S2V5cGFpcgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBib3hfZW5jcnlwdCgkaWZwLCAkb2ZwLCAkbWxlbiwgJG5vbmNlLCAkYm94S2V5cGFpcikKICAgIHsKICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpzZWNyZXRib3hfZW5jcnlwdCgKICAgICAgICAgICAgICAgICRpZnAsCiAgICAgICAgICAgICAgICAkb2ZwLAogICAgICAgICAgICAgICAgJG1sZW4sCiAgICAgICAgICAgICAgICAkbm9uY2UsCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzMyOjpib3hfYmVmb3Jlbm0oCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X3NlY3JldGtleSgkYm94S2V5cGFpciksCiAgICAgICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X3B1YmxpY2tleSgkYm94S2V5cGFpcikKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGY6OnNlY3JldGJveF9lbmNyeXB0KAogICAgICAgICAgICAkaWZwLAogICAgICAgICAgICAkb2ZwLAogICAgICAgICAgICAkbWxlbiwKICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6Ym94X2JlZm9yZW5tKAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmJveF9zZWNyZXRrZXkoJGJveEtleXBhaXIpLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmJveF9wdWJsaWNrZXkoJGJveEtleXBhaXIpCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQoKCiAgICAvKioKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkaWZwCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJG9mcAogICAgICogQHBhcmFtIGludCAgICAgICRtbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGJveEtleXBhaXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYm94X2RlY3J5cHQoJGlmcCwgJG9mcCwgJG1sZW4sICRub25jZSwgJGJveEtleXBhaXIpCiAgICB7CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6c2VjcmV0Ym94X2RlY3J5cHQoCiAgICAgICAgICAgICAgICAkaWZwLAogICAgICAgICAgICAgICAgJG9mcCwKICAgICAgICAgICAgICAgICRtbGVuLAogICAgICAgICAgICAgICAgJG5vbmNlLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG8zMjo6Ym94X2JlZm9yZW5tKAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OmJveF9zZWNyZXRrZXkoJGJveEtleXBhaXIpLAogICAgICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvMzI6OmJveF9wdWJsaWNrZXkoJGJveEtleXBhaXIpCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjpzZWNyZXRib3hfZGVjcnlwdCgKICAgICAgICAgICAgJGlmcCwKICAgICAgICAgICAgJG9mcCwKICAgICAgICAgICAgJG1sZW4sCiAgICAgICAgICAgICRub25jZSwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OmJveF9iZWZvcmVubSgKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfc2VjcmV0a2V5KCRib3hLZXlwYWlyKSwKICAgICAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpib3hfcHVibGlja2V5KCRib3hLZXlwYWlyKQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEVuY3J5cHQgYSBmaWxlCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRpZnAKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkb2ZwCiAgICAgKiBAcGFyYW0gaW50ICRtbGVuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub25jZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHNlY3JldGJveF9lbmNyeXB0KCRpZnAsICRvZnAsICRtbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgaWYgKFBIUF9JTlRfU0laRSA9PT0gNCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6c2VjcmV0Ym94X2VuY3J5cHRfY29yZTMyKCRpZnAsICRvZnAsICRtbGVuLCAkbm9uY2UsICRrZXkpOwogICAgICAgIH0KCiAgICAgICAgJHBsYWludGV4dCA9IGZyZWFkKCRpZnAsIDMyKTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkcGxhaW50ZXh0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlJyk7CiAgICAgICAgfQogICAgICAgICRmaXJzdDMyID0gZnRlbGwoJGlmcCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc3Via2V5ICovCiAgICAgICAgJHN1YmtleSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9IU2Fsc2EyMDo6aHNhbHNhMjAoJG5vbmNlLCAka2V5KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRyZWFsTm9uY2UgKi8KICAgICAgICAkcmVhbE5vbmNlID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigkbm9uY2UsIDE2LCA4KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gc3RyX3JlcGVhdCgiXHgwMCIsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRtbGVuIC0gTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgbWVzc2FnZSAqLwogICAgICAgICRtbGVuMCA9ICRtbGVuOwogICAgICAgIGlmICgkbWxlbjAgPiA2NCAtIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMpIHsKICAgICAgICAgICAgJG1sZW4wID0gNjQgLSBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTOwogICAgICAgIH0KICAgICAgICAkYmxvY2swIC49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJHBsYWludGV4dCwgMCwgJG1sZW4wKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1NhbHNhMjA6OnNhbHNhMjBfeG9yKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICAkcmVhbE5vbmNlLAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKCiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZSgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgICAgICRibG9jazAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86Om9uZXRpbWVhdXRoX3BvbHkxMzA1X0tFWUJZVEVTCiAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICAvLyBQcmUtd3JpdGUgMTYgYmxhbmsgYnl0ZXMgZm9yIHRoZSBQb2x5MTMwNSB0YWcKICAgICAgICAkc3RhcnQgPSBmdGVsbCgkb2ZwKTsKICAgICAgICBmd3JpdGUoJG9mcCwgc3RyX3JlcGVhdCgiXHgwMCIsIDE2KSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkYyAqLwogICAgICAgICRjQmxvY2sgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAkYmxvY2swLAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTCiAgICAgICAgKTsKICAgICAgICAkc3RhdGUtPnVwZGF0ZSgkY0Jsb2NrKTsKICAgICAgICBmd3JpdGUoJG9mcCwgJGNCbG9jayk7CiAgICAgICAgJG1sZW4gLT0gMzI7CgogICAgICAgIC8qKiBAdmFyIGludCAkaXRlciAqLwogICAgICAgICRpdGVyID0gMTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRpbmNyICovCiAgICAgICAgJGluY3IgPSBzZWxmOjpCVUZGRVJfU0laRSA+PiA2OwoKICAgICAgICAvKgogICAgICAgICAqIFNldCB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGhhbGYtYmxvY2suIEFsbCBmdXR1cmUgYnl0ZXMgd2lsbAogICAgICAgICAqIGdlbmVyYXRlZCBmcm9tIHNhbHNhMjBfeG9yX2ljLCBzdGFydGluZyBmcm9tIDEgKHNlY29uZCBibG9jaykuCiAgICAgICAgICovCiAgICAgICAgZnNlZWsoJGlmcCwgJGZpcnN0MzIsIFNFRUtfU0VUKTsKCiAgICAgICAgd2hpbGUgKCRtbGVuID4gMCkgewogICAgICAgICAgICAkYmxvY2tTaXplID0gJG1sZW4gPiBzZWxmOjpCVUZGRVJfU0laRQogICAgICAgICAgICAgICAgPyBzZWxmOjpCVUZGRVJfU0laRQogICAgICAgICAgICAgICAgOiAkbWxlbjsKICAgICAgICAgICAgJHBsYWludGV4dCA9IGZyZWFkKCRpZnAsICRibG9ja1NpemUpOwogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkcGxhaW50ZXh0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjQmxvY2sgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAgICAgJHJlYWxOb25jZSwKICAgICAgICAgICAgICAgICRpdGVyLAogICAgICAgICAgICAgICAgJHN1YmtleQogICAgICAgICAgICApOwogICAgICAgICAgICBmd3JpdGUoJG9mcCwgJGNCbG9jaywgJGJsb2NrU2l6ZSk7CiAgICAgICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjQmxvY2spOwoKICAgICAgICAgICAgJG1sZW4gLT0gJGJsb2NrU2l6ZTsKICAgICAgICAgICAgJGl0ZXIgKz0gJGluY3I7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkc3Via2V5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jazAgPSBudWxsOwogICAgICAgICAgICAkc3Via2V5ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGVuZCA9IGZ0ZWxsKCRvZnApOwoKICAgICAgICAvKgogICAgICAgICAqIFdyaXRlIHRoZSBQb2x5MTMwNSBhdXRoZW50aWNhdGlvbiB0YWcgdGhhdCBwcm92aWRlcyBpbnRlZ3JpdHkKICAgICAgICAgKiBvdmVyIHRoZSBjaXBoZXJ0ZXh0IChlbmNyeXB0LXRoZW4tTUFDKQogICAgICAgICAqLwogICAgICAgIGZzZWVrKCRvZnAsICRzdGFydCwgU0VFS19TRVQpOwogICAgICAgIGZ3cml0ZSgkb2ZwLCAkc3RhdGUtPmZpbmlzaCgpLCBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NFQ1JFVEJPWF9NQUNCWVRFUyk7CiAgICAgICAgZnNlZWsoJG9mcCwgJGVuZCwgU0VFS19TRVQpOwogICAgICAgIHVuc2V0KCRzdGF0ZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBhIGZpbGUKICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGlmcAogICAgICogQHBhcmFtIHJlc291cmNlICRvZnAKICAgICAqIEBwYXJhbSBpbnQgJG1sZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2VjcmV0Ym94X2RlY3J5cHQoJGlmcCwgJG9mcCwgJG1sZW4sICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICBpZiAoUEhQX0lOVF9TSVpFID09PSA0KSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpzZWNyZXRib3hfZGVjcnlwdF9jb3JlMzIoJGlmcCwgJG9mcCwgJG1sZW4sICRub25jZSwgJGtleSk7CiAgICAgICAgfQogICAgICAgICR0YWcgPSBmcmVhZCgkaWZwLCAxNik7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHRhZykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzdWJrZXkgKi8KICAgICAgICAkc3Via2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX0hTYWxzYTIwOjpoc2Fsc2EyMCgkbm9uY2UsICRrZXkpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHJlYWxOb25jZSAqLwogICAgICAgICRyZWFsTm9uY2UgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJsb2NrMCAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMDo6c2Fsc2EyMCgKICAgICAgICAgICAgNjQsCiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjpzdWJzdHIoJG5vbmNlLCAxNiwgOCksCiAgICAgICAgICAgICRzdWJrZXkKICAgICAgICApOwoKICAgICAgICAvKiBWZXJpZnkgdGhlIFBvbHkxMzA1IE1BQyAtYmVmb3JlLSBhdHRlbXB0aW5nIHRvIGRlY3J5cHQhICovCiAgICAgICAgJHN0YXRlID0gbmV3IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9Qb2x5MTMwNV9TdGF0ZShzZWxmOjpzdWJzdHIoJGJsb2NrMCwgMCwgMzIpKTsKICAgICAgICBpZiAoIXNlbGY6Om9uZXRpbWVhdXRoX3ZlcmlmeSgkc3RhdGUsICRpZnAsICR0YWcsICRtbGVuKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIE1BQycpOwogICAgICAgIH0KCiAgICAgICAgLyoKICAgICAgICAgKiBTZXQgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBoYWxmLWJsb2NrLiBBbGwgZnV0dXJlIGJ5dGVzIHdpbGwKICAgICAgICAgKiBnZW5lcmF0ZWQgZnJvbSBzYWxzYTIwX3hvcl9pYywgc3RhcnRpbmcgZnJvbSAxIChzZWNvbmQgYmxvY2spLgogICAgICAgICAqLwogICAgICAgICRmaXJzdDMyID0gZnJlYWQoJGlmcCwgMzIpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRmaXJzdDMyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlJyk7CiAgICAgICAgfQogICAgICAgICRmaXJzdDMybGVuID0gc2VsZjo6c3RybGVuKCRmaXJzdDMyKTsKICAgICAgICBmd3JpdGUoCiAgICAgICAgICAgICRvZnAsCiAgICAgICAgICAgIHNlbGY6OnhvclN0cmluZ3MoCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGJsb2NrMCwgMzIsICRmaXJzdDMybGVuKSwKICAgICAgICAgICAgICAgIHNlbGY6OnN1YnN0cigkZmlyc3QzMiwgMCwgJGZpcnN0MzJsZW4pCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgICAgICRtbGVuIC09IDMyOwoKICAgICAgICAvKiogQHZhciBpbnQgJGl0ZXIgKi8KICAgICAgICAkaXRlciA9IDE7CgogICAgICAgIC8qKiBAdmFyIGludCAkaW5jciAqLwogICAgICAgICRpbmNyID0gc2VsZjo6QlVGRkVSX1NJWkUgPj4gNjsKCiAgICAgICAgLyogRGVjcnlwdHMgY2lwaGVydGV4dCwgd3JpdGVzIHRvIG91dHB1dCBmaWxlLiAqLwogICAgICAgIHdoaWxlICgkbWxlbiA+IDApIHsKICAgICAgICAgICAgJGJsb2NrU2l6ZSA9ICRtbGVuID4gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgID8gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgIDogJG1sZW47CiAgICAgICAgICAgICRjaXBoZXJ0ZXh0ID0gZnJlYWQoJGlmcCwgJGJsb2NrU2l6ZSk7CiAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRjaXBoZXJ0ZXh0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwQmxvY2sgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmVfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgICAgICRyZWFsTm9uY2UsCiAgICAgICAgICAgICAgICAkaXRlciwKICAgICAgICAgICAgICAgICRzdWJrZXkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZndyaXRlKCRvZnAsICRwQmxvY2ssICRibG9ja1NpemUpOwogICAgICAgICAgICAkbWxlbiAtPSAkYmxvY2tTaXplOwogICAgICAgICAgICAkaXRlciArPSAkaW5jcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlICRzdGF0ZQogICAgICogQHBhcmFtIHJlc291cmNlICRpZnAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhZwogICAgICogQHBhcmFtIGludCAkbWxlbgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBvbmV0aW1lYXV0aF92ZXJpZnkoCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlX1BvbHkxMzA1X1N0YXRlICRzdGF0ZSwKICAgICAgICAkaWZwLAogICAgICAgICR0YWcgPSAnJywKICAgICAgICAkbWxlbiA9IDAKICAgICkgewogICAgICAgIC8qKiBAdmFyIGludCAkcG9zICovCiAgICAgICAgJHBvcyA9IGZ0ZWxsKCRpZnApOwoKICAgICAgICAvKiogQHZhciBpbnQgJGl0ZXIgKi8KICAgICAgICAkaXRlciA9IDE7CgogICAgICAgIC8qKiBAdmFyIGludCAkaW5jciAqLwogICAgICAgICRpbmNyID0gc2VsZjo6QlVGRkVSX1NJWkUgPj4gNjsKCiAgICAgICAgd2hpbGUgKCRtbGVuID4gMCkgewogICAgICAgICAgICAkYmxvY2tTaXplID0gJG1sZW4gPiBzZWxmOjpCVUZGRVJfU0laRQogICAgICAgICAgICAgICAgPyBzZWxmOjpCVUZGRVJfU0laRQogICAgICAgICAgICAgICAgOiAkbWxlbjsKICAgICAgICAgICAgJGNpcGhlcnRleHQgPSBmcmVhZCgkaWZwLCAkYmxvY2tTaXplKTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJGNpcGhlcnRleHQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNpcGhlcnRleHQpOwogICAgICAgICAgICAkbWxlbiAtPSAkYmxvY2tTaXplOwogICAgICAgICAgICAkaXRlciArPSAkaW5jcjsKICAgICAgICB9CiAgICAgICAgJHJlcyA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZV9VdGlsOjp2ZXJpZnlfMTYoJHRhZywgJHN0YXRlLT5maW5pc2goKSk7CgogICAgICAgIGZzZWVrKCRpZnAsICRwb3MsIFNFRUtfU0VUKTsKICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhIGhhc2ggY29udGV4dCB3aXRoIHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIHdpdGhvdXQKICAgICAqIGxvYWRpbmcgdGhlIGVudGlyZSBmaWxlIGludG8gbWVtb3J5LgogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZXxvYmplY3QgJGhhc2gKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZnAKICAgICAqIEBwYXJhbSBpbnQgJHNpemUKICAgICAqIEByZXR1cm4gbWl4ZWQgKHJlc291cmNlIG9uIFBIUCA8IDcuMiwgb2JqZWN0IG9uIFBIUCA+PSA3LjIpCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqIEBwc2FsbS1zdXBwcmVzcyBQb3NzaWJseUludmFsaWRBcmd1bWVudAogICAgICogICAgICAgICAgICAgICAgIFBIUCA3LjIgY2hhbmdlcyBmcm9tIGEgcmVzb3VyY2UgdG8gYW4gb2JqZWN0LAogICAgICogICAgICAgICAgICAgICAgIHdoaWNoIGNhdXNlcyBQc2FsbSB0byBjb21wbGFpbiBhYm91dCBhbiBlcnJvci4KICAgICAqIEBwc2FsbS1zdXBwcmVzcyBUeXBlQ29lcmNpb24KICAgICAqICAgICAgICAgICAgICAgICBEaXR0by4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVIYXNoV2l0aEZpbGUoJGhhc2gsICRmcCwgJHNpemUgPSAwKQogICAgewogICAgICAgIC8qIFR5cGUgY2hlY2tzOiAqLwogICAgICAgIGlmIChQSFBfVkVSU0lPTl9JRCA8IDcwMjAwKSB7CiAgICAgICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGhhc2gpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxIG11c3QgYmUgYSByZXNvdXJjZSwgJyAuIGdldHR5cGUoJGhhc2gpIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWlzX29iamVjdCgkaGFzaCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IDEgbXVzdCBiZSBhbiBvYmplY3QgKFBIUCA3LjIrKSwgJyAuIGdldHR5cGUoJGhhc2gpIC4gJyBnaXZlbi4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCRmcCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMiBtdXN0IGJlIGEgcmVzb3VyY2UsICcgLiBnZXR0eXBlKCRmcCkgLiAnIGdpdmVuLicpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX2ludCgkc2l6ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMyBtdXN0IGJlIGFuIGludGVnZXIsICcgLiBnZXR0eXBlKCRzaXplKSAuICcgZ2l2ZW4uJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBpbnQgJG9yaWdpbmFsUG9zaXRpb24gKi8KICAgICAgICAkb3JpZ2luYWxQb3NpdGlvbiA9IGZ0ZWxsKCRmcCk7CgogICAgICAgIC8vIE1vdmUgZmlsZSBwb2ludGVyIHRvIGJlZ2lubmluZyBvZiBmaWxlCiAgICAgICAgZnNlZWsoJGZwLCAwLCBTRUVLX1NFVCk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJHNpemU7ICRpICs9IHNlbGY6OkJVRkZFUl9TSVpFKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZ3xib29sICRtZXNzYWdlICovCiAgICAgICAgICAgICRtZXNzYWdlID0gZnJlYWQoCiAgICAgICAgICAgICAgICAkZnAsCiAgICAgICAgICAgICAgICAoJHNpemUgLSAkaSkgPiBzZWxmOjpCVUZGRVJfU0laRQogICAgICAgICAgICAgICAgICAgID8gJHNpemUgLSAkaQogICAgICAgICAgICAgICAgICAgIDogc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJG1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdVbmV4cGVjdGVkIGVycm9yIHJlYWRpbmcgZnJvbSBmaWxlLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbWVzc2FnZSAqLwogICAgICAgICAgICAvKiogQHBzYWxtLXN1cHByZXNzIEludmFsaWRBcmd1bWVudCAqLwogICAgICAgICAgICBoYXNoX3VwZGF0ZSgkaGFzaCwgJG1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgICAvLyBSZXNldCBmaWxlIHBvaW50ZXIncyBwb3NpdGlvbgogICAgICAgIGZzZWVrKCRmcCwgJG9yaWdpbmFsUG9zaXRpb24sIFNFRUtfU0VUKTsKICAgICAgICByZXR1cm4gJGhhc2g7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaWduIGEgZmlsZSAocmF0aGVyIHRoYW4gYSBzdHJpbmcpLiBVc2VzIGxlc3MgbWVtb3J5IHRoYW4KICAgICAqIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjpjcnlwdG9fc2lnbl9kZXRhY2hlZCgpLCBidXQgcHJvZHVjZXMKICAgICAqIHRoZSBzYW1lIHJlc3VsdC4gKDMyLWJpdCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlUGF0aCAgQWJzb2x1dGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGZpbGVzeXN0ZW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldEtleSBTZWNyZXQgc2lnbmluZyBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgICAgRWQyNTUxOSBzaWduYXR1cmUKICAgICAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzaWduX2NvcmUzMigkZmlsZVBhdGgsICRzZWNyZXRLZXkpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgaW50fGJvb2wgJHNpemUgKi8KICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRmaWxlUGF0aCk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2V8Ym9vbCAkZnAgKi8KICAgICAgICAkZnAgPSBmb3BlbigkZmlsZVBhdGgsICdyYicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGZwKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIGZvciByZWFkaW5nJyk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRmcCAqLwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGF6ICovCiAgICAgICAgJGF6ID0gaGFzaCgnc2hhNTEyJywgc2VsZjo6c3Vic3RyKCRzZWNyZXRLZXksIDAsIDMyKSwgdHJ1ZSk7CgogICAgICAgICRhelswXSA9IHNlbGY6OmludFRvQ2hyKHNlbGY6OmNoclRvSW50KCRhelswXSkgJiAyNDgpOwogICAgICAgICRhelszMV0gPSBzZWxmOjppbnRUb0Nocigoc2VsZjo6Y2hyVG9JbnQoJGF6WzMxXSkgJiA2MykgfCA2NCk7CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRocyAqLwogICAgICAgICRocyA9IGhhc2hfaW5pdCgnc2hhNTEyJyk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJGF6LCAzMiwgMzIpKTsKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBzZWxmOjp1cGRhdGVIYXNoV2l0aEZpbGUoJGhzLCAkZnAsICRzaXplKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRub25jZUhhc2ggKi8KICAgICAgICAkbm9uY2VIYXNoID0gaGFzaF9maW5hbCgkaHMsIHRydWUpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHBrICovCiAgICAgICAgJHBrID0gc2VsZjo6c3Vic3RyKCRzZWNyZXRLZXksIDMyLCAzMik7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkbm9uY2UgKi8KICAgICAgICAkbm9uY2UgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpzY19yZWR1Y2UoJG5vbmNlSGFzaCkgLiBzZWxmOjpzdWJzdHIoJG5vbmNlSGFzaCwgMzIpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHNpZyAqLwogICAgICAgICRzaWcgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpnZV9wM190b2J5dGVzKAogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpnZV9zY2FsYXJtdWx0X2Jhc2UoJG5vbmNlKQogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRocyAqLwogICAgICAgICRocyA9IGhhc2hfaW5pdCgnc2hhNTEyJyk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJHNpZywgMCwgMzIpKTsKICAgICAgICBoYXNoX3VwZGF0ZSgkaHMsIHNlbGY6OnN1YnN0cigkcGssIDAsIDMyKSk7CiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2UgJGhzICovCiAgICAgICAgJGhzID0gc2VsZjo6dXBkYXRlSGFzaFdpdGhGaWxlKCRocywgJGZwLCAkc2l6ZSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkaHJhbUhhc2ggKi8KICAgICAgICAkaHJhbUhhc2ggPSBoYXNoX2ZpbmFsKCRocywgdHJ1ZSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkaHJhbSAqLwogICAgICAgICRocmFtID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6c2NfcmVkdWNlKCRocmFtSGFzaCk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkc2lnQWZ0ZXIgKi8KICAgICAgICAkc2lnQWZ0ZXIgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpzY19tdWxhZGQoJGhyYW0sICRheiwgJG5vbmNlKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzaWcgKi8KICAgICAgICAkc2lnID0gc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSAuIHNlbGY6OnN1YnN0cigkc2lnQWZ0ZXIsIDAsIDMyKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6Om1lbXplcm8oJGF6KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRheiA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIFZlcmlmeSBhIGZpbGUgKHJhdGhlciB0aGFuIGEgc3RyaW5nKS4gVXNlcyBsZXNzIG1lbW9yeSB0aGFuCiAgICAgKiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Y3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCksIGJ1dAogICAgICogcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LiAoMzItYml0KQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZyAgICAgICBFZDI1NTE5IHNpZ25hdHVyZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZVBhdGggIEFic29sdXRlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNLZXkgU2lnbmluZyBwdWJsaWMga2V5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJpZnlfY29yZTMyKCRzaWcsICRmaWxlUGF0aCwgJHB1YmxpY0tleSkKICAgIHsKICAgICAgICAvKiBTZWN1cml0eSBjaGVja3MgKi8KICAgICAgICBpZiAoUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6Y2hlY2tfU19sdF9MKHNlbGY6OnN1YnN0cigkc2lnLCAzMiwgMzIpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdTIDwgTCAtIEludmFsaWQgc2lnbmF0dXJlJyk7CiAgICAgICAgfQogICAgICAgIGlmIChQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpzbWFsbF9vcmRlcigkc2lnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdTaWduYXR1cmUgaXMgb24gdG9vIHNtYWxsIG9mIGFuIG9yZGVyJyk7CiAgICAgICAgfQogICAgICAgIGlmICgoc2VsZjo6Y2hyVG9JbnQoJHNpZ1s2M10pICYgMjI0KSAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdJbnZhbGlkIHNpZ25hdHVyZScpOwogICAgICAgIH0KICAgICAgICAkZCA9IDA7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMzI7ICsrJGkpIHsKICAgICAgICAgICAgJGQgfD0gc2VsZjo6Y2hyVG9JbnQoJHB1YmxpY0tleVskaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoJGQgPT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQWxsIHplcm8gcHVibGljIGtleScpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgaW50fGJvb2wgJHNpemUgKi8KICAgICAgICAkc2l6ZSA9IGZpbGVzaXplKCRmaWxlUGF0aCk7CiAgICAgICAgaWYgKCFpc19pbnQoJHNpemUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCBvYnRhaW4gdGhlIGZpbGUgc2l6ZScpOwogICAgICAgIH0KICAgICAgICAvKiogQHZhciBpbnQgJHNpemUgKi8KCiAgICAgICAgLyoqIEB2YXIgcmVzb3VyY2V8Ym9vbCAkZnAgKi8KICAgICAgICAkZnAgPSBmb3BlbigkZmlsZVBhdGgsICdyYicpOwogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGZwKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3Qgb3BlbiBpbnB1dCBmaWxlIGZvciByZWFkaW5nJyk7CiAgICAgICAgfQogICAgICAgIC8qKiBAdmFyIHJlc291cmNlICRmcCAqLwoKICAgICAgICAvKiogQHZhciBib29sIFRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0ICovCiAgICAgICAgJG9yaWcgPSBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0OwoKICAgICAgICAvLyBTZXQgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCB0byB0cnVlIHRvIHNwZWVkIHVwIHZlcmlmaWNhdGlvbi4KICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6JGZhc3RNdWx0ID0gdHJ1ZTsKCiAgICAgICAgLyoqIEB2YXIgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfQ3VydmUyNTUxOV9HZV9QMyAkQSAqLwogICAgICAgICRBID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfRWQyNTUxOTo6Z2VfZnJvbWJ5dGVzX25lZ2F0ZV92YXJ0aW1lKCRwdWJsaWNLZXkpOwoKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBoYXNoX2luaXQoJ3NoYTUxMicpOwogICAgICAgIGhhc2hfdXBkYXRlKCRocywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICAgICAgaGFzaF91cGRhdGUoJGhzLCBzZWxmOjpzdWJzdHIoJHB1YmxpY0tleSwgMCwgMzIpKTsKICAgICAgICAvKiogQHZhciByZXNvdXJjZSAkaHMgKi8KICAgICAgICAkaHMgPSBzZWxmOjp1cGRhdGVIYXNoV2l0aEZpbGUoJGhzLCAkZnAsICRzaXplKTsKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGhEaWdlc3QgKi8KICAgICAgICAkaERpZ2VzdCA9IGhhc2hfZmluYWwoJGhzLCB0cnVlKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRoICovCiAgICAgICAgJGggPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9FZDI1NTE5OjpzY19yZWR1Y2UoJGhEaWdlc3QpIC4gc2VsZjo6c3Vic3RyKCRoRGlnZXN0LCAzMik7CgogICAgICAgIC8qKiBAdmFyIFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0N1cnZlMjU1MTlfR2VfUDIgJFIgKi8KICAgICAgICAkUiA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OmdlX2RvdWJsZV9zY2FsYXJtdWx0X3ZhcnRpbWUoCiAgICAgICAgICAgICRoLAogICAgICAgICAgICAkQSwKICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRzaWcsIDMyKQogICAgICAgICk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmNoZWNrICovCiAgICAgICAgJHJjaGVjayA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX0VkMjU1MTk6OmdlX3RvYnl0ZXMoJFIpOwoKICAgICAgICAvLyBDbG9zZSB0aGUgZmlsZSBoYW5kbGUKICAgICAgICBmY2xvc2UoJGZwKTsKCiAgICAgICAgLy8gUmVzZXQgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUuCiAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db21wYXQ6OiRmYXN0TXVsdCA9ICRvcmlnOwogICAgICAgIHJldHVybiBzZWxmOjp2ZXJpZnlfMzIoJHJjaGVjaywgc2VsZjo6c3Vic3RyKCRzaWcsIDAsIDMyKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0IGEgZmlsZSAoMzItYml0KQogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkaWZwCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJG9mcAogICAgICogQHBhcmFtIGludCAkbWxlbgogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogICAgICogQHRocm93cyBUeXBlRXJyb3IKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZWNyZXRib3hfZW5jcnlwdF9jb3JlMzIoJGlmcCwgJG9mcCwgJG1sZW4sICRub25jZSwgJGtleSkKICAgIHsKICAgICAgICAkcGxhaW50ZXh0ID0gZnJlYWQoJGlmcCwgMzIpOwogICAgICAgIGlmICghaXNfc3RyaW5nKCRwbGFpbnRleHQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUnKTsKICAgICAgICB9CiAgICAgICAgJGZpcnN0MzIgPSBmdGVsbCgkaWZwKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRzdWJrZXkgKi8KICAgICAgICAkc3Via2V5ID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfSFNhbHNhMjA6OmhzYWxzYTIwKCRub25jZSwgJGtleSk7CgogICAgICAgIC8qKiBAdmFyIHN0cmluZyAkcmVhbE5vbmNlICovCiAgICAgICAgJHJlYWxOb25jZSA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkbm9uY2UsIDE2LCA4KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRibG9jazAgKi8KICAgICAgICAkYmxvY2swID0gc3RyX3JlcGVhdCgiXHgwMCIsIDMyKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRtbGVuIC0gTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgbWVzc2FnZSAqLwogICAgICAgICRtbGVuMCA9ICRtbGVuOwogICAgICAgIGlmICgkbWxlbjAgPiA2NCAtIFBhcmFnb25JRV9Tb2RpdW1fQ3J5cHRvOjpzZWNyZXRib3hfeHNhbHNhMjBwb2x5MTMwNV9aRVJPQllURVMpIHsKICAgICAgICAgICAgJG1sZW4wID0gNjQgLSBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6c2VjcmV0Ym94X3hzYWxzYTIwcG9seTEzMDVfWkVST0JZVEVTOwogICAgICAgIH0KICAgICAgICAkYmxvY2swIC49IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigkcGxhaW50ZXh0LCAwLCAkbWxlbjApOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJsb2NrMCAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9TYWxzYTIwOjpzYWxzYTIwX3hvcigKICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgJHJlYWxOb25jZSwKICAgICAgICAgICAgJHN1YmtleQogICAgICAgICk7CgogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSgKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKAogICAgICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NyeXB0bzo6b25ldGltZWF1dGhfcG9seTEzMDVfS0VZQllURVMKICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgIC8vIFByZS13cml0ZSAxNiBibGFuayBieXRlcyBmb3IgdGhlIFBvbHkxMzA1IHRhZwogICAgICAgICRzdGFydCA9IGZ0ZWxsKCRvZnApOwogICAgICAgIGZ3cml0ZSgkb2ZwLCBzdHJfcmVwZWF0KCJceDAwIiwgMTYpKTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRjICovCiAgICAgICAgJGNCbG9jayA9IFBhcmFnb25JRV9Tb2RpdW1fQ29yZTMyX1V0aWw6OnN1YnN0cigKICAgICAgICAgICAgJGJsb2NrMCwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9DcnlwdG86OnNlY3JldGJveF94c2Fsc2EyMHBvbHkxMzA1X1pFUk9CWVRFUwogICAgICAgICk7CiAgICAgICAgJHN0YXRlLT51cGRhdGUoJGNCbG9jayk7CiAgICAgICAgZndyaXRlKCRvZnAsICRjQmxvY2spOwogICAgICAgICRtbGVuIC09IDMyOwoKICAgICAgICAvKiogQHZhciBpbnQgJGl0ZXIgKi8KICAgICAgICAkaXRlciA9IDE7CgogICAgICAgIC8qKiBAdmFyIGludCAkaW5jciAqLwogICAgICAgICRpbmNyID0gc2VsZjo6QlVGRkVSX1NJWkUgPj4gNjsKCiAgICAgICAgLyoKICAgICAgICAgKiBTZXQgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBmaXJzdCBoYWxmLWJsb2NrLiBBbGwgZnV0dXJlIGJ5dGVzIHdpbGwKICAgICAgICAgKiBnZW5lcmF0ZWQgZnJvbSBzYWxzYTIwX3hvcl9pYywgc3RhcnRpbmcgZnJvbSAxIChzZWNvbmQgYmxvY2spLgogICAgICAgICAqLwogICAgICAgIGZzZWVrKCRpZnAsICRmaXJzdDMyLCBTRUVLX1NFVCk7CgogICAgICAgIHdoaWxlICgkbWxlbiA+IDApIHsKICAgICAgICAgICAgJGJsb2NrU2l6ZSA9ICRtbGVuID4gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgID8gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgIDogJG1sZW47CiAgICAgICAgICAgICRwbGFpbnRleHQgPSBmcmVhZCgkaWZwLCAkYmxvY2tTaXplKTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJHBsYWludGV4dCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY0Jsb2NrID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICAkcGxhaW50ZXh0LAogICAgICAgICAgICAgICAgJHJlYWxOb25jZSwKICAgICAgICAgICAgICAgICRpdGVyLAogICAgICAgICAgICAgICAgJHN1YmtleQogICAgICAgICAgICApOwogICAgICAgICAgICBmd3JpdGUoJG9mcCwgJGNCbG9jaywgJGJsb2NrU2l6ZSk7CiAgICAgICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjQmxvY2spOwoKICAgICAgICAgICAgJG1sZW4gLT0gJGJsb2NrU2l6ZTsKICAgICAgICAgICAgJGl0ZXIgKz0gJGluY3I7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIFBhcmFnb25JRV9Tb2RpdW1fQ29tcGF0OjptZW16ZXJvKCRibG9jazApOwogICAgICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6bWVtemVybygkc3Via2V5KTsKICAgICAgICB9IGNhdGNoIChTb2RpdW1FeGNlcHRpb24gJGV4KSB7CiAgICAgICAgICAgICRibG9jazAgPSBudWxsOwogICAgICAgICAgICAkc3Via2V5ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGVuZCA9IGZ0ZWxsKCRvZnApOwoKICAgICAgICAvKgogICAgICAgICAqIFdyaXRlIHRoZSBQb2x5MTMwNSBhdXRoZW50aWNhdGlvbiB0YWcgdGhhdCBwcm92aWRlcyBpbnRlZ3JpdHkKICAgICAgICAgKiBvdmVyIHRoZSBjaXBoZXJ0ZXh0IChlbmNyeXB0LXRoZW4tTUFDKQogICAgICAgICAqLwogICAgICAgIGZzZWVrKCRvZnAsICRzdGFydCwgU0VFS19TRVQpOwogICAgICAgIGZ3cml0ZSgkb2ZwLCAkc3RhdGUtPmZpbmlzaCgpLCBQYXJhZ29uSUVfU29kaXVtX0NvbXBhdDo6Q1JZUFRPX1NFQ1JFVEJPWF9NQUNCWVRFUyk7CiAgICAgICAgZnNlZWsoJG9mcCwgJGVuZCwgU0VFS19TRVQpOwogICAgICAgIHVuc2V0KCRzdGF0ZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBhIGZpbGUgKDMyLWJpdCkKICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGlmcAogICAgICogQHBhcmFtIHJlc291cmNlICRvZnAKICAgICAqIEBwYXJhbSBpbnQgJG1sZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2VjcmV0Ym94X2RlY3J5cHRfY29yZTMyKCRpZnAsICRvZnAsICRtbGVuLCAkbm9uY2UsICRrZXkpCiAgICB7CiAgICAgICAgJHRhZyA9IGZyZWFkKCRpZnAsIDE2KTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkdGFnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU29kaXVtRXhjZXB0aW9uKCdDb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlJyk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJHN1YmtleSAqLwogICAgICAgICRzdWJrZXkgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9IU2Fsc2EyMDo6aHNhbHNhMjAoJG5vbmNlLCAka2V5KTsKCiAgICAgICAgLyoqIEB2YXIgc3RyaW5nICRyZWFsTm9uY2UgKi8KICAgICAgICAkcmVhbE5vbmNlID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpOwoKICAgICAgICAvKiogQHZhciBzdHJpbmcgJGJsb2NrMCAqLwogICAgICAgICRibG9jazAgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9TYWxzYTIwOjpzYWxzYTIwKAogICAgICAgICAgICA2NCwKICAgICAgICAgICAgUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfVXRpbDo6c3Vic3RyKCRub25jZSwgMTYsIDgpLAogICAgICAgICAgICAkc3Via2V5CiAgICAgICAgKTsKCiAgICAgICAgLyogVmVyaWZ5IHRoZSBQb2x5MTMwNSBNQUMgLWJlZm9yZS0gYXR0ZW1wdGluZyB0byBkZWNyeXB0ISAqLwogICAgICAgICRzdGF0ZSA9IG5ldyBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZShzZWxmOjpzdWJzdHIoJGJsb2NrMCwgMCwgMzIpKTsKICAgICAgICBpZiAoIXNlbGY6Om9uZXRpbWVhdXRoX3ZlcmlmeV9jb3JlMzIoJHN0YXRlLCAkaWZwLCAkdGFnLCAkbWxlbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignSW52YWxpZCBNQUMnKTsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogU2V0IHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgZmlyc3QgaGFsZi1ibG9jay4gQWxsIGZ1dHVyZSBieXRlcyB3aWxsCiAgICAgICAgICogZ2VuZXJhdGVkIGZyb20gc2Fsc2EyMF94b3JfaWMsIHN0YXJ0aW5nIGZyb20gMSAoc2Vjb25kIGJsb2NrKS4KICAgICAgICAgKi8KICAgICAgICAkZmlyc3QzMiA9IGZyZWFkKCRpZnAsIDMyKTsKICAgICAgICBpZiAoIWlzX3N0cmluZygkZmlyc3QzMikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgIH0KICAgICAgICAkZmlyc3QzMmxlbiA9IHNlbGY6OnN0cmxlbigkZmlyc3QzMik7CiAgICAgICAgZndyaXRlKAogICAgICAgICAgICAkb2ZwLAogICAgICAgICAgICBzZWxmOjp4b3JTdHJpbmdzKAogICAgICAgICAgICAgICAgc2VsZjo6c3Vic3RyKCRibG9jazAsIDMyLCAkZmlyc3QzMmxlbiksCiAgICAgICAgICAgICAgICBzZWxmOjpzdWJzdHIoJGZpcnN0MzIsIDAsICRmaXJzdDMybGVuKQogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAkbWxlbiAtPSAzMjsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRpdGVyICovCiAgICAgICAgJGl0ZXIgPSAxOwoKICAgICAgICAvKiogQHZhciBpbnQgJGluY3IgKi8KICAgICAgICAkaW5jciA9IHNlbGY6OkJVRkZFUl9TSVpFID4+IDY7CgogICAgICAgIC8qIERlY3J5cHRzIGNpcGhlcnRleHQsIHdyaXRlcyB0byBvdXRwdXQgZmlsZS4gKi8KICAgICAgICB3aGlsZSAoJG1sZW4gPiAwKSB7CiAgICAgICAgICAgICRibG9ja1NpemUgPSAkbWxlbiA+IHNlbGY6OkJVRkZFUl9TSVpFCiAgICAgICAgICAgICAgICA/IHNlbGY6OkJVRkZFUl9TSVpFCiAgICAgICAgICAgICAgICA6ICRtbGVuOwogICAgICAgICAgICAkY2lwaGVydGV4dCA9IGZyZWFkKCRpZnAsICRibG9ja1NpemUpOwogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkY2lwaGVydGV4dCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTb2RpdW1FeGNlcHRpb24oJ0NvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcEJsb2NrID0gUGFyYWdvbklFX1NvZGl1bV9Db3JlMzJfU2Fsc2EyMDo6c2Fsc2EyMF94b3JfaWMoCiAgICAgICAgICAgICAgICAkY2lwaGVydGV4dCwKICAgICAgICAgICAgICAgICRyZWFsTm9uY2UsCiAgICAgICAgICAgICAgICAkaXRlciwKICAgICAgICAgICAgICAgICRzdWJrZXkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZndyaXRlKCRvZnAsICRwQmxvY2ssICRibG9ja1NpemUpOwogICAgICAgICAgICAkbWxlbiAtPSAkYmxvY2tTaXplOwogICAgICAgICAgICAkaXRlciArPSAkaW5jcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBPbmUtdGltZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGZvciAzMi1iaXQgc3lzdGVtcwogICAgICoKICAgICAqIEBwYXJhbSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSAkc3RhdGUKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkaWZwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWcKICAgICAqIEBwYXJhbSBpbnQgJG1sZW4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICAgICAqIEB0aHJvd3MgVHlwZUVycm9yCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gb25ldGltZWF1dGhfdmVyaWZ5X2NvcmUzMigKICAgICAgICBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9Qb2x5MTMwNV9TdGF0ZSAkc3RhdGUsCiAgICAgICAgJGlmcCwKICAgICAgICAkdGFnID0gJycsCiAgICAgICAgJG1sZW4gPSAwCiAgICApIHsKICAgICAgICAvKiogQHZhciBpbnQgJHBvcyAqLwogICAgICAgICRwb3MgPSBmdGVsbCgkaWZwKTsKCiAgICAgICAgLyoqIEB2YXIgaW50ICRpdGVyICovCiAgICAgICAgJGl0ZXIgPSAxOwoKICAgICAgICAvKiogQHZhciBpbnQgJGluY3IgKi8KICAgICAgICAkaW5jciA9IHNlbGY6OkJVRkZFUl9TSVpFID4+IDY7CgogICAgICAgIHdoaWxlICgkbWxlbiA+IDApIHsKICAgICAgICAgICAgJGJsb2NrU2l6ZSA9ICRtbGVuID4gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgID8gc2VsZjo6QlVGRkVSX1NJWkUKICAgICAgICAgICAgICAgIDogJG1sZW47CiAgICAgICAgICAgICRjaXBoZXJ0ZXh0ID0gZnJlYWQoJGlmcCwgJGJsb2NrU2l6ZSk7CiAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRjaXBoZXJ0ZXh0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNvZGl1bUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgaW5wdXQgZmlsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdGF0ZS0+dXBkYXRlKCRjaXBoZXJ0ZXh0KTsKICAgICAgICAgICAgJG1sZW4gLT0gJGJsb2NrU2l6ZTsKICAgICAgICAgICAgJGl0ZXIgKz0gJGluY3I7CiAgICAgICAgfQogICAgICAgICRyZXMgPSBQYXJhZ29uSUVfU29kaXVtX0NvcmUzMl9VdGlsOjp2ZXJpZnlfMTYoJHRhZywgJHN0YXRlLT5maW5pc2goKSk7CgogICAgICAgIGZzZWVrKCRpZnAsICRwb3MsIFNFRUtfU0VUKTsKICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/paragonie/sodium_compat/src/SodiumException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY2xhc3NfZXhpc3RzKCdTb2RpdW1FeGNlcHRpb24nLCBmYWxzZSkpIHsKICAgIC8qKgogICAgICogQ2xhc3MgU29kaXVtRXhjZXB0aW9uCiAgICAgKi8KICAgIGNsYXNzIFNvZGl1bUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgogICAgewoKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjEgLSAyMDE2LTA4LTA2CgojIyMgQWRkZWQKCi0gTm90aGluZy4KCiMjIyBEZXByZWNhdGVkCgotIE5vdGhpbmcuCgojIyMgUmVtb3ZlZAoKLSBOb3RoaW5nLgoKIyMjIEZpeGVkCgotIFVwZGF0ZWQgYWxsIGBAcmV0dXJuIHNlbGZgIGFubm90YXRpb24gcmVmZXJlbmNlcyBpbiBpbnRlcmZhY2VzIHRvIHVzZQogIGBAcmV0dXJuIHN0YXRpY2AsIHdoaWNoIG1vcmUgY2xvc2VsbHkgZm9sbG93cyB0aGUgc2VtYW50aWNzIG9mIHRoZQogIHNwZWNpZmljYXRpb24uCi0gVXBkYXRlZCB0aGUgYE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcnMoKWAgcmV0dXJuIGFubm90YXRpb24gdG8gdXNlIHRoZQogIHZhbHVlIGBzdHJpbmdbXVtdYCwgaW5kaWNhdGluZyB0aGUgZm9ybWF0IGlzIGEgbmVzdGVkIGFycmF5IG9mIHN0cmluZ3MuCi0gVXBkYXRlZCB0aGUgYEBsaW5rYCBhbm5vdGF0aW9uIGZvciBgUmVxdWVzdEludGVyZmFjZTo6d2l0aFJlcXVlc3RUYXJnZXQoKWAKICB0byBwb2ludCB0byB0aGUgY29ycmVjdCBzZWN0aW9uIG9mIFJGQyA3MjMwLgotIFVwZGF0ZWQgdGhlIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRoVXBsb2FkZWRGaWxlcygpYCBwYXJhbWV0ZXIgYW5ub3RhdGlvbgogIHRvIGFkZCB0aGUgcGFyYW1ldGVyIG5hbWUgKGAkdXBsb2FkZWRGaWxlc2ApLgotIFVwZGF0ZWQgYSBgQHRocm93c2AgYW5ub3RhdGlvbiBmb3IgdGhlIGBVcGxvYWRlZEZpbGVJbnRlcmZhY2U6Om1vdmVUbygpYAogIG1ldGhvZCB0byBjb3JyZWN0bHkgcmVmZXJlbmNlIHRoZSBtZXRob2QgcGFyYW1ldGVyIChpdCB3YXMgcmVmZXJlbmNpbmcgYW4KICBpbmNvcnJlY3QgcGFyYW1ldGVyIG5hbWUgcHJldmlvdXNseSkuCgojIyAxLjAuMCAtIDIwMTYtMDUtMTgKCkluaXRpYWwgc3RhYmxlIHJlbGVhc2U7IHJlZmxlY3RzIGFjY2VwdGVkIFBTUi03IHNwZWNpZmljYXRpb24uCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAia2V5d29yZHMiOiBbInBzciIsICJwc3ItNyIsICJodHRwIiwgImh0dHAtbWVzc2FnZSIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDE0IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UFNSIEh0dHAgTWVzc2FnZQo9PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTddKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuCmludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIEhUVFAgbWVzc2FnZS4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpVc2FnZQotLS0tLQoKV2UnbGwgY2VydGFpbmx5IG5lZWQgc29tZSBzdHVmZiBpbiBoZXJlLg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/MessageInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIEhUVFAgbWVzc2FnZXMgY29uc2lzdCBvZiByZXF1ZXN0cyBmcm9tIGEgY2xpZW50IHRvIGEgc2VydmVyIGFuZCByZXNwb25zZXMKICogZnJvbSBhIHNlcnZlciB0byBhIGNsaWVudC4gVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyB0aGUgbWV0aG9kcyBjb21tb24gdG8KICogZWFjaC4KICoKICogTWVzc2FnZXMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqCiAqIEBsaW5rIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzcyMzAudHh0CiAqIEBsaW5rIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzcyMzEudHh0CiAqLwppbnRlcmZhY2UgTWVzc2FnZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlcyB0aGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIGFzIGEgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBzdHJpbmcgTVVTVCBjb250YWluIG9ubHkgdGhlIEhUVFAgdmVyc2lvbiBudW1iZXIgKGUuZy4sICIxLjEiLCAiMS4wIikuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdG9jb2xWZXJzaW9uKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIEhUVFAgcHJvdG9jb2wgdmVyc2lvbi4KICAgICAqCiAgICAgKiBUaGUgdmVyc2lvbiBzdHJpbmcgTVVTVCBjb250YWluIG9ubHkgdGhlIEhUVFAgdmVyc2lvbiBudW1iZXIgKGUuZy4sCiAgICAgKiAiMS4xIiwgIjEuMCIpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24gSFRUUCBwcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFByb3RvY29sVmVyc2lvbigkdmVyc2lvbik7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYWxsIG1lc3NhZ2UgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUga2V5cyByZXByZXNlbnQgdGhlIGhlYWRlciBuYW1lIGFzIGl0IHdpbGwgYmUgc2VudCBvdmVyIHRoZSB3aXJlLCBhbmQKICAgICAqIGVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiAgICAgLy8gUmVwcmVzZW50IHRoZSBoZWFkZXJzIGFzIGEgc3RyaW5nCiAgICAgKiAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgKiAgICAgICAgIGVjaG8gJG5hbWUgLiAiOiAiIC4gaW1wbG9kZSgiLCAiLCAkdmFsdWVzKTsKICAgICAqICAgICB9CiAgICAgKgogICAgICogICAgIC8vIEVtaXQgaGVhZGVycyBpdGVyYXRpdmVseToKICAgICAqICAgICBmb3JlYWNoICgkbWVzc2FnZS0+Z2V0SGVhZGVycygpIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAqICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAqICAgICAgICAgICAgIGhlYWRlcihzcHJpbnRmKCclczogJXMnLCAkbmFtZSwgJHZhbHVlKSwgZmFsc2UpOwogICAgICogICAgICAgICB9CiAgICAgKiAgICAgfQogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBnZXRIZWFkZXJzKCkgd2lsbCBwcmVzZXJ2ZSB0aGUKICAgICAqIGV4YWN0IGNhc2UgaW4gd2hpY2ggaGVhZGVycyB3ZXJlIG9yaWdpbmFsbHkgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW11bXSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBtZXNzYWdlJ3MgaGVhZGVycy4gRWFjaAogICAgICogICAgIGtleSBNVVNUIGJlIGEgaGVhZGVyIG5hbWUsIGFuZCBlYWNoIHZhbHVlIE1VU1QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICogICAgIGZvciB0aGF0IGhlYWRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKTsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIGhlYWRlciBleGlzdHMgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIGFueSBoZWFkZXIgbmFtZXMgbWF0Y2ggdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgIG5hbWUgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uLiBSZXR1cm5zIGZhbHNlIGlmCiAgICAgKiAgICAgbm8gbWF0Y2hpbmcgaGVhZGVyIG5hbWUgaXMgZm91bmQgaW4gdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoJG5hbWUpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgbWVzc2FnZSBoZWFkZXIgdmFsdWUgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgaGVhZGVyIHZhbHVlcyBvZiB0aGUgZ2l2ZW4KICAgICAqIGNhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIG5hbWUuCiAgICAgKgogICAgICogSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuCiAgICAgKiBlbXB0eSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgYXMgcHJvdmlkZWQgZm9yIHRoZSBnaXZlbgogICAgICogICAgaGVhZGVyLiBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgbWVzc2FnZSwgdGhpcyBtZXRob2QgTVVTVAogICAgICogICAgcmV0dXJuIGFuIGVtcHR5IGFycmF5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRuYW1lKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2YgdGhlIHZhbHVlcyBmb3IgYSBzaW5nbGUgaGVhZGVyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYWxsIG9mIHRoZSBoZWFkZXIgdmFsdWVzIG9mIHRoZSBnaXZlbgogICAgICogY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgbmFtZSBhcyBhIHN0cmluZyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdXNpbmcKICAgICAqIGEgY29tbWEuCiAgICAgKgogICAgICogTk9URTogTm90IGFsbCBoZWFkZXIgdmFsdWVzIG1heSBiZSBhcHByb3ByaWF0ZWx5IHJlcHJlc2VudGVkIHVzaW5nCiAgICAgKiBjb21tYSBjb25jYXRlbmF0aW9uLiBGb3Igc3VjaCBoZWFkZXJzLCB1c2UgZ2V0SGVhZGVyKCkgaW5zdGVhZAogICAgICogYW5kIHN1cHBseSB5b3VyIG93biBkZWxpbWl0ZXIgd2hlbiBjb25jYXRlbmF0aW5nLgogICAgICoKICAgICAqIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZS4KICAgICAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIG9mIHZhbHVlcyBhcyBwcm92aWRlZCBmb3IgdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHVzaW5nIGEgY29tbWEuIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluCiAgICAgKiAgICB0aGUgbWVzc2FnZSwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyTGluZSgkbmFtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUgcmVwbGFjaW5nIHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgdGhlIGNhc2luZyBvZiB0aGUgaGVhZGVyIHdpbGwKICAgICAqIGJlIHByZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgcmV0dXJuZWQgZnJvbSBnZXRIZWFkZXJzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGFuZC9vciB1cGRhdGVkIGhlYWRlciBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkdmFsdWUgSGVhZGVyIHZhbHVlKHMpLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBoZWFkZXIgbmFtZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcigkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgaGVhZGVyIGFwcGVuZGVkIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEV4aXN0aW5nIHZhbHVlcyBmb3IgdGhlIHNwZWNpZmllZCBoZWFkZXIgd2lsbCBiZSBtYWludGFpbmVkLiBUaGUgbmV3CiAgICAgKiB2YWx1ZShzKSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBleGlzdGluZyBsaXN0LiBJZiB0aGUgaGVhZGVyIGRpZCBub3QKICAgICAqIGV4aXN0IHByZXZpb3VzbHksIGl0IHdpbGwgYmUgYWRkZWQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGhlYWRlciBhbmQvb3IgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lIHRvIGFkZC4KICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHZhbHVlIEhlYWRlciB2YWx1ZShzKS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgaGVhZGVyIG5hbWVzIG9yIHZhbHVlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhBZGRlZEhlYWRlcigkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRob3V0IHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIEhlYWRlciByZXNvbHV0aW9uIE1VU1QgYmUgZG9uZSB3aXRob3V0IGNhc2Utc2Vuc2l0aXZpdHkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcwogICAgICogdGhlIG5hbWVkIGhlYWRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUgdG8gcmVtb3ZlLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJG5hbWUpOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZSBSZXR1cm5zIHRoZSBib2R5IGFzIGEgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogVGhlIGJvZHkgTVVTVCBiZSBhIFN0cmVhbUludGVyZmFjZSBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGJvZHkgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJGJvZHkgQm9keS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gV2hlbiB0aGUgYm9keSBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/RequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBjbGllbnQtc2lkZSByZXF1ZXN0LgogKgogKiBQZXIgdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiwgdGhpcyBpbnRlcmZhY2UgaW5jbHVkZXMgcHJvcGVydGllcyBmb3IKICogZWFjaCBvZiB0aGUgZm9sbG93aW5nOgogKgogKiAtIFByb3RvY29sIHZlcnNpb24KICogLSBIVFRQIG1ldGhvZAogKiAtIFVSSQogKiAtIEhlYWRlcnMKICogLSBNZXNzYWdlIGJvZHkKICoKICogRHVyaW5nIGNvbnN0cnVjdGlvbiwgaW1wbGVtZW50YXRpb25zIE1VU1QgYXR0ZW1wdCB0byBzZXQgdGhlIEhvc3QgaGVhZGVyIGZyb20KICogYSBwcm92aWRlZCBVUkkgaWYgbm8gSG9zdCBoZWFkZXIgaXMgcHJvdmlkZWQuCiAqCiAqIFJlcXVlc3RzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgTVVTVAogKiBiZSBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgdGhleSByZXRhaW4gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjdXJyZW50CiAqIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmZhY2UgZXh0ZW5kcyBNZXNzYWdlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlJ3MgcmVxdWVzdCB0YXJnZXQuCiAgICAgKgogICAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlJ3MgcmVxdWVzdC10YXJnZXQgZWl0aGVyIGFzIGl0IHdpbGwgYXBwZWFyIChmb3IKICAgICAqIGNsaWVudHMpLCBhcyBpdCBhcHBlYXJlZCBhdCByZXF1ZXN0IChmb3Igc2VydmVycyksIG9yIGFzIGl0IHdhcwogICAgICogc3BlY2lmaWVkIGZvciB0aGUgaW5zdGFuY2UgKHNlZSB3aXRoUmVxdWVzdFRhcmdldCgpKS4KICAgICAqCiAgICAgKiBJbiBtb3N0IGNhc2VzLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbi1mb3JtIG9mIHRoZSBjb21wb3NlZCBVUkksCiAgICAgKiB1bmxlc3MgYSB2YWx1ZSB3YXMgcHJvdmlkZWQgdG8gdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIChzZWUKICAgICAqIHdpdGhSZXF1ZXN0VGFyZ2V0KCkgYmVsb3cpLgogICAgICoKICAgICAqIElmIG5vIFVSSSBpcyBhdmFpbGFibGUsIGFuZCBubyByZXF1ZXN0LXRhcmdldCBoYXMgYmVlbiBzcGVjaWZpY2FsbHkKICAgICAqIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiB0aGUgc3RyaW5nICIvIi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdFRhcmdldCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVlc3QtdGFyZ2V0LgogICAgICoKICAgICAqIElmIHRoZSByZXF1ZXN0IG5lZWRzIGEgbm9uLW9yaWdpbi1mb3JtIHJlcXVlc3QtdGFyZ2V0IOKAlCBlLmcuLCBmb3IKICAgICAqIHNwZWNpZnlpbmcgYW4gYWJzb2x1dGUtZm9ybSwgYXV0aG9yaXR5LWZvcm0sIG9yIGFzdGVyaXNrLWZvcm0g4oCUCiAgICAgKiB0aGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgKiByZXF1ZXN0LXRhcmdldCwgdmVyYmF0aW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogY2hhbmdlZCByZXF1ZXN0IHRhcmdldC4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tNS4zIChmb3IgdGhlIHZhcmlvdXMKICAgICAqICAgICByZXF1ZXN0LXRhcmdldCBmb3JtcyBhbGxvd2VkIGluIHJlcXVlc3QgbWVzc2FnZXMpCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlcXVlc3RUYXJnZXQKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUmVxdWVzdFRhcmdldCgkcmVxdWVzdFRhcmdldCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHJlcXVlc3QgbWV0aG9kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0aG9kKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgSFRUUCBtZXRob2QuCiAgICAgKgogICAgICogV2hpbGUgSFRUUCBtZXRob2QgbmFtZXMgYXJlIHR5cGljYWxseSBhbGwgdXBwZXJjYXNlIGNoYXJhY3RlcnMsIEhUVFAKICAgICAqIG1ldGhvZCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIHRodXMgaW1wbGVtZW50YXRpb25zIFNIT1VMRCBOT1QKICAgICAqIG1vZGlmeSB0aGUgZ2l2ZW4gc3RyaW5nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIGNoYW5nZWQgcmVxdWVzdCBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kIENhc2Utc2Vuc2l0aXZlIG1ldGhvZC4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgSFRUUCBtZXRob2RzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aE1ldGhvZCgkbWV0aG9kKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyB0aGUgVVJJIGluc3RhbmNlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgVXJpSW50ZXJmYWNlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjMKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlIFJldHVybnMgYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqICAgICByZXByZXNlbnRpbmcgdGhlIFVSSSBvZiB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVyaSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCB1cGRhdGUgdGhlIEhvc3QgaGVhZGVyIG9mIHRoZSByZXR1cm5lZCByZXF1ZXN0IGJ5CiAgICAgKiBkZWZhdWx0IGlmIHRoZSBVUkkgY29udGFpbnMgYSBob3N0IGNvbXBvbmVudC4gSWYgdGhlIFVSSSBkb2VzIG5vdAogICAgICogY29udGFpbiBhIGhvc3QgY29tcG9uZW50LCBhbnkgcHJlLWV4aXN0aW5nIEhvc3QgaGVhZGVyIE1VU1QgYmUgY2FycmllZAogICAgICogb3ZlciB0byB0aGUgcmV0dXJuZWQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBZb3UgY2FuIG9wdC1pbiB0byBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSG9zdCBoZWFkZXIgYnkKICAgICAqIHNldHRpbmcgYCRwcmVzZXJ2ZUhvc3RgIHRvIGB0cnVlYC4gV2hlbiBgJHByZXNlcnZlSG9zdGAgaXMgc2V0IHRvCiAgICAgKiBgdHJ1ZWAsIHRoaXMgbWV0aG9kIGludGVyYWN0cyB3aXRoIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgZm9sbG93aW5nIHdheXM6CiAgICAgKgogICAgICogLSBJZiB0aGUgSG9zdCBoZWFkZXIgaXMgbWlzc2luZyBvciBlbXB0eSwgYW5kIHRoZSBuZXcgVVJJIGNvbnRhaW5zCiAgICAgKiAgIGEgaG9zdCBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgdXBkYXRlIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgcmV0dXJuZWQKICAgICAqICAgcmVxdWVzdC4KICAgICAqIC0gSWYgdGhlIEhvc3QgaGVhZGVyIGlzIG1pc3Npbmcgb3IgZW1wdHksIGFuZCB0aGUgbmV3IFVSSSBkb2VzIG5vdCBjb250YWluIGEKICAgICAqICAgaG9zdCBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgTk9UIHVwZGF0ZSB0aGUgSG9zdCBoZWFkZXIgaW4gdGhlIHJldHVybmVkCiAgICAgKiAgIHJlcXVlc3QuCiAgICAgKiAtIElmIGEgSG9zdCBoZWFkZXIgaXMgcHJlc2VudCBhbmQgbm9uLWVtcHR5LCB0aGlzIG1ldGhvZCBNVVNUIE5PVCB1cGRhdGUKICAgICAqICAgdGhlIEhvc3QgaGVhZGVyIGluIHRoZSByZXR1cm5lZCByZXF1ZXN0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBVcmlJbnRlcmZhY2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMwogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpIE5ldyByZXF1ZXN0IFVSSSB0byB1c2UuCiAgICAgKiBAcGFyYW0gYm9vbCAkcHJlc2VydmVIb3N0IFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSG9zdCBoZWFkZXIuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVyaShVcmlJbnRlcmZhY2UgJHVyaSwgJHByZXNlcnZlSG9zdCA9IGZhbHNlKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ResponseInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBzZXJ2ZXItc2lkZSByZXNwb25zZS4KICoKICogUGVyIHRoZSBIVFRQIHNwZWNpZmljYXRpb24sIHRoaXMgaW50ZXJmYWNlIGluY2x1ZGVzIHByb3BlcnRpZXMgZm9yCiAqIGVhY2ggb2YgdGhlIGZvbGxvd2luZzoKICoKICogLSBQcm90b2NvbCB2ZXJzaW9uCiAqIC0gU3RhdHVzIGNvZGUgYW5kIHJlYXNvbiBwaHJhc2UKICogLSBIZWFkZXJzCiAqIC0gTWVzc2FnZSBib2R5CiAqCiAqIFJlc3BvbnNlcyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmludGVyZmFjZSBSZXNwb25zZUludGVyZmFjZSBleHRlbmRzIE1lc3NhZ2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBHZXRzIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZS4KICAgICAqCiAgICAgKiBUaGUgc3RhdHVzIGNvZGUgaXMgYSAzLWRpZ2l0IGludGVnZXIgcmVzdWx0IGNvZGUgb2YgdGhlIHNlcnZlcidzIGF0dGVtcHQKICAgICAqIHRvIHVuZGVyc3RhbmQgYW5kIHNhdGlzZnkgdGhlIHJlcXVlc3QuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgU3RhdHVzIGNvZGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXR1cyBjb2RlIGFuZCwgb3B0aW9uYWxseSwgcmVhc29uIHBocmFzZS4KICAgICAqCiAgICAgKiBJZiBubyByZWFzb24gcGhyYXNlIGlzIHNwZWNpZmllZCwgaW1wbGVtZW50YXRpb25zIE1BWSBjaG9vc2UgdG8gZGVmYXVsdAogICAgICogdG8gdGhlIFJGQyA3MjMxIG9yIElBTkEgcmVjb21tZW5kZWQgcmVhc29uIHBocmFzZSBmb3IgdGhlIHJlc3BvbnNlJ3MKICAgICAqIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgc3RhdHVzIGFuZCByZWFzb24gcGhyYXNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02CiAgICAgKiBAbGluayBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2h0dHAtc3RhdHVzLWNvZGVzL2h0dHAtc3RhdHVzLWNvZGVzLnhodG1sCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIFRoZSAzLWRpZ2l0IGludGVnZXIgcmVzdWx0IGNvZGUgdG8gc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAkcmVhc29uUGhyYXNlIFRoZSByZWFzb24gcGhyYXNlIHRvIHVzZSB3aXRoIHRoZQogICAgICogICAgIHByb3ZpZGVkIHN0YXR1cyBjb2RlOyBpZiBub25lIGlzIHByb3ZpZGVkLCBpbXBsZW1lbnRhdGlvbnMgTUFZCiAgICAgKiAgICAgdXNlIHRoZSBkZWZhdWx0cyBhcyBzdWdnZXN0ZWQgaW4gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbi4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gRm9yIGludmFsaWQgc3RhdHVzIGNvZGUgYXJndW1lbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFN0YXR1cygkY29kZSwgJHJlYXNvblBocmFzZSA9ICcnKTsKCiAgICAvKioKICAgICAqIEdldHMgdGhlIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgICAqCiAgICAgKiBCZWNhdXNlIGEgcmVhc29uIHBocmFzZSBpcyBub3QgYSByZXF1aXJlZCBlbGVtZW50IGluIGEgcmVzcG9uc2UKICAgICAqIHN0YXR1cyBsaW5lLCB0aGUgcmVhc29uIHBocmFzZSB2YWx1ZSBNQVkgYmUgbnVsbC4gSW1wbGVtZW50YXRpb25zIE1BWQogICAgICogY2hvb3NlIHRvIHJldHVybiB0aGUgZGVmYXVsdCBSRkMgNzIzMSByZWNvbW1lbmRlZCByZWFzb24gcGhyYXNlIChvciB0aG9zZQogICAgICogbGlzdGVkIGluIHRoZSBJQU5BIEhUVFAgU3RhdHVzIENvZGUgUmVnaXN0cnkpIGZvciB0aGUgcmVzcG9uc2UncwogICAgICogc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1zdGF0dXMtY29kZXMvaHR0cC1zdGF0dXMtY29kZXMueGh0bWwKICAgICAqIEByZXR1cm4gc3RyaW5nIFJlYXNvbiBwaHJhc2U7IG11c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub25lIHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZWFzb25QaHJhc2UoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/ServerRequestInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIGluY29taW5nLCBzZXJ2ZXItc2lkZSBIVFRQIHJlcXVlc3QuCiAqCiAqIFBlciB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLCB0aGlzIGludGVyZmFjZSBpbmNsdWRlcyBwcm9wZXJ0aWVzIGZvcgogKiBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIC0gUHJvdG9jb2wgdmVyc2lvbgogKiAtIEhUVFAgbWV0aG9kCiAqIC0gVVJJCiAqIC0gSGVhZGVycwogKiAtIE1lc3NhZ2UgYm9keQogKgogKiBBZGRpdGlvbmFsbHksIGl0IGVuY2Fwc3VsYXRlcyBhbGwgZGF0YSBhcyBpdCBoYXMgYXJyaXZlZCB0byB0aGUKICogYXBwbGljYXRpb24gZnJvbSB0aGUgQ0dJIGFuZC9vciBQSFAgZW52aXJvbm1lbnQsIGluY2x1ZGluZzoKICoKICogLSBUaGUgdmFsdWVzIHJlcHJlc2VudGVkIGluICRfU0VSVkVSLgogKiAtIEFueSBjb29raWVzIHByb3ZpZGVkIChnZW5lcmFsbHkgdmlhICRfQ09PS0lFKQogKiAtIFF1ZXJ5IHN0cmluZyBhcmd1bWVudHMgKGdlbmVyYWxseSB2aWEgJF9HRVQsIG9yIGFzIHBhcnNlZCB2aWEgcGFyc2Vfc3RyKCkpCiAqIC0gVXBsb2FkIGZpbGVzLCBpZiBhbnkgKGFzIHJlcHJlc2VudGVkIGJ5ICRfRklMRVMpCiAqIC0gRGVzZXJpYWxpemVkIGJvZHkgcGFyYW1ldGVycyAoZ2VuZXJhbGx5IGZyb20gJF9QT1NUKQogKgogKiAkX1NFUlZFUiB2YWx1ZXMgTVVTVCBiZSB0cmVhdGVkIGFzIGltbXV0YWJsZSwgYXMgdGhleSByZXByZXNlbnQgYXBwbGljYXRpb24KICogc3RhdGUgYXQgdGhlIHRpbWUgb2YgcmVxdWVzdDsgYXMgc3VjaCwgbm8gbWV0aG9kcyBhcmUgcHJvdmlkZWQgdG8gYWxsb3cKICogbW9kaWZpY2F0aW9uIG9mIHRob3NlIHZhbHVlcy4gVGhlIG90aGVyIHZhbHVlcyBwcm92aWRlIHN1Y2ggbWV0aG9kcywgYXMgdGhleQogKiBjYW4gYmUgcmVzdG9yZWQgZnJvbSAkX1NFUlZFUiBvciB0aGUgcmVxdWVzdCBib2R5LCBhbmQgbWF5IG5lZWQgdHJlYXRtZW50CiAqIGR1cmluZyB0aGUgYXBwbGljYXRpb24gKGUuZy4sIGJvZHkgcGFyYW1ldGVycyBtYXkgYmUgZGVzZXJpYWxpemVkIGJhc2VkIG9uCiAqIGNvbnRlbnQgdHlwZSkuCiAqCiAqIEFkZGl0aW9uYWxseSwgdGhpcyBpbnRlcmZhY2UgcmVjb2duaXplcyB0aGUgdXRpbGl0eSBvZiBpbnRyb3NwZWN0aW5nIGEKICogcmVxdWVzdCB0byBkZXJpdmUgYW5kIG1hdGNoIGFkZGl0aW9uYWwgcGFyYW1ldGVycyAoZS5nLiwgdmlhIFVSSSBwYXRoCiAqIG1hdGNoaW5nLCBkZWNyeXB0aW5nIGNvb2tpZSB2YWx1ZXMsIGRlc2VyaWFsaXppbmcgbm9uLWZvcm0tZW5jb2RlZCBib2R5CiAqIGNvbnRlbnQsIG1hdGNoaW5nIGF1dGhvcml6YXRpb24gaGVhZGVycyB0byB1c2VycywgZXRjKS4gVGhlc2UgcGFyYW1ldGVycwogKiBhcmUgc3RvcmVkIGluIGFuICJhdHRyaWJ1dGVzIiBwcm9wZXJ0eS4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgU2VydmVyUmVxdWVzdEludGVyZmFjZSBleHRlbmRzIFJlcXVlc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBzZXJ2ZXIgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgZGF0YSByZWxhdGVkIHRvIHRoZSBpbmNvbWluZyByZXF1ZXN0IGVudmlyb25tZW50LAogICAgICogdHlwaWNhbGx5IGRlcml2ZWQgZnJvbSBQSFAncyAkX1NFUlZFUiBzdXBlcmdsb2JhbC4gVGhlIGRhdGEgSVMgTk9UCiAgICAgKiBSRVFVSVJFRCB0byBvcmlnaW5hdGUgZnJvbSAkX1NFUlZFUi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJQYXJhbXMoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGNvb2tpZXMuCiAgICAgKgogICAgICogUmV0cmlldmVzIGNvb2tpZXMgc2VudCBieSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogVGhlIGRhdGEgTVVTVCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0cnVjdHVyZSBvZiB0aGUgJF9DT09LSUUKICAgICAqIHN1cGVyZ2xvYmFsLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZVBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBjb29raWVzLgogICAgICoKICAgICAqIFRoZSBkYXRhIElTIE5PVCBSRVFVSVJFRCB0byBjb21lIGZyb20gdGhlICRfQ09PS0lFIHN1cGVyZ2xvYmFsLCBidXQgTVVTVAogICAgICogYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzdHJ1Y3R1cmUgb2YgJF9DT09LSUUuIFR5cGljYWxseSwgdGhpcyBkYXRhIHdpbGwKICAgICAqIGJlIGluamVjdGVkIGF0IGluc3RhbnRpYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBOT1QgdXBkYXRlIHRoZSByZWxhdGVkIENvb2tpZSBoZWFkZXIgb2YgdGhlIHJlcXVlc3QKICAgICAqIGluc3RhbmNlLCBub3IgcmVsYXRlZCB2YWx1ZXMgaW4gdGhlIHNlcnZlciBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBjb29raWUgdmFsdWVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY29va2llcyBBcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMgcmVwcmVzZW50aW5nIGNvb2tpZXMuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZVBhcmFtcyhhcnJheSAkY29va2llcyk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIFJldHJpZXZlcyB0aGUgZGVzZXJpYWxpemVkIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMsIGlmIGFueS4KICAgICAqCiAgICAgKiBOb3RlOiB0aGUgcXVlcnkgcGFyYW1zIG1pZ2h0IG5vdCBiZSBpbiBzeW5jIHdpdGggdGhlIFVSSSBvciBzZXJ2ZXIKICAgICAqIHBhcmFtcy4gSWYgeW91IG5lZWQgdG8gZW5zdXJlIHlvdSBhcmUgb25seSBnZXR0aW5nIHRoZSBvcmlnaW5hbAogICAgICogdmFsdWVzLCB5b3UgbWF5IG5lZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIGBnZXRVcmkoKS0+Z2V0UXVlcnkoKWAKICAgICAqIG9yIGZyb20gdGhlIGBRVUVSWV9TVFJJTkdgIHNlcnZlciBwYXJhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIFRoZXNlIHZhbHVlcyBTSE9VTEQgcmVtYWluIGltbXV0YWJsZSBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIGluY29taW5nCiAgICAgKiByZXF1ZXN0LiBUaGV5IE1BWSBiZSBpbmplY3RlZCBkdXJpbmcgaW5zdGFudGlhdGlvbiwgc3VjaCBhcyBmcm9tIFBIUCdzCiAgICAgKiAkX0dFVCBzdXBlcmdsb2JhbCwgb3IgTUFZIGJlIGRlcml2ZWQgZnJvbSBzb21lIG90aGVyIHZhbHVlIHN1Y2ggYXMgdGhlCiAgICAgKiBVUkkuIEluIGNhc2VzIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHBhcnNlZCBmcm9tIHRoZSBVUkksIHRoZSBkYXRhCiAgICAgKiBNVVNUIGJlIGNvbXBhdGlibGUgd2l0aCB3aGF0IFBIUCdzIHBhcnNlX3N0cigpIHdvdWxkIHJldHVybiBmb3IKICAgICAqIHB1cnBvc2VzIG9mIGhvdyBkdXBsaWNhdGUgcXVlcnkgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCwgYW5kIGhvdyBuZXN0ZWQKICAgICAqIHNldHMgYXJlIGhhbmRsZWQuCiAgICAgKgogICAgICogU2V0dGluZyBxdWVyeSBzdHJpbmcgYXJndW1lbnRzIE1VU1QgTk9UIGNoYW5nZSB0aGUgVVJJIHN0b3JlZCBieSB0aGUKICAgICAqIHJlcXVlc3QsIG5vciB0aGUgdmFsdWVzIGluIHRoZSBzZXJ2ZXIgcGFyYW1zLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5IEFycmF5IG9mIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMsIHR5cGljYWxseSBmcm9tCiAgICAgKiAgICAgJF9HRVQuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5UGFyYW1zKGFycmF5ICRxdWVyeSk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBub3JtYWxpemVkIGZpbGUgdXBsb2FkIGRhdGEuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB1cGxvYWQgbWV0YWRhdGEgaW4gYSBub3JtYWxpemVkIHRyZWUsIHdpdGggZWFjaCBsZWFmCiAgICAgKiBhbiBpbnN0YW5jZSBvZiBQc3JcSHR0cFxNZXNzYWdlXFVwbG9hZGVkRmlsZUludGVyZmFjZS4KICAgICAqCiAgICAgKiBUaGVzZSB2YWx1ZXMgTUFZIGJlIHByZXBhcmVkIGZyb20gJF9GSUxFUyBvciB0aGUgbWVzc2FnZSBib2R5IGR1cmluZwogICAgICogaW5zdGFudGlhdGlvbiwgb3IgTUFZIGJlIGluamVjdGVkIHZpYSB3aXRoVXBsb2FkZWRGaWxlcygpLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgdHJlZSBvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UgaW5zdGFuY2VzOyBhbiBlbXB0eQogICAgICogICAgIGFycmF5IE1VU1QgYmUgcmV0dXJuZWQgaWYgbm8gZGF0YSBpcyBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBsb2FkZWRGaWxlcygpOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1cGxvYWRlZCBmaWxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGJvZHkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHVwbG9hZGVkRmlsZXMgQW4gYXJyYXkgdHJlZSBvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UgaW5zdGFuY2VzLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBhbiBpbnZhbGlkIHN0cnVjdHVyZSBpcyBwcm92aWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVcGxvYWRlZEZpbGVzKGFycmF5ICR1cGxvYWRlZEZpbGVzKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFueSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlcXVlc3QgQ29udGVudC1UeXBlIGlzIGVpdGhlciBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQKICAgICAqIG9yIG11bHRpcGFydC9mb3JtLWRhdGEsIGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgaXMgUE9TVCwgdGhpcyBtZXRob2QgTVVTVAogICAgICogcmV0dXJuIHRoZSBjb250ZW50cyBvZiAkX1BPU1QuCiAgICAgKgogICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGFueSByZXN1bHRzIG9mIGRlc2VyaWFsaXppbmcKICAgICAqIHRoZSByZXF1ZXN0IGJvZHkgY29udGVudDsgYXMgcGFyc2luZyByZXR1cm5zIHN0cnVjdHVyZWQgY29udGVudCwgdGhlCiAgICAgKiBwb3RlbnRpYWwgdHlwZXMgTVVTVCBiZSBhcnJheXMgb3Igb2JqZWN0cyBvbmx5LiBBIG51bGwgdmFsdWUgaW5kaWNhdGVzCiAgICAgKiB0aGUgYWJzZW5jZSBvZiBib2R5IGNvbnRlbnQuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfGFycmF5fG9iamVjdCBUaGUgZGVzZXJpYWxpemVkIGJvZHkgcGFyYW1ldGVycywgaWYgYW55LgogICAgICogICAgIFRoZXNlIHdpbGwgdHlwaWNhbGx5IGJlIGFuIGFycmF5IG9yIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZEJvZHkoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgYm9keSBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIFRoZXNlIE1BWSBiZSBpbmplY3RlZCBkdXJpbmcgaW5zdGFudGlhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBDb250ZW50LVR5cGUgaXMgZWl0aGVyIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAogICAgICogb3IgbXVsdGlwYXJ0L2Zvcm0tZGF0YSwgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBQT1NULCB1c2UgdGhpcyBtZXRob2QKICAgICAqIE9OTFkgdG8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiAkX1BPU1QuCiAgICAgKgogICAgICogVGhlIGRhdGEgSVMgTk9UIFJFUVVJUkVEIHRvIGNvbWUgZnJvbSAkX1BPU1QsIGJ1dCBNVVNUIGJlIHRoZSByZXN1bHRzIG9mCiAgICAgKiBkZXNlcmlhbGl6aW5nIHRoZSByZXF1ZXN0IGJvZHkgY29udGVudC4gRGVzZXJpYWxpemF0aW9uL3BhcnNpbmcgcmV0dXJucwogICAgICogc3RydWN0dXJlZCBkYXRhLCBhbmQsIGFzIHN1Y2gsIHRoaXMgbWV0aG9kIE9OTFkgYWNjZXB0cyBhcnJheXMgb3Igb2JqZWN0cywKICAgICAqIG9yIGEgbnVsbCB2YWx1ZSBpZiBub3RoaW5nIHdhcyBhdmFpbGFibGUgdG8gcGFyc2UuCiAgICAgKgogICAgICogQXMgYW4gZXhhbXBsZSwgaWYgY29udGVudCBuZWdvdGlhdGlvbiBkZXRlcm1pbmVzIHRoYXQgdGhlIHJlcXVlc3QgZGF0YQogICAgICogaXMgYSBKU09OIHBheWxvYWQsIHRoaXMgbWV0aG9kIGNvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgcmVxdWVzdAogICAgICogaW5zdGFuY2Ugd2l0aCB0aGUgZGVzZXJpYWxpemVkIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBib2R5IHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8YXJyYXl8b2JqZWN0ICRkYXRhIFRoZSBkZXNlcmlhbGl6ZWQgYm9keSBkYXRhLiBUaGlzIHdpbGwKICAgICAqICAgICB0eXBpY2FsbHkgYmUgaW4gYW4gYXJyYXkgb3Igb2JqZWN0LgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBhbiB1bnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGlzCiAgICAgKiAgICAgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGFyc2VkQm9keSgkZGF0YSk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCAiYXR0cmlidXRlcyIgbWF5IGJlIHVzZWQgdG8gYWxsb3cgaW5qZWN0aW9uIG9mIGFueQogICAgICogcGFyYW1ldGVycyBkZXJpdmVkIGZyb20gdGhlIHJlcXVlc3Q6IGUuZy4sIHRoZSByZXN1bHRzIG9mIHBhdGgKICAgICAqIG1hdGNoIG9wZXJhdGlvbnM7IHRoZSByZXN1bHRzIG9mIGRlY3J5cHRpbmcgY29va2llczsgdGhlIHJlc3VsdHMgb2YKICAgICAqIGRlc2VyaWFsaXppbmcgbm9uLWZvcm0tZW5jb2RlZCBtZXNzYWdlIGJvZGllczsgZXRjLiBBdHRyaWJ1dGVzCiAgICAgKiB3aWxsIGJlIGFwcGxpY2F0aW9uIGFuZCByZXF1ZXN0IHNwZWNpZmljLCBhbmQgQ0FOIGJlIG11dGFibGUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogUmV0cmlldmVzIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMgZGVzY3JpYmVkIGluCiAgICAgKiBnZXRBdHRyaWJ1dGVzKCkuIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgc2V0LCByZXR1cm5zCiAgICAgKiB0aGUgZGVmYXVsdCB2YWx1ZSBhcyBwcm92aWRlZC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBvYnZpYXRlcyB0aGUgbmVlZCBmb3IgYSBoYXNBdHRyaWJ1dGUoKSBtZXRob2QsIGFzIGl0IGFsbG93cwogICAgICogc3BlY2lmeWluZyBhIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kLgogICAgICoKICAgICAqIEBzZWUgZ2V0QXR0cmlidXRlcygpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBEZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0LgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCRuYW1lLCAkZGVmYXVsdCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyBzZXR0aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQXR0cmlidXRlKCRuYW1lLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHJlbW92aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcwogICAgICogdGhlIGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBAc2VlIGdldEF0dHJpYnV0ZXMoKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEF0dHJpYnV0ZSgkbmFtZSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/StreamInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIERlc2NyaWJlcyBhIGRhdGEgc3RyZWFtLgogKgogKiBUeXBpY2FsbHksIGFuIGluc3RhbmNlIHdpbGwgd3JhcCBhIFBIUCBzdHJlYW07IHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzCiAqIGEgd3JhcHBlciBhcm91bmQgdGhlIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBzZXJpYWxpemF0aW9uIG9mCiAqIHRoZSBlbnRpcmUgc3RyZWFtIHRvIGEgc3RyaW5nLgogKi8KaW50ZXJmYWNlIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJlYWRzIGFsbCBkYXRhIGZyb20gdGhlIHN0cmVhbSBpbnRvIGEgc3RyaW5nLCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gZW5kLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYXR0ZW1wdCB0byBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBiZWZvcmUKICAgICAqIHJlYWRpbmcgZGF0YSBhbmQgcmVhZCB0aGUgc3RyZWFtIHVudGlsIHRoZSBlbmQgaXMgcmVhY2hlZC4KICAgICAqCiAgICAgKiBXYXJuaW5nOiBUaGlzIGNvdWxkIGF0dGVtcHQgdG8gbG9hZCBhIGxhcmdlIGFtb3VudCBvZiBkYXRhIGludG8gbWVtb3J5LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgTk9UIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBvcmRlciB0byBjb25mb3JtIHdpdGggUEhQJ3MKICAgICAqIHN0cmluZyBjYXN0aW5nIG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5tYWdpYy5waHAjb2JqZWN0LnRvc3RyaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gYW5kIGFueSB1bmRlcmx5aW5nIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCk7CgogICAgLyoqCiAgICAgKiBTZXBhcmF0ZXMgYW55IHVuZGVybHlpbmcgcmVzb3VyY2VzIGZyb20gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBBZnRlciB0aGUgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgc3RyZWFtIGlzIGluIGFuIHVudXNhYmxlIHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2V8bnVsbCBVbmRlcmx5aW5nIFBIUCBzdHJlYW0sIGlmIGFueQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCk7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHN0cmVhbSBpZiBrbm93bi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFJldHVybnMgdGhlIHNpemUgaW4gYnl0ZXMgaWYga25vd24sIG9yIG51bGwgaWYgdW5rbm93bi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGZpbGUgcmVhZC93cml0ZSBwb2ludGVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQgUG9zaXRpb24gb2YgdGhlIGZpbGUgcG9pbnRlcgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHNlZWthYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpOwoKICAgIC8qKgogICAgICogU2VlayB0byBhIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mc2Vlay5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBTdHJlYW0gb2Zmc2V0CiAgICAgKiBAcGFyYW0gaW50ICR3aGVuY2UgU3BlY2lmaWVzIGhvdyB0aGUgY3Vyc29yIHBvc2l0aW9uIHdpbGwgYmUgY2FsY3VsYXRlZAogICAgICogICAgIGJhc2VkIG9uIHRoZSBzZWVrIG9mZnNldC4gVmFsaWQgdmFsdWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIGJ1aWx0LWluCiAgICAgKiAgICAgUEhQICR3aGVuY2UgdmFsdWVzIGZvciBgZnNlZWsoKWAuICBTRUVLX1NFVDogU2V0IHBvc2l0aW9uIGVxdWFsIHRvCiAgICAgKiAgICAgb2Zmc2V0IGJ5dGVzIFNFRUtfQ1VSOiBTZXQgcG9zaXRpb24gdG8gY3VycmVudCBsb2NhdGlvbiBwbHVzIG9mZnNldAogICAgICogICAgIFNFRUtfRU5EOiBTZXQgcG9zaXRpb24gdG8gZW5kLW9mLXN0cmVhbSBwbHVzIG9mZnNldC4KICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTsKCiAgICAvKioKICAgICAqIFNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIElmIHRoZSBzdHJlYW0gaXMgbm90IHNlZWthYmxlLCB0aGlzIG1ldGhvZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbjsKICAgICAqIG90aGVyd2lzZSwgaXQgd2lsbCBwZXJmb3JtIGEgc2VlaygwKS4KICAgICAqCiAgICAgKiBAc2VlIHNlZWsoKQogICAgICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mc2Vlay5waHAKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHdyaXRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOwoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0uCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyByZWFkYWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTsKCiAgICAvKioKICAgICAqIFJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFJlYWQgdXAgdG8gJGxlbmd0aCBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybgogICAgICogICAgIHRoZW0uIEZld2VyIHRoYW4gJGxlbmd0aCBieXRlcyBtYXkgYmUgcmV0dXJuZWQgaWYgdW5kZXJseWluZyBzdHJlYW0KICAgICAqICAgICBjYWxsIHJldHVybnMgZmV3ZXIgYnl0ZXMuCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgc3RyZWFtLCBvciBhbiBlbXB0eSBzdHJpbmcKICAgICAqICAgICBpZiBubyBieXRlcyBhcmUgYXZhaWxhYmxlLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGNvbnRlbnRzIGluIGEgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgb3IgYW4gZXJyb3Igb2NjdXJzIHdoaWxlCiAgICAgKiAgICAgcmVhZGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk7CgogICAgLyoqCiAgICAgKiBHZXQgc3RyZWFtIG1ldGFkYXRhIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9yIHJldHJpZXZlIGEgc3BlY2lmaWMga2V5LgogICAgICoKICAgICAqIFRoZSBrZXlzIHJldHVybmVkIGFyZSBpZGVudGljYWwgdG8gdGhlIGtleXMgcmV0dXJuZWQgZnJvbSBQSFAncwogICAgICogc3RyZWFtX2dldF9tZXRhX2RhdGEoKSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZWFtLWdldC1tZXRhLWRhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgU3BlY2lmaWMgbWV0YWRhdGEgdG8gcmV0cmlldmUuCiAgICAgKiBAcmV0dXJuIGFycmF5fG1peGVkfG51bGwgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBpZiBubyBrZXkgaXMKICAgICAqICAgICBwcm92aWRlZC4gUmV0dXJucyBhIHNwZWNpZmljIGtleSB2YWx1ZSBpZiBhIGtleSBpcyBwcm92aWRlZCBhbmQgdGhlCiAgICAgKiAgICAgdmFsdWUgaXMgZm91bmQsIG9yIG51bGwgaWYgdGhlIGtleSBpcyBub3QgZm91bmQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UploadedFileInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFZhbHVlIG9iamVjdCByZXByZXNlbnRpbmcgYSBmaWxlIHVwbG9hZGVkIHRocm91Z2ggYW4gSFRUUCByZXF1ZXN0LgogKgogKiBJbnN0YW5jZXMgb2YgdGhpcyBpbnRlcmZhY2UgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0CiAqIG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwKICogc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZQogKiBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIGEgc3RyZWFtIHJlcHJlc2VudGluZyB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldHVybiBhIFN0cmVhbUludGVyZmFjZSBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIHRoZQogICAgICogdXBsb2FkZWQgZmlsZS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gYWxsb3cgdXRpbGl6aW5nIG5hdGl2ZSBQSFAKICAgICAqIHN0cmVhbSBmdW5jdGlvbmFsaXR5IHRvIG1hbmlwdWxhdGUgdGhlIGZpbGUgdXBsb2FkLCBzdWNoIGFzCiAgICAgKiBzdHJlYW1fY29weV90b19zdHJlYW0oKSAodGhvdWdoIHRoZSByZXN1bHQgd2lsbCBuZWVkIHRvIGJlIGRlY29yYXRlZCBpbiBhCiAgICAgKiBuYXRpdmUgUEhQIHN0cmVhbSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBzdWNoIGZ1bmN0aW9ucykuCiAgICAgKgogICAgICogSWYgdGhlIG1vdmVUbygpIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgcHJldmlvdXNseSwgdGhpcyBtZXRob2QgTVVTVCByYWlzZQogICAgICogYW4gZXhjZXB0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaW4gY2FzZXMgd2hlbiBubyBzdHJlYW0gaXMgYXZhaWxhYmxlIG9yIGNhbiBiZQogICAgICogICAgIGNyZWF0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKTsKCiAgICAvKioKICAgICAqIE1vdmUgdGhlIHVwbG9hZGVkIGZpbGUgdG8gYSBuZXcgbG9jYXRpb24uCiAgICAgKgogICAgICogVXNlIHRoaXMgbWV0aG9kIGFzIGFuIGFsdGVybmF0aXZlIHRvIG1vdmVfdXBsb2FkZWRfZmlsZSgpLiBUaGlzIG1ldGhvZCBpcwogICAgICogZ3VhcmFudGVlZCB0byB3b3JrIGluIGJvdGggU0FQSSBhbmQgbm9uLVNBUEkgZW52aXJvbm1lbnRzLgogICAgICogSW1wbGVtZW50YXRpb25zIG11c3QgZGV0ZXJtaW5lIHdoaWNoIGVudmlyb25tZW50IHRoZXkgYXJlIGluLCBhbmQgdXNlIHRoZQogICAgICogYXBwcm9wcmlhdGUgbWV0aG9kIChtb3ZlX3VwbG9hZGVkX2ZpbGUoKSwgcmVuYW1lKCksIG9yIGEgc3RyZWFtCiAgICAgKiBvcGVyYXRpb24pIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiAkdGFyZ2V0UGF0aCBtYXkgYmUgYW4gYWJzb2x1dGUgcGF0aCwgb3IgYSByZWxhdGl2ZSBwYXRoLiBJZiBpdCBpcyBhCiAgICAgKiByZWxhdGl2ZSBwYXRoLCByZXNvbHV0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IFBIUCdzIHJlbmFtZSgpCiAgICAgKiBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBUaGUgb3JpZ2luYWwgZmlsZSBvciBzdHJlYW0gTVVTVCBiZSByZW1vdmVkIG9uIGNvbXBsZXRpb24uCiAgICAgKgogICAgICogSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBhbnkgc3Vic2VxdWVudCBjYWxscyBNVVNUIHJhaXNlCiAgICAgKiBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogV2hlbiB1c2VkIGluIGFuIFNBUEkgZW52aXJvbm1lbnQgd2hlcmUgJF9GSUxFUyBpcyBwb3B1bGF0ZWQsIHdoZW4gd3JpdGluZwogICAgICogZmlsZXMgdmlhIG1vdmVUbygpLCBpc191cGxvYWRlZF9maWxlKCkgYW5kIG1vdmVfdXBsb2FkZWRfZmlsZSgpIFNIT1VMRCBiZQogICAgICogdXNlZCB0byBlbnN1cmUgcGVybWlzc2lvbnMgYW5kIHVwbG9hZCBzdGF0dXMgYXJlIHZlcmlmaWVkIGNvcnJlY3RseS4KICAgICAqCiAgICAgKiBJZiB5b3Ugd2lzaCB0byBtb3ZlIHRvIGEgc3RyZWFtLCB1c2UgZ2V0U3RyZWFtKCksIGFzIFNBUEkgb3BlcmF0aW9ucwogICAgICogY2Fubm90IGd1YXJhbnRlZSB3cml0aW5nIHRvIHN0cmVhbSBkZXN0aW5hdGlvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9pc191cGxvYWRlZF9maWxlCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21vdmVfdXBsb2FkZWRfZmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0UGF0aCBQYXRoIHRvIHdoaWNoIHRvIG1vdmUgdGhlIHVwbG9hZGVkIGZpbGUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICR0YXJnZXRQYXRoIHNwZWNpZmllZCBpcyBpbnZhbGlkLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBhbnkgZXJyb3IgZHVyaW5nIHRoZSBtb3ZlIG9wZXJhdGlvbiwgb3Igb24KICAgICAqICAgICB0aGUgc2Vjb25kIG9yIHN1YnNlcXVlbnQgY2FsbCB0byB0aGUgbWV0aG9kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW92ZVRvKCR0YXJnZXRQYXRoKTsKICAgIAogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZmlsZSBzaXplLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJzaXplIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5IGlmIGF2YWlsYWJsZSwgYXMgUEhQIGNhbGN1bGF0ZXMgdGhpcyBiYXNlZAogICAgICogb24gdGhlIGFjdHVhbCBzaXplIHRyYW5zbWl0dGVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIGZpbGUgc2l6ZSBpbiBieXRlcyBvciBudWxsIGlmIHVua25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIE1VU1QgYmUgb25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlsZSB3YXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogVVBMT0FEX0VSUl9PSy4KICAgICAqCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgU0hPVUxEIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSAiZXJyb3IiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZmVhdHVyZXMuZmlsZS11cGxvYWQuZXJyb3JzLnBocAogICAgICogQHJldHVybiBpbnQgT25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBmaWxlbmFtZSB3aXRoIHRoZSBpbnRlbnRpb24gdG8gY29ycnVwdCBvciBoYWNrIHlvdXIKICAgICAqIGFwcGxpY2F0aW9uLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJuYW1lIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudCBvciBudWxsIGlmIG5vbmUKICAgICAqICAgICB3YXMgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOwogICAgCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBtZWRpYSB0eXBlIHdpdGggdGhlIGludGVudGlvbiB0byBjb3JydXB0IG9yIGhhY2sgeW91cgogICAgICogYXBwbGljYXRpb24uCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIFNIT1VMRCByZXR1cm4gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgInR5cGUiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbWVkaWEgdHlwZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/psr/http-message/src/UriInterface.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIFVSSS4KICoKICogVGhpcyBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gcmVwcmVzZW50IFVSSXMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2IGFuZCB0bwogKiBwcm92aWRlIG1ldGhvZHMgZm9yIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMuIEFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBmb3IKICogd29ya2luZyB3aXRoIFVSSXMgY2FuIGJlIHByb3ZpZGVkIG9uIHRvcCBvZiB0aGUgaW50ZXJmYWNlIG9yIGV4dGVybmFsbHkuCiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgSFRUUCByZXF1ZXN0cywgYnV0IG1heSBhbHNvIGJlIHVzZWQgaW4gb3RoZXIKICogY29udGV4dHMuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqCiAqIFR5cGljYWxseSB0aGUgSG9zdCBoZWFkZXIgd2lsbCBiZSBhbHNvIGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KICogRm9yIHNlcnZlci1zaWRlIHJlcXVlc3RzLCB0aGUgc2NoZW1lIHdpbGwgdHlwaWNhbGx5IGJlIGRpc2NvdmVyYWJsZSBpbiB0aGUKICogc2VydmVyIHBhcmFtZXRlcnMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgKHRoZSBVUkkgc3BlY2lmaWNhdGlvbikKICovCmludGVyZmFjZSBVcmlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgc2NoZW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGF1dGhvcml0eSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eQogICAgICogc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBhdXRob3JpdHkgc3ludGF4IG9mIHRoZSBVUkkgaXM6CiAgICAgKgogICAgICogPHByZT4KICAgICAqIFt1c2VyLWluZm9AXWhvc3RbOnBvcnRdCiAgICAgKiA8L3ByZT4KICAgICAqCiAgICAgKiBJZiB0aGUgcG9ydCBjb21wb25lbnQgaXMgbm90IHNldCBvciBpcyB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhlIGN1cnJlbnQKICAgICAqIHNjaGVtZSwgaXQgU0hPVUxEIE5PVCBiZSBpbmNsdWRlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIGF1dGhvcml0eSwgaW4gIlt1c2VyLWluZm9AXWhvc3RbOnBvcnRdIiBmb3JtYXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpdHkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHVzZXIgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkKICAgICAqIHN0cmluZy4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSB1c2VyIGluZm9ybWF0aW9uLCBpbiAidXNlcm5hbWVbOnBhc3N3b3JkXSIgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGhvc3QgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlLCBwZXIgUkZDIDM5ODYKICAgICAqIFNlY3Rpb24gMy4yLjIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgaG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIGEgcG9ydCBpcyBwcmVzZW50LCBhbmQgaXQgaXMgbm9uLXN0YW5kYXJkIGZvciB0aGUgY3VycmVudCBzY2hlbWUsCiAgICAgKiB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBpdCBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgcG9ydCBpcyB0aGUgc3RhbmRhcmQgcG9ydAogICAgICogdXNlZCB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSwgdGhpcyBtZXRob2QgU0hPVUxEIHJldHVybiBudWxsLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYW5kIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYnV0IGEgc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1BWSByZXR1cm4KICAgICAqIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGF0IHNjaGVtZSwgYnV0IFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8aW50IFRoZSBVUkkgcG9ydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIE5vcm1hbGx5LCB0aGUgZW1wdHkgcGF0aCAiIiBhbmQgYWJzb2x1dGUgcGF0aCAiLyIgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYXMKICAgICAqIGRlZmluZWQgaW4gUkZDIDcyMzAgU2VjdGlvbiAyLjcuMy4gQnV0IHRoaXMgbWV0aG9kIE1VU1QgTk9UIGF1dG9tYXRpY2FsbHkKICAgICAqIGRvIHRoaXMgbm9ybWFsaXphdGlvbiBiZWNhdXNlIGluIGNvbnRleHRzIHdpdGggYSB0cmltbWVkIGJhc2UgcGF0aCwgZS5nLgogICAgICogdGhlIGZyb250IGNvbnRyb2xsZXIsIHRoaXMgZGlmZmVyZW5jZSBiZWNvbWVzIHNpZ25pZmljYW50LiBJdCdzIHRoZSB0YXNrCiAgICAgKiBvZiB0aGUgdXNlciB0byBoYW5kbGUgYm90aCAiIiBhbmQgIi8iLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4zLgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBzaG91bGQgaW5jbHVkZSBhIHNsYXNoICgiLyIpIG5vdCBpbnRlbmRlZCBhcwogICAgICogZGVsaW1pdGVyIGJldHdlZW4gcGF0aCBzZWdtZW50cywgdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkCiAgICAgKiBmb3JtIChlLmcuLCAiJTJGIikgdG8gdGhlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcXVlcnkgc3RyaW5nIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgcXVlcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UXVlcnkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBmcmFnbWVudCBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIGxlYWRpbmcgIiMiIGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgZnJhZ21lbnQgYW5kIE1VU1QgTk9UIGJlCiAgICAgKiBhZGRlZC4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuNS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuNQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNjaGVtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCB0aGUgc2NoZW1lcyAiaHR0cCIgYW5kICJodHRwcyIgY2FzZQogICAgICogaW5zZW5zaXRpdmVseSwgYW5kIE1BWSBhY2NvbW1vZGF0ZSBvdGhlciBzY2hlbWVzIGlmIHJlcXVpcmVkLgogICAgICoKICAgICAqIEFuIGVtcHR5IHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lIFRoZSBzY2hlbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgc2NoZW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoJHNjaGVtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBQYXNzd29yZCBpcyBvcHRpb25hbCwgYnV0IHRoZSB1c2VyIGluZm9ybWF0aW9uIE1VU1QgaW5jbHVkZSB0aGUKICAgICAqIHVzZXI7IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHVzZXIgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB1c2VyCiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyIFRoZSB1c2VyIG5hbWUgdG8gdXNlIGZvciBhdXRob3JpdHkuCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggJHVzZXIuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgaG9zdC4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBob3N0IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGhvc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaG9zdCBUaGUgaG9zdG5hbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIGhvc3RuYW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBNVVNUIHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgcG9ydHMgb3V0c2lkZSB0aGUKICAgICAqIGVzdGFibGlzaGVkIFRDUCBhbmQgVURQIHBvcnQgcmFuZ2VzLgogICAgICoKICAgICAqIEEgbnVsbCB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHBvcnQgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcG9ydAogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8aW50ICRwb3J0IFRoZSBwb3J0IHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2U7IGEgbnVsbCB2YWx1ZQogICAgICogICAgIHJlbW92ZXMgdGhlIHBvcnQgaW5mb3JtYXRpb24uCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBwb3J0cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQb3J0KCRwb3J0KTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwYXRoLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIElmIHRoZSBwYXRoIGlzIGludGVuZGVkIHRvIGJlIGRvbWFpbi1yZWxhdGl2ZSByYXRoZXIgdGhhbiBwYXRoIHJlbGF0aXZlIHRoZW4KICAgICAqIGl0IG11c3QgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpLiBQYXRocyBub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoICgiLyIpCiAgICAgKiBhcmUgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byBzb21lIGJhc2UgcGF0aCBrbm93biB0byB0aGUgYXBwbGljYXRpb24gb3IKICAgICAqIGNvbnN1bWVyLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBwYXRoIGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFBhdGgoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBwYXRoIHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBwYXRocy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXRoKCRwYXRoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgcXVlcnkgY2hhcmFjdGVycy4KICAgICAqIEltcGxlbWVudGF0aW9ucyBlbnN1cmUgdGhlIGNvcnJlY3QgZW5jb2RpbmcgYXMgb3V0bGluZWQgaW4gZ2V0UXVlcnkoKS4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBxdWVyeSBzdHJpbmcgdmFsdWUgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgcXVlcnkgc3RyaW5ncy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeSgkcXVlcnkpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBmcmFnbWVudCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRGcmFnbWVudCgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IGZyYWdtZW50IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGZyYWdtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyYWdtZW50IFRoZSBmcmFnbWVudCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZyYWdtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRGVwZW5kaW5nIG9uIHdoaWNoIGNvbXBvbmVudHMgb2YgdGhlIFVSSSBhcmUgcHJlc2VudCwgdGhlIHJlc3VsdGluZwogICAgICogc3RyaW5nIGlzIGVpdGhlciBhIGZ1bGwgVVJJIG9yIHJlbGF0aXZlIHJlZmVyZW5jZSBhY2NvcmRpbmcgdG8gUkZDIDM5ODYsCiAgICAgKiBTZWN0aW9uIDQuMS4gVGhlIG1ldGhvZCBjb25jYXRlbmF0ZXMgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZiB0aGUgVVJJLAogICAgICogdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGRlbGltaXRlcnM6CiAgICAgKgogICAgICogLSBJZiBhIHNjaGVtZSBpcyBwcmVzZW50LCBpdCBNVVNUIGJlIHN1ZmZpeGVkIGJ5ICI6Ii4KICAgICAqIC0gSWYgYW4gYXV0aG9yaXR5IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIi8vIi4KICAgICAqIC0gVGhlIHBhdGggY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRob3V0IGRlbGltaXRlcnMuIEJ1dCB0aGVyZSBhcmUgdHdvCiAgICAgKiAgIGNhc2VzIHdoZXJlIHRoZSBwYXRoIGhhcyB0byBiZSBhZGp1c3RlZCB0byBtYWtlIHRoZSBVUkkgcmVmZXJlbmNlCiAgICAgKiAgIHZhbGlkIGFzIFBIUCBkb2VzIG5vdCBhbGxvdyB0byB0aHJvdyBhbiBleGNlcHRpb24gaW4gX190b1N0cmluZygpOgogICAgICogICAgIC0gSWYgdGhlIHBhdGggaXMgcm9vdGxlc3MgYW5kIGFuIGF1dGhvcml0eSBpcyBwcmVzZW50LCB0aGUgcGF0aCBNVVNUCiAgICAgKiAgICAgICBiZSBwcmVmaXhlZCBieSAiLyIuCiAgICAgKiAgICAgLSBJZiB0aGUgcGF0aCBpcyBzdGFydGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgIi8iIGFuZCBubyBhdXRob3JpdHkgaXMKICAgICAqICAgICAgIHByZXNlbnQsIHRoZSBzdGFydGluZyBzbGFzaGVzIE1VU1QgYmUgcmVkdWNlZCB0byBvbmUuCiAgICAgKiAtIElmIGEgcXVlcnkgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBwcmVmaXhlZCBieSAiPyIuCiAgICAgKiAtIElmIGEgZnJhZ21lbnQgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBwcmVmaXhlZCBieSAiIyIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/.travis.yml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[bGFuZ3VhZ2U6IHBocAoKcGhwOgogIC0gNS4zCiAgLSA1LjQKICAtIDUuNQogIC0gNS42CiAgLSA3LjAKCmJlZm9yZV9zY3JpcHQ6CiAgLSBjb21wb3NlciBpbnN0YWxsCgpzY3JpcHQ6CiAgLSBta2RpciAtcCBidWlsZC9sb2dzCiAgLSBwaHAgdmVuZG9yL2Jpbi9waHB1bml0IC1jIHBocHVuaXQueG1sCgphZnRlcl9zY3JpcHQ6CiAgLSBwaHAgdmVuZG9yL2Jpbi9jb3ZlcmFsbHMgLXY=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewoJIm5hbWUiOiAicmFsb3VwaGllL2dldGFsbGhlYWRlcnMiLAoJImRlc2NyaXB0aW9uIjogIkEgcG9seWZpbGwgZm9yIGdldGFsbGhlYWRlcnMuIiwKCSJsaWNlbnNlIjogIk1JVCIsCgkiYXV0aG9ycyI6IFsKCQl7CgkJCSJuYW1lIjogIlJhbHBoIEtoYXR0YXIiLAoJCQkiZW1haWwiOiAicmFscGgua2hhdHRhckBnbWFpbC5jb20iCgkJfQoJXSwKCSJyZXF1aXJlIjogewoJCSJwaHAiOiAiPj01LjMiCgl9LAoJInJlcXVpcmUtZGV2IjogewoJCSJwaHB1bml0L3BocHVuaXQiOiAifjMuNy4wIiwKCQkic2F0b29zaGkvcGhwLWNvdmVyYWxscyI6ICI+PTEuMCIKCX0sCgkiYXV0b2xvYWQiOiB7CgkJImZpbGVzIjogWyJzcmMvZ2V0YWxsaGVhZGVycy5waHAiXQoJfQp9]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQgUmFscGggS2hhdHRhcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/phpunit.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHBocHVuaXQKCWJvb3RzdHJhcD0idmVuZG9yL2F1dG9sb2FkLnBocCIKCWNvbnZlcnRFcnJvcnNUb0V4Y2VwdGlvbnM9InRydWUiCgljb252ZXJ0Tm90aWNlc1RvRXhjZXB0aW9ucz0idHJ1ZSIKCWNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKCXN0cmljdD0idHJ1ZSI+CgoJPHRlc3RzdWl0ZT4KCQk8ZGlyZWN0b3J5Pi4vdGVzdHM8L2RpcmVjdG9yeT4KCTwvdGVzdHN1aXRlPgoKCTxmaWx0ZXI+CgkJPHdoaXRlbGlzdD4KCQkJPGRpcmVjdG9yeSBzdWZmaXg9Ii5waHAiPnNyYzwvZGlyZWN0b3J5PgoJCTwvd2hpdGVsaXN0PgoJPC9maWx0ZXI+CgoJPGxvZ2dpbmc+CgkJPGxvZyB0eXBlPSJjb3ZlcmFnZS1jbG92ZXIiIHRhcmdldD0iYnVpbGQvbG9ncy9jbG92ZXIueG1sIi8+Cgk8L2xvZ2dpbmc+Cgo8L3BocHVuaXQ+]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Z2V0YWxsaGVhZGVycwo9PT09PT09PT09PT09CgpQSFAgYGdldGFsbGhlYWRlcnMoKWAgcG9seWZpbGwuIENvbXBhdGlibGUgd2l0aCBQSFAgPj0gNS4zLgoKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMuc3ZnP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL3RyYXZpcy1jaS5vcmcvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0NvdmVyYWdlIFN0YXR1c10oaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vcmVwb3MvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMvYmFkZ2UucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwczovL2NvdmVyYWxscy5pby9yL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzP2JyYW5jaD1tYXN0ZXIpClshW0xhdGVzdCBTdGFibGUgVmVyc2lvbl0oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9yYWxvdXBoaWUvZ2V0YWxsaGVhZGVycy92L3N0YWJsZS5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvcmFsb3VwaGllL2dldGFsbGhlYWRlcnMpClshW0xhdGVzdCBVbnN0YWJsZSBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL3YvdW5zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQpbIVtMaWNlbnNlXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzL2xpY2Vuc2UucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3JhbG91cGhpZS9nZXRhbGxoZWFkZXJzKQoKClRoaXMgaXMgYSBzaW1wbGUgcG9seWZpbGwgZm9yIFtgZ2V0YWxsaGVhZGVycygpYF0oaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXRhbGxoZWFkZXJzLnBocCkuCgojIyBJbnN0YWxsCgpgYGAKY29tcG9zZXIgcmVxdWlyZSByYWxvdXBoaWUvZ2V0YWxsaGVhZGVycwpgYGAK]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/src/getallheaders.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpIHsKCiAgICAvKioKICAgICAqIEdldCBhbGwgSFRUUCBoZWFkZXIga2V5L3ZhbHVlcyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tzdHJpbmddIFRoZSBIVFRQIGhlYWRlciBrZXkvdmFsdWUgcGFpcnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldGFsbGhlYWRlcnMoKQogICAgewogICAgICAgICRoZWFkZXJzID0gYXJyYXkoKTsKCiAgICAgICAgJGNvcHlfc2VydmVyID0gYXJyYXkoCiAgICAgICAgICAgICdDT05URU5UX1RZUEUnICAgPT4gJ0NvbnRlbnQtVHlwZScsCiAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCcgPT4gJ0NvbnRlbnQtTGVuZ3RoJywKICAgICAgICAgICAgJ0NPTlRFTlRfTUQ1JyAgICA9PiAnQ29udGVudC1NZDUnLAogICAgICAgICk7CgogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChzdWJzdHIoJGtleSwgMCwgNSkgPT09ICdIVFRQXycpIHsKICAgICAgICAgICAgICAgICRrZXkgPSBzdWJzdHIoJGtleSwgNSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkgfHwgIWlzc2V0KCRfU0VSVkVSWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSBzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCAka2V5KSkpKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1ska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRjb3B5X3NlcnZlclska2V5XSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWyRjb3B5X3NlcnZlclska2V5XV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydSRURJUkVDVF9IVFRQX0FVVEhPUklaQVRJT04nXSkpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAkX1NFUlZFUlsnUkVESVJFQ1RfSFRUUF9BVVRIT1JJWkFUSU9OJ107CiAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSkgewogICAgICAgICAgICAgICAgJGJhc2ljX3Bhc3MgPSBpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgPyAkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSA6ICcnOwogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnIC4gYmFzZTY0X2VuY29kZSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddIC4gJzonIC4gJGJhc2ljX3Bhc3MpOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOwogICAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/ralouphie/getallheaders/tests/GetAllHeadersTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIEdldEFsbEhlYWRlcnNUZXN0IGV4dGVuZHMgXFBIUFVuaXRfRnJhbWV3b3JrX1Rlc3RDYXNlCnsKCiAgICAvKioKICAgICAqIEBkYXRhUHJvdmlkZXIgdGVzdFdvcmtzRGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdvcmtzKCR0ZXN0X3R5cGUsICRleHBlY3RlZCwgJHNlcnZlcikKICAgIHsKICAgICAgICBmb3JlYWNoICgkc2VydmVyIGFzICRrZXkgPT4gJHZhbCkgewogICAgICAgICAgICAkX1NFUlZFUlska2V5XSA9ICR2YWw7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBnZXRhbGxoZWFkZXJzKCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWQsICRyZXN1bHQsICJFcnJvciB0ZXN0aW5nICR0ZXN0X3R5cGUgd29ya3MuIik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXb3Jrc0RhdGEoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnbm9ybWFsIGNhc2UnLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0tleS1PbmUnICAgICAgICAgICAgICAgICA9PiAnZm9vJywKICAgICAgICAgICAgICAgICAgICAnS2V5LVR3bycgICAgICAgICAgICAgICAgID0+ICdiYXInLAogICAgICAgICAgICAgICAgICAgICdBbm90aGVyLUtleS1Gb3ItVGVzdGluZycgPT4gJ2JheicKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnSFRUUF9LRVlfT05FJyAgICAgICAgICAgICAgICAgPT4gJ2ZvbycsCiAgICAgICAgICAgICAgICAgICAgJ0hUVFBfS0VZX1RXTycgICAgICAgICAgICAgICAgID0+ICdiYXInLAogICAgICAgICAgICAgICAgICAgICdIVFRQX0FOT1RIRVJfS0VZX0ZPUl9URVNUSU5HJyA9PiAnYmF6JwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ3R3bycKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnSFRUUF9DT05URU5UX1RZUEUnID0+ICdvbmUnLAogICAgICAgICAgICAgICAgICAgICdDT05URU5UX1RZUEUnICAgICAgPT4gJ3R3bycKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGgnLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJyA9PiAnMjIyJwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCcgICAgICA9PiAnMjIyJywKICAgICAgICAgICAgICAgICAgICAnSFRUUF9DT05URU5UX0xFTkdUSCcgPT4gJzExMScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnQ29udGVudC1MZW5ndGggKEhUVFBfQ09OVEVOVF9MRU5HVEggb25seSknLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJyA9PiAnMTExJwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdIVFRQX0NPTlRFTlRfTEVOR1RIJyA9PiAnMTExJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdDb250ZW50LU1ENScsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1NZDUnID0+ICdhZWYxMjMnCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0NPTlRFTlRfTUQ1JyAgICAgID0+ICdhZWYxMjMnLAogICAgICAgICAgICAgICAgICAgICdIVFRQX0NPTlRFTlRfTUQ1JyA9PiAnZmVhMzIxJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdDb250ZW50LU1ENSAoSFRUUF9DT05URU5UX01ENSBvbmx5KScsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1NZDUnID0+ICdmMTIzJwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdIVFRQX0NPTlRFTlRfTUQ1JyA9PiAnZjEyMycKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbiAobm9ybWFsKScsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbicgPT4gJ3Rlc3RpbmcnCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0hUVFBfQVVUSE9SSVpBVElPTicgPT4gJ3Rlc3RpbmcnLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uIChyZWRpcmVjdCknLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICd0ZXN0aW5nIHJlZGlyZWN0JwogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdSRURJUkVDVF9IVFRQX0FVVEhPUklaQVRJT04nID0+ICd0ZXN0aW5nIHJlZGlyZWN0JywKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbiAoUEhQX0FVVEhfVVNFUiArIFBIUF9BVVRIX1BXKScsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbicgPT4gJ0Jhc2ljICcgLiBiYXNlNjRfZW5jb2RlKCdmb286YmFyJykKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnUEhQX0FVVEhfVVNFUicgPT4gJ2ZvbycsCiAgICAgICAgICAgICAgICAgICAgJ1BIUF9BVVRIX1BXJyAgID0+ICdiYXInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24gKFBIUF9BVVRIX0RJR0VTVCknLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdleGFtcGxlLWRpZ2VzdCcKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnUEhQX0FVVEhfRElHRVNUJyA9PiAnZXhhbXBsZS1kaWdlc3QnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/.php_cs.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRoZWFkZXIgPSAnVGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKVGhpcyBzb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcwpvZiB0aGUgTUlUIGxpY2Vuc2UuICBTZWUgdGhlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscy4nOwoKJGZpbmRlciA9IFBocENzRml4ZXJcRmluZGVyOjpjcmVhdGUoKQogICAgLT5pbihfX0RJUl9fLicvc3JjJykKICAgIC0+aW4oX19ESVJfXy4nL3Rlc3RzJykKOwoKcmV0dXJuIFBocENzRml4ZXJcQ29uZmlnOjpjcmVhdGUoKQogICAgLT5zZXRSdWxlcyhbCiAgICAgICAgJ0BQU1IxJyA9PiB0cnVlLAogICAgICAgICdAUFNSMicgPT4gdHJ1ZSwKICAgICAgICAnQFN5bWZvbnknID0+IHRydWUsCiAgICAgICAgJ0BEb2N0cmluZUFubm90YXRpb24nID0+IHRydWUsCiAgICAgICAgJ0BQSFA3ME1pZ3JhdGlvbicgPT4gdHJ1ZSwKICAgICAgICAnQFBIUDcxTWlncmF0aW9uJyA9PiB0cnVlLAogICAgICAgICdzdHJpY3RfcGFyYW0nID0+IHRydWUsCiAgICAgICAgJ3N0cmljdF9jb21wYXJpc29uJyA9PiB0cnVlLAogICAgICAgICdhcnJheV9zeW50YXgnID0+IFsnc3ludGF4JyA9PiAnc2hvcnQnXSwKICAgICAgICAnYXJyYXlfaW5kZW50YXRpb24nID0+IHRydWUsCiAgICAgICAgJ29yZGVyZWRfaW1wb3J0cycgPT4gdHJ1ZSwKICAgICAgICAncHJvdGVjdGVkX3RvX3ByaXZhdGUnID0+IHRydWUsCiAgICAgICAgJ2RlY2xhcmVfc3RyaWN0X3R5cGVzJyA9PiB0cnVlLAogICAgICAgICduYXRpdmVfZnVuY3Rpb25faW52b2NhdGlvbicgPT4gWwogICAgICAgICAgICAnaW5jbHVkZScgPT4gWydAY29tcGlsZXJfb3B0aW1pemVkJ10sCiAgICAgICAgICAgICdzY29wZScgPT4gJ25hbWVzcGFjZWQnLAogICAgICAgIF0sCiAgICAgICAgJ21iX3N0cl9mdW5jdGlvbnMnID0+IHRydWUsCiAgICAgICAgJ21ldGhvZF9jaGFpbmluZ19pbmRlbnRhdGlvbicgPT4gdHJ1ZSwKICAgICAgICAnbGluZWJyZWFrX2FmdGVyX29wZW5pbmdfdGFnJyA9PiB0cnVlLAogICAgICAgICdjb21iaW5lX2NvbnNlY3V0aXZlX2lzc2V0cycgPT4gdHJ1ZSwKICAgICAgICAnY29tYmluZV9jb25zZWN1dGl2ZV91bnNldHMnID0+IHRydWUsCiAgICAgICAgJ2NvbXBhY3RfbnVsbGFibGVfdHlwZWhpbnQnID0+IHRydWUsCiAgICAgICAgJ25vX3N1cGVyZmx1b3VzX3BocGRvY190YWdzJyA9PiB0cnVlLAogICAgICAgICdub19zdXBlcmZsdW91c19lbHNlaWYnID0+IHRydWUsCiAgICAgICAgJ3BocGRvY190cmltX2NvbnNlY3V0aXZlX2JsYW5rX2xpbmVfc2VwYXJhdGlvbicgPT4gdHJ1ZSwKICAgICAgICAncGhwZG9jX29yZGVyJyA9PiB0cnVlLAogICAgICAgICdwb3dfdG9fZXhwb25lbnRpYXRpb24nID0+IHRydWUsCiAgICAgICAgJ3NpbXBsaWZpZWRfbnVsbF9yZXR1cm4nID0+IHRydWUsCiAgICAgICAgJ2hlYWRlcl9jb21tZW50JyA9PiBbCiAgICAgICAgICAgICdoZWFkZXInID0+ICRoZWFkZXIsCiAgICAgICAgXSwKICAgICAgICAnYWxpZ25fbXVsdGlsaW5lX2NvbW1lbnQnID0+IFsKICAgICAgICAgICAgJ2NvbW1lbnRfdHlwZScgPT4gJ2FsbF9tdWx0aWxpbmUnLAogICAgICAgIF0sCiAgICAgICAgJ3BocF91bml0X3Rlc3RfYW5ub3RhdGlvbicgPT4gWwogICAgICAgICAgICAnY2FzZScgPT4gJ3NuYWtlJywKICAgICAgICAgICAgJ3N0eWxlJyA9PiAnYW5ub3RhdGlvbicsCiAgICAgICAgXSwKICAgICAgICAncGhwX3VuaXRfdGVzdF9jYXNlX3N0YXRpY19tZXRob2RfY2FsbHMnID0+IHRydWUsCiAgICBdKQogICAgLT5zZXRSaXNreUFsbG93ZWQodHJ1ZSkKICAgIC0+c2V0VXNpbmdDYWNoZSh0cnVlKQogICAgLT5zZXRGaW5kZXIoJGZpbmRlcikKICAgIDsK]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIiwKICAgICJkZXNjcmlwdGlvbiI6ICJCYXNlIDY0IFVSTCBTYWZlIEVuY29kaW5nL0RlY29kaW5nIFBIUCBMaWJyYXJ5IiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsiQmFzZTY0IiwgIlVSTCIsICJTYWZlIiwgIlJGQzQ2NDgiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5LUxhYnMvYmFzZTY0dXJsL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkJhc2U2NFVybFxcIjogICJzcmMvIgogICAgICAgIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMCIsCiAgICAgICAgInBocC1jb3ZlcmFsbHMvcGhwLWNvdmVyYWxscyI6ICJeMi4wIgogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/spomky-labs/base64url/src/Base64Url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEJhc2U2NFVybDsKCi8qKgogKiBFbmNvZGUgYW5kIGRlY29kZSBkYXRhIGludG8gQmFzZTY0IFVybCBTYWZlLgogKi8KZmluYWwgY2xhc3MgQmFzZTY0VXJsCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSAgICAgICBUaGUgZGF0YSB0byBlbmNvZGUKICAgICAqIEBwYXJhbSBib29sICAgJHVzZVBhZGRpbmcgSWYgdHJ1ZSwgdGhlICI9IiBwYWRkaW5nIGF0IGVuZCBvZiB0aGUgZW5jb2RlZCB2YWx1ZSBhcmUga2VwdCwgZWxzZSBpdCBpcyByZW1vdmVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGRhdGEgZW5jb2RlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZShzdHJpbmcgJGRhdGEsIGJvb2wgJHVzZVBhZGRpbmcgPSBmYWxzZSk6IHN0cmluZwogICAgewogICAgICAgICRlbmNvZGVkID0gXHN0cnRyKFxiYXNlNjRfZW5jb2RlKCRkYXRhKSwgJysvJywgJy1fJyk7CgogICAgICAgIHJldHVybiB0cnVlID09PSAkdXNlUGFkZGluZyA/ICRlbmNvZGVkIDogXHJ0cmltKCRlbmNvZGVkLCAnPScpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZGF0YSB0byBkZWNvZGUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZGF0YSBkZWNvZGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlKHN0cmluZyAkZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRkZWNvZGVkID0gXGJhc2U2NF9kZWNvZGUoXHN0cnRyKCRkYXRhLCAnLV8nLCAnKy8nKSwgdHJ1ZSk7CiAgICAgICAgaWYgKCRkZWNvZGVkID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBkYXRhIHByb3ZpZGVkJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRlY29kZWQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Algorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7CgppbnRlcmZhY2UgQWxnb3JpdGhtCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBrZXkgdHlwZXMgc3VpdGFibGUgZm9yIHRoaXMgYWxnb3JpdGhtIChlLmcuICJvY3QiLCAiUlNBIi4uLikuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb3dlZEtleVR5cGVzKCk6IGFycmF5Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/AlgorithmManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7CgpjbGFzcyBBbGdvcml0aG1NYW5hZ2VyCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRhbGdvcml0aG1zID0gW107CgogICAgLyoqCiAgICAgKiBBbGdvcml0aG1NYW5hZ2VyIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBBbGdvcml0aG1bXSAkYWxnb3JpdGhtcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRhbGdvcml0aG1zKQogICAgewogICAgICAgIGZvcmVhY2ggKCRhbGdvcml0aG1zIGFzICRhbGdvcml0aG0pIHsKICAgICAgICAgICAgJHRoaXMtPmFkZCgkYWxnb3JpdGhtKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIGFsb2dpdGhtIG1hbmFnZXIgdXNpbmcgdGhlIGdpdmVuIGFsZ29yaXRobXMuCiAgICAgKgogICAgICogQHBhcmFtIEFsZ29yaXRobVtdICRhbGdvcml0aG1zCiAgICAgKgogICAgICogQHJldHVybiBBbGdvcml0aG1NYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRhbGdvcml0aG1zKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkYWxnb3JpdGhtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFsZ29yaXRobSBpcyBzdXBwb3J0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtIFRoZSBhbGdvcml0aG0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhcyhzdHJpbmcgJGFsZ29yaXRobSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGFycmF5X2tleV9leGlzdHMoJGFsZ29yaXRobSwgJHRoaXMtPmFsZ29yaXRobXMpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBuYW1lcyBvZiBzdXBwb3J0ZWQgYWxnb3JpdGhtcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV9rZXlzKCR0aGlzLT5hbGdvcml0aG1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFsZ29yaXRobSBpZiBzdXBwb3J0ZWQsIG90aGVyd2lzZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtIFRoZSBhbGdvcml0aG0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGFsZ29yaXRobSk6IEFsZ29yaXRobQogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygkYWxnb3JpdGhtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGFsZ29yaXRobSAiJXMiIGlzIG5vdCBzdXBwb3J0ZWQuJywgJGFsZ29yaXRobSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5hbGdvcml0aG1zWyRhbGdvcml0aG1dOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyBhbiBhbGdvcml0aG0gdG8gdGhlIG1hbmFnZXIuCiAgICAgKgogICAgICogQHJldHVybiBBbGdvcml0aG1NYW5hZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkKEFsZ29yaXRobSAkYWxnb3JpdGhtKTogc2VsZgogICAgewogICAgICAgICRuYW1lID0gJGFsZ29yaXRobS0+bmFtZSgpOwogICAgICAgICR0aGlzLT5hbGdvcml0aG1zWyRuYW1lXSA9ICRhbGdvcml0aG07CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/AlgorithmManagerFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7CgpjbGFzcyBBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeQp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtcyA9IFtdOwoKICAgIC8qKgogICAgICogQWRkcyBhbiBhbGdvcml0aG0uCiAgICAgKgogICAgICogRWFjaCBhbGdvcml0aG0gaXMgaWRlbnRpZmllZCBieSBhbiBhbGlhcyBoZW5jZSBpdCBpcyBhbGxvd2VkIHRvIGhhdmUgdGhlIHNhbWUgYWxnb3JpdGhtIHR3aWNlIChvciBtb3JlKS4KICAgICAqIFRoaXMgY2FuIGJlIGhlbHBmdWwgd2hlbiBhbiBhbGdvcml0aG0gaGF2ZSBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoc3RyaW5nICRhbGlhcywgQWxnb3JpdGhtICRhbGdvcml0aG0pOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmFsZ29yaXRobXNbJGFsaWFzXSA9ICRhbGdvcml0aG07CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxpYXNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGlhc2VzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV9rZXlzKCR0aGlzLT5hbGdvcml0aG1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KICAgICAqIFRoaXMgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkuIEtleXMgYXJlIHRoZSBhbGlhc2VzIG9mIHRoZSBhbGdvcml0aG1zLgogICAgICoKICAgICAqIEByZXR1cm4gQWxnb3JpdGhtW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWxnb3JpdGhtczsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBhbGdvcml0aG0gbWFuYWdlciB1c2luZyB0aGUgZ2l2ZW4gYWxpYXNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJGFsaWFzZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkYWxpYXNlcyk6IEFsZ29yaXRobU1hbmFnZXIKICAgIHsKICAgICAgICAkYWxnb3JpdGhtcyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhcykgewogICAgICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJGFsaWFzLCAkdGhpcy0+YWxnb3JpdGhtcykpIHsKICAgICAgICAgICAgICAgICRhbGdvcml0aG1zW10gPSAkdGhpcy0+YWxnb3JpdGhtc1skYWxpYXNdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBhbGdvcml0aG0gd2l0aCB0aGUgYWxpYXMgIiVzIiBpcyBub3Qgc3VwcG9ydGVkLicsICRhbGlhcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKCRhbGdvcml0aG1zKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1jb3JlIiwKICAgICJkZXNjcmlwdGlvbiI6ICJDb3JlIGNvbXBvbmVudCBvZiB0aGUgSldUIEZyYW1ld29yay4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJKV1MiLCAiSldUIiwgIkpXRSIsICJKV0EiLCAiSldLIiwgIkpXS1NldCIsICJKb3QiLCAiSm9zZSIsICJSRkM3NTE1IiwgIlJGQzc1MTYiLCAiUkZDNzUxNyIsICJSRkM3NTE4IiwgIlJGQzc1MTkiLCAiUkZDNzUyMCIsICJCdW5kbGUiLCAiU3ltZm9ueSJdLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSx7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXENvcmVcXCI6ICAiIgogICAgICAgIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEiLAogICAgICAgICJleHQtZ21wIjogIioiLAogICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgImZncm9zc2UvcGhwYXNuMSI6ICJeMi4wIiwKICAgICAgICAic3BvbWt5LWxhYnMvYmFzZTY0dXJsIjogIl4xLjB8XjIuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICB9LAogICAgImNvbmZsaWN0IjogewogICAgICAgICJzcG9ta3ktbGFicy9qb3NlIjogIioiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Converter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Converter/JsonConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyOwoKLyoqCiAqIEBkZXByZWNhdGVkIFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJlY2F0ZWQgaW4gdjEuMyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYyLjAKICovCmludGVyZmFjZSBKc29uQ29udmVydGVyCnsKICAgIC8qKgogICAgICogQ29udmVydCB0aGUgcGF5bG9hZCBpbnRvIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCRwYXlsb2FkKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQ29udmVydCBhIHN0cmluZyBpbnRvIHBheWxvYWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRwYXlsb2FkLCBib29sICRhc3NvY2lhdGl2ZUFycmF5ID0gdHJ1ZSk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Converter/StandardConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyOwoKLyoqCiAqIEBkZXByZWNhdGVkIFRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCBpbiB2MS4zIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIuMAogKi8KZmluYWwgY2xhc3MgU3RhbmRhcmRDb252ZXJ0ZXIgaW1wbGVtZW50cyBKc29uQ29udmVydGVyCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkb3B0aW9uczsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJGRlcHRoOwoKICAgIC8qKgogICAgICogU3RhbmRhcmRKc29uRW5jb2RlciBjb25zdHJ1Y3Rvci4KICAgICAqIFNlZSBhbHNvIGpzb25fZW5jb2RlIGFuZCBqc29uX2RlY29kZSBwYXJhbWV0ZXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRvcHRpb25zID0gSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUsIGludCAkZGVwdGggPSA1MTIpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wdGlvbnMgPSAkb3B0aW9uczsKICAgICAgICAkdGhpcy0+ZGVwdGggPSAkZGVwdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVuY29kZSgkcGF5bG9hZCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBcanNvbl9lbmNvZGUoJHBheWxvYWQsICR0aGlzLT5vcHRpb25zLCAkdGhpcy0+ZGVwdGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRwYXlsb2FkLCBib29sICRhc3NvY2lhdGl2ZUFycmF5ID0gdHJ1ZSkKICAgIHsKICAgICAgICByZXR1cm4gXGpzb25fZGVjb2RlKCRwYXlsb2FkLCAkYXNzb2NpYXRpdmVBcnJheSwgJHRoaXMtPmRlcHRoLCAkdGhpcy0+b3B0aW9ucyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/JWK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKCmNsYXNzIEpXSyBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICR2YWx1ZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEpXSyBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkdmFsdWVzKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZXMgPSAkdmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIEpXSyBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlcy4KICAgICAqIFRoZSBtZW1iZXIgImt0eSIgaXMgbWFuZGF0b3J5LiBPdGhlciBtZW1iZXJzIGFyZSBOT1QgY2hlY2tlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEpXSwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkdmFsdWVzKTogc2VsZgogICAgewogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJ2t0eScsICR2YWx1ZXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgcGFyYW1ldGVyICJrdHkiIGlzIG1hbmRhdG9yeS4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBKV0sgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBKc29uIHN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEpXSwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Kc29uKHN0cmluZyAkanNvbik6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9IFxqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGFyZ3VtZW50LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZXMgdG8gYmUgc2VyaWFsaXplZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSB3aXRoIGEgc3BlY2lmaWMga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+aGFzKCRrZXkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgdmFsdWUgaWRlbnRpZmllZCBieSAiJXMiIGRvZXMgbm90IGV4aXN0LicsICRrZXkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBKV0sgaGFzIHRoZSB2YWx1ZSBpZGVudGlmaWVkIGJ5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXMoc3RyaW5nICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV9rZXlfZXhpc3RzKCRrZXksICR0aGlzLT52YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFsbCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBKV0sgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVmFsdWVzIG9mIHRoZSBKV0sgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbGwoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZhbHVlczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHRodW1icHJpbnQgb2YgdGhlIGtleS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjM4CiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aHVtYnByaW50KHN0cmluZyAkaGFzaF9hbGdvcml0aG0pOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgkaGFzaF9hbGdvcml0aG0sIFxoYXNoX2FsZ29zKCksIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgaGFzaCBhbGdvcml0aG0gIiVzIiBpcyBub3Qgc3VwcG9ydGVkLicsICRoYXNoX2FsZ29yaXRobSkpOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlcyA9IFxhcnJheV9pbnRlcnNlY3Rfa2V5KCR0aGlzLT52YWx1ZXMsIFxhcnJheV9mbGlwKFsna3R5JywgJ24nLCAnZScsICdjcnYnLCAneCcsICd5JywgJ2snXSkpOwogICAgICAgIFxrc29ydCgkdmFsdWVzKTsKICAgICAgICAkaW5wdXQgPSBcanNvbl9lbmNvZGUoJHZhbHVlcywgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwoKICAgICAgICByZXR1cm4gQmFzZTY0VXJsOjplbmNvZGUoXGhhc2goJGhhc2hfYWxnb3JpdGhtLCAkaW5wdXQsIHRydWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgcHVibGljIGtleS4KICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgZm9yOgogICAgICogLSBwdWJsaWMga2V5cwogICAgICogLSBzaGFyZWQga2V5cwogICAgICogLSB1bmtub3duIGtleXMuCiAgICAgKgogICAgICogS25vd24ga2V5cyBhcmUgIm9jdCIsICJSU0EiLCAiRUMiIGFuZCAiT0tQIi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEpXSwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9QdWJsaWMoKTogc2VsZgogICAgewogICAgICAgICR2YWx1ZXMgPSBcYXJyYXlfZGlmZl9rZXkoJHRoaXMtPnZhbHVlcywgXGFycmF5X2ZsaXAoWydwJywgJ2QnLCAncScsICdkcCcsICdkcScsICdxaSddKSk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWVzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/JWKSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7CgpjbGFzcyBKV0tTZXQgaW1wbGVtZW50cyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUsIFxKc29uU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRrZXlzID0gW107CgogICAgLyoqCiAgICAgKiBKV0tTZXQgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQHBhcmFtIEpXS1tdICRrZXlzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGtleXMpCiAgICB7CiAgICAgICAgJHRoaXMtPmtleXMgPSAka2V5czsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBKV0tTZXQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZXMuCiAgICAgKgogICAgICogQHJldHVybiBKV0tTZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tS2V5RGF0YShhcnJheSAkZGF0YSk6IHNlbGYKICAgIHsKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCdrZXlzJywgJGRhdGEpIHx8ICFcaXNfYXJyYXkoJGRhdGFbJ2tleXMnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgZGF0YS4nKTsKICAgICAgICB9CgogICAgICAgICRrZXlzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGRhdGFbJ2tleXMnXSBhcyAka2V5KSB7CiAgICAgICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZSgka2V5KTsKICAgICAgICAgICAgaWYgKCRqd2stPmhhcygna2lkJykpIHsKICAgICAgICAgICAgICAgICRrZXlzWyRqd2stPmdldCgna2lkJyldID0gJGp3azsKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAka2V5c1tdID0gJGp3azsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigka2V5cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgSldLU2V0IG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gSldLIG9iamVjdHMuCiAgICAgKgogICAgICogQHBhcmFtIEpXS1tdICRrZXlzCiAgICAgKgogICAgICogQHJldHVybiBKV0tTZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tS2V5cyhhcnJheSAka2V5cyk6IHNlbGYKICAgIHsKICAgICAgICAka2V5cyA9IFxhcnJheV9maWx0ZXIoJGtleXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCR2LT5oYXMoJ2tpZCcpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgka2V5c1ska10pOwogICAgICAgICAgICAgICAgJGtleXNbJHYtPmdldCgna2lkJyldID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc2VsZigka2V5cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgSldLU2V0IG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gSnNvbiBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBKV0tTZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tSnNvbihzdHJpbmcgJGpzb24pOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSBcanNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgIGlmICghXGlzX2FycmF5KCRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBhcmd1bWVudC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tS2V5RGF0YSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGtleXMgc3RvcmVkIGluIHRoZSBrZXkgc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gSldLW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+a2V5czsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBrZXkgdG8gc3RvcmUgaW4gdGhlIGtleSBzZXQuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbW11dGFibGUgYW5kIHdpbGwgcmV0dXJuIGEgbmV3IG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEpXS1NldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aChKV0sgJGp3ayk6IHNlbGYKICAgIHsKICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKCiAgICAgICAgaWYgKCRqd2stPmhhcygna2lkJykpIHsKICAgICAgICAgICAgJGNsb25lLT5rZXlzWyRqd2stPmdldCgna2lkJyldID0gJGp3azsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY2xvbmUtPmtleXNbXSA9ICRqd2s7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGtleSBmcm9tIHRoZSBrZXkgc2V0LgogICAgICogVGhpcyBtZXRob2QgaXMgaW1tdXRhYmxlIGFuZCB3aWxsIHJldHVybiBhIG5ldyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGtleSBLZXkgdG8gcmVtb3ZlIGZyb20gdGhlIGtleSBzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIEpXS1NldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dCgka2V5KTogc2VsZgogICAgewogICAgICAgIGlmICghJHRoaXMtPmhhcygka2V5KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkY2xvbmUtPmtleXNbJGtleV0pOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBrZXkgc2V0IGNvbnRhaW5zIGEga2V5IHdpdGggdGhlIGdpdmVuIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRpbmRleAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRpbmRleCk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGFycmF5X2tleV9leGlzdHMoJGluZGV4LCAkdGhpcy0+a2V5cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGluZGV4IGlzIG5vdCBwcmVzZW50IGluIHRoZSBrZXkgc3RvcmUuCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGluZGV4KTogSldLCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+aGFzKCRpbmRleCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuZGVmaW5lZCBpbmRleC4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+a2V5c1skaW5kZXhdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWVzIHRvIGJlIHNlcmlhbGl6ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsna2V5cycgPT4gXGFycmF5X3ZhbHVlcygkdGhpcy0+a2V5cyldOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGtleSBzZXQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbW9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoJG1vZGUgPSBDT1VOVF9OT1JNQUwpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gXGNvdW50KCR0aGlzLT5rZXlzLCAkbW9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcnkgdG8gZmluZCBhIGtleSB0aGF0IGZpdHMgb24gdGhlIHNlbGVjdGVkIHJlcXVpcmVtZW50cy4KICAgICAqIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICR0eXBlICAgICAgICAgTXVzdCBiZSAnc2lnJyAoc2lnbmF0dXJlKSBvciAnZW5jJyAoZW5jcnlwdGlvbikKICAgICAqIEBwYXJhbSBBbGdvcml0aG18bnVsbCAkYWxnb3JpdGhtICAgIFNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAkcmVzdHJpY3Rpb25zIE1vcmUgcmVzdHJpY3Rpb25zIHN1Y2ggYXMgJ2tpZCcgb3IgJ2t0eScKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbGVjdEtleShzdHJpbmcgJHR5cGUsID9BbGdvcml0aG0gJGFsZ29yaXRobSA9IG51bGwsIGFycmF5ICRyZXN0cmljdGlvbnMgPSBbXSk6ID9KV0sKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgkdHlwZSwgWydlbmMnLCAnc2lnJ10sIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdBbGxvd2VkIGtleSB0eXBlcyBhcmUgInNpZyIgb3IgImVuYyIuJyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmtleXMgYXMgJGtleSkgewogICAgICAgICAgICAkaW5kID0gMDsKCiAgICAgICAgICAgICRjYW5fdXNlID0gJHRoaXMtPmNhbktleUJlVXNlZEZvcigkdHlwZSwgJGtleSk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGNhbl91c2UpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpbmQgKz0gJGNhbl91c2U7CgogICAgICAgICAgICAkYWxnID0gJHRoaXMtPmNhbktleUJlVXNlZFdpdGhBbGdvcml0aG0oJGFsZ29yaXRobSwgJGtleSk7CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGFsZykgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGluZCArPSAkYWxnOwoKICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+ZG9lc0tleVNhdGlzZnlSZXN0cmljdGlvbnMoJHJlc3RyaWN0aW9ucywgJGtleSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzdWx0W10gPSBbJ2tleScgPT4gJGtleSwgJ2luZCcgPT4gJGluZF07CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBcdXNvcnQoJHJlc3VsdCwgWyR0aGlzLCAnc29ydEtleXMnXSk7CgogICAgICAgIHJldHVybiAkcmVzdWx0WzBdWydrZXknXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbHxpbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjYW5LZXlCZVVzZWRGb3Ioc3RyaW5nICR0eXBlLCBKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAoJGtleS0+aGFzKCd1c2UnKSkgewogICAgICAgICAgICByZXR1cm4gJHR5cGUgPT09ICRrZXktPmdldCgndXNlJykgPyAxIDogZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5LT5oYXMoJ2tleV9vcHMnKSkgewogICAgICAgICAgICByZXR1cm4gJHR5cGUgPT09IHNlbGY6OmNvbnZlcnRLZXlPcHNUb0tleVVzZSgka2V5LT5nZXQoJ3VzZScpKSA/IDEgOiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sfGludAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNhbktleUJlVXNlZFdpdGhBbGdvcml0aG0oP0FsZ29yaXRobSAkYWxnb3JpdGhtLCBKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGFsZ29yaXRobSkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgaWYgKCFcaW5fYXJyYXkoJGtleS0+Z2V0KCdrdHknKSwgJGFsZ29yaXRobS0+YWxsb3dlZEtleVR5cGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRrZXktPmhhcygnYWxnJykpIHsKICAgICAgICAgICAgcmV0dXJuICRhbGdvcml0aG0tPm5hbWUoKSA9PT0gJGtleS0+Z2V0KCdhbGcnKSA/IDIgOiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZG9lc0tleVNhdGlzZnlSZXN0cmljdGlvbnMoYXJyYXkgJHJlc3RyaWN0aW9ucywgSldLICRrZXkpOiBib29sCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHJlc3RyaWN0aW9ucyBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoISRrZXktPmhhcygkaykgfHwgJHYgIT09ICRrZXktPmdldCgkaykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY29udmVydEtleU9wc1RvS2V5VXNlKHN0cmluZyAka2V5X29wcyk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAoJGtleV9vcHMpIHsKICAgICAgICAgICAgY2FzZSAndmVyaWZ5JzoKICAgICAgICAgICAgY2FzZSAnc2lnbic6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3NpZyc7CiAgICAgICAgICAgIGNhc2UgJ2VuY3J5cHQnOgogICAgICAgICAgICBjYXNlICdkZWNyeXB0JzoKICAgICAgICAgICAgY2FzZSAnd3JhcEtleSc6CiAgICAgICAgICAgIGNhc2UgJ3Vud3JhcEtleSc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2VuYyc7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVW5zdXBwb3J0ZWQga2V5IG9wZXJhdGlvbiB2YWx1ZSAiJXMiJywgJGtleV9vcHMpKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnRlcm5hbCBtZXRob2Qgb25seS4gU2hvdWxkIG5vdCBiZSB1c2VkLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29ydEtleXMoYXJyYXkgJGEsIGFycmF5ICRiKTogaW50CiAgICB7CiAgICAgICAgaWYgKCRhWydpbmQnXSA9PT0gJGJbJ2luZCddKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgkYVsnaW5kJ10gPiAkYlsnaW5kJ10pID8gLTEgOiAxOwogICAgfQoKICAgIC8qKgogICAgICogSW50ZXJuYWwgbWV0aG9kIG9ubHkuIFNob3VsZCBub3QgYmUgdXNlZC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKCR0aGlzLT5rZXlzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/JWT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmU7CgppbnRlcmZhY2UgSldUCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcGF5bG9hZCBvZiB0aGUgSldULgogICAgICogbnVsbCBpcyBhIHZhbGlkIHBheWxvYWQgKGUuZy4gSldTIHdpdGggZGV0YWNoZWQgcGF5bG9hZCkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXlsb2FkKCk6ID9zdHJpbmc7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQIEpXVCBDb3JlIENvbXBvbmVudAo9PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaXMgYSBzdWIgcmVwb3NpdG9yeSBvZiBbdGhlIEpXVCBGcmFtZXdvcmtdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yaykgcHJvamVjdCBhbmQgaXMgUkVBRCBPTkxZLgoKKipQbGVhc2UgZG8gbm90IHN1Ym1pdCBhbnkgUHVsbCBSZXF1ZXN0IGhlcmUuKioKWW91IHNob3VsZCBnbyB0byBbdGhlIG1haW4gcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBpbnN0ZWFkLgoKIyBEb2N1bWVudGF0aW9uCgpUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXMgaHR0cHM6Ly93ZWItdG9rZW4uc3BvbWt5LWxhYnMuY29tLwoKIyBTdXBwb3J0CgpJIGJyaW5nIHNvbHV0aW9ucyB0byB5b3VyIHByb2JsZW1zIGFuZCBhbnN3ZXIgeW91ciBxdWVzdGlvbnMuCgpJZiB5b3UgcmVhbGx5IGxvdmUgdGhhdCBwcm9qZWN0IGFuZCB0aGUgd29yayBJIGhhdmUgZG9uZSBvciBpZiB5b3Ugd2FudCBJIHByaW9yaXRpemUgeW91ciBpc3N1ZXMsIHRoZW4geW91IGNhbiBoZWxwIG1lIG91dCBmb3IgYSBjb3VwbGUgb2YgOmJlZXJzOiBvciBtb3JlIQoKWyFbQmVjb21lIGEgUGF0cmVvbl0oaHR0cHM6Ly9jNS5wYXRyZW9uLmNvbS9leHRlcm5hbC9sb2dvL2JlY29tZV9hX3BhdHJvbl9idXR0b24ucG5nKV0oaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpKQoKIyBDb250cmlidXRpbmcKClJlcXVlc3RzIGZvciBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlZCBhbmQgYWxsIG90aGVyIGlkZWFzIHRvIG1ha2UgdGhpcyBmcmFtZXdvcmsgdXNlZnVsIGFyZSB3ZWxjb21lLgpJZiB5b3UgZmVlbCBjb21mb3J0YWJsZSB3cml0aW5nIGNvZGUsIHlvdSBjb3VsZCB0cnkgdG8gZml4IFtvcGVuZWQgaXNzdWVzIHdoZXJlIGhlbHAgaXMgd2FudGVkXShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmsvbGFiZWxzL2hlbHArd2FudGVkKSBvciBbdGhvc2UgdGhhdCBhcmUgZWFzeSB0byBmaXhdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvZWFzeS1waWNrKS4KCkRvIG5vdCBmb3JnZXQgdG8gW2ZvbGxvdyB0aGVzZSBiZXN0IHByYWN0aWNlc10oLmdpdGh1Yi9DT05UUklCVVRJTkcubWQpLgoKKipJZiB5b3UgdGhpbmsgeW91IGhhdmUgZm91bmQgYSBzZWN1cml0eSBpc3N1ZSwgRE8gTk9UIG9wZW4gYW4gaXNzdWUqKi4gW1lvdSBNVVNUIHN1Ym1pdCB5b3VyIGlzc3VlIGhlcmVdKGh0dHBzOi8vZ2l0dGVyLmltL1Nwb21reS8pLgoKIyBMaWNlbmNlCgpUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2UgdW5kZXIgW01JVCBsaWNlbmNlXShMSUNFTlNFKS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/AlgorithmManagerFactoryTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5Owp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIFVuaXQKICogQGdyb3VwIEpXQU1hbmFnZXIKICovCmNsYXNzIEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5VGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5MaXN0U3VwcG9ydGVkQWxpYXNlcygpCiAgICB7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydmb28nXSwgJHRoaXMtPmdldEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5KCktPmFsaWFzZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydmb28nXSwgXGFycmF5X2tleXMoJHRoaXMtPmdldEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5KCktPmFsbCgpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbkNyZWF0ZUFuQWxnb3JpdGhtTWFuYWdlclVzaW5nQWxpYXNlcygpCiAgICB7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEFsZ29yaXRobU1hbmFnZXI6OmNsYXNzLCAkdGhpcy0+Z2V0QWxnb3JpdGhtTWFuYWdlckZhY3RvcnkoKS0+Y3JlYXRlKFsnZm9vJ10pKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbm5vdENyZWF0ZUFuQWxnb3JpdGhtTWFuYWdlcldpdGhBQmFkQXJndW1lbnQoKQogICAgewogICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbJ2ZvbyddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgYWxnb3JpdGhtICJIUzM4NCIgaXMgbm90IHN1cHBvcnRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5ub3RHZXRBbkFsZ29yaXRobVRoYXREb2VzTm90RXhpc3QoKQogICAgewogICAgICAgICRtYW5hZ2VyID0gQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgRm9vQWxnb3JpdGhtKCldKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydmb28nXSwgJG1hbmFnZXItPmxpc3QoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRtYW5hZ2VyLT5oYXMoJ2ZvbycpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRtYW5hZ2VyLT5oYXMoJ0hTMzg0JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihBbGdvcml0aG06OmNsYXNzLCAkbWFuYWdlci0+Z2V0KCdmb28nKSk7CiAgICAgICAgJG1hbmFnZXItPmdldCgnSFMzODQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtTWFuYWdlckZhY3Rvcnl8bnVsbAogICAgICovCiAgICBwcml2YXRlICRhbGdvcml0aG1NYW5hZ2VyRmFjdG9yeTsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5KCk6IEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5CiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyRmFjdG9yeSkgewogICAgICAgICAgICAkdGhpcy0+YWxnb3JpdGhtTWFuYWdlckZhY3RvcnkgPSBuZXcgQWxnb3JpdGhtTWFuYWdlckZhY3RvcnkoKTsKICAgICAgICAgICAgJHRoaXMtPmFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5hZGQoJ2ZvbycsIG5ldyBGb29BbGdvcml0aG0oKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmFsZ29yaXRobU1hbmFnZXJGYWN0b3J5OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/FooAlgorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG07CgpjbGFzcyBGb29BbGdvcml0aG0gaW1wbGVtZW50cyBBbGdvcml0aG0KewogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdmb28nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGxvd2VkS2V5VHlwZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydGT08nXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/JsonConverterTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgVW5pdAogKiBAZ3JvdXAgSnNvbkNvbnZlcnRlcgogKi8KY2xhc3MgSnNvbkNvbnZlcnRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuQ29udmVydEFuT2JqZWN0SW50b0FKc29uU3RyaW5nKCkKICAgIHsKICAgICAgICAkY29udmVydGVyID0gbmV3IFN0YW5kYXJkQ29udmVydGVyKCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3siZm9vIjoiQkFSIn0nLCAkY29udmVydGVyLT5lbmNvZGUoWydmb28nID0+ICdCQVInXSkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsnZm9vJyA9PiAnQkFSJ10sICRjb252ZXJ0ZXItPmRlY29kZSgneyJmb28iOiJCQVIifScpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/JWKSetTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBVbml0CiAqIEBncm91cCBKV0tTZXQKICovCmNsYXNzIEpXS1NldFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuU2VsZWN0QUtleUluQUtleVNldCgpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKCiAgICAgICAgJGp3ayA9ICRqd2tzZXQtPnNlbGVjdEtleSgnZW5jJyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRqd2spOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIEFsbG93ZWQga2V5IHR5cGVzIGFyZSAic2lnIiBvciAiZW5jIi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5ub3RTZWxlY3RBS2V5RnJvbUFLZXlTZXRXaXRoVW5zdXBwb3J0ZWRVc2FnZVBhcmFtZXRlcigpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKICAgICAgICAkandrc2V0LT5zZWxlY3RLZXkoJ2ZvbycpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIEludmFsaWQgZGF0YS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5ub3RDcmVhdGVBS2V5U2V0V2l0aEJhZEFyZ3VtZW50cygpCiAgICB7CiAgICAgICAgSldLU2V0OjpjcmVhdGVGcm9tS2V5RGF0YShbJ2tleXMnID0+IHRydWVdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuR2V0QWxsS2V5c0luQUtleVNldCgpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygzLCBcY291bnQoJGp3a3NldC0+YWxsKCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuQWRkS2V5c0luQUtleVNldCgpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKICAgICAgICAkbmV3X2p3a3NldCA9ICRqd2tzZXQtPndpdGgoSldLOjpjcmVhdGUoWydrdHknID0+ICdub25lJ10pKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyg0LCBcY291bnQoJG5ld19qd2tzZXQtPmFsbCgpKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnROb3RTYW1lKCRqd2tzZXQsICRuZXdfandrc2V0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuU2VsZWN0QUtleVdpdGhBbGdvcml0aG0oKQogICAgewogICAgICAgICRqd2tzZXQgPSAkdGhpcy0+Z2V0UHVibGljS2V5U2V0KCk7CgogICAgICAgICRqd2sgPSAkandrc2V0LT5zZWxlY3RLZXkoJ2VuYycsIG5ldyBGb29BbGdvcml0aG0oKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRqd2spOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2tpZCcgPT4gJzcxZWUyMzAzNzFkMTk2MzBiYzE3ZmI5MGNjZjIwYWU2MzJhZDhjZjgnLAogICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICd1c2UnID0+ICdlbmMnLAogICAgICAgIF0sCiAgICAgICAgICAgICRqd2stPmFsbCgpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuU2VsZWN0QUtleVdpdGhBbGdvcml0aG1BbmRLZXlJZCgpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKCiAgICAgICAgJGp3ayA9ICRqd2tzZXQtPnNlbGVjdEtleSgnc2lnJywgbmV3IEZvb0FsZ29yaXRobSgpLCBbJ2tpZCcgPT4gJzAyNDkxZjk0NWM5NTFhZGYxNTZmMzcwNzg4ZThjY2RhYmY4ODc3YTgnXSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRqd2spOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2tpZCcgPT4gJzAyNDkxZjk0NWM5NTFhZGYxNTZmMzcwNzg4ZThjY2RhYmY4ODc3YTgnLAogICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgIF0sCiAgICAgICAgICAgICRqd2stPmFsbCgpCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuU2VsZWN0QUtleVdpdGhXaXRoS2V5SWQoKQogICAgewogICAgICAgICRqd2tzZXQgPSAkdGhpcy0+Z2V0UHVibGljS2V5U2V0KCk7CgogICAgICAgICRqd2sgPSAkandrc2V0LT5zZWxlY3RLZXkoJ3NpZycsIG51bGwsIFsna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCddKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJGp3ayk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCcsCiAgICAgICAgICAgICdrdHknID0+ICdGT08nLAogICAgICAgICAgICAnYWxnJyA9PiAnZm9vJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgXSwKICAgICAgICAgICAgJGp3ay0+YWxsKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZUtleVNldERvZXNOb3RDb250YWluc1N1aXRhYmxlQUtleVRoYXRGaXRzT25UaGVSZXF1aXJlbWVudHMoKQogICAgewogICAgICAgICRqd2tzZXQgPSAkdGhpcy0+Z2V0UHVibGljS2V5U2V0KCk7CgogICAgICAgICRqd2sgPSAkandrc2V0LT5zZWxlY3RLZXkoJ2VuYycsIG51bGwsIFsna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCddKTsKICAgICAgICBzdGF0aWM6OmFzc2VydE51bGwoJGp3ayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbkNyZWF0ZUFLZXlTZXRVc2luZ1ZhbHVlcygpCiAgICB7CiAgICAgICAgJHZhbHVlcyA9IFsna2V5cycgPT4gW1sKICAgICAgICAgICAgJ2tpZCcgPT4gJzcxZWUyMzAzNzFkMTk2MzBiYzE3ZmI5MGNjZjIwYWU2MzJhZDhjZjgnLAogICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgIF1dXTsKICAgICAgICAkandrc2V0ID0gSldLU2V0OjpjcmVhdGVGcm9tS2V5RGF0YSgkdmFsdWVzKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLU2V0OjpjbGFzcywgJGp3a3NldCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgXGNvdW50KCRqd2tzZXQpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3a3NldC0+aGFzKCc3MWVlMjMwMzcxZDE5NjMwYmMxN2ZiOTBjY2YyMGFlNjMyYWQ4Y2Y4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGp3a3NldC0+aGFzKDApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlTZXQoKQogICAgewogICAgICAgICRqd2sxID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnbicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzAxMjM0NTY3ODknLAogICAgICAgIF0pOwoKICAgICAgICAkandrMiA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ2QnID0+ICdqcHNRbm5HUW1MLVlCSWZmSDExMzZjc3BZRzYtMGlZN1gxZkNFOS1FOUxJJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWyd2ZXJpZnknXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzk4NzY1NDMyMTAnLAogICAgICAgIF0pOwoKICAgICAgICAkandrc2V0ID0gSldLU2V0OjpjcmVhdGVGcm9tS2V5cyhbJGp3azFdKTsKICAgICAgICAkandrc2V0ID0gJGp3a3NldC0+d2l0aCgkandrMik7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7ImtleXMiOlt7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVSIsInkiOiJ4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwIiwidXNlIjoic2lnbiIsImtleV9vcHMiOlsic2lnbiJdLCJhbGciOiJFUzI1NiIsImtpZCI6IjAxMjM0NTY3ODkifSx7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVSIsInkiOiJ4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwIiwiZCI6Impwc1FubkdRbUwtWUJJZmZIMTEzNmNzcFlHNi0waVk3WDFmQ0U5LUU5TEkiLCJ1c2UiOiJzaWduIiwia2V5X29wcyI6WyJ2ZXJpZnkiXSwiYWxnIjoiRVMyNTYiLCJraWQiOiI5ODc2NTQzMjEwIn1dfScsIFxqc29uX2VuY29kZSgkandrc2V0KSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgXGNvdW50KCRqd2tzZXQpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygyLCAkandrc2V0LT5jb3VudCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3a3NldC0+aGFzKCcwMTIzNDU2Nzg5JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrc2V0LT5oYXMoJzk4NzY1NDMyMTAnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandrc2V0LT5oYXMoMCkpOwoKICAgICAgICBmb3JlYWNoICgkandrc2V0IGFzICRrZXkpIHsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VDJywgJGtleS0+Z2V0KCdrdHknKSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnOTg3NjU0MzIxMCcsICRqd2tzZXQtPmdldCgnOTg3NjU0MzIxMCcpLT5nZXQoJ2tpZCcpKTsKICAgICAgICAkandrc2V0ID0gJGp3a3NldC0+d2l0aG91dCgnOTg3NjU0MzIxMCcpOwogICAgICAgICRqd2tzZXQgPSAkandrc2V0LT53aXRob3V0KCc5ODc2NTQzMjEwJyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsIFxjb3VudCgkandrc2V0KSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJGp3a3NldC0+Y291bnQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRqd2tzZXQtPmdldCgnMDEyMzQ1Njc4OScpKTsKCiAgICAgICAgJGp3a3NldCA9ICRqd2tzZXQtPndpdGhvdXQoJzAxMjM0NTY3ODknKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygwLCBcY291bnQoJGp3a3NldCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDAsICRqd2tzZXQtPmNvdW50KCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuZGVmaW5lZCBpbmRleC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleVNldDIoKQogICAgewogICAgICAgICRqd2sxID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnbicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzAxMjM0NTY3ODknLAogICAgICAgIF0pOwoKICAgICAgICAkandrMiA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ2QnID0+ICdqcHNRbm5HUW1MLVlCSWZmSDExMzZjc3BZRzYtMGlZN1gxZkNFOS1FOUxJJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWyd2ZXJpZnknXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzk4NzY1NDMyMTAnLAogICAgICAgIF0pOwoKICAgICAgICAkandrc2V0ID0gSldLU2V0OjpjcmVhdGVGcm9tS2V5cyhbJGp3azEsICRqd2syXSk7CgogICAgICAgICRqd2tzZXQtPmdldCgyKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFB1YmxpY0tleVNldCgpOiBKV0tTZXQKICAgIHsKICAgICAgICAka2V5cyA9IFsna2V5cycgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna2lkJyA9PiAnNzFlZTIzMDM3MWQxOTYzMGJjMTdmYjkwY2NmMjBhZTYzMmFkOGNmOCcsCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgICAgICdhbGcnID0+ICdmb28nLAogICAgICAgICAgICAgICAgJ3VzZScgPT4gJ2VuYycsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdraWQnID0+ICcwMjQ5MWY5NDVjOTUxYWRmMTU2ZjM3MDc4OGU4Y2NkYWJmODg3N2E4JywKICAgICAgICAgICAgICAgICdrdHknID0+ICdGT08nLAogICAgICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgXSwKICAgICAgICBdXTsKCiAgICAgICAgcmV0dXJuIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoJGtleXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Tests/JWKTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgVW5pdAogKiBAZ3JvdXAgSldLCiAqLwpjbGFzcyBKV0tUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYUtleUNvbnRhaW5zQWxsRXhwZWN0ZWRQYXJhbWV0ZXJzKCkKICAgIHsKICAgICAgICAkandrID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsnc2lnbiddLAogICAgICAgICAgICAnYWxnJyA9PiAnRVMyNTYnLAogICAgICAgICAgICAnYmFyJyA9PiAncGxpYycsCiAgICAgICAgXSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdFQycsICRqd2stPmdldCgna3R5JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdFUzI1NicsICRqd2stPmdldCgnYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdzaWcnLCAkandrLT5nZXQoJ3VzZScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRqd2stPmhhcygna2lkJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsnc2lnbiddLCAkandrLT5nZXQoJ2tleV9vcHMnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1AtMjU2JywgJGp3ay0+Z2V0KCdjcnYnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandrLT5oYXMoJ3g1dScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRqd2stPmhhcygneDVjJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGp3ay0+aGFzKCd4NXQnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandrLT5oYXMoJ3g1dCMyNTYnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLCAkandrLT5nZXQoJ3gnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLCAkandrLT5nZXQoJ3knKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVIiwieSI6InhfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAiLCJ1c2UiOiJzaWciLCJrZXlfb3BzIjpbInNpZ24iXSwiYWxnIjoiRVMyNTYiLCJiYXIiOiJwbGljIn0nLCBcanNvbl9lbmNvZGUoJGp3aykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdvS0l5d3ZHVXBUVlR5eE1RM2J3SUllUVV1ZGZyX0NrTE1qQ0UxOUVDRC1VJywgJGp3ay0+dGh1bWJwcmludCgnc2hhMjU2JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdFTU1NbDZSajc1bXFoY0FCaWh4eGxfVkNOOXMnLCAkandrLT50aHVtYnByaW50KCdzaGExJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdkcXdIbmFuNGlKMV9lRWxsLW80RWd3JywgJGp3ay0+dGh1bWJwcmludCgnbWQ1JykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBoYXNoIGFsZ29yaXRobSAiZm9vIiBpcyBub3Qgc3VwcG9ydGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbm5vdEdldFRoZVRodW1icHJpbnRPZlRoZUtleVdoZW5JVXNlQW5VbnN1cHBvcnRlZEhhc2hpbmdBbGdvcml0aG0oKQogICAgewogICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAna2V5X29wcycgPT4gWydzaWduJ10sCiAgICAgICAgICAgICdhbGcnID0+ICdFUzI1NicsCiAgICAgICAgICAgICdiYXInID0+ICdwbGljJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3ay0+dGh1bWJwcmludCgnZm9vJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVGhlIHBhcmFtZXRlciAia3R5IiBpcyBtYW5kYXRvcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpTXVzdFNldEF0TGVhc3RUaGVLdHlQYXJhbWV0ZXIoKQogICAgewogICAgICAgIEpXSzo6Y3JlYXRlKFtdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgdmFsdWUgaWRlbnRpZmllZCBieSAiQUJDRCIgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2Fubm90R2V0QVBhcmFtZXRlclRoYXREb2VzTm90RXhpc3QoKQogICAgewogICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWduJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsnc2lnbiddLAogICAgICAgICAgICAnYWxnJyA9PiAnRVMyNTYnLAogICAgICAgICAgICAnYmFyJyA9PiAncGxpYycsCiAgICAgICAgXSk7CgogICAgICAgICRqd2stPmdldCgnQUJDRCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5Db252ZXJ0QVByaXZhdGVLZXlJbnRvUHVibGljS2V5KCkKICAgIHsKICAgICAgICAkcHJpdmF0ZSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ2QnID0+ICdqcHNRbm5HUW1MLVlCSWZmSDExMzZjc3BZRzYtMGlZN1gxZkNFOS1FOUxJJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWyd2ZXJpZnknXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzk4NzY1NDMyMTAnLAogICAgICAgIF0pOwoKICAgICAgICAkcHVibGljID0gJHByaXZhdGUtPnRvUHVibGljKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2VuY29kZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWduJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsndmVyaWZ5J10sCiAgICAgICAgICAgICdhbGcnID0+ICdFUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICc5ODc2NTQzMjEwJywKICAgICAgICBdKSwgXGpzb25fZW5jb2RlKCRwdWJsaWMpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/BigInteger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIEJpZ0ludGVnZXIKewogICAgLyoqCiAgICAgKiBIb2xkcyB0aGUgQmlnSW50ZWdlcidzIHZhbHVlLgogICAgICoKICAgICAqIEB2YXIgXEdNUAogICAgICovCiAgICBwcml2YXRlICR2YWx1ZTsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxHTVAgJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21HTVBSZXNvdXJjZShcR01QICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoc3RyaW5nICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSAnMHgnLlx1bnBhY2soJ0gqJywgJHZhbHVlKVsxXTsKICAgICAgICAkdmFsdWUgPSBcZ21wX2luaXQoJHZhbHVlLCAxNik7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbURlY2ltYWwoaW50ICR2YWx1ZSk6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSBcZ21wX2luaXQoJHZhbHVlLCAxMCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBCaWdJbnRlZ2VyIHRvIGEgYmluYXJ5IHN0cmluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQnl0ZXMoKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKDAgPT09IFxnbXBfY21wKCR0aGlzLT52YWx1ZSwgXGdtcF9pbml0KDApKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkdGVtcCA9IFxnbXBfc3RydmFsKFxnbXBfYWJzKCR0aGlzLT52YWx1ZSksIDE2KTsKICAgICAgICAkdGVtcCA9IFxtYl9zdHJsZW4oJHRlbXAsICc4Yml0JykgJiAxID8gJzAnLiR0ZW1wIDogJHRlbXA7CiAgICAgICAgJHRlbXAgPSBcaGV4MmJpbigkdGVtcCk7CgogICAgICAgIHJldHVybiBcbHRyaW0oJHRlbXAsIFxjaHIoMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyB0d28gQmlnSW50ZWdlcnMuCiAgICAgKgogICAgICogIEBwYXJhbSBCaWdJbnRlZ2VyICR5CiAgICAgKgogICAgICogIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKHNlbGYgJHkpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gXGdtcF9hZGQoJHRoaXMtPnZhbHVlLCAkeS0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUdNUFJlc291cmNlKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIEJpZ0ludGVnZXJzLgogICAgICoKICAgICAqICBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICoKICAgICAqICBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnRyYWN0KHNlbGYgJHkpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gXGdtcF9zdWIoJHRoaXMtPnZhbHVlLCAkeS0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUdNUFJlc291cmNlKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNdWx0aXBsaWVzIHR3byBCaWdJbnRlZ2Vycy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeAogICAgICoKICAgICAqICBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpcGx5KHNlbGYgJHgpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gXGdtcF9tdWwoJHRoaXMtPnZhbHVlLCAkeC0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUdNUFJlc291cmNlKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEaXZpZGVzIHR3byBCaWdJbnRlZ2Vycy4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeAogICAgICoKICAgICAqICBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpdmlkZShzZWxmICR4KTogc2VsZgogICAgewogICAgICAgICR2YWx1ZSA9IFxnbXBfZGl2KCR0aGlzLT52YWx1ZSwgJHgtPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21HTVBSZXNvdXJjZSgkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkZQogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJG4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZFBvdyhzZWxmICRlLCBzZWxmICRuKTogc2VsZgogICAgewogICAgICAgICR2YWx1ZSA9IFxnbXBfcG93bSgkdGhpcy0+dmFsdWUsICRlLT52YWx1ZSwgJG4tPnZhbHVlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21HTVBSZXNvdXJjZSgkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgbW9kdWxhciBleHBvbmVudGlhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkZAogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kKHNlbGYgJGQpOiBzZWxmCiAgICB7CiAgICAgICAgJHZhbHVlID0gXGdtcF9tb2QoJHRoaXMtPnZhbHVlLCAkZC0+dmFsdWUpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUdNUFJlc291cmNlKCR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIG1vZHVsYXIgaW52ZXJzZXMuCiAgICAgKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJG4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZEludmVyc2Uoc2VsZiAkbik6IHNlbGYKICAgIHsKICAgICAgICAkdmFsdWUgPSBcZ21wX2ludmVydCgkdGhpcy0+dmFsdWUsICRuLT52YWx1ZSk7CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tR01QUmVzb3VyY2UoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmVzIHR3byBudW1iZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKHNlbGYgJHkpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9jbXAoJHRoaXMtPnZhbHVlLCAkeS0+dmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIEJpZ0ludGVnZXIgJHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVxdWFscyhzZWxmICR5KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwID09PSAkdGhpcy0+Y29tcGFyZSgkeSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICoKICAgICAqIEByZXR1cm4gQmlnSW50ZWdlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbShzZWxmICR5KTogc2VsZgogICAgewogICAgICAgICR6ZXJvID0gc2VsZjo6Y3JlYXRlRnJvbURlY2ltYWwoMCk7CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tR01QUmVzb3VyY2UoXGdtcF9yYW5kb21fcmFuZ2UoJHplcm8tPnZhbHVlLCAkeS0+dmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBCaWdJbnRlZ2VyICR5CiAgICAgKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnY2Qoc2VsZiAkeSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbUdNUFJlc291cmNlKFxnbXBfZ2NkKCR0aGlzLT52YWx1ZSwgJHktPnZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQmlnSW50ZWdlciAkeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG93ZXJUaGFuKHNlbGYgJHkpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgPiAkdGhpcy0+Y29tcGFyZSgkeSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzRXZlbigpOiBib29sCiAgICB7CiAgICAgICAgJHplcm8gPSBzZWxmOjpjcmVhdGVGcm9tRGVjaW1hbCgwKTsKICAgICAgICAkdHdvID0gc2VsZjo6Y3JlYXRlRnJvbURlY2ltYWwoMik7CgogICAgICAgIHJldHVybiAkdGhpcy0+bW9kKCR0d28pLT5lcXVhbHMoJHplcm8pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/ECKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBFQ0tleQp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRUb1BFTShKV0sgJGp3ayk6IHN0cmluZwogICAgewogICAgICAgIGlmICgkandrLT5oYXMoJ2QnKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y29udmVydFByaXZhdGVLZXlUb1BFTSgkandrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y29udmVydFB1YmxpY0tleVRvUEVNKCRqd2spOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRQdWJsaWNLZXlUb1BFTShKV0sgJGp3ayk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAoJGp3ay0+Z2V0KCdjcnYnKSkgewogICAgICAgICAgICBjYXNlICdQLTI1Nic6CiAgICAgICAgICAgICAgICAkZGVyID0gc2VsZjo6cDI1NlB1YmxpY0tleSgpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdQLTM4NCc6CiAgICAgICAgICAgICAgICAkZGVyID0gc2VsZjo6cDM4NFB1YmxpY0tleSgpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdQLTUyMSc6CiAgICAgICAgICAgICAgICAkZGVyID0gc2VsZjo6cDUyMVB1YmxpY0tleSgpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGN1cnZlLicpOwogICAgICAgIH0KICAgICAgICAkZGVyIC49IHNlbGY6OmdldEtleSgkandrKTsKICAgICAgICAkcGVtID0gJy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tJy5QSFBfRU9MOwogICAgICAgICRwZW0gLj0gXGNodW5rX3NwbGl0KFxiYXNlNjRfZW5jb2RlKCRkZXIpLCA2NCwgUEhQX0VPTCk7CiAgICAgICAgJHBlbSAuPSAnLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tJy5QSFBfRU9MOwoKICAgICAgICByZXR1cm4gJHBlbTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRQcml2YXRlS2V5VG9QRU0oSldLICRqd2spOiBzdHJpbmcKICAgIHsKICAgICAgICBzd2l0Y2ggKCRqd2stPmdldCgnY3J2JykpIHsKICAgICAgICAgICAgY2FzZSAnUC0yNTYnOgogICAgICAgICAgICAgICAgJGRlciA9IHNlbGY6OnAyNTZQcml2YXRlS2V5KCRqd2spOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdQLTM4NCc6CiAgICAgICAgICAgICAgICAkZGVyID0gc2VsZjo6cDM4NFByaXZhdGVLZXkoJGp3ayk7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ1AtNTIxJzoKICAgICAgICAgICAgICAgICRkZXIgPSBzZWxmOjpwNTIxUHJpdmF0ZUtleSgkandrKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBjdXJ2ZS4nKTsKICAgICAgICB9CiAgICAgICAgJGRlciAuPSBzZWxmOjpnZXRLZXkoJGp3ayk7CiAgICAgICAgJHBlbSA9ICctLS0tLUJFR0lOIEVDIFBSSVZBVEUgS0VZLS0tLS0nLlBIUF9FT0w7CiAgICAgICAgJHBlbSAuPSBcY2h1bmtfc3BsaXQoXGJhc2U2NF9lbmNvZGUoJGRlciksIDY0LCBQSFBfRU9MKTsKICAgICAgICAkcGVtIC49ICctLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tJy5QSFBfRU9MOwoKICAgICAgICByZXR1cm4gJHBlbTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwMjU2UHVibGljS2V5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBccGFjaygnSConLAogICAgICAgICAgICAnMzA1OScgLy8gU0VRVUVOQ0UsIGxlbmd0aCA4OQogICAgICAgICAgICAgICAgLiczMDEzJyAvLyBTRVFVRU5DRSwgbGVuZ3RoIDE5CiAgICAgICAgICAgICAgICAgICAgLicwNjA3JyAvLyBPSUQsIGxlbmd0aCA3CiAgICAgICAgICAgICAgICAgICAgICAgIC4nMmE4NjQ4Y2UzZDAyMDEnIC8vIDEuMi44NDAuMTAwNDUuMi4xID0gRUMgUHVibGljIEtleQogICAgICAgICAgICAgICAgICAgIC4nMDYwOCcgLy8gT0lELCBsZW5ndGggOAogICAgICAgICAgICAgICAgICAgICAgICAuJzJhODY0OGNlM2QwMzAxMDcnIC8vIDEuMi44NDAuMTAwNDUuMy4xLjcgPSBQLTI1NiBDdXJ2ZQogICAgICAgICAgICAgICAgLicwMzQyJyAvLyBCSVQgU1RSSU5HLCBsZW5ndGggNjYKICAgICAgICAgICAgICAgICAgICAuJzAwJyAvLyBwcmVwZW5kIHdpdGggTlVMIC0gcHVia2V5IHdpbGwgZm9sbG93CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwMzg0UHVibGljS2V5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBccGFjaygnSConLAogICAgICAgICAgICAnMzA3NicgLy8gU0VRVUVOQ0UsIGxlbmd0aCAxMTgKICAgICAgICAgICAgICAgIC4nMzAxMCcgLy8gU0VRVUVOQ0UsIGxlbmd0aCAxNgogICAgICAgICAgICAgICAgICAgIC4nMDYwNycgLy8gT0lELCBsZW5ndGggNwogICAgICAgICAgICAgICAgICAgICAgICAuJzJhODY0OGNlM2QwMjAxJyAvLyAxLjIuODQwLjEwMDQ1LjIuMSA9IEVDIFB1YmxpYyBLZXkKICAgICAgICAgICAgICAgICAgICAuJzA2MDUnIC8vIE9JRCwgbGVuZ3RoIDUKICAgICAgICAgICAgICAgICAgICAgICAgLicyYjgxMDQwMDIyJyAvLyAxLjMuMTMyLjAuMzQgPSBQLTM4NCBDdXJ2ZQogICAgICAgICAgICAgICAgLicwMzYyJyAvLyBCSVQgU1RSSU5HLCBsZW5ndGggOTgKICAgICAgICAgICAgICAgICAgICAuJzAwJyAvLyBwcmVwZW5kIHdpdGggTlVMIC0gcHVia2V5IHdpbGwgZm9sbG93CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwNTIxUHVibGljS2V5KCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBccGFjaygnSConLAogICAgICAgICAgICAnMzA4MTliJyAvLyBTRVFVRU5DRSwgbGVuZ3RoIDE1NAogICAgICAgICAgICAgICAgLiczMDEwJyAvLyBTRVFVRU5DRSwgbGVuZ3RoIDE2CiAgICAgICAgICAgICAgICAgICAgLicwNjA3JyAvLyBPSUQsIGxlbmd0aCA3CiAgICAgICAgICAgICAgICAgICAgICAgIC4nMmE4NjQ4Y2UzZDAyMDEnIC8vIDEuMi44NDAuMTAwNDUuMi4xID0gRUMgUHVibGljIEtleQogICAgICAgICAgICAgICAgICAgIC4nMDYwNScgLy8gT0lELCBsZW5ndGggNQogICAgICAgICAgICAgICAgICAgICAgICAuJzJiODEwNDAwMjMnIC8vIDEuMy4xMzIuMC4zNSA9IFAtNTIxIEN1cnZlCiAgICAgICAgICAgICAgICAuJzAzODE4NicgLy8gQklUIFNUUklORywgbGVuZ3RoIDEzNAogICAgICAgICAgICAgICAgICAgIC4nMDAnIC8vIHByZXBlbmQgd2l0aCBOVUwgLSBwdWJrZXkgd2lsbCBmb2xsb3cKICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHAyNTZQcml2YXRlS2V5KEpXSyAkandrKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGQgPSBcdW5wYWNrKCdIKicsIEJhc2U2NFVybDo6ZGVjb2RlKCRqd2stPmdldCgnZCcpKSlbMV07CiAgICAgICAgJGRsID0gXG1iX3N0cmxlbigkZCwgJzhiaXQnKSAvIDI7CgogICAgICAgIHJldHVybiBccGFjaygnSConLAogICAgICAgICAgICAnMzAnLlxkZWNoZXgoODcgKyAkZGwpIC8vIFNFUVVFTkNFLCBsZW5ndGggODcrbGVuZ3RoKCRkKQogICAgICAgICAgICAgICAgLicwMjAxMDEnIC8vIElOVEVHRVIsIDEKICAgICAgICAgICAgICAgIC4nMDQnLlxkZWNoZXgoJGRsKSAgIC8vIE9DVEVUIFNUUklORywgbGVuZ3RoKCRkKQogICAgICAgICAgICAgICAgICAgIC4kZAogICAgICAgICAgICAgICAgLidhMDBhJyAvLyBUQUdHRUQgT0JKRUNUICMwLCBsZW5ndGggMTAKICAgICAgICAgICAgICAgICAgICAuJzA2MDgnIC8vIE9JRCwgbGVuZ3RoIDgKICAgICAgICAgICAgICAgICAgICAgICAgLicyYTg2NDhjZTNkMDMwMTA3JyAvLyAxLjMuMTMyLjAuMzQgPSBQLTM4NCBDdXJ2ZQogICAgICAgICAgICAgICAgLidhMTQ0JyAvLyAgVEFHR0VEIE9CSkVDVCAjMSwgbGVuZ3RoIDY4CiAgICAgICAgICAgICAgICAgICAgLicwMzQyJyAvLyBCSVQgU1RSSU5HLCBsZW5ndGggNjYKICAgICAgICAgICAgICAgICAgICAuJzAwJyAvLyBwcmVwZW5kIHdpdGggTlVMIC0gcHVia2V5IHdpbGwgZm9sbG93CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwMzg0UHJpdmF0ZUtleShKV0sgJGp3ayk6IHN0cmluZwogICAgewogICAgICAgICRkID0gXHVucGFjaygnSConLCBCYXNlNjRVcmw6OmRlY29kZSgkandrLT5nZXQoJ2QnKSkpWzFdOwogICAgICAgICRkbCA9IFxtYl9zdHJsZW4oJGQsICc4Yml0JykgLyAyOwoKICAgICAgICByZXR1cm4gXHBhY2soJ0gqJywKICAgICAgICAgICAgJzMwODEnLlxkZWNoZXgoMTE2ICsgJGRsKSAvLyBTRVFVRU5DRSwgbGVuZ3RoIDExNiArIGxlbmd0aCgkZCkKICAgICAgICAgICAgICAgIC4nMDIwMTAxJyAvLyBJTlRFR0VSLCAxCiAgICAgICAgICAgICAgICAuJzA0Jy5cZGVjaGV4KCRkbCkgICAvLyBPQ1RFVCBTVFJJTkcsIGxlbmd0aCgkZCkKICAgICAgICAgICAgICAgICAgICAuJGQKICAgICAgICAgICAgICAgIC4nYTAwNycgLy8gVEFHR0VEIE9CSkVDVCAjMCwgbGVuZ3RoIDcKICAgICAgICAgICAgICAgICAgICAuJzA2MDUnIC8vIE9JRCwgbGVuZ3RoIDUKICAgICAgICAgICAgICAgICAgICAgICAgLicyYjgxMDQwMDIyJyAvLyAxLjMuMTMyLjAuMzQgPSBQLTM4NCBDdXJ2ZQogICAgICAgICAgICAgICAgLidhMTY0JyAvLyAgVEFHR0VEIE9CSkVDVCAjMSwgbGVuZ3RoIDEwMAogICAgICAgICAgICAgICAgICAgIC4nMDM2MicgLy8gQklUIFNUUklORywgbGVuZ3RoIDk4CiAgICAgICAgICAgICAgICAgICAgLicwMCcgLy8gcHJlcGVuZCB3aXRoIE5VTCAtIHB1YmtleSB3aWxsIGZvbGxvdwogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcDUyMVByaXZhdGVLZXkoSldLICRqd2spOiBzdHJpbmcKICAgIHsKICAgICAgICAkZCA9IFx1bnBhY2soJ0gqJywgQmFzZTY0VXJsOjpkZWNvZGUoJGp3ay0+Z2V0KCdkJykpKVsxXTsKICAgICAgICAkZGwgPSBcbWJfc3RybGVuKCRkLCAnOGJpdCcpIC8gMjsKCiAgICAgICAgcmV0dXJuIFxwYWNrKCdIKicsCiAgICAgICAgICAgICczMDgxJy5cZGVjaGV4KDE1NCArICRkbCkgLy8gU0VRVUVOQ0UsIGxlbmd0aCAxNTQrbGVuZ3RoKGQpCiAgICAgICAgICAgICAgICAuJzAyMDEwMScgLy8gSU5URUdFUiwgMQogICAgICAgICAgICAgICAgLicwNCcuXGRlY2hleCgkZGwpICAgLy8gT0NURVQgU1RSSU5HLCBsZW5ndGgoZCkKICAgICAgICAgICAgICAgICAgICAuJGQKICAgICAgICAgICAgICAgIC4nYTAwNycgLy8gVEFHR0VEIE9CSkVDVCAjMCwgbGVuZ3RoIDcKICAgICAgICAgICAgICAgICAgICAuJzA2MDUnIC8vIE9JRCwgbGVuZ3RoIDUKICAgICAgICAgICAgICAgICAgICAgICAgLicyYjgxMDQwMDIzJyAvLyAxLjMuMTMyLjAuMzUgPSBQLTUyMSBDdXJ2ZQogICAgICAgICAgICAgICAgLidhMTgxODknIC8vICBUQUdHRUQgT0JKRUNUICMxLCBsZW5ndGggMTM3CiAgICAgICAgICAgICAgICAgICAgLicwMzgxODYnIC8vIEJJVCBTVFJJTkcsIGxlbmd0aCAxMzQKICAgICAgICAgICAgICAgICAgICAuJzAwJyAvLyBwcmVwZW5kIHdpdGggTlVMIC0gcHVia2V5IHdpbGwgZm9sbG93CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRLZXkoSldLICRqd2spOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4KICAgICAgICAgICAgXHBhY2soJ0gqJywgJzA0JykKICAgICAgICAgICAgLkJhc2U2NFVybDo6ZGVjb2RlKCRqd2stPmdldCgneCcpKQogICAgICAgICAgICAuQmFzZTY0VXJsOjpkZWNvZGUoJGp3ay0+Z2V0KCd5JykpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/ECSignature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIEVDU2lnbmF0dXJlCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9ERVIoc3RyaW5nICRzaWduYXR1cmUsIGludCAkcGFydExlbmd0aCk6IHN0cmluZwogICAgewogICAgICAgICRzaWduYXR1cmUgPSBcdW5wYWNrKCdIKicsICRzaWduYXR1cmUpWzFdOwogICAgICAgIGlmIChcbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykgIT09IDIgKiAkcGFydExlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBsZW5ndGguJyk7CiAgICAgICAgfQogICAgICAgICRSID0gXG1iX3N1YnN0cigkc2lnbmF0dXJlLCAwLCAkcGFydExlbmd0aCwgJzhiaXQnKTsKICAgICAgICAkUyA9IFxtYl9zdWJzdHIoJHNpZ25hdHVyZSwgJHBhcnRMZW5ndGgsIG51bGwsICc4Yml0Jyk7CgogICAgICAgICRSID0gc2VsZjo6cHJlcGFyZVBvc2l0aXZlSW50ZWdlcigkUik7CiAgICAgICAgJFJsID0gXG1iX3N0cmxlbigkUiwgJzhiaXQnKSAvIDI7CiAgICAgICAgJFMgPSBzZWxmOjpwcmVwYXJlUG9zaXRpdmVJbnRlZ2VyKCRTKTsKICAgICAgICAkU2wgPSBcbWJfc3RybGVuKCRTLCAnOGJpdCcpIC8gMjsKICAgICAgICAkZGVyID0gXHBhY2soJ0gqJywKICAgICAgICAgICAgJzMwJy4oJFJsICsgJFNsICsgNCA+IDEyOCA/ICc4MScgOiAnJykuXGRlY2hleCgkUmwgKyAkU2wgKyA0KQogICAgICAgICAgICAuJzAyJy5cZGVjaGV4KCRSbCkuJFIKICAgICAgICAgICAgLicwMicuXGRlY2hleCgkU2wpLiRTCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRkZXI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tREVSKHN0cmluZyAkZGVyLCBpbnQgJHBhcnRMZW5ndGgpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaGV4ID0gXHVucGFjaygnSConLCAkZGVyKVsxXTsKICAgICAgICBpZiAoJzMwJyAhPT0gXG1iX3N1YnN0cigkaGV4LCAwLCAyLCAnOGJpdCcpKSB7IC8vIFNFUVVFTkNFCiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICBpZiAoJzgxJyA9PT0gXG1iX3N1YnN0cigkaGV4LCAyLCAyLCAnOGJpdCcpKSB7IC8vIExFTkdUSCA+IDEyOAogICAgICAgICAgICAkaGV4ID0gXG1iX3N1YnN0cigkaGV4LCA2LCBudWxsLCAnOGJpdCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRoZXggPSBcbWJfc3Vic3RyKCRoZXgsIDQsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgfQogICAgICAgIGlmICgnMDInICE9PSBcbWJfc3Vic3RyKCRoZXgsIDAsIDIsICc4Yml0JykpIHsgLy8gSU5URUdFUgogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgICAgICB9CgogICAgICAgICRSbCA9IFxoZXhkZWMoXG1iX3N1YnN0cigkaGV4LCAyLCAyLCAnOGJpdCcpKTsKICAgICAgICAkUiA9IHNlbGY6OnJldHJpZXZlUG9zaXRpdmVJbnRlZ2VyKFxtYl9zdWJzdHIoJGhleCwgNCwgJFJsICogMiwgJzhiaXQnKSk7CiAgICAgICAgJFIgPSBcc3RyX3BhZCgkUiwgJHBhcnRMZW5ndGgsICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgJGhleCA9IFxtYl9zdWJzdHIoJGhleCwgNCArICRSbCAqIDIsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgaWYgKCcwMicgIT09IFxtYl9zdWJzdHIoJGhleCwgMCwgMiwgJzhiaXQnKSkgeyAvLyBJTlRFR0VSCiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkU2wgPSBcaGV4ZGVjKFxtYl9zdWJzdHIoJGhleCwgMiwgMiwgJzhiaXQnKSk7CiAgICAgICAgJFMgPSBzZWxmOjpyZXRyaWV2ZVBvc2l0aXZlSW50ZWdlcihcbWJfc3Vic3RyKCRoZXgsIDQsICRTbCAqIDIsICc4Yml0JykpOwogICAgICAgICRTID0gXHN0cl9wYWQoJFMsICRwYXJ0TGVuZ3RoLCAnMCcsIFNUUl9QQURfTEVGVCk7CgogICAgICAgIHJldHVybiBccGFjaygnSConLCAkUi4kUyk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZVBvc2l0aXZlSW50ZWdlcihzdHJpbmcgJGRhdGEpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoXG1iX3N1YnN0cigkZGF0YSwgMCwgMiwgJzhiaXQnKSA+ICc3ZicpIHsKICAgICAgICAgICAgcmV0dXJuICcwMCcuJGRhdGE7CiAgICAgICAgfQogICAgICAgIHdoaWxlICgnMDAnID09PSBcbWJfc3Vic3RyKCRkYXRhLCAwLCAyLCAnOGJpdCcpICYmIFxtYl9zdWJzdHIoJGRhdGEsIDIsIDIsICc4Yml0JykgPD0gJzdmJykgewogICAgICAgICAgICAkZGF0YSA9IFxtYl9zdWJzdHIoJGRhdGEsIDIsIG51bGwsICc4Yml0Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVQb3NpdGl2ZUludGVnZXIoc3RyaW5nICRkYXRhKTogc3RyaW5nCiAgICB7CiAgICAgICAgd2hpbGUgKCcwMCcgPT09IFxtYl9zdWJzdHIoJGRhdGEsIDAsIDIsICc4Yml0JykgJiYgXG1iX3N1YnN0cigkZGF0YSwgMiwgMiwgJzhiaXQnKSA+ICc3ZicpIHsKICAgICAgICAgICAgJGRhdGEgPSBcbWJfc3Vic3RyKCRkYXRhLCAyLCBudWxsLCAnOGJpdCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/Hash.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCi8qKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIEhhc2gKewogICAgLyoqCiAgICAgKiBIYXNoIFBhcmFtZXRlci4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRoYXNoOwoKICAgIC8qKgogICAgICogSGFzaCBMZW5ndGguCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHJldHVybiBIYXNoCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2hhMSgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGExJywgMjApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBIYXNoCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2hhMjU2KCk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJ3NoYTI1NicsIDMyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSGFzaAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNoYTM4NCgpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCdzaGEzODQnLCA0OCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEhhc2gKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaGE1MTIoKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZignc2hhNTEyJywgNjQpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRoYXNoLCBpbnQgJGxlbmd0aCkKICAgIHsKICAgICAgICAkdGhpcy0+aGFzaCA9ICRoYXNoOwogICAgICAgICR0aGlzLT5sZW5ndGggPSAkbGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMZW5ndGgoKTogaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sZW5ndGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wdXRlIHRoZSBITUFDLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzaChzdHJpbmcgJHRleHQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGhhc2goJHRoaXMtPmhhc2gsICR0ZXh0LCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhc2g7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/JsonConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCmZpbmFsIGNsYXNzIEpzb25Db252ZXJ0ZXIKewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGUoJHBheWxvYWQpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gXGpzb25fZW5jb2RlKCRwYXlsb2FkLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nICRwYXlsb2FkKQogICAgewogICAgICAgIHJldHVybiBcanNvbl9kZWNvZGUoJHBheWxvYWQsIHRydWUsIDUxMiwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/KeyChecker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKCi8qKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIEtleUNoZWNrZXIKewogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0tleVVzYWdlKEpXSyAka2V5LCBzdHJpbmcgJHVzYWdlKTogYm9vbAogICAgewogICAgICAgIGlmICgka2V5LT5oYXMoJ3VzZScpKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpjaGVja1VzYWdlKCRrZXksICR1c2FnZSk7CiAgICAgICAgfQogICAgICAgIGlmICgka2V5LT5oYXMoJ2tleV9vcHMnKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y2hlY2tPcGVyYXRpb24oJGtleSwgJHVzYWdlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNoZWNrT3BlcmF0aW9uKEpXSyAka2V5LCBzdHJpbmcgJHVzYWdlKTogYm9vbAogICAgewogICAgICAgICRvcHMgPSAka2V5LT5nZXQoJ2tleV9vcHMnKTsKICAgICAgICBpZiAoIVxpc19hcnJheSgkb3BzKSkgewogICAgICAgICAgICAkb3BzID0gWyRvcHNdOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKCR1c2FnZSkgewogICAgICAgICAgICBjYXNlICd2ZXJpZmljYXRpb24nOgogICAgICAgICAgICAgICAgaWYgKCFcaW5fYXJyYXkoJ3ZlcmlmeScsICRvcHMsIHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0tleSBjYW5ub3QgYmUgdXNlZCB0byB2ZXJpZnkgYSBzaWduYXR1cmUnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgY2FzZSAnc2lnbmF0dXJlJzoKICAgICAgICAgICAgICAgIGlmICghXGluX2FycmF5KCdzaWduJywgJG9wcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSB1c2VkIHRvIHNpZ24nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgY2FzZSAnZW5jcnlwdGlvbic6CiAgICAgICAgICAgICAgICBpZiAoIVxpbl9hcnJheSgnZW5jcnlwdCcsICRvcHMsIHRydWUpICYmICFcaW5fYXJyYXkoJ3dyYXBLZXknLCAkb3BzLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdLZXkgY2Fubm90IGJlIHVzZWQgdG8gZW5jcnlwdCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICBjYXNlICdkZWNyeXB0aW9uJzoKICAgICAgICAgICAgICAgIGlmICghXGluX2FycmF5KCdkZWNyeXB0JywgJG9wcywgdHJ1ZSkgJiYgIVxpbl9hcnJheSgndW53cmFwS2V5JywgJG9wcywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignS2V5IGNhbm5vdCBiZSB1c2VkIHRvIGRlY3J5cHQnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBrZXkgdXNhZ2UuJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNoZWNrVXNhZ2UoSldLICRrZXksIHN0cmluZyAkdXNhZ2UpOiBib29sCiAgICB7CiAgICAgICAgJHVzZSA9ICRrZXktPmdldCgndXNlJyk7CiAgICAgICAgc3dpdGNoICgkdXNhZ2UpIHsKICAgICAgICAgICAgY2FzZSAndmVyaWZpY2F0aW9uJzoKICAgICAgICAgICAgY2FzZSAnc2lnbmF0dXJlJzoKICAgICAgICAgICAgICAgIGlmICgnc2lnJyAhPT0gJHVzZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdLZXkgY2Fubm90IGJlIHVzZWQgdG8gc2lnbiBvciB2ZXJpZnkgYSBzaWduYXR1cmUuJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGNhc2UgJ2VuY3J5cHRpb24nOgogICAgICAgICAgICBjYXNlICdkZWNyeXB0aW9uJzoKICAgICAgICAgICAgICAgIGlmICgnZW5jJyAhPT0gJHVzZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdLZXkgY2Fubm90IGJlIHVzZWQgdG8gZW5jcnlwdCBvciBkZWNyeXB0LicpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGtleSB1c2FnZS4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0tleUFsZ29yaXRobShKV0sgJGtleSwgc3RyaW5nICRhbGdvcml0aG0pCiAgICB7CiAgICAgICAgaWYgKCEka2V5LT5oYXMoJ2FsZycpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgka2V5LT5nZXQoJ2FsZycpICE9PSAkYWxnb3JpdGhtKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdLZXkgaXMgb25seSBhbGxvd2VkIGZvciBhbGdvcml0aG0gIiVzIi4nLCAka2V5LT5nZXQoJ2FsZycpKSk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-core/Util/RSAKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbDsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcQml0U3RyaW5nOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcSW50ZWdlcjsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXE51bGxPYmplY3Q7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2N0ZXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgUlNBS2V5CnsKICAgIC8qKgogICAgICogQHZhciBTZXF1ZW5jZQogICAgICovCiAgICBwcml2YXRlICRzZXF1ZW5jZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRwcml2YXRlID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJHZhbHVlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBCaWdJbnRlZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgJG1vZHVsdXM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcml2YXRlICRtb2R1bHVzX2xlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgQmlnSW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRwdWJsaWNfZXhwb25lbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIEJpZ0ludGVnZXJ8bnVsbAogICAgICovCiAgICBwcml2YXRlICRwcml2YXRlX2V4cG9uZW50ID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgQmlnSW50ZWdlcltdCiAgICAgKi8KICAgIHByaXZhdGUgJHByaW1lcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBCaWdJbnRlZ2VyW10KICAgICAqLwogICAgcHJpdmF0ZSAkZXhwb25lbnRzID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIEJpZ0ludGVnZXJ8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjb2VmZmljaWVudCA9IG51bGw7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChKV0sgJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPmxvYWRKV0soJGRhdGEtPmFsbCgpKTsKICAgICAgICAkdGhpcy0+cG9wdWxhdGVCaWdJbnRlZ2VycygpOwogICAgICAgICR0aGlzLT5wcml2YXRlID0gXGFycmF5X2tleV9leGlzdHMoJ2QnLCAkdGhpcy0+dmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUlNBS2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUpXSyhKV0sgJGp3ayk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGp3ayk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsdXMoKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bW9kdWx1czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWx1c0xlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsdXNfbGVuZ3RoOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBvbmVudCgpOiBCaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgJGQgPSAkdGhpcy0+Z2V0UHJpdmF0ZUV4cG9uZW50KCk7CiAgICAgICAgaWYgKG51bGwgIT09ICRkKSB7CiAgICAgICAgICAgIHJldHVybiAkZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UHVibGljRXhwb25lbnQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljRXhwb25lbnQoKTogQmlnSW50ZWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHVibGljX2V4cG9uZW50OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcml2YXRlRXhwb25lbnQoKTogP0JpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByaXZhdGVfZXhwb25lbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXJbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJpbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcmltZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEJpZ0ludGVnZXJbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhwb25lbnRzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHBvbmVudHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvZWZmaWNpZW50KCk6ID9CaWdJbnRlZ2VyCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb2VmZmljaWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQdWJsaWMoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAhXGFycmF5X2tleV9leGlzdHMoJ2QnLCAkdGhpcy0+dmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBSU0FLZXkgJHByaXZhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIFJTQUtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvUHVibGljKHNlbGYgJHByaXZhdGUpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSAkcHJpdmF0ZS0+dG9BcnJheSgpOwogICAgICAgICRrZXlzID0gWydwJywgJ2QnLCAncScsICdkcCcsICdkcScsICdxaSddOwogICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJGRhdGFbJGtleV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoSldLOjpjcmVhdGUoJGRhdGEpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEpXSyhhcnJheSAkandrKQogICAgewogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJ2t0eScsICRqd2spKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUga2V5IHBhcmFtZXRlciAia3R5IiBpcyBtaXNzaW5nLicpOwogICAgICAgIH0KICAgICAgICBpZiAoJ1JTQScgIT09ICRqd2tbJ2t0eSddKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgSldLIGlzIG5vdCBhIFJTQSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+dmFsdWVzID0gJGp3azsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBvcHVsYXRlQmlnSW50ZWdlcnMoKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bHVzID0gJHRoaXMtPmNvbnZlcnRCYXNlNjRTdHJpbmdUb0JpZ0ludGVnZXIoJHRoaXMtPnZhbHVlc1snbiddKTsKICAgICAgICAkdGhpcy0+bW9kdWx1c19sZW5ndGggPSBcbWJfc3RybGVuKCR0aGlzLT5nZXRNb2R1bHVzKCktPnRvQnl0ZXMoKSwgJzhiaXQnKTsKICAgICAgICAkdGhpcy0+cHVibGljX2V4cG9uZW50ID0gJHRoaXMtPmNvbnZlcnRCYXNlNjRTdHJpbmdUb0JpZ0ludGVnZXIoJHRoaXMtPnZhbHVlc1snZSddKTsKCiAgICAgICAgaWYgKCEkdGhpcy0+aXNQdWJsaWMoKSkgewogICAgICAgICAgICAkdGhpcy0+cHJpdmF0ZV9leHBvbmVudCA9ICR0aGlzLT5jb252ZXJ0QmFzZTY0U3RyaW5nVG9CaWdJbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ2QnXSk7CgogICAgICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ3AnLCAkdGhpcy0+dmFsdWVzKSAmJiBcYXJyYXlfa2V5X2V4aXN0cygncScsICR0aGlzLT52YWx1ZXMpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJpbWVzID0gWwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb252ZXJ0QmFzZTY0U3RyaW5nVG9CaWdJbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ3AnXSksCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRCYXNlNjRTdHJpbmdUb0JpZ0ludGVnZXIoJHRoaXMtPnZhbHVlc1sncSddKSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ2RwJywgJHRoaXMtPnZhbHVlcykgJiYgXGFycmF5X2tleV9leGlzdHMoJ2RxJywgJHRoaXMtPnZhbHVlcykgJiYgXGFycmF5X2tleV9leGlzdHMoJ3FpJywgJHRoaXMtPnZhbHVlcykpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZXhwb25lbnRzID0gWwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29udmVydEJhc2U2NFN0cmluZ1RvQmlnSW50ZWdlcigkdGhpcy0+dmFsdWVzWydkcCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRCYXNlNjRTdHJpbmdUb0JpZ0ludGVnZXIoJHRoaXMtPnZhbHVlc1snZHEnXSksCiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29lZmZpY2llbnQgPSAkdGhpcy0+Y29udmVydEJhc2U2NFN0cmluZ1RvQmlnSW50ZWdlcigkdGhpcy0+dmFsdWVzWydxaSddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbnZlcnRCYXNlNjRTdHJpbmdUb0JpZ0ludGVnZXIoc3RyaW5nICR2YWx1ZSk6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICByZXR1cm4gQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbUJpbmFyeVN0cmluZyhCYXNlNjRVcmw6OmRlY29kZSgkdmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9QRU0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5zZXF1ZW5jZSkgewogICAgICAgICAgICAkdGhpcy0+c2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdkJywgJHRoaXMtPnZhbHVlcykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pbml0UHJpdmF0ZUtleSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmluaXRQdWJsaWNLZXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmVzdWx0ID0gJy0tLS0tQkVHSU4gJy4oJHRoaXMtPnByaXZhdGUgPyAnUlNBIFBSSVZBVEUnIDogJ1BVQkxJQycpLicgS0VZLS0tLS0nLlBIUF9FT0w7CiAgICAgICAgJHJlc3VsdCAuPSBcY2h1bmtfc3BsaXQoXGJhc2U2NF9lbmNvZGUoJHRoaXMtPnNlcXVlbmNlLT5nZXRCaW5hcnkoKSksIDY0LCBQSFBfRU9MKTsKICAgICAgICAkcmVzdWx0IC49ICctLS0tLUVORCAnLigkdGhpcy0+cHJpdmF0ZSA/ICdSU0EgUFJJVkFURScgOiAnUFVCTElDJykuJyBLRVktLS0tLScuUEhQX0VPTDsKCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbml0UHVibGljS2V5KCkKICAgIHsKICAgICAgICAkb2lkX3NlcXVlbmNlID0gbmV3IFNlcXVlbmNlKCk7CiAgICAgICAgJG9pZF9zZXF1ZW5jZS0+YWRkQ2hpbGQobmV3IE9iamVjdElkZW50aWZpZXIoJzEuMi44NDAuMTEzNTQ5LjEuMS4xJykpOwogICAgICAgICRvaWRfc2VxdWVuY2UtPmFkZENoaWxkKG5ldyBOdWxsT2JqZWN0KCkpOwogICAgICAgICR0aGlzLT5zZXF1ZW5jZS0+YWRkQ2hpbGQoJG9pZF9zZXF1ZW5jZSk7CiAgICAgICAgJG4gPSBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+dmFsdWVzWyduJ10pKTsKICAgICAgICAkZSA9IG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ2UnXSkpOwogICAgICAgICRrZXlfc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAka2V5X3NlcXVlbmNlLT5hZGRDaGlsZCgkbik7CiAgICAgICAgJGtleV9zZXF1ZW5jZS0+YWRkQ2hpbGQoJGUpOwogICAgICAgICRrZXlfYml0X3N0cmluZyA9IG5ldyBCaXRTdHJpbmcoXGJpbjJoZXgoJGtleV9zZXF1ZW5jZS0+Z2V0QmluYXJ5KCkpKTsKICAgICAgICAkdGhpcy0+c2VxdWVuY2UtPmFkZENoaWxkKCRrZXlfYml0X3N0cmluZyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbml0UHJpdmF0ZUtleSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlcXVlbmNlLT5hZGRDaGlsZChuZXcgSW50ZWdlcigwKSk7CiAgICAgICAgJG9pZF9zZXF1ZW5jZSA9IG5ldyBTZXF1ZW5jZSgpOwogICAgICAgICRvaWRfc2VxdWVuY2UtPmFkZENoaWxkKG5ldyBPYmplY3RJZGVudGlmaWVyKCcxLjIuODQwLjExMzU0OS4xLjEuMScpKTsKICAgICAgICAkb2lkX3NlcXVlbmNlLT5hZGRDaGlsZChuZXcgTnVsbE9iamVjdCgpKTsKICAgICAgICAkdGhpcy0+c2VxdWVuY2UtPmFkZENoaWxkKCRvaWRfc2VxdWVuY2UpOwogICAgICAgICR2ID0gbmV3IEludGVnZXIoMCk7CiAgICAgICAgJG4gPSBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+dmFsdWVzWyduJ10pKTsKICAgICAgICAkZSA9IG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ2UnXSkpOwogICAgICAgICRkID0gbmV3IEludGVnZXIoJHRoaXMtPmZyb21CYXNlNjRUb0ludGVnZXIoJHRoaXMtPnZhbHVlc1snZCddKSk7CiAgICAgICAgJHAgPSBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+dmFsdWVzWydwJ10pKTsKICAgICAgICAkcSA9IG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ3EnXSkpOwogICAgICAgICRkcCA9IFxhcnJheV9rZXlfZXhpc3RzKCdkcCcsICR0aGlzLT52YWx1ZXMpID8gbmV3IEludGVnZXIoJHRoaXMtPmZyb21CYXNlNjRUb0ludGVnZXIoJHRoaXMtPnZhbHVlc1snZHAnXSkpIDogbmV3IEludGVnZXIoMCk7CiAgICAgICAgJGRxID0gXGFycmF5X2tleV9leGlzdHMoJ2RxJywgJHRoaXMtPnZhbHVlcykgPyBuZXcgSW50ZWdlcigkdGhpcy0+ZnJvbUJhc2U2NFRvSW50ZWdlcigkdGhpcy0+dmFsdWVzWydkcSddKSkgOiBuZXcgSW50ZWdlcigwKTsKICAgICAgICAkcWkgPSBcYXJyYXlfa2V5X2V4aXN0cygncWknLCAkdGhpcy0+dmFsdWVzKSA/IG5ldyBJbnRlZ2VyKCR0aGlzLT5mcm9tQmFzZTY0VG9JbnRlZ2VyKCR0aGlzLT52YWx1ZXNbJ3FpJ10pKSA6IG5ldyBJbnRlZ2VyKDApOwogICAgICAgICRrZXlfc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoKTsKICAgICAgICAka2V5X3NlcXVlbmNlLT5hZGRDaGlsZCgkdik7CiAgICAgICAgJGtleV9zZXF1ZW5jZS0+YWRkQ2hpbGQoJG4pOwogICAgICAgICRrZXlfc2VxdWVuY2UtPmFkZENoaWxkKCRlKTsKICAgICAgICAka2V5X3NlcXVlbmNlLT5hZGRDaGlsZCgkZCk7CiAgICAgICAgJGtleV9zZXF1ZW5jZS0+YWRkQ2hpbGQoJHApOwogICAgICAgICRrZXlfc2VxdWVuY2UtPmFkZENoaWxkKCRxKTsKICAgICAgICAka2V5X3NlcXVlbmNlLT5hZGRDaGlsZCgkZHApOwogICAgICAgICRrZXlfc2VxdWVuY2UtPmFkZENoaWxkKCRkcSk7CiAgICAgICAgJGtleV9zZXF1ZW5jZS0+YWRkQ2hpbGQoJHFpKTsKICAgICAgICAka2V5X29jdGV0X3N0cmluZyA9IG5ldyBPY3RldFN0cmluZyhcYmluMmhleCgka2V5X3NlcXVlbmNlLT5nZXRCaW5hcnkoKSkpOwogICAgICAgICR0aGlzLT5zZXF1ZW5jZS0+YWRkQ2hpbGQoJGtleV9vY3RldF9zdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZyb21CYXNlNjRUb0ludGVnZXIoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiBcZ21wX3N0cnZhbChcZ21wX2luaXQoXGN1cnJlbnQoXHVucGFjaygnSConLCBCYXNlNjRVcmw6OmRlY29kZSgkdmFsdWUpKSksIDE2KSwgMTApOwogICAgfQoKICAgIC8qKgogICAgICogRXhwb25lbnRpYXRlIHdpdGggb3Igd2l0aG91dCBDaGluZXNlIFJlbWFpbmRlciBUaGVvcmVtLgogICAgICogT3BlcmF0aW9uIHdpdGggcHJpbWVzICdwJyBhbmQgJ3EnIGlzIGFwcG94LiAyeCBmYXN0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIFJTQUtleSAka2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhwb25lbnRpYXRlKHNlbGYgJGtleSwgQmlnSW50ZWdlciAkYyk6IEJpZ0ludGVnZXIKICAgIHsKICAgICAgICBpZiAoJGMtPmNvbXBhcmUoQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbURlY2ltYWwoMCkpIDwgMCB8fCAkYy0+Y29tcGFyZSgka2V5LT5nZXRNb2R1bHVzKCkpID4gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRrZXktPmlzUHVibGljKCkgfHwgZW1wdHkoJGtleS0+Z2V0UHJpbWVzKCkpIHx8IGVtcHR5KCRrZXktPmdldEV4cG9uZW50cygpKSB8fCBudWxsID09PSAka2V5LT5nZXRDb2VmZmljaWVudCgpKSB7CiAgICAgICAgICAgIHJldHVybiAkYy0+bW9kUG93KCRrZXktPmdldEV4cG9uZW50KCksICRrZXktPmdldE1vZHVsdXMoKSk7CiAgICAgICAgfQoKICAgICAgICAkcCA9ICRrZXktPmdldFByaW1lcygpWzBdOwogICAgICAgICRxID0gJGtleS0+Z2V0UHJpbWVzKClbMV07CiAgICAgICAgJGRQID0gJGtleS0+Z2V0RXhwb25lbnRzKClbMF07CiAgICAgICAgJGRRID0gJGtleS0+Z2V0RXhwb25lbnRzKClbMV07CiAgICAgICAgJHFJbnYgPSAka2V5LT5nZXRDb2VmZmljaWVudCgpOwoKICAgICAgICAkbTEgPSAkYy0+bW9kUG93KCRkUCwgJHApOwogICAgICAgICRtMiA9ICRjLT5tb2RQb3coJGRRLCAkcSk7CiAgICAgICAgJGggPSAkcUludi0+bXVsdGlwbHkoJG0xLT5zdWJ0cmFjdCgkbTIpLT5hZGQoJHApKS0+bW9kKCRwKTsKICAgICAgICAkbSA9ICRtMi0+YWRkKCRoLT5tdWx0aXBseSgkcSkpOwoKICAgICAgICByZXR1cm4gJG07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1rZXktbWdtdCIsCiAgICAiZGVzY3JpcHRpb24iOiAiS2V5IE1hbmFnZW1lbnQgY29tcG9uZW50IG9mIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAia2V5d29yZHMiOiBbIkpXUyIsICJKV1QiLCAiSldFIiwgIkpXQSIsICJKV0siLCAiSldLU2V0IiwgIkpvdCIsICJKb3NlIiwgIlJGQzc1MTUiLCAiUkZDNzUxNiIsICJSRkM3NTE3IiwgIlJGQzc1MTgiLCAiUkZDNzUxOSIsICJSRkM3NTIwIiwgIkJ1bmRsZSIsICJTeW1mb255Il0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICB9LHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1rZXktbWdtdC9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXEtleU1hbmFnZW1lbnRcXCI6ICAiIgogICAgICAgIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAibGliLW9wZW5zc2wiOiAiKiIsCiAgICAgICAgInBhcmFnb25pZS9zb2RpdW1fY29tcGF0IjogIl4xLjIiLAogICAgICAgICJ3ZWItdG9rZW4vand0LWNvcmUiOiAiXjEuMyIsCiAgICAgICAgIndlYi10b2tlbi9qd3QtdXRpbC1lY2MiOiAiXjEuMyIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJeMS4wIiwKICAgICAgICAicGhwLWh0dHAvaHR0cGx1ZyI6ICJeMS4xIiwKICAgICAgICAicGhwLWh0dHAvbW9jay1jbGllbnQiOiAiXjEuMCIsCiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgInBocC1odHRwL21lc3NhZ2UtZmFjdG9yeSI6ICJUbyBlbmFibGUgSktVL1g1VSBzdXBwb3J0LiIsCiAgICAgICAgInBocC1odHRwL2h0dHBsdWciOiAiVG8gZW5hYmxlIEpLVS9YNVUgc3VwcG9ydC4iCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/JKUFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnQ7Cgp1c2UgSHR0cFxDbGllbnRcSHR0cENsaWVudDsKdXNlIEh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXEpzb25Db252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKCmNsYXNzIEpLVUZhY3RvcnkgZXh0ZW5kcyBVcmxLZXlTZXRGYWN0b3J5CnsKICAgIHByaXZhdGUgJGpzb25Db252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBKS1VGYWN0b3J5IGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSnNvbkNvbnZlcnRlciAkanNvbkNvbnZlcnRlciwgSHR0cENsaWVudCAkY2xpZW50LCBSZXF1ZXN0RmFjdG9yeSAkcmVxdWVzdEZhY3RvcnkpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkY2xpZW50LCAkcmVxdWVzdEZhY3RvcnkpOwogICAgICAgICR0aGlzLT5qc29uQ29udmVydGVyID0gJGpzb25Db252ZXJ0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHRyeSB0byBmZXRjaCB0aGUgdXJsIGEgcmV0cmlldmUgdGhlIGtleSBzZXQuCiAgICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRGcm9tVXJsKHN0cmluZyAkdXJsLCBhcnJheSAkaGVhZGVyID0gW10pOiBKV0tTZXQKICAgIHsKICAgICAgICAkY29udGVudCA9ICR0aGlzLT5nZXRDb250ZW50KCR1cmwsICRoZWFkZXIpOwogICAgICAgICRkYXRhID0gJHRoaXMtPmpzb25Db252ZXJ0ZXItPmRlY29kZSgkY29udGVudCk7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb250ZW50LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/JWKFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnQ7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0tTZXQ7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcRWNjXE5pc3RDdXJ2ZTsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyXEtleUNvbnZlcnRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyXFJTQUtleTsKCmNsYXNzIEpXS0ZhY3RvcnkKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgUlNBIGtleSB3aXRoIHRoZSBnaXZlbiBrZXkgc2l6ZSBhbmQgYWRkaXRpb25hbCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICRzaXplICAgVGhlIGtleSBzaXplIGluIGJpdHMKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWVzIHZhbHVlcyB0byBjb25maWd1cmUgdGhlIGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVJTQUtleShpbnQgJHNpemUsIGFycmF5ICR2YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgIGlmICgwICE9PSAkc2l6ZSAlIDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQga2V5IHNpemUuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoNTEyID4gJHNpemUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0tleSBsZW5ndGggaXMgdG9vIHNob3J0LiBJdCBuZWVkcyB0byBiZSBhdCBsZWFzdCA1MTIgYml0cy4nKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBcb3BlbnNzbF9wa2V5X25ldyhbCiAgICAgICAgICAgICdwcml2YXRlX2tleV9iaXRzJyA9PiAkc2l6ZSwKICAgICAgICAgICAgJ3ByaXZhdGVfa2V5X3R5cGUnID0+IE9QRU5TU0xfS0VZVFlQRV9SU0EsCiAgICAgICAgXSk7CiAgICAgICAgJGRldGFpbHMgPSBcb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRrZXkpOwogICAgICAgIFxvcGVuc3NsX2ZyZWVfa2V5KCRrZXkpOwogICAgICAgICRyc2EgPSBSU0FLZXk6OmNyZWF0ZUZyb21LZXlEZXRhaWxzKCRkZXRhaWxzWydyc2EnXSk7CiAgICAgICAgJHZhbHVlcyA9IFxhcnJheV9tZXJnZSgKICAgICAgICAgICAgJHZhbHVlcywKICAgICAgICAgICAgJHJzYS0+dG9BcnJheSgpCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIEpXSzo6Y3JlYXRlKCR2YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIEVDIGtleSB3aXRoIHRoZSBnaXZlbiBjdXJ2ZSBhbmQgYWRkaXRpb25hbCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY3VydmUgIFRoZSBjdXJ2ZQogICAgICogQHBhcmFtIGFycmF5ICAkdmFsdWVzIHZhbHVlcyB0byBjb25maWd1cmUgdGhlIGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUVDS2V5KHN0cmluZyAkY3VydmUsIGFycmF5ICR2YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRqd2sgPSBzZWxmOjpjcmVhdGVFQ0tleVVzaW5nT3BlblNTTCgkY3VydmUpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJGp3ayA9IHNlbGY6OmNyZWF0ZUVDS2V5VXNpbmdQdXJlUGhwKCRjdXJ2ZSk7CiAgICAgICAgfQogICAgICAgICR2YWx1ZXMgPSBcYXJyYXlfbWVyZ2UoJHZhbHVlcywgJGp3ayk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVFQ0tleVVzaW5nUHVyZVBocChzdHJpbmcgJGN1cnZlKTogYXJyYXkKICAgIHsKICAgICAgICBzd2l0Y2ggKCRjdXJ2ZSkgewogICAgICAgICAgICBjYXNlICdQLTI1Nic6CiAgICAgICAgICAgICAgICAkbmlzdEN1cnZlID0gTmlzdEN1cnZlOjpjdXJ2ZTI1NigpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdQLTM4NCc6CiAgICAgICAgICAgICAgICAkbmlzdEN1cnZlID0gTmlzdEN1cnZlOjpjdXJ2ZTM4NCgpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdQLTUyMSc6CiAgICAgICAgICAgICAgICAkbmlzdEN1cnZlID0gTmlzdEN1cnZlOjpjdXJ2ZTUyMSgpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBjdXJ2ZSAiJXMiIGlzIG5vdCBzdXBwb3J0ZWQuJywgJGN1cnZlKSk7CiAgICAgICAgfQoKICAgICAgICAkcHJpdmF0ZUtleSA9ICRuaXN0Q3VydmUtPmNyZWF0ZVByaXZhdGVLZXkoKTsKICAgICAgICAkcHVibGljS2V5ID0gJG5pc3RDdXJ2ZS0+Y3JlYXRlUHVibGljS2V5KCRwcml2YXRlS2V5KTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJGN1cnZlLAogICAgICAgICAgICAnZCcgPT4gQmFzZTY0VXJsOjplbmNvZGUoXGdtcF9leHBvcnQoJHByaXZhdGVLZXktPmdldFNlY3JldCgpKSksCiAgICAgICAgICAgICd4JyA9PiBCYXNlNjRVcmw6OmVuY29kZShcZ21wX2V4cG9ydCgkcHVibGljS2V5LT5nZXRQb2ludCgpLT5nZXRYKCkpKSwKICAgICAgICAgICAgJ3knID0+IEJhc2U2NFVybDo6ZW5jb2RlKFxnbXBfZXhwb3J0KCRwdWJsaWNLZXktPmdldFBvaW50KCktPmdldFkoKSkpLAogICAgICAgIF07CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRUNLZXlVc2luZ09wZW5TU0woc3RyaW5nICRjdXJ2ZSk6IGFycmF5CiAgICB7CiAgICAgICAgJGtleSA9IFxvcGVuc3NsX3BrZXlfbmV3KFsKICAgICAgICAgICAgJ2N1cnZlX25hbWUnID0+IHNlbGY6OmdldE9wZW5zc2xDdXJ2ZU5hbWUoJGN1cnZlKSwKICAgICAgICAgICAgJ3ByaXZhdGVfa2V5X3R5cGUnID0+IE9QRU5TU0xfS0VZVFlQRV9FQywKICAgICAgICBdKTsKICAgICAgICAkcmVzID0gXG9wZW5zc2xfcGtleV9leHBvcnQoJGtleSwgJG91dCk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkcmVzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGNyZWF0ZSB0aGUga2V5Jyk7CiAgICAgICAgfQogICAgICAgICRyZXMgPSBcb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKCRvdXQpOwoKICAgICAgICAkZGV0YWlscyA9IFxvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlcyk7CgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICRjdXJ2ZSwKICAgICAgICAgICAgJ3gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCRkZXRhaWxzWydlYyddWyd4J10pLAogICAgICAgICAgICAneScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJGRldGFpbHNbJ2VjJ11bJ3knXSksCiAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkZGV0YWlsc1snZWMnXVsnZCddKSwKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldE9wZW5zc2xDdXJ2ZU5hbWUoc3RyaW5nICRjdXJ2ZSk6IHN0cmluZwogICAgewogICAgICAgIHN3aXRjaCAoJGN1cnZlKSB7CiAgICAgICAgICAgIGNhc2UgJ1AtMjU2JzoKICAgICAgICAgICAgICAgIHJldHVybiAncHJpbWUyNTZ2MSc7CiAgICAgICAgICAgIGNhc2UgJ1AtMzg0JzoKICAgICAgICAgICAgICAgIHJldHVybiAnc2VjcDM4NHIxJzsKICAgICAgICAgICAgY2FzZSAnUC01MjEnOgogICAgICAgICAgICAgICAgcmV0dXJuICdzZWNwNTIxcjEnOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBjdXJ2ZSAiJXMiIGlzIG5vdCBzdXBwb3J0ZWQuJywgJGN1cnZlKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG9jdGV0IGtleSB3aXRoIHRoZSBnaXZlbiBrZXkgc2l6ZSBhbmQgYWRkaXRpb25hbCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICRzaXplICAgVGhlIGtleSBzaXplIGluIGJpdHMKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWVzIHZhbHVlcyB0byBjb25maWd1cmUgdGhlIGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZU9jdEtleShpbnQgJHNpemUsIGFycmF5ICR2YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgIGlmICgwICE9PSAkc2l6ZSAlIDgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQga2V5IHNpemUuJyk7CiAgICAgICAgfQogICAgICAgICR2YWx1ZXMgPSBcYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICR2YWx1ZXMsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAgICAgJ2snID0+IEJhc2U2NFVybDo6ZW5jb2RlKFxyYW5kb21fYnl0ZXMoJHNpemUgLyA4KSksCiAgICAgICAgICAgIF0KICAgICAgICApOwoKICAgICAgICByZXR1cm4gSldLOjpjcmVhdGUoJHZhbHVlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgT0tQIGtleSB3aXRoIHRoZSBnaXZlbiBjdXJ2ZSBhbmQgYWRkaXRpb25hbCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY3VydmUgIFRoZSBjdXJ2ZQogICAgICogQHBhcmFtIGFycmF5ICAkdmFsdWVzIHZhbHVlcyB0byBjb25maWd1cmUgdGhlIGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZU9LUEtleShzdHJpbmcgJGN1cnZlLCBhcnJheSAkdmFsdWVzID0gW10pOiBKV0sKICAgIHsKICAgICAgICBzd2l0Y2ggKCRjdXJ2ZSkgewogICAgICAgICAgICBjYXNlICdYMjU1MTknOgogICAgICAgICAgICAgICAgJGtleVBhaXIgPSBcc29kaXVtX2NyeXB0b19ib3hfa2V5cGFpcigpOwogICAgICAgICAgICAgICAgJHNlY3JldCA9IFxzb2RpdW1fY3J5cHRvX2JveF9zZWNyZXRrZXkoJGtleVBhaXIpOwogICAgICAgICAgICAgICAgJHggPSBcc29kaXVtX2NyeXB0b19ib3hfcHVibGlja2V5KCRrZXlQYWlyKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnRWQyNTUxOSc6CiAgICAgICAgICAgICAgICAka2V5UGFpciA9IFxzb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcigpOwogICAgICAgICAgICAgICAgJHNlY3JldCA9IFxzb2RpdW1fY3J5cHRvX3NpZ25fc2VjcmV0a2V5KCRrZXlQYWlyKTsKICAgICAgICAgICAgICAgICR4ID0gXHNvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXkoJGtleVBhaXIpOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1Vuc3VwcG9ydGVkICIlcyIgY3VydmUnLCAkY3VydmUpKTsKICAgICAgICB9CiAgICAgICAgJHNlY3JldExlbmd0aCA9IG1iX3N0cmxlbigkc2VjcmV0LCAnOGJpdCcpOwogICAgICAgICRkID0gbWJfc3Vic3RyKCRzZWNyZXQsIDAsIC0kc2VjcmV0TGVuZ3RoIC8gMiwgJzhiaXQnKTsKCiAgICAgICAgJHZhbHVlcyA9IFxhcnJheV9tZXJnZSgKICAgICAgICAgICAgJHZhbHVlcywKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ09LUCcsCiAgICAgICAgICAgICAgICAnY3J2JyA9PiAkY3VydmUsCiAgICAgICAgICAgICAgICAnZCcgPT4gQmFzZTY0VXJsOjplbmNvZGUoJGQpLAogICAgICAgICAgICAgICAgJ3gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR4KSwKICAgICAgICAgICAgXQogICAgICAgICk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBub25lIGtleSB3aXRoIHRoZSBnaXZlbiBhZGRpdGlvbmFsIHZhbHVlcy4KICAgICAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBrZXkgdHlwZSBpcyBub3QgcGF0IG9mIGFueSBzcGVjaWZpY2F0aW9uLgogICAgICogSXQgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgdGhlICJub25lIiBhbGdvcml0aG0gd2l0aCBvdGhlciBrZXkgdHlwZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgdmFsdWVzIHRvIGNvbmZpZ3VyZSB0aGUga2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlTm9uZUtleShhcnJheSAkdmFsdWVzID0gW10pOiBKV0sKICAgIHsKICAgICAgICAkdmFsdWVzID0gXGFycmF5X21lcmdlKAogICAgICAgICAgICAkdmFsdWVzLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnbm9uZScsCiAgICAgICAgICAgICAgICAnYWxnJyA9PiAnbm9uZScsCiAgICAgICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgXQogICAgICAgICk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBrZXkgZnJvbSBhIEpzb24gc3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gSldLfEpXS1NldAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Kc29uT2JqZWN0KHN0cmluZyAkdmFsdWUpCiAgICB7CiAgICAgICAgJGpzb24gPSBcanNvbl9kZWNvZGUoJHZhbHVlLCB0cnVlKTsKICAgICAgICBpZiAoIVxpc19hcnJheSgkanNvbikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQga2V5IG9yIGtleSBzZXQuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlRnJvbVZhbHVlcygkanNvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEga2V5IG9yIGtleSBzZXQgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQuCiAgICAgKgogICAgICogQHJldHVybiBKV0t8SldLU2V0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVZhbHVlcyhhcnJheSAkdmFsdWVzKQogICAgewogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygna2V5cycsICR2YWx1ZXMpICYmIFxpc19hcnJheSgkdmFsdWVzWydrZXlzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBKV0tTZXQ6OmNyZWF0ZUZyb21LZXlEYXRhKCR2YWx1ZXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEpXSzo6Y3JlYXRlKCR2YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgY3JlYXRlIGEgSldLIG9iamVjdCB1c2luZyBhIHNoYXJlZCBzZWNyZXQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlY3JldChzdHJpbmcgJHNlY3JldCwgYXJyYXkgJGFkZGl0aW9uYWxfdmFsdWVzID0gW10pOiBKV0sKICAgIHsKICAgICAgICAkdmFsdWVzID0gXGFycmF5X21lcmdlKAogICAgICAgICAgICAkYWRkaXRpb25hbF92YWx1ZXMsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAgICAgJ2snID0+IEJhc2U2NFVybDo6ZW5jb2RlKCRzZWNyZXQpLAogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIEpXSzo6Y3JlYXRlKCR2YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gbG9hZCBhIFguNTA5IGNlcnRpZmljYXRlIGFuZCBjb252ZXJ0IGl0IGludG8gYSBwdWJsaWMga2V5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21DZXJ0aWZpY2F0ZUZpbGUoc3RyaW5nICRmaWxlLCBhcnJheSAkYWRkaXRpb25hbF92YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgICR2YWx1ZXMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRLZXlGcm9tQ2VydGlmaWNhdGVGaWxlKCRmaWxlKTsKICAgICAgICAkdmFsdWVzID0gXGFycmF5X21lcmdlKCR2YWx1ZXMsICRhZGRpdGlvbmFsX3ZhbHVlcyk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4dHJhY3QgYSBrZXlmcm9tIGEga2V5IHNldCBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBpbmRleCAuCiAgICAgKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUtleVNldChKV0tTZXQgJGp3a3NldCwgJGluZGV4KTogSldLCiAgICB7CiAgICAgICAgcmV0dXJuICRqd2tzZXQtPmdldCgkaW5kZXgpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gbG9hZCBhIFBLQ1MjMTIgZmlsZSBhbmQgY29udmVydCBpdCBpbnRvIGEgcHVibGljIGtleS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUEtDUzEyQ2VydGlmaWNhdGVGaWxlKHN0cmluZyAkZmlsZSwgP3N0cmluZyAkc2VjcmV0ID0gJycsIGFycmF5ICRhZGRpdGlvbmFsX3ZhbHVlcyA9IFtdKTogSldLCiAgICB7CiAgICAgICAgJHJlcyA9IFxvcGVuc3NsX3BrY3MxMl9yZWFkKFxmaWxlX2dldF9jb250ZW50cygkZmlsZSksICRjZXJ0cywgJHNlY3JldCk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkcmVzIHx8ICFcaXNfYXJyYXkoJGNlcnRzKSB8fCAhXGFycmF5X2tleV9leGlzdHMoJ3BrZXknLCAkY2VydHMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGNlcnRpZmljYXRlcy4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpjcmVhdGVGcm9tS2V5KCRjZXJ0c1sncGtleSddLCBudWxsLCAkYWRkaXRpb25hbF92YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gY29udmVydCBhIFguNTA5IGNlcnRpZmljYXRlIGludG8gYSBwdWJsaWMga2V5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21DZXJ0aWZpY2F0ZShzdHJpbmcgJGNlcnRpZmljYXRlLCBhcnJheSAkYWRkaXRpb25hbF92YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgICR2YWx1ZXMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRLZXlGcm9tQ2VydGlmaWNhdGUoJGNlcnRpZmljYXRlKTsKICAgICAgICAkdmFsdWVzID0gXGFycmF5X21lcmdlKCR2YWx1ZXMsICRhZGRpdGlvbmFsX3ZhbHVlcyk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGNvbnZlcnQgYSBYLjUwOSBjZXJ0aWZpY2F0ZSByZXNvdXJjZSBpbnRvIGEgcHVibGljIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJHJlcwogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21YNTA5UmVzb3VyY2UoJHJlcywgYXJyYXkgJGFkZGl0aW9uYWxfdmFsdWVzID0gW10pOiBKV0sKICAgIHsKICAgICAgICAkdmFsdWVzID0gS2V5Q29udmVydGVyOjpsb2FkS2V5RnJvbVg1MDlSZXNvdXJjZSgkcmVzKTsKICAgICAgICAkdmFsdWVzID0gXGFycmF5X21lcmdlKCR2YWx1ZXMsICRhZGRpdGlvbmFsX3ZhbHVlcyk7CgogICAgICAgIHJldHVybiBKV0s6OmNyZWF0ZSgkdmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGxvYWQgYW5kIGNvbnZlcnQgYSBrZXkgZmlsZSBpbnRvIGEgSldLIG9iamVjdC4KICAgICAqIElmIHRoZSBrZXkgaXMgZW5jcnlwdGVkLCB0aGUgcGFzc3dvcmQgbXVzdCBiZSBzZXQuCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUtleUZpbGUoc3RyaW5nICRmaWxlLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwsIGFycmF5ICRhZGRpdGlvbmFsX3ZhbHVlcyA9IFtdKTogSldLCiAgICB7CiAgICAgICAgJHZhbHVlcyA9IEtleUNvbnZlcnRlcjo6bG9hZEZyb21LZXlGaWxlKCRmaWxlLCAkcGFzc3dvcmQpOwogICAgICAgICR2YWx1ZXMgPSBcYXJyYXlfbWVyZ2UoJHZhbHVlcywgJGFkZGl0aW9uYWxfdmFsdWVzKTsKCiAgICAgICAgcmV0dXJuIEpXSzo6Y3JlYXRlKCR2YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gbG9hZCBhbmQgY29udmVydCBhIGtleSBpbnRvIGEgSldLIG9iamVjdC4KICAgICAqIElmIHRoZSBrZXkgaXMgZW5jcnlwdGVkLCB0aGUgcGFzc3dvcmQgbXVzdCBiZSBzZXQuCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbUtleShzdHJpbmcgJGtleSwgP3N0cmluZyAkcGFzc3dvcmQgPSBudWxsLCBhcnJheSAkYWRkaXRpb25hbF92YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgICR2YWx1ZXMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5KCRrZXksICRwYXNzd29yZCk7CiAgICAgICAgJHZhbHVlcyA9IFxhcnJheV9tZXJnZSgkdmFsdWVzLCAkYWRkaXRpb25hbF92YWx1ZXMpOwoKICAgICAgICByZXR1cm4gSldLOjpjcmVhdGUoJHZhbHVlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHRyeSB0byBsb2FkIGFuZCBjb252ZXJ0IGEgWC41MDkgY2VydGlmaWNhdGUgY2hhaW4gaW50byBhIHB1YmxpYyBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbVg1QyhhcnJheSAkeDVjLCBhcnJheSAkYWRkaXRpb25hbF92YWx1ZXMgPSBbXSk6IEpXSwogICAgewogICAgICAgICR2YWx1ZXMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tWDVDKCR4NWMpOwogICAgICAgICR2YWx1ZXMgPSBcYXJyYXlfbWVyZ2UoJHZhbHVlcywgJGFkZGl0aW9uYWxfdmFsdWVzKTsKCiAgICAgICAgcmV0dXJuIEpXSzo6Y3JlYXRlKCR2YWx1ZXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/AlgorithmAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpmaW5hbCBjbGFzcyBBbGdvcml0aG1BbmFseXplciBpbXBsZW1lbnRzIEtleUFuYWx5emVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXplKEpXSyAkandrLCBNZXNzYWdlQmFnICRiYWcpCiAgICB7CiAgICAgICAgaWYgKCEkandrLT5oYXMoJ2FsZycpKSB7CiAgICAgICAgICAgICRiYWctPmFkZChNZXNzYWdlOjptZWRpdW0oJ1RoZSBwYXJhbWV0ZXIgImFsZyIgc2hvdWxkIGJlIGFkZGVkLicpKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/KeyAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgppbnRlcmZhY2UgS2V5QW5hbHl6ZXIKewogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFuYWx5c2UgdGhlIGtleSBhbmQgYWRkIG1lc3NhZ2VzIHRvIHRoZSBtZXNzYWdlIGJhZyBpZiBuZWVkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXplKEpXSyAkandrLCBNZXNzYWdlQmFnICRiYWcpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/KeyAnalyzerManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpjbGFzcyBLZXlBbmFseXplck1hbmFnZXIKewogICAgLyoqCiAgICAgKiBAdmFyIEtleUFuYWx5emVyW10KICAgICAqLwogICAgcHJpdmF0ZSAkYW5hbHl6ZXJzID0gW107CgogICAgLyoqCiAgICAgKiBBZGRzIGEgS2V5IEFuYWx5emVyIHRvIHRoZSBtYW5hZ2VyLgogICAgICoKICAgICAqIEByZXR1cm4gS2V5QW5hbHl6ZXJNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoS2V5QW5hbHl6ZXIgJGFuYWx5emVyKTogc2VsZgogICAgewogICAgICAgICR0aGlzLT5hbmFseXplcnNbXSA9ICRhbmFseXplcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBhbmFseXplIHRoZSBKV0sgb2JqZWN0IHVzaW5nIGFsbCBhbmFseXplcnMuCiAgICAgKiBJdCByZXR1cm5zIGEgbWVzc2FnZSBiYWcgdGhhdCBtYXkgY29udGFpbnMgbWVzc2FnZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXplKEpXSyAkandrKTogTWVzc2FnZUJhZwogICAgewogICAgICAgICRiYWcgPSBuZXcgTWVzc2FnZUJhZygpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5hbmFseXplcnMgYXMgJGFuYWx5emVyKSB7CiAgICAgICAgICAgICRhbmFseXplci0+YW5hbHl6ZSgkandrLCAkYmFnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYmFnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/KeyIdentifierAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpmaW5hbCBjbGFzcyBLZXlJZGVudGlmaWVyQW5hbHl6ZXIgaW1wbGVtZW50cyBLZXlBbmFseXplcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gYW5hbHl6ZShKV0sgJGp3aywgTWVzc2FnZUJhZyAkYmFnKQogICAgewogICAgICAgIGlmICghJGp3ay0+aGFzKCdraWQnKSkgewogICAgICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6bWVkaXVtKCdUaGUgcGFyYW1ldGVyICJraWQiIHNob3VsZCBiZSBhZGRlZC4nKSk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/Message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7CgpjbGFzcyBNZXNzYWdlIGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRtZXNzYWdlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc2V2ZXJpdHk7CgogICAgcHVibGljIGNvbnN0IFNFVkVSSVRZX0xPVyA9ICdsb3cnOwoKICAgIHB1YmxpYyBjb25zdCBTRVZFUklUWV9NRURJVU0gPSAnbWVkaXVtJzsKCiAgICBwdWJsaWMgY29uc3QgU0VWRVJJVFlfSElHSCA9ICdoaWdoJzsKCiAgICAvKioKICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRtZXNzYWdlLCBzdHJpbmcgJHNldmVyaXR5KQogICAgewogICAgICAgICR0aGlzLT5tZXNzYWdlID0gJG1lc3NhZ2U7CiAgICAgICAgJHRoaXMtPnNldmVyaXR5ID0gJHNldmVyaXR5OwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eT1sb3cuCiAgICAgKgogICAgICogQHJldHVybiBNZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG93KHN0cmluZyAkbWVzc2FnZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJG1lc3NhZ2UsIHNlbGY6OlNFVkVSSVRZX0xPVyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5PW1lZGl1bS4KICAgICAqCiAgICAgKiBAcmV0dXJuIE1lc3NhZ2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtZWRpdW0oc3RyaW5nICRtZXNzYWdlKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkbWVzc2FnZSwgc2VsZjo6U0VWRVJJVFlfTUVESVVNKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHk9aGlnaC4KICAgICAqCiAgICAgKiBAcmV0dXJuIE1lc3NhZ2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoaWdoKHN0cmluZyAkbWVzc2FnZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJG1lc3NhZ2UsIHNlbGY6OlNFVkVSSVRZX0hJR0gpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWVzc2FnZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1lc3NhZ2UoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXZlcml0eSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldmVyaXR5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gJHRoaXMtPm1lc3NhZ2UsCiAgICAgICAgICAgICdzZXZlcml0eScgPT4gJHRoaXMtPnNldmVyaXR5LAogICAgICAgIF07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/MessageBag.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7CgpjbGFzcyBNZXNzYWdlQmFnIGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFxJdGVyYXRvckFnZ3JlZ2F0ZSwgXENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgTWVzc2FnZVtdCiAgICAgKi8KICAgIHByaXZhdGUgJG1lc3NhZ2VzID0gW107CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbWVzc2FnZSB0byB0aGUgbWVzc2FnZSBiYWcuCiAgICAgKgogICAgICogQHJldHVybiBNZXNzYWdlQmFnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoTWVzc2FnZSAkbWVzc2FnZSk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+bWVzc2FnZXNbXSA9ICRtZXNzYWdlOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBtZXNzYWdlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIE1lc3NhZ2VbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tZXNzYWdlczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV92YWx1ZXMoJHRoaXMtPm1lc3NhZ2VzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQogICAgewogICAgICAgIHJldHVybiBcY291bnQoJHRoaXMtPm1lc3NhZ2VzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKQogICAgewogICAgICAgIHJldHVybiBuZXcgXEFycmF5SXRlcmF0b3IoJHRoaXMtPm1lc3NhZ2VzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/NoneAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpmaW5hbCBjbGFzcyBOb25lQW5hbHl6ZXIgaW1wbGVtZW50cyBLZXlBbmFseXplcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gYW5hbHl6ZShKV0sgJGp3aywgTWVzc2FnZUJhZyAkYmFnKQogICAgewogICAgICAgIGlmICgnbm9uZScgIT09ICRqd2stPmdldCgna3R5JykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGJhZy0+YWRkKE1lc3NhZ2U6OmhpZ2goJ1RoaXMga2V5IGlzIGEgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIHRoZSBhbGdvcml0aG0gIm5vbmUiLiBUaGlzIGFsZ29yaXRobSBpcyBub3Qgc2VjdXJlZCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLicpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/OctAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgWnhjdmJuUGhwXFp4Y3ZibjsKCmZpbmFsIGNsYXNzIE9jdEFuYWx5emVyIGltcGxlbWVudHMgS2V5QW5hbHl6ZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGFuYWx5emUoSldLICRqd2ssIE1lc3NhZ2VCYWcgJGJhZykKICAgIHsKICAgICAgICBpZiAoJ29jdCcgIT09ICRqd2stPmdldCgna3R5JykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkayA9IEJhc2U2NFVybDo6ZGVjb2RlKCRqd2stPmdldCgnaycpKTsKICAgICAgICAka0xlbmd0aCA9IDggKiBcbWJfc3RybGVuKCRrLCAnOGJpdCcpOwogICAgICAgIGlmICgka0xlbmd0aCA8IDEyOCkgewogICAgICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6aGlnaCgnVGhlIGtleSBsZW5ndGggaXMgbGVzcyB0aGFuIDEyOCBiaXRzLicpKTsKICAgICAgICB9CgogICAgICAgIGlmIChcY2xhc3NfZXhpc3RzKFp4Y3Zibjo6Y2xhc3MpKSB7CiAgICAgICAgICAgICR6eGN2Ym4gPSBuZXcgWnhjdmJuKCk7CiAgICAgICAgICAgICRzdHJlbmd0aCA9ICR6eGN2Ym4tPnBhc3N3b3JkU3RyZW5ndGgoJGspOwogICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgJHN0cmVuZ3RoWydzY29yZSddIDwgMzoKICAgICAgICAgICAgICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6aGlnaCgnVGhlIG9jdGV0IHN0cmluZyBpcyB3ZWFrIGFuZCBlYXNpbHkgZ3Vlc3NhYmxlLiBQbGVhc2UgY2hhbmdlIHlvdXIga2V5IGFzIHNvb24gYXMgcG9zc2libGUuJykpOwoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMyA9PT0gJHN0cmVuZ3RoWydzY29yZSddOgogICAgICAgICAgICAgICAgICAgICRiYWctPmFkZChNZXNzYWdlOjptZWRpdW0oJ1RoZSBvY3RldCBzdHJpbmcgaXMgc2FmZSwgYnV0IGEgbG9uZ2VyIGtleSBpcyBwcmVmZXJhYmxlLicpKTsKCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/RsaAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwoKZmluYWwgY2xhc3MgUnNhQW5hbHl6ZXIgaW1wbGVtZW50cyBLZXlBbmFseXplcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gYW5hbHl6ZShKV0sgJGp3aywgTWVzc2FnZUJhZyAkYmFnKQogICAgewogICAgICAgIGlmICgnUlNBJyAhPT0gJGp3ay0+Z2V0KCdrdHknKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICRuID0gOCAqIFxtYl9zdHJsZW4oQmFzZTY0VXJsOjpkZWNvZGUoJGp3ay0+Z2V0KCduJykpLCAnOGJpdCcpOwogICAgICAgIGlmICgkbiA8IDIwNDgpIHsKICAgICAgICAgICAgJGJhZy0+YWRkKE1lc3NhZ2U6OmhpZ2goJ1RoZSBrZXkgbGVuZ3RoIGlzIGxlc3MgdGhhbiAyMDQ4IGJpdHMuJykpOwogICAgICAgIH0KICAgICAgICBpZiAoJGp3ay0+aGFzKCdkJykgJiYgKCEkandrLT5oYXMoJ3AnKSB8fCAhJGp3ay0+aGFzKCdxJykgfHwgISRqd2stPmhhcygnZHAnKSB8fCAhJGp3ay0+aGFzKCdkcScpIHx8ICEkandrLT5oYXMoJ3AnKSB8fCAhJGp3ay0+aGFzKCdxaScpKSkgewogICAgICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6bWVkaXVtKCdUaGUga2V5IGlzIGEgcHJpdmF0ZSBSU0Ega2V5LCBidXQgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbSBwcmltZXMgYXJlIG1pc3NpbmcuIFRoZXNlIHByaW1lcyBhcmUgbm90IG1hbmRhdG9yeSwgYnV0IHNpZ25hdHVyZXMgYW5kIGRlY3J5cHRpb24gcHJvY2Vzc2VzIGFyZSBmYXN0ZXIgd2hlbiBhdmFpbGFibGUuJykpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyAnalyzer/UsageAnalyzer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5QW5hbHl6ZXI7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpmaW5hbCBjbGFzcyBVc2FnZUFuYWx5emVyIGltcGxlbWVudHMgS2V5QW5hbHl6ZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGFuYWx5emUoSldLICRqd2ssIE1lc3NhZ2VCYWcgJGJhZykKICAgIHsKICAgICAgICBpZiAoISRqd2stPmhhcygndXNlJykpIHsKICAgICAgICAgICAgJGJhZy0+YWRkKE1lc3NhZ2U6Om1lZGl1bSgnVGhlIHBhcmFtZXRlciAidXNlIiBzaG91bGQgYmUgYWRkZWQuJykpOwogICAgICAgIH0gZWxzZWlmICghXGluX2FycmF5KCRqd2stPmdldCgndXNlJyksIFsnc2lnJywgJ2VuYyddLCB0cnVlKSkgewogICAgICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6aGlnaChcc3ByaW50ZignVGhlIHBhcmFtZXRlciAidXNlIiBoYXMgYW4gdW5zdXBwb3J0ZWQgdmFsdWUgIiVzIi4gUGxlYXNlIHVzZSAic2lnIiAoc2lnbmF0dXJlKSBvciAiZW5jIiAoZW5jcnlwdGlvbikuJywgJGp3ay0+Z2V0KCd1c2UnKSkpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRqd2stPmhhcygna2V5X29wcycpICYmICFcaW5fYXJyYXkoJGp3ay0+Z2V0KCdrZXlfb3BzJyksIFsnc2lnbicsICd2ZXJpZnknLCAnZW5jcnlwdCcsICdkZWNyeXB0JywgJ3dyYXBLZXknLCAndW53cmFwS2V5J10sIHRydWUpKSB7CiAgICAgICAgICAgICRiYWctPmFkZChNZXNzYWdlOjpoaWdoKFxzcHJpbnRmKCdUaGUgcGFyYW1ldGVyICJrZXlfb3BzIiBoYXMgYW4gdW5zdXBwb3J0ZWQgdmFsdWUgIiVzIi4gUGxlYXNlIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICVzLicsICRqd2stPmdldCgndXNlJyksIFxpbXBsb2RlKCcsICcsIFsndmVyaWZ5JywgJ3NpZ24nLCAnZW5jcnlwJywgJ2RlY3J5cHQnLCAnd3JhcEtleScsICd1bndyYXBLZXknXSkpKSk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyConverter/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyConverter/ECKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBGR1xBU04xXEFTTk9iamVjdDsKdXNlIEZHXEFTTjFcRXhwbGljaXRseVRhZ2dlZE9iamVjdDsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEJpdFN0cmluZzsKdXNlIEZHXEFTTjFcVW5pdmVyc2FsXEludGVnZXI7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxPYmplY3RJZGVudGlmaWVyOwp1c2UgRkdcQVNOMVxVbml2ZXJzYWxcT2N0ZXRTdHJpbmc7CnVzZSBGR1xBU04xXFVuaXZlcnNhbFxTZXF1ZW5jZTsKCi8qKgogKiBAaW50ZXJuYWwKICovCmNsYXNzIEVDS2V5CnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICR2YWx1ZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEVDS2V5IGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkYXRhKQogICAgewogICAgICAgICR0aGlzLT5sb2FkSldLKCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gRUNLZXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUEVNKHN0cmluZyAkcGVtKTogc2VsZgogICAgewogICAgICAgICRkYXRhID0gc2VsZjo6bG9hZFBFTSgkcGVtKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBsb2FkUEVNKHN0cmluZyAkZGF0YSk6IGFycmF5CiAgICB7CiAgICAgICAgJGRhdGEgPSBcYmFzZTY0X2RlY29kZShccHJlZ19yZXBsYWNlKCcjLS4qLXxccnxcbiMnLCAnJywgJGRhdGEpLCB0cnVlKTsKICAgICAgICAkYXNuT2JqZWN0ID0gQVNOT2JqZWN0Ojpmcm9tQmluYXJ5KCRkYXRhKTsKCiAgICAgICAgaWYgKCEkYXNuT2JqZWN0IGluc3RhbmNlb2YgU2VxdWVuY2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBrZXkuJyk7CiAgICAgICAgfQogICAgICAgICRjaGlsZHJlbiA9ICRhc25PYmplY3QtPmdldENoaWxkcmVuKCk7CiAgICAgICAgaWYgKHNlbGY6OmlzUEtDUzgoJGNoaWxkcmVuKSkgewogICAgICAgICAgICAkY2hpbGRyZW4gPSBzZWxmOjpsb2FkUEtDUzgoJGNoaWxkcmVuKTsKICAgICAgICB9CgogICAgICAgIGlmICg0ID09PSBcY291bnQoJGNoaWxkcmVuKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6bG9hZFByaXZhdGVQRU0oJGNoaWxkcmVuKTsKICAgICAgICB9CiAgICAgICAgaWYgKDIgPT09IFxjb3VudCgkY2hpbGRyZW4pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpsb2FkUHVibGljUEVNKCRjaGlsZHJlbik7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGtleS4nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBBU05PYmplY3RbXSAkY2hpbGRyZW4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbG9hZFBLQ1M4KGFycmF5ICRjaGlsZHJlbik6IGFycmF5CiAgICB7CiAgICAgICAgJGJpbmFyeSA9IFxoZXgyYmluKCRjaGlsZHJlblsyXS0+Z2V0Q29udGVudCgpKTsKICAgICAgICAkYXNuT2JqZWN0ID0gQVNOT2JqZWN0Ojpmcm9tQmluYXJ5KCRiaW5hcnkpOwogICAgICAgIGlmICghJGFzbk9iamVjdCBpbnN0YW5jZW9mIFNlcXVlbmNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gbG9hZCB0aGUga2V5LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhc25PYmplY3QtPmdldENoaWxkcmVuKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQVNOT2JqZWN0W10gJGNoaWxkcmVuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGxvYWRQdWJsaWNQRU0oYXJyYXkgJGNoaWxkcmVuKTogYXJyYXkKICAgIHsKICAgICAgICBpZiAoISRjaGlsZHJlblswXSBpbnN0YW5jZW9mIFNlcXVlbmNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBrZXkgdHlwZS4nKTsKICAgICAgICB9CgogICAgICAgICRzdWIgPSAkY2hpbGRyZW5bMF0tPmdldENoaWxkcmVuKCk7CiAgICAgICAgaWYgKCEkc3ViWzBdIGluc3RhbmNlb2YgT2JqZWN0SWRlbnRpZmllcikgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQga2V5IHR5cGUuJyk7CiAgICAgICAgfQogICAgICAgIGlmICgnMS4yLjg0MC4xMDA0NS4yLjEnICE9PSAkc3ViWzBdLT5nZXRDb250ZW50KCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGtleSB0eXBlLicpOwogICAgICAgIH0KICAgICAgICBpZiAoISRzdWJbMV0gaW5zdGFuY2VvZiBPYmplY3RJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBrZXkgdHlwZS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkY2hpbGRyZW5bMV0gaW5zdGFuY2VvZiBCaXRTdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICAkYml0cyA9ICRjaGlsZHJlblsxXS0+Z2V0Q29udGVudCgpOwogICAgICAgICRiaXRzX2xlbmd0aCA9IFxtYl9zdHJsZW4oJGJpdHMsICc4Yml0Jyk7CiAgICAgICAgaWYgKCcwNCcgIT09IFxtYl9zdWJzdHIoJGJpdHMsIDAsIDIsICc4Yml0JykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CiAgICAgICAgfQoKICAgICAgICAkdmFsdWVzID0gWydrdHknID0+ICdFQyddOwogICAgICAgICR2YWx1ZXNbJ2NydiddID0gc2VsZjo6Z2V0Q3VydmUoJHN1YlsxXS0+Z2V0Q29udGVudCgpKTsKICAgICAgICAkdmFsdWVzWyd4J10gPSBCYXNlNjRVcmw6OmVuY29kZShcaGV4MmJpbihcbWJfc3Vic3RyKCRiaXRzLCAyLCAoJGJpdHNfbGVuZ3RoIC0gMikgLyAyLCAnOGJpdCcpKSk7CiAgICAgICAgJHZhbHVlc1sneSddID0gQmFzZTY0VXJsOjplbmNvZGUoXGhleDJiaW4oXG1iX3N1YnN0cigkYml0cywgKCRiaXRzX2xlbmd0aCAtIDIpIC8gMiArIDIsICgkYml0c19sZW5ndGggLSAyKSAvIDIsICc4Yml0JykpKTsKCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VydmUoc3RyaW5nICRvaWQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkY3VydmVzID0gc2VsZjo6Z2V0U3VwcG9ydGVkQ3VydmVzKCk7CiAgICAgICAgJGN1cnZlID0gXGFycmF5X3NlYXJjaCgkb2lkLCAkY3VydmVzLCB0cnVlKTsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGN1cnZlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgT0lELicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjdXJ2ZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRTdXBwb3J0ZWRDdXJ2ZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAnUC0yNTYnID0+ICcxLjIuODQwLjEwMDQ1LjMuMS43JywKICAgICAgICAgICAgJ1AtMzg0JyA9PiAnMS4zLjEzMi4wLjM0JywKICAgICAgICAgICAgJ1AtNTIxJyA9PiAnMS4zLjEzMi4wLjM1JywKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeVZlcnNpb24oQVNOT2JqZWN0ICRjaGlsZHJlbikKICAgIHsKICAgICAgICBpZiAoISRjaGlsZHJlbiBpbnN0YW5jZW9mIEludGVnZXIgfHwgJzEnICE9PSAkY2hpbGRyZW4tPmdldENvbnRlbnQoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGtleS4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0WEFuZFkoQVNOT2JqZWN0ICRjaGlsZHJlbiwgP3N0cmluZyAmJHgsID9zdHJpbmcgJiR5KQogICAgewogICAgICAgIGlmICghJGNoaWxkcmVuIGluc3RhbmNlb2YgRXhwbGljaXRseVRhZ2dlZE9iamVjdCB8fCAhXGlzX2FycmF5KCRjaGlsZHJlbi0+Z2V0Q29udGVudCgpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGtleS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkY2hpbGRyZW4tPmdldENvbnRlbnQoKVswXSBpbnN0YW5jZW9mIEJpdFN0cmluZykgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGtleS4nKTsKICAgICAgICB9CgogICAgICAgICRiaXRzID0gJGNoaWxkcmVuLT5nZXRDb250ZW50KClbMF0tPmdldENvbnRlbnQoKTsKICAgICAgICAkYml0c19sZW5ndGggPSBcbWJfc3RybGVuKCRiaXRzLCAnOGJpdCcpOwoKICAgICAgICBpZiAoJzA0JyAhPT0gXG1iX3N1YnN0cigkYml0cywgMCwgMiwgJzhiaXQnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQga2V5IHR5cGUnKTsKICAgICAgICB9CgogICAgICAgICR4ID0gXG1iX3N1YnN0cigkYml0cywgMiwgKCRiaXRzX2xlbmd0aCAtIDIpIC8gMiwgJzhiaXQnKTsKICAgICAgICAkeSA9IFxtYl9zdWJzdHIoJGJpdHMsICgkYml0c19sZW5ndGggLSAyKSAvIDIgKyAyLCAoJGJpdHNfbGVuZ3RoIC0gMikgLyAyLCAnOGJpdCcpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldEQoQVNOT2JqZWN0ICRjaGlsZHJlbik6IHN0cmluZwogICAgewogICAgICAgIGlmICghJGNoaWxkcmVuIGluc3RhbmNlb2YgT2N0ZXRTdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNoaWxkcmVuLT5nZXRDb250ZW50KCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbG9hZFByaXZhdGVQRU0oYXJyYXkgJGNoaWxkcmVuKTogYXJyYXkKICAgIHsKICAgICAgICBzZWxmOjp2ZXJpZnlWZXJzaW9uKCRjaGlsZHJlblswXSk7CiAgICAgICAgJHggPSBudWxsOwogICAgICAgICR5ID0gbnVsbDsKICAgICAgICAkZCA9IHNlbGY6OmdldEQoJGNoaWxkcmVuWzFdKTsKICAgICAgICBzZWxmOjpnZXRYQW5kWSgkY2hpbGRyZW5bM10sICR4LCAkeSk7CgogICAgICAgIGlmICghJGNoaWxkcmVuWzJdIGluc3RhbmNlb2YgRXhwbGljaXRseVRhZ2dlZE9iamVjdCB8fCAhXGlzX2FycmF5KCRjaGlsZHJlblsyXS0+Z2V0Q29udGVudCgpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGtleS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkY2hpbGRyZW5bMl0tPmdldENvbnRlbnQoKVswXSBpbnN0YW5jZW9mIE9iamVjdElkZW50aWZpZXIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICAkY3VydmUgPSAkY2hpbGRyZW5bMl0tPmdldENvbnRlbnQoKVswXS0+Z2V0Q29udGVudCgpOwoKICAgICAgICAkdmFsdWVzID0gWydrdHknID0+ICdFQyddOwogICAgICAgICR2YWx1ZXNbJ2NydiddID0gc2VsZjo6Z2V0Q3VydmUoJGN1cnZlKTsKICAgICAgICAkdmFsdWVzWydkJ10gPSBCYXNlNjRVcmw6OmVuY29kZShcaGV4MmJpbigkZCkpOwogICAgICAgICR2YWx1ZXNbJ3gnXSA9IEJhc2U2NFVybDo6ZW5jb2RlKFxoZXgyYmluKCR4KSk7CiAgICAgICAgJHZhbHVlc1sneSddID0gQmFzZTY0VXJsOjplbmNvZGUoXGhleDJiaW4oJHkpKTsKCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQVNOT2JqZWN0W10gJGNoaWxkcmVuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGlzUEtDUzgoYXJyYXkgJGNoaWxkcmVuKTogYm9vbAogICAgewogICAgICAgIGlmICgzICE9PSBcY291bnQoJGNoaWxkcmVuKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkY2xhc3NlcyA9IFswID0+IEludGVnZXI6OmNsYXNzLCAxID0+IFNlcXVlbmNlOjpjbGFzcywgMiA9PiBPY3RldFN0cmluZzo6Y2xhc3NdOwogICAgICAgIGZvcmVhY2ggKCRjbGFzc2VzIGFzICRrID0+ICRjbGFzcykgewogICAgICAgICAgICBpZiAoISRjaGlsZHJlblska10gaW5zdGFuY2VvZiAkY2xhc3MpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRUNLZXkgJHByaXZhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIEVDS2V5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9QdWJsaWMoc2VsZiAkcHJpdmF0ZSk6IHNlbGYKICAgIHsKICAgICAgICAkZGF0YSA9ICRwcml2YXRlLT50b0FycmF5KCk7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdkJywgJGRhdGEpKSB7CiAgICAgICAgICAgIHVuc2V0KCRkYXRhWydkJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWVzOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbG9hZEpXSyhhcnJheSAkandrKQogICAgewogICAgICAgICRrZXlzID0gWwogICAgICAgICAgICAna3R5JyA9PiAnVGhlIGtleSBwYXJhbWV0ZXIgImt0eSIgaXMgbWlzc2luZy4nLAogICAgICAgICAgICAnY3J2JyA9PiAnQ3VydmUgcGFyYW1ldGVyIGlzIG1pc3NpbmcnLAogICAgICAgICAgICAneCcgPT4gJ1BvaW50IHBhcmFtZXRlcnMgYXJlIG1pc3NpbmcuJywKICAgICAgICAgICAgJ3knID0+ICdQb2ludCBwYXJhbWV0ZXJzIGFyZSBtaXNzaW5nLicsCiAgICAgICAgXTsKICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCRrLCAkandrKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJ0VDJyAhPT0gJGp3a1sna3R5J10pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0pXSyBpcyBub3QgYW4gRWxsaXB0aWMgQ3VydmUga2V5LicpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+dmFsdWVzID0gJGp3azsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyConverter/KeyConverter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBLZXlDb252ZXJ0ZXIKewogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkS2V5RnJvbUNlcnRpZmljYXRlRmlsZShzdHJpbmcgJGZpbGUpOiBhcnJheQogICAgewogICAgICAgIGlmICghXGZpbGVfZXhpc3RzKCRmaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignRmlsZSAiJXMiIGRvZXMgbm90IGV4aXN0LicsICRmaWxlKSk7CiAgICAgICAgfQogICAgICAgICRjb250ZW50ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRLZXlGcm9tQ2VydGlmaWNhdGUoJGNvbnRlbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZEtleUZyb21DZXJ0aWZpY2F0ZShzdHJpbmcgJGNlcnRpZmljYXRlKTogYXJyYXkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkcmVzID0gXG9wZW5zc2xfeDUwOV9yZWFkKCRjZXJ0aWZpY2F0ZSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkY2VydGlmaWNhdGUgPSBzZWxmOjpjb252ZXJ0RGVyVG9QZW0oJGNlcnRpZmljYXRlKTsKICAgICAgICAgICAgJHJlcyA9IFxvcGVuc3NsX3g1MDlfcmVhZCgkY2VydGlmaWNhdGUpOwogICAgICAgIH0KICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBjZXJ0aWZpY2F0ZS4nKTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZXMgPSBzZWxmOjpsb2FkS2V5RnJvbVg1MDlSZXNvdXJjZSgkcmVzKTsKICAgICAgICBcb3BlbnNzbF94NTA5X2ZyZWUoJHJlcyk7CgogICAgICAgIHJldHVybiAkdmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHJlc291cmNlICRyZXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkS2V5RnJvbVg1MDlSZXNvdXJjZSgkcmVzKTogYXJyYXkKICAgIHsKICAgICAgICAka2V5ID0gXG9wZW5zc2xfZ2V0X3B1YmxpY2tleSgkcmVzKTsKCiAgICAgICAgJGRldGFpbHMgPSBcb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRrZXkpOwogICAgICAgIGlmIChpc3NldCgkZGV0YWlsc1sna2V5J10pKSB7CiAgICAgICAgICAgICR2YWx1ZXMgPSBzZWxmOjpsb2FkS2V5RnJvbVBFTSgkZGV0YWlsc1sna2V5J10pOwogICAgICAgICAgICBcb3BlbnNzbF94NTA5X2V4cG9ydCgkcmVzLCAkb3V0KTsKICAgICAgICAgICAgJHg1YyA9IFxwcmVnX3JlcGxhY2UoJyMtLiotIycsICcnLCAkb3V0KTsKICAgICAgICAgICAgJHg1YyA9IFxwcmVnX3JlcGxhY2UoJ35cUn4nLCBQSFBfRU9MLCAkeDVjKTsKICAgICAgICAgICAgJHg1YyA9IFx0cmltKCR4NWMpOwogICAgICAgICAgICAkdmFsdWVzWyd4NWMnXSA9IFskeDVjXTsKCiAgICAgICAgICAgICR2YWx1ZXNbJ3g1dCddID0gQmFzZTY0VXJsOjplbmNvZGUoXG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCgkcmVzLCAnc2hhMScsIHRydWUpKTsKICAgICAgICAgICAgJHZhbHVlc1sneDV0IzI1NiddID0gQmFzZTY0VXJsOjplbmNvZGUoXG9wZW5zc2xfeDUwOV9maW5nZXJwcmludCgkcmVzLCAnc2hhMjU2JywgdHJ1ZSkpOwoKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgdGhlIGNlcnRpZmljYXRlJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkRnJvbUtleUZpbGUoc3RyaW5nICRmaWxlLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOiBhcnJheQogICAgewogICAgICAgICRjb250ZW50ID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRGcm9tS2V5KCRjb250ZW50LCAkcGFzc3dvcmQpOwogICAgfQoKICAgIC8qKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZEZyb21LZXkoc3RyaW5nICRrZXksID9zdHJpbmcgJHBhc3N3b3JkID0gbnVsbCk6IGFycmF5CiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRLZXlGcm9tREVSKCRrZXksICRwYXNzd29yZCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6bG9hZEtleUZyb21QRU0oJGtleSwgJHBhc3N3b3JkKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbG9hZEtleUZyb21ERVIoc3RyaW5nICRkZXIsID9zdHJpbmcgJHBhc3N3b3JkID0gbnVsbCk6IGFycmF5CiAgICB7CiAgICAgICAgJHBlbSA9IHNlbGY6OmNvbnZlcnREZXJUb1BlbSgkZGVyKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmxvYWRLZXlGcm9tUEVNKCRwZW0sICRwYXNzd29yZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbG9hZEtleUZyb21QRU0oc3RyaW5nICRwZW0sID9zdHJpbmcgJHBhc3N3b3JkID0gbnVsbCk6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCcjREVLLUluZm86ICguKyksKC4rKSMnLCAkcGVtLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgJHBlbSA9IHNlbGY6OmRlY29kZVBlbSgkcGVtLCAkbWF0Y2hlcywgJHBhc3N3b3JkKTsKICAgICAgICB9CgogICAgICAgIHNlbGY6OnNhbml0aXplUEVNKCRwZW0pOwoKICAgICAgICAkcmVzID0gXG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZSgkcGVtKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXMpIHsKICAgICAgICAgICAgJHJlcyA9IFxvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygkcGVtKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZhbHNlID09PSAkcmVzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gbG9hZCB0aGUga2V5LicpOwogICAgICAgIH0KCiAgICAgICAgJGRldGFpbHMgPSBcb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKCRyZXMpOwogICAgICAgIGlmICghXGlzX2FycmF5KCRkZXRhaWxzKSB8fCAhXGFycmF5X2tleV9leGlzdHMoJ3R5cGUnLCAkZGV0YWlscykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBnZXQgZGV0YWlscyBvZiB0aGUga2V5Jyk7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRkZXRhaWxzWyd0eXBlJ10pIHsKICAgICAgICAgICAgY2FzZSBPUEVOU1NMX0tFWVRZUEVfRUM6CiAgICAgICAgICAgICAgICAkZWNfa2V5ID0gRUNLZXk6OmNyZWF0ZUZyb21QRU0oJHBlbSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRlY19rZXktPnRvQXJyYXkoKTsKICAgICAgICAgICAgY2FzZSBPUEVOU1NMX0tFWVRZUEVfUlNBOgogICAgICAgICAgICAgICAgICRyc2Ffa2V5ID0gUlNBS2V5OjpjcmVhdGVGcm9tUEVNKCRwZW0pOwogICAgICAgICAgICAgICAgJHJzYV9rZXktPm9wdGltaXplKCk7CgogICAgICAgICAgICAgICAgIHJldHVybiAkcnNhX2tleS0+dG9BcnJheSgpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGtleSB0eXBlJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIFBFTSB0byBnZXQgNjQgY2hhciBsaW5lcyBhbmQgZml4IGJ1ZyB3aXRoIG9sZCBPcGVuU1NMIHZlcnNpb25zLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzYW5pdGl6ZVBFTShzdHJpbmcgJiRwZW0pCiAgICB7CiAgICAgICAgXHByZWdfbWF0Y2hfYWxsKCcjKC0uKi0pIycsICRwZW0sICRtYXRjaGVzLCBQUkVHX1BBVFRFUk5fT1JERVIpOwogICAgICAgICRjaXBoZXJ0ZXh0ID0gXHByZWdfcmVwbGFjZSgnIy0uKi18XHJ8XG58ICMnLCAnJywgJHBlbSk7CgogICAgICAgICRwZW0gPSAkbWF0Y2hlc1swXVswXS5QSFBfRU9MOwogICAgICAgICRwZW0gLj0gXGNodW5rX3NwbGl0KCRjaXBoZXJ0ZXh0LCA2NCwgUEhQX0VPTCk7CiAgICAgICAgJHBlbSAuPSAkbWF0Y2hlc1swXVsxXS5QSFBfRU9MOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZEZyb21YNUMoYXJyYXkgJHg1Yyk6IGFycmF5CiAgICB7CiAgICAgICAgJGNlcnRpZmljYXRlID0gbnVsbDsKICAgICAgICAkbGFzdF9pc3N1ZXIgPSBudWxsOwogICAgICAgICRsYXN0X3N1YmplY3QgPSBudWxsOwogICAgICAgIGZvcmVhY2ggKCR4NWMgYXMgJGNlcnQpIHsKICAgICAgICAgICAgJGN1cnJlbnRfY2VydCA9ICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0nLlBIUF9FT0wuJGNlcnQuUEhQX0VPTC4nLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSc7CiAgICAgICAgICAgICR4NTA5ID0gXG9wZW5zc2xfeDUwOV9yZWFkKCRjdXJyZW50X2NlcnQpOwogICAgICAgICAgICBpZiAoZmFsc2UgPT09ICR4NTA5KSB7CiAgICAgICAgICAgICAgICAkbGFzdF9pc3N1ZXIgPSBudWxsOwogICAgICAgICAgICAgICAgJGxhc3Rfc3ViamVjdCA9IG51bGw7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBhcnNlZCA9IFxvcGVuc3NsX3g1MDlfcGFyc2UoJHg1MDkpOwoKICAgICAgICAgICAgXG9wZW5zc2xfeDUwOV9mcmVlKCR4NTA5KTsKICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkcGFyc2VkKSB7CiAgICAgICAgICAgICAgICAkbGFzdF9pc3N1ZXIgPSBudWxsOwogICAgICAgICAgICAgICAgJGxhc3Rfc3ViamVjdCA9IG51bGw7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG51bGwgPT09ICRsYXN0X3N1YmplY3QpIHsKICAgICAgICAgICAgICAgICRsYXN0X3N1YmplY3QgPSAkcGFyc2VkWydzdWJqZWN0J107CiAgICAgICAgICAgICAgICAkbGFzdF9pc3N1ZXIgPSAkcGFyc2VkWydpc3N1ZXInXTsKICAgICAgICAgICAgICAgICRjZXJ0aWZpY2F0ZSA9ICRjdXJyZW50X2NlcnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoXGpzb25fZW5jb2RlKCRsYXN0X2lzc3VlcikgPT09IFxqc29uX2VuY29kZSgkcGFyc2VkWydzdWJqZWN0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGxhc3Rfc3ViamVjdCA9ICRwYXJzZWRbJ3N1YmplY3QnXTsKICAgICAgICAgICAgICAgICAgICAkbGFzdF9pc3N1ZXIgPSAkcGFyc2VkWydpc3N1ZXInXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGxhc3RfaXNzdWVyID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAkbGFzdF9zdWJqZWN0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgPT09ICRjZXJ0aWZpY2F0ZSB8fCBudWxsICE9PSAkbGFzdF9pc3N1ZXIgJiYgXGpzb25fZW5jb2RlKCRsYXN0X2lzc3VlcikgIT09IFxqc29uX2VuY29kZSgkbGFzdF9zdWJqZWN0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjZXJ0aWZpY2F0ZSBjaGFpbi4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjpsb2FkS2V5RnJvbUNlcnRpZmljYXRlKCRjZXJ0aWZpY2F0ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJG1hdGNoZXMKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlUGVtKHN0cmluZyAkcGVtLCBhcnJheSAkbWF0Y2hlcywgP3N0cmluZyAkcGFzc3dvcmQgPSBudWxsKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXNzd29yZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUGFzc3dvcmQgcmVxdWlyZWQgZm9yIGVuY3J5cHRlZCBrZXlzLicpOwogICAgICAgIH0KCiAgICAgICAgJGl2ID0gXHBhY2soJ0gqJywgXHRyaW0oJG1hdGNoZXNbMl0pKTsKICAgICAgICAkaXZfc3ViID0gXG1iX3N1YnN0cigkaXYsIDAsIDgsICc4Yml0Jyk7CiAgICAgICAgJHN5bWtleSA9IFxwYWNrKCdIKicsIFxtZDUoJHBhc3N3b3JkLiRpdl9zdWIpKTsKICAgICAgICAkc3lta2V5IC49IFxwYWNrKCdIKicsIFxtZDUoJHN5bWtleS4kcGFzc3dvcmQuJGl2X3N1YikpOwogICAgICAgICRrZXkgPSBccHJlZ19yZXBsYWNlKCcjXig/OlByb2MtVHlwZXxERUstSW5mbyk6IC4qI20nLCAnJywgJHBlbSk7CiAgICAgICAgJGNpcGhlcnRleHQgPSBcYmFzZTY0X2RlY29kZShccHJlZ19yZXBsYWNlKCcjLS4qLXxccnxcbiMnLCAnJywgJGtleSksIHRydWUpOwoKICAgICAgICAkZGVjb2RlZCA9IFxvcGVuc3NsX2RlY3J5cHQoJGNpcGhlcnRleHQsIFxtYl9zdHJ0b2xvd2VyKCRtYXRjaGVzWzFdKSwgJHN5bWtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2KTsKICAgICAgICBpZiAoIVxpc19zdHJpbmcoJGRlY29kZWQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbmNvcnJlY3QgcGFzc3dvcmQuIEtleSBkZWNyeXB0aW9uIGZhaWxlZC4nKTsKICAgICAgICB9CgogICAgICAgICRudW1iZXIgPSBccHJlZ19tYXRjaF9hbGwoJyMtezV9LiotezV9IycsICRwZW0sICRyZXN1bHQpOwogICAgICAgIGlmICgyICE9PSAkbnVtYmVyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gbG9hZCB0aGUga2V5Jyk7CiAgICAgICAgfQoKICAgICAgICAkcGVtID0gJHJlc3VsdFswXVswXS5QSFBfRU9MOwogICAgICAgICRwZW0gLj0gXGNodW5rX3NwbGl0KFxiYXNlNjRfZW5jb2RlKCRkZWNvZGVkKSwgNjQpOwogICAgICAgICRwZW0gLj0gJHJlc3VsdFswXVsxXS5QSFBfRU9MOwoKICAgICAgICByZXR1cm4gJHBlbTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjb252ZXJ0RGVyVG9QZW0oc3RyaW5nICRkZXJfZGF0YSk6IHN0cmluZwogICAgewogICAgICAgICRwZW0gPSBcY2h1bmtfc3BsaXQoXGJhc2U2NF9lbmNvZGUoJGRlcl9kYXRhKSwgNjQsIFBIUF9FT0wpOwogICAgICAgICRwZW0gPSAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tJy5QSFBfRU9MLiRwZW0uJy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0nLlBIUF9FT0w7CgogICAgICAgIHJldHVybiAkcGVtOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/KeyConverter/RSAKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxCaWdJbnRlZ2VyOwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgUlNBS2V5CnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICR2YWx1ZXMgPSBbXTsKCiAgICAvKioKICAgICAqIFJTQUtleSBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+bG9hZEpXSygkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFJTQUtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21LZXlEZXRhaWxzKGFycmF5ICRkZXRhaWxzKTogc2VsZgogICAgewogICAgICAgICR2YWx1ZXMgPSBbJ2t0eScgPT4gJ1JTQSddOwogICAgICAgICRrZXlzID0gWwogICAgICAgICAgICAnbicgPT4gJ24nLAogICAgICAgICAgICAnZScgPT4gJ2UnLAogICAgICAgICAgICAnZCcgPT4gJ2QnLAogICAgICAgICAgICAncCcgPT4gJ3AnLAogICAgICAgICAgICAncScgPT4gJ3EnLAogICAgICAgICAgICAnZHAnID0+ICdkbXAxJywKICAgICAgICAgICAgJ2RxJyA9PiAnZG1xMScsCiAgICAgICAgICAgICdxaScgPT4gJ2lxbXAnLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoJGRldGFpbHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKFxpbl9hcnJheSgka2V5LCAka2V5cywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IEJhc2U2NFVybDo6ZW5jb2RlKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkdmFsdWVzW1xhcnJheV9zZWFyY2goJGtleSwgJGtleXMsIHRydWUpXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSU0FLZXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUEVNKHN0cmluZyAkcGVtKTogc2VsZgogICAgewogICAgICAgICRyZXMgPSBcb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKCRwZW0pOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJlcykgewogICAgICAgICAgICAkcmVzID0gXG9wZW5zc2xfcGtleV9nZXRfcHVibGljKCRwZW0pOwogICAgICAgIH0KICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBsb2FkIHRoZSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICAkZGV0YWlscyA9IFxvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMoJHJlcyk7CiAgICAgICAgXG9wZW5zc2xfZnJlZV9rZXkoJHJlcyk7CiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygncnNhJywgJGRldGFpbHMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmFibGUgdG8gbG9hZCB0aGUga2V5LicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZUZyb21LZXlEZXRhaWxzKCRkZXRhaWxzWydyc2EnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFJTQUtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21KV0soSldLICRqd2spOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRqd2stPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQdWJsaWMoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAhXGFycmF5X2tleV9leGlzdHMoJ2QnLCAkdGhpcy0+dmFsdWVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBSU0FLZXkgJHByaXZhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIFJTQUtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvUHVibGljKHNlbGYgJHByaXZhdGUpOiBzZWxmCiAgICB7CiAgICAgICAgJGRhdGEgPSAkcHJpdmF0ZS0+dG9BcnJheSgpOwogICAgICAgICRrZXlzID0gWydwJywgJ2QnLCAncScsICdkcCcsICdkcScsICdxaSddOwogICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCRrZXksICRkYXRhKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJGRhdGFbJGtleV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZXM7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBsb2FkSldLKGFycmF5ICRqd2spCiAgICB7CiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygna3R5JywgJGp3aykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBrZXkgcGFyYW1ldGVyICJrdHkiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgfQogICAgICAgIGlmICgnUlNBJyAhPT0gJGp3a1sna3R5J10pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBKV0sgaXMgbm90IGEgUlNBIGtleS4nKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT52YWx1ZXMgPSAkandrOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0p3aygpOiBKV0sKICAgIHsKICAgICAgICByZXR1cm4gSldLOjpjcmVhdGUoJHRoaXMtPnZhbHVlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHRyeSB0byBhZGQgQ2hpbmVzZSBSZW1haW5kZXIgVGhlb3JlbSAoQ1JUKSBwYXJhbWV0ZXJzLgogICAgICogV2l0aCB0aG9zZSBwcmltZXMsIHRoZSBkZWNyeXB0aW9uIHByb2Nlc3MgaXMgcmVhbGx5IGZhc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcHRpbWl6ZSgpCiAgICB7CiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdkJywgJHRoaXMtPnZhbHVlcykpIHsKICAgICAgICAgICAgJHRoaXMtPnBvcHVsYXRlQ1JUKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgYWRkcyBDaGluZXNlIFJlbWFpbmRlciBUaGVvcmVtIChDUlQpIHBhcmFtZXRlcnMgaWYgcHJpbWVzICdwJyBhbmQgJ3EnIGFyZSBhdmFpbGFibGUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcG9wdWxhdGVDUlQoKQogICAgewogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJ3AnLCAkdGhpcy0+dmFsdWVzKSAmJiAhXGFycmF5X2tleV9leGlzdHMoJ3EnLCAkdGhpcy0+dmFsdWVzKSkgewogICAgICAgICAgICAkZCA9IEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoQmFzZTY0VXJsOjpkZWNvZGUoJHRoaXMtPnZhbHVlc1snZCddKSk7CiAgICAgICAgICAgICRlID0gQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbUJpbmFyeVN0cmluZyhCYXNlNjRVcmw6OmRlY29kZSgkdGhpcy0+dmFsdWVzWydlJ10pKTsKICAgICAgICAgICAgJG4gPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKEJhc2U2NFVybDo6ZGVjb2RlKCR0aGlzLT52YWx1ZXNbJ24nXSkpOwoKICAgICAgICAgICAgbGlzdCgkcCwgJHEpID0gJHRoaXMtPmZpbmRQcmltZUZhY3RvcnMoJGQsICRlLCAkbik7CiAgICAgICAgICAgICR0aGlzLT52YWx1ZXNbJ3AnXSA9IEJhc2U2NFVybDo6ZW5jb2RlKCRwLT50b0J5dGVzKCkpOwogICAgICAgICAgICAkdGhpcy0+dmFsdWVzWydxJ10gPSBCYXNlNjRVcmw6OmVuY29kZSgkcS0+dG9CeXRlcygpKTsKICAgICAgICB9CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygnZHAnLCAkdGhpcy0+dmFsdWVzKSAmJiBcYXJyYXlfa2V5X2V4aXN0cygnZHEnLCAkdGhpcy0+dmFsdWVzKSAmJiBcYXJyYXlfa2V5X2V4aXN0cygncWknLCAkdGhpcy0+dmFsdWVzKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkb25lID0gQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbURlY2ltYWwoMSk7CiAgICAgICAgJGQgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKEJhc2U2NFVybDo6ZGVjb2RlKCR0aGlzLT52YWx1ZXNbJ2QnXSkpOwogICAgICAgICRwID0gQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbUJpbmFyeVN0cmluZyhCYXNlNjRVcmw6OmRlY29kZSgkdGhpcy0+dmFsdWVzWydwJ10pKTsKICAgICAgICAkcSA9IEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoQmFzZTY0VXJsOjpkZWNvZGUoJHRoaXMtPnZhbHVlc1sncSddKSk7CgogICAgICAgICR0aGlzLT52YWx1ZXNbJ2RwJ10gPSBCYXNlNjRVcmw6OmVuY29kZSgkZC0+bW9kKCRwLT5zdWJ0cmFjdCgkb25lKSktPnRvQnl0ZXMoKSk7CiAgICAgICAgJHRoaXMtPnZhbHVlc1snZHEnXSA9IEJhc2U2NFVybDo6ZW5jb2RlKCRkLT5tb2QoJHEtPnN1YnRyYWN0KCRvbmUpKS0+dG9CeXRlcygpKTsKICAgICAgICAkdGhpcy0+dmFsdWVzWydxaSddID0gQmFzZTY0VXJsOjplbmNvZGUoJHEtPm1vZEludmVyc2UoJHApLT50b0J5dGVzKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBCaWdJbnRlZ2VyW10KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kUHJpbWVGYWN0b3JzKEJpZ0ludGVnZXIgJGQsIEJpZ0ludGVnZXIgJGUsIEJpZ0ludGVnZXIgJG4pOiBhcnJheQogICAgewogICAgICAgICR6ZXJvID0gQmlnSW50ZWdlcjo6Y3JlYXRlRnJvbURlY2ltYWwoMCk7CiAgICAgICAgJG9uZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21EZWNpbWFsKDEpOwogICAgICAgICR0d28gPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tRGVjaW1hbCgyKTsKCiAgICAgICAgJGsgPSAkZC0+bXVsdGlwbHkoJGUpLT5zdWJ0cmFjdCgkb25lKTsKCiAgICAgICAgaWYgKCRrLT5pc0V2ZW4oKSkgewogICAgICAgICAgICAkciA9ICRrOwogICAgICAgICAgICAkdCA9ICR6ZXJvOwoKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJHIgPSAkci0+ZGl2aWRlKCR0d28pOwogICAgICAgICAgICAgICAgJHQgPSAkdC0+YWRkKCRvbmUpOwogICAgICAgICAgICB9IHdoaWxlICgkci0+aXNFdmVuKCkpOwoKICAgICAgICAgICAgJGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICR5ID0gbnVsbDsKCiAgICAgICAgICAgIGZvciAoJGkgPSAxOyAkaSA8PSAxMDA7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRnID0gQmlnSW50ZWdlcjo6cmFuZG9tKCRuLT5zdWJ0cmFjdCgkb25lKSk7CiAgICAgICAgICAgICAgICAkeSA9ICRnLT5tb2RQb3coJHIsICRuKTsKCiAgICAgICAgICAgICAgICBpZiAoJHktPmVxdWFscygkb25lKSB8fCAkeS0+ZXF1YWxzKCRuLT5zdWJ0cmFjdCgkb25lKSkpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgKCRqID0gJG9uZTsgJGotPmxvd2VyVGhhbigkdC0+c3VidHJhY3QoJG9uZSkpOyAkaiA9ICRqLT5hZGQoJG9uZSkpIHsKICAgICAgICAgICAgICAgICAgICAkeCA9ICR5LT5tb2RQb3coJHR3bywgJG4pOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHgtPmVxdWFscygkb25lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZm91bmQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHgtPmVxdWFscygkbi0+c3VidHJhY3QoJG9uZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHkgPSAkeDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkeCA9ICR5LT5tb2RQb3coJHR3bywgJG4pOwogICAgICAgICAgICAgICAgaWYgKCR4LT5lcXVhbHMoJG9uZSkpIHsKICAgICAgICAgICAgICAgICAgICAkZm91bmQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRydWUgPT09ICRmb3VuZCkgewogICAgICAgICAgICAgICAgJHAgPSAkeS0+c3VidHJhY3QoJG9uZSktPmdjZCgkbik7CiAgICAgICAgICAgICAgICAkcSA9ICRuLT5kaXZpZGUoJHApOwoKICAgICAgICAgICAgICAgIHJldHVybiBbJHAsICRxXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuYWJsZSB0byBmaW5kIHByaW1lIGZhY3RvcnMuJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQIEpXVCBLZXkgTWFuYWdlbWVudCBDb21wb25lbnQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBpcyBhIHN1YiByZXBvc2l0b3J5IG9mIFt0aGUgSldUIEZyYW1ld29ya10oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBwcm9qZWN0IGFuZCBpcyBSRUFEIE9OTFkuCgoqKlBsZWFzZSBkbyBub3Qgc3VibWl0IGFueSBQdWxsIFJlcXVlc3QgaGVyZS4qKgpZb3Ugc2hvdWxkIGdvIHRvIFt0aGUgbWFpbiByZXBvc2l0b3J5XShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIGluc3RlYWQuCgojIERvY3VtZW50YXRpb24KClRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBodHRwczovL3dlYi10b2tlbi5zcG9ta3ktbGFicy5jb20vCgojIFN1cHBvcnQKCkkgYnJpbmcgc29sdXRpb25zIHRvIHlvdXIgcHJvYmxlbXMgYW5kIGFuc3dlciB5b3VyIHF1ZXN0aW9ucy4KCklmIHlvdSByZWFsbHkgbG92ZSB0aGF0IHByb2plY3QgYW5kIHRoZSB3b3JrIEkgaGF2ZSBkb25lIG9yIGlmIHlvdSB3YW50IEkgcHJpb3JpdGl6ZSB5b3VyIGlzc3VlcywgdGhlbiB5b3UgY2FuIGhlbHAgbWUgb3V0IGZvciBhIGNvdXBsZSBvZiA6YmVlcnM6IG9yIG1vcmUhCgpbIVtCZWNvbWUgYSBQYXRyZW9uXShodHRwczovL2M1LnBhdHJlb24uY29tL2V4dGVybmFsL2xvZ28vYmVjb21lX2FfcGF0cm9uX2J1dHRvbi5wbmcpXShodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkpCgojIENvbnRyaWJ1dGluZwoKUmVxdWVzdHMgZm9yIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVkIGFuZCBhbGwgb3RoZXIgaWRlYXMgdG8gbWFrZSB0aGlzIGZyYW1ld29yayB1c2VmdWwgYXJlIHdlbGNvbWUuCklmIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHdyaXRpbmcgY29kZSwgeW91IGNvdWxkIHRyeSB0byBmaXggW29wZW5lZCBpc3N1ZXMgd2hlcmUgaGVscCBpcyB3YW50ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvaGVscCt3YW50ZWQpIG9yIFt0aG9zZSB0aGF0IGFyZSBlYXN5IHRvIGZpeF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9lYXN5LXBpY2spLgoKRG8gbm90IGZvcmdldCB0byBbZm9sbG93IHRoZXNlIGJlc3QgcHJhY3RpY2VzXSguZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuCgoqKklmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIHNlY3VyaXR5IGlzc3VlLCBETyBOT1Qgb3BlbiBhbiBpc3N1ZSoqLiBbWW91IE1VU1Qgc3VibWl0IHlvdXIgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXR0ZXIuaW0vU3BvbWt5LykuCgojIExpY2VuY2UKClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZSB1bmRlciBbTUlUIGxpY2VuY2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/CertificateTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEtleUNvbnZlcnRlclxLZXlDb252ZXJ0ZXI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAc2VlIGh0dHA6Ly9mbTRkZC5jb20vb3BlbnNzbC9jZXJ0ZXhhbXBsZXMuaHRtCiAqCiAqIEBncm91cCBDZXJ0aWZpY2F0ZQogKiBAZ3JvdXAgVW5pdAogKi8KY2xhc3MgQ2VydGlmaWNhdGVUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBGaWxlICJmaWxlOi8vL2Zvby9iYXIiIGRvZXMgbm90IGV4aXN0LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWxlTm90Rm91bmQoKQogICAgewogICAgICAgIEtleUNvbnZlcnRlcjo6bG9hZEtleUZyb21DZXJ0aWZpY2F0ZUZpbGUoJ2ZpbGU6Ly8vZm9vL2JhcicpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsZU5vdFZhbGlkKCkKICAgIHsKICAgICAgICBLZXlDb252ZXJ0ZXI6OmxvYWRLZXlGcm9tQ2VydGlmaWNhdGVGaWxlKF9fRElSX18uX19GSUxFX18pOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNlcnRpZmljYXRlQ29udmVyc2lvbigpCiAgICB7CiAgICAgICAgJGRldGFpbHMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5RmlsZShfX0RJUl9fLicvS2V5cy9SU0EvcHJpdmF0ZS5lbmNyeXB0ZWQua2V5JywgJ3Rlc3RzJyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJGRldGFpbHMsIFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGRldGFpbHMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5RmlsZShfX0RJUl9fLicvS2V5cy9SU0EvcHVibGljLmtleScpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJ3RwUzFabWZWS1ZQNUtvZkloTUJQMHRTV2M0cWxoNmZtMmxyWlNrdUt4VWpFYVdqelpTenM3MmdFSUd4cmFXdXNNZG9SdVY1NHhzV1J5ZjVLZVpUMFMtSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzBfNXJRQ3BjRXRfRG41aU0tQk5uN2ZxcG9MSWJrczhyWEtVSWo4LXFNVnFrVFhzRUtlS2luRTIzdDF5a01sZHNOYWFPSC1odkd0aTVKdDJETW5IMUpqb1hkRFhmeHZTUF8wZ2pVWWIwZWt0dWRZRlhvQTZ3ZWttUXlKZUltdmd4NE15ejFJNGlIdGtZX0NwN0o0TW4xZWpaNkhObXl2b1RFXzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUpzdycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIGRhdGFMb2FkQ2VydGlmaWNhdGUKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENlcnRpZmljYXRlKHN0cmluZyAkZmlsZSwgYXJyYXkgJGV4cGVjdGVkX3ZhbHVlcykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gS2V5Q29udmVydGVyOjpsb2FkS2V5RnJvbUNlcnRpZmljYXRlRmlsZSgkZmlsZSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRleHBlY3RlZF92YWx1ZXMsICRyZXN1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRhTG9hZENlcnRpZmljYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBfX0RJUl9fLicvUlNBL1BFTS81MTJiLXJzYS1leGFtcGxlLWNlcnQucGVtJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ21feG1rSG1FUXJ1ckVfMHJlX2plRlJMbDhaUGpCb3A3dUxIaG5pYTdsUUdfNXpEdFpJVUMzUlZwcURTd0J1d19OVHdlR3l1UC1vOEFHOThIeHF4VEJ3JywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICdCeHk1VHd6SVVVMENRU1J3anVpeWFIdlgyZFUnLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnWHctMUZtV0JxdVpLRUJ3Vmc3Ry12blRvRktrZWVvb1V1aDZEWFhqMjZlYycsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlDRWpDQ0FYc0NBZzM2TUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl3Jy5QSFBfRU9MLidPREl5TURVeU5qVTBXaGNOTVRjd09ESXhNRFV5TmpVMFdqQktNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd1hEQU5CZ2txaGtpRzl3MEJBUUVGQUFOTEFEQklBa0VBbS94bWtIbUVRcnVyRS8wcmUvamVGUkxsJy5QSFBfRU9MLic4WlBqQm9wN3VMSGhuaWE3bFFHLzV6RHRaSVVDM1JWcHFEU3dCdXcvTlR3ZUd5dVArbzhBRzk4SHhxeFRCd0lEJy5QSFBfRU9MLidBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTMlRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14Jy5QSFBfRU9MLic4aUJJdTJINi9FMnRpWTNSSWV2VjJPVzYxcVkyL1hSUWc3WVB4eDNmZmVVdWdYOUY0Si9pUG5udTF6QXh4eUJ5Jy5QSFBfRU9MLicyVmd1S3Y0U1dqUkZvUmtJZklsSFgwcVZ2aU1oU2xOeTJpb0ZMeTdKY1BaYit2M2Z0REd5d1VxY0JpVkRvZWEwJy5QSFBfRU9MLidIbitHbXhaQSddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL1JTQS9QRU0vMTAyNGItcnNhLWV4YW1wbGUtY2VydC5wZW0nLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICduJyA9PiAneGdFR3ZIay1VX1JZMGo5bDNNUDdvLVMyYTZ1ZjRYYVJCaHUxenRkQ0h6OHRNRzhLajRfcUptZ3NTWlFEMTdzUmN0SEdCVFVKV3A0Q0x0QndDZjB6QUdWenlTd1VrY0hTdTFfMm1aX3c3TnIwVFFIS2VXcl9qOHB2WEg1MzRES0V2dWdyMjFEQUhiaTRjNjU0ZUxVTC1KV193SkpZcUpoN3FITTNXM0ZoN3lzJywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICc0Yks0NWV3WjAwV2stYV9zaHBUdzJjQ3FKYzgnLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnNUY1R1RQT3hCR0FPc1Z5dVl6cVVCanJpMFIyWURUaURvd2lRYnM2b0dnVScsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlDVmpDQ0FiOENBZzM3TUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl3Jy5QSFBfRU9MLidPREl5TURVeU56SXpXaGNOTVRjd09ESXhNRFV5TnpJeldqQktNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNWUJCcng1UGxQMFdOSS9aZHpEJy5QSFBfRU9MLicrNlBrdG11cm4rRjJrUVlidGM3WFFoOC9MVEJ2Q28rUDZpWm9MRW1VQTllN0VYTFJ4Z1UxQ1ZxZUFpN1FjQW45Jy5QSFBfRU9MLidNd0JsYzhrc0ZKSEIwcnRmOXBtZjhPemE5RTBCeW5scS80L0tiMXgrZCtBeWhMN29LOXRRd0IyNHVIT3VlSGkxJy5QSFBfRU9MLidDL2lWdjhDU1dLaVllNmh6TjF0eFllOHJBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUFTUGRqaWdKJy5QSFBfRU9MLidrWENxS1dwblovT2M3NUVVY01pNkh6dGFXOGFiVU1sWVhQSWdrVjJGN1lhbkhPQjdLNGY3T09Maml6OERUUEZmJy5QSFBfRU9MLidqQzlVZXVFcmhhQS96eldpOGV3TVRGWlcvV3NoT3JtM2ZOdmNNck1MS3RINTM0Skt2Y2RNZzZxSWRqVEZJTklyJy5QSFBfRU9MLidldm5BaGYwY3dVTGFlYm4rbE1zOFBkbDd5Mzcrc2ZsdVZvaz0nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIF9fRElSX18uJy9SU0EvUEVNLzIwNDhiLXJzYS1leGFtcGxlLWNlcnQucGVtJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3RNX1JYak1wN0F2UHJuYjFfaTNJbWNaNGVia1ktQXZVdXJUWG5nSlNCZ24wR0pOTTFIRFJRcUFwRTVKelVIZjJCSW1zQXl6VzhRYXJyV3pBMmRXbXE4ck5XdEpXSmxIbFN3aUtyOHdaRHlVMGtMQXFLVUVQVmZGcms5dWRzOHpjN092SFZSalhRaVhlU1RVVU1wS2NIc1pwNHp6NzlKcjQtNHZGNEJ0LV9VOGx1al9sbGxlYUpIbEpGeWZYaVV0cUxnMkhVZGtqUFFhRlZ2aFlNUTd1Z1psNGFNMXVSSDdKMm94YWV4eV9KRUFwU05FRG5PX2NyaXBkLVBkcXgtbTh4YkJaOXBYOEZzdlluTzNEX0JLUWszaGFkYlJXZ19yOFFZVDJaSGswTlJ5c2VvVU9jM2h5QWVja2lTV2UybjlsdkstSGt4bU0yM1VWdHVBd3h3ajRXUScsCiAgICAgICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICAgICAneDV0JyA9PiAneTE3ZVVGZVpVWWVPTG1jVHhUdnBPT3NqZmtBJywKICAgICAgICAgICAgICAgICAgICAneDV0IzI1NicgPT4gJ0I0cGxialp3U1p5Wkc3QW5Sb0lGaXZlOXdGX0VZc1lGOFBpVmdYbUJiTmMnLAogICAgICAgICAgICAgICAgICAgICd4NWMnID0+IFsnTUlJQzJqQ0NBa01DQWczOE1BMEdDU3FHU0liM0RRRUJCUVVBTUlHYk1Rc3dDUVlEVlFRR0V3SktVREVPTUF3RycuUEhQX0VPTC4nQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRScuUEhQX0VPTC4nTVJnd0ZnWURWUVFMRXc5WFpXSkRaWEowSUZOMWNIQnZjblF4R0RBV0JnTlZCQU1URDBaeVlXNXJORVJFSUZkbCcuUEhQX0VPTC4nWWlCRFFURWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWMzVndjRzl5ZEVCbWNtRnVhelJrWkM1amIyMHdIaGNOTVRJdycuUEhQX0VPTC4nT0RJeU1EVXlOelF4V2hjTk1UY3dPREl4TURVeU56UXhXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRScuUEhQX0VPTC4nQ0F3RlZHOXJlVzh4RVRBUEJnTlZCQW9NQ0VaeVlXNXJORVJFTVJnd0ZnWURWUVFEREE5M2QzY3VaWGhoYlhCcycuUEhQX0VPTC4nWlM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDMHo5RmVNeW5zQzgrdScuUEhQX0VPTC4nZHZYK0xjaVp4bmg1dVJqNEM5UzZ0TmVlQWxJR0NmUVlrMHpVY05GQ29Da1Rrbk5RZC9ZRWlhd0RMTmJ4QnF1dCcuUEhQX0VPTC4nYk1EWjFhYXJ5czFhMGxZbVVlVkxDSXF2ekJrUEpUU1FzQ29wUVE5VjhXdVQyNTJ6ek56czY4ZFZHTmRDSmQ1SicuUEhQX0VPTC4nTlJReWtwd2V4bW5qUFB2MG12ajdpOFhnRzM3OVR5VzZQK1dXVjVva2VVa1hKOWVKUzJvdURZZFIyU005Qm9WVycuUEhQX0VPTC4nK0ZneER1NkJtWGhvelc1RWZzbmFqRnA3SEw4a1FDbEkwUU9jNzl5dUtsMzQ5MnJINmJ6RnNGbjJsZndXeTlpYycuUEhQX0VPTC4nN2NQOEVwQ1RlRnAxdEZhRCt2eEJoUFprZVRRMUhLeDZoUTV6ZUhJQjV5U0pKWjdhZjJXOHI0ZVRHWXpiZFJXMicuUEhQX0VPTC4nNERESENQaFpBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVFNditCRnZHZE1WemtRYVEzLysybm9WeicuUEhQX0VPTC4nL3VBS2J6cEVMOHhUY3hZeVAzbGtPZWg0Rm94aVNXcXk1cEdGQUxkUE9Ob0R1WUZwTGhqSlNaYUV3dXZqSS9UcicuUEhQX0VPTC4nckdoTFYxcFJHOWZyd0RGc2hxRDJWYWo0RU5CQ0JoNlVwZUJvcDUrMjg1elE0U0k3cTRVOW9TZWJVREppdU94NicuUEhQX0VPTC4nK3RaOUt5bm1yYkpwVFNpMCtCTT0nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIF9fRElSX18uJy9SU0EvUEVNLzQwOTZiLXJzYS1leGFtcGxlLWNlcnQucGVtJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3NMMWlFemkzc2syMHRVUDFHbktuaUN5Q3RlbEJ5NzBzcGlKVzI0ay01cVEtRWpNQWQtTjhhU0pWemV1SHd0R05jcFUtaXkzbC1FcmV3SENheGlGZHdESmlYTEE3RGM0S09lLXk2clRiNXpwQ3g5QnFJNHJCUkNrSWtSRi1vRG9LdmJWa3FzR2hEWEhFeExBRjdsZWdFTlVrX2h0ZXJOTklqZmRvWTFfVmYxZXVySjBjRTdDZjZlRmthUzBuUUktTnU5b1lqTmZhaUlQYzY0ZmRudHEwTXV4UDFFb1Z1SUtUcTRZTm4tbjNBZ1p2bWx5SUd2cXNXa2kzSVhBMUx6MTY2U01VM2Z6bGtOdDBJYnlCTTVCbXo1UVFQQ2V6Y1BTZ3Ntc1cyREFSVzlZdEpRWThDaTQ1bktJb1lpT3oxYllRRHJ2d2U5UTlvU25CWXlxWDctQTlWR3B2OUZicGlzSWNMb1dWVFl5NnRRVWRSU2tTZFFvcUN4dU1BazY5QzFZTGI3MU1vUmEwdnR6M1ZFZEUtUjVRRUZqek1rQXg0QXFXemgxdE1ITklXN2pYanY1VXZOaTQ0bmhqUmNTcGpBUlJmWmJEZHM3QU9rTU45bDVHOXZ4QlpiVndyYWJqc0ZjN1haT0RBNjUyZzE4dmN6R2JxaFI2Yi1aVmsydzFjQTNjaEVEWEpXSld3Qkd3M3J4RUtQNndEbVJaZmVETHV0NndJQzRqM21UZUNIVXYtUEtLLVNta0dnam50QTdnRy1CbGpTRU9ObkdFT1U3QkIxcmZoU0RnREVxWF9ZVFQ0dzNydGJuMy1OQXpyYklzaG5sX1RWWXFpcmJiV2g2YjNlNjI5czdHckczQUJsSmZuelVDWS1LaUpqMGdmVTRhbWFqMDdwQkhEUHpiVzNrJywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICdJQk82MzgxcjNRV09PYm1OYXhGMzZIQmdPNU0nLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAneVZXSWF0UW5CcGJVOWxVR1ptUmxHZzJibGRHdEpQcHFRWGZxM0xoQnEzTScsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlEMmpDQ0EwTUNBZzM5TUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl3Jy5QSFBfRU9MLidPREl5TURVeU9EQXdXaGNOTVRjd09ESXhNRFV5T0RBd1dqQktNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUN3dldJVE9MZXlUYlMxJy5QSFBfRU9MLidRL1VhY3FlSUxJSzE2VUhMdlN5bUlsYmJpVDdtcEQ0U013QjM0M3hwSWxYTjY0ZkMwWTF5bFQ2TExlWDRTdDdBJy5QSFBfRU9MLidjSnJHSVYzQU1tSmNzRHNOemdvNTc3THF0TnZuT2tMSDBHb2ppc0ZFS1FpUkVYNmdPZ3E5dFdTcXdhRU5jY1RFJy5QSFBfRU9MLidzQVh1VjZBUTFTVCtHMTZzMDBpTjkyaGpYOVYvVjY2c25Sd1RzSi9wNFdScExTZEFqNDI3MmhpTTE5cUlnOXpyJy5QSFBfRU9MLidoOTJlMnJReTdFL1VTaFc0Z3BPcmhnMmY2ZmNDQm0rYVhJZ2ErcXhhU0xjaGNEVXZQWHJwSXhUZC9PV1EyM1FoJy5QSFBfRU9MLid2SUV6a0diUGxCQThKN053OUtDeWF4YllNQkZiMWkwbEJqd0tMam1jb2loaUk3UFZ0aEFPdS9CNzFEMmhLY0ZqJy5QSFBfRU9MLidLcGZ2NEQxVWFtLzBWdW1Ld2h3dWhaVk5qTHExQlIxRktSSjFDaW9MRzR3Q1RyMExWZ3R2dlV5aEZyUyszUGRVJy5QSFBfRU9MLidSMFQ1SGxBUVdQTXlRREhnQ3BiT0hXMHdjMGhidU5lTy9sUzgyTGppZUdORnhLbU1CRkY5bHNOMnpzQTZRdzMyJy5QSFBfRU9MLidYa2IyL0VGbHRYQ3RwdU93Vnp0ZGs0TURybmFEWHk5ek1adXFGSHB2NWxXVGJEVndEZHlFUU5jbFlsYkFFYkRlJy5QSFBfRU9MLid2RVFvL3JBT1pGbDk0TXU2M3JBZ0xpUGVaTjRJZFMvNDhvcjVLYVFhQ09lMER1QWI0R1dOSVE0MmNZUTVUc0VIJy5QSFBfRU9MLidXdCtGSU9BTVNwZjloTlBqRGV1MXVmZjQwRE90c2l5R2VYOU5WaXFLdHR0YUhwdmQ3cmIyenNhc2JjQUdVbCtmJy5QSFBfRU9MLidOUUpqNHFJbVBTQjlUaHFacVBUdWtFY00vTnRiZVFJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUFpJy5QSFBfRU9MLidnVTNNeThrWVluaUR1S0VYU0ptYlZCK0sxdXBIeFdEQThSNktNWkdYZmJlNUJSZDhzNDBjWTZKQllMNTJUZ3FkJy5QSFBfRU9MLidsOHo1RWs4ZEM0Tk5wZnBjWmMvdGVUMVdxaU8yd25wR0hqZ01EdURMMW14Q1pOTDQyMmpIcGlQV2tXcDNBdURJJy5QSFBfRU9MLidjN3RMMVFqYmZBVUhBUVl3bUhrV2dQUCtUMndBdjBwT3QzNkdnTUNNJ10sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBfX0RJUl9fLicvUlNBL1BFTS84MTkyYi1yc2EtZXhhbXBsZS1jZXJ0LnBlbScsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAgICAgJ24nID0+ICdxNWxjRXdHOHJVZmxJMWFMNm9tQWFGNVIxREZrQ01sbEZhUTNIVXdsd0NXWU5OeUt4RjFHMmUtUDNZNlNGV3lwMHNGZm1EY3Z1ZWJPWV9EdzNLbEM3NTZiUVVNRVhINlRhdWJZRGNYYUtEeXJkS2dDU291Zmpod0hrTnBSejNWeHBrTEFESlFJSGRpamVzMkpOM2RhR0FSeFNKTGNqb1NhWnZxX0xCQ0lIVFRER0VTQlhKUDZSdGJqQWpHanVMVWdtY3ZrbDAyOVhsOHlsa3JjaWJqVHpYbU9vZDN2aW9Ublg1YVpOVDFjN2V2bXNrdml4V0cxTmxIT2haMUhkWGlQSExqS3hucjRsSGw5bHh0VGprTlNzRi1OejBiWUhDcFdaOXU5OG5rZ3ZGQXhOVW1pd1g1bkhJcW8zOUFLOFlWdVZtREdZelktZFB0RDFVdENCWGdqLVJ5cTFjUFU2Nkg3a0VmdmJuMWtaUkYwWGN4cUlVVkRscGFfaDRBcTdyOEtuUTZuVkY1OW9NOEF3c3JSdTNsbHZsUnpOQ2FSVWhhZlo2WVVIUjE5al82R3BBSnRPV3d3VjVtMnFLczlFaGZMOUt2ejlEcVdoM0RCdDBDdUdJRFMwTnVCQXQyX1JtTlFCUDF1N0w4cFlaXzlrVi1ZN1lNOW9jYnVZcFViVHk0dmlvMzNQbDJ3Rzhpb3pnUElnT2NibmU0Vmg0VEdwZTBoYlhhTC1hXzg0Q1ZPV1g0SnlMeHlCRVdHQjZQTGZINzROeVh5dmg1N1g2Q24zUDBYcjJyU2dQRWdFRW92dzVpOXFEZXFxemVPLUd2VW91aFFqWmdVUlA1VVNqZDEyMElQalZvWlA4UlBSQ0FQVUJRU1VtaTJkeUhBTlJJM3lkSWhUS09FZFpDVnZJbFZOdTMzd2ZONTVrRWVMQ1hCaUR2ZnZvelViQ0d1dU9rYnM1WXo3dkU4Szl4bFVfWG8yaWNwdFlfdTNYTVBXNllLUlA2bHZHdG92bjkyOTV2RU5IT0pERkNWa2NKODE5dkhWcUpub2lHQWZfUVgwSjc0TkxtNmZuV2JvSDYtNUJjSURsMTh1QjNxRUZBbG5lUmZsSXJDMlhCWmp1LWRUdVRhSHkxNFd2VkpOalRNVUJnVlE0Z2FTMVgyd21BenR3di1SazhvNmstS0p1U1pEV1ZFWnlIM05hZGRrWVNWT05PTXpJdXVDbGJnNGNFZ0xQMmN4eHF6OEpkbnlUMk5OZk1kR2Z4UDROZF9SdlB0VEQ5a1RWZXdsdXJ6WVZqb2k4Q0M2VmhWMlRnY3AtVXZUNlowWW5lLTY1ZFhpMzFWUnFRV0c4YWRXUTNnYzlOUDFvWGZKcVZ0MjZsZFhGOUFWZjdQY0ZjbTd4enIybXdaS1ktRE1rMW0xaEJ2VUdlZzdJYWIzNE9BQk9ZNko0QXhYaVhxS3gzSlYyNFNGeWRhU1NldnN1bFNybVVKVTNnOFRSLVd3VGgwNllwOERacGxDVTlNRXZmeVVTU2h0SEVENzJhblZSZ1ZlOGp3NDdrOVRhdkotaFBpQXEwSFVtbUtHVWVLdnJxV040Yk1wU2lNQ21IVGtjcVNfZDREbjRaQUk4VzBESWx1YzlzWEJhaVVVU0l0NnQ3Z0dOT1pHVXlaLVpONEdOeFZsTWF6QjZDaWVHUmhvUGZSbVh3N3dxMGsyUjVCVTFROFBTajhqclo4OERnZGZFTm5XQ0d5NkFxNDUwT3dmdWZHYUhaRHdBVUQxa1VvUkdCa3pJeHZrV0xWZFF0bVA0aVpYT0xTYW55MFJ0UFpMR2pTSC14MHZRJywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICdZVjZkU1E5c05TN3JoTldjai1NNFh1TW1PRTQnLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnWk5FVXNjV3dKdTAzYlJpbkRZZDBCQXV3aVdHRzNvRG9jZWhWTXdYMm9WbycsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlGMmpDQ0JVTUNBZzMrTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl3Jy5QSFBfRU9MLidPVEkzTURZd056UTVXaGNOTVRjd09USTJNRFl3TnpRNVdqQktNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd2dnUWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUVEd0F3Z2dRS0FvSUVBUUNybVZ3VEFieXRSK1VqJy5QSFBfRU9MLidWb3ZxaVlCb1hsSFVNV1FJeVdVVnBEY2RUQ1hBSlpnMDNJckVYVWJaNzQvZGpwSVZiS25Td1YrWU55KzU1czVqJy5QSFBfRU9MLic4UERjcVVMdm5wdEJRd1JjZnBOcTV0Z054ZG9vUEt0MHFBSktpNStPSEFlUTJsSFBkWEdtUXNBTWxBZ2QyS042Jy5QSFBfRU9MLid6WWszZDFvWUJIRklrdHlPaEpwbStyOHNFSWdkTk1NWVJJRmNrL3BHMXVNQ01hTzR0U0NaeStTWFRiMWVYektXJy5QSFBfRU9MLidTdHlKdU5QTmVZNmgzZStLaE9kZmxwazFQVnp0NitheVMrTEZZYlUyVWM2Rm5VZDFlSThjdU1yR2V2aVVlWDJYJy5QSFBfRU9MLidHMU9PUTFLd1g0M1BSdGdjS2xabjI3M3llU0M4VURFMVNhTEJmbWNjaXFqZjBBcnhoVzVXWU1aak5qNTArMFBWJy5QSFBfRU9MLidTMElGZUNQNUhLclZ3OVRyb2Z1UVIrOXVmV1JsRVhSZHpHb2hSVU9XbHIrSGdDcnV2d3FkRHFkVVhuMmd6d0RDJy5QSFBfRU9MLid5dEc3ZVdXK1ZITTBKcEZTRnA5bnBoUWRIWDJQL29ha0FtMDViREJYbWJhb3F6MFNGOHYwcS9QME9wYUhjTUczJy5QSFBfRU9MLidRSzRZZ05MUTI0RUMzYjlHWTFBRS9XN3N2eWxobi8yUlg1anRnejJoeHU1aWxSdFBMaStLamZjK1hiQWJ5S2pPJy5QSFBfRU9MLidBOGlBNXh1ZDdoV0hoTWFsN1NGdGRvdjVyL3pnSlU1WmZnbkl2SElFUllZSG84dDhmdmczSmZLK0hudGZvS2ZjJy5QSFBfRU9MLicvUmV2YXRLQThTQVFTaS9EbUwyb042cXJONDc0YTlTaTZGQ05tQlJFL2xSS04zWGJRZytOV2hrL3hFOUVJQTlRJy5QSFBfRU9MLidGQkpTYUxaM0ljQTFFamZKMGlGTW80UjFrSlc4aVZVMjdmZkI4M25tUVI0c0pjR0lPOSsrak5Sc0lhNjQ2UnV6Jy5QSFBfRU9MLidsalB1OFR3cjNHVlQ5ZWphSnltMWorN2RjdzlicGdwRS9xVzhhMmkrZjNiM204UTBjNGtNVUpXUnduelgyOGRXJy5QSFBfRU9MLidvbWVpSVlCLzlCZlFudmcwdWJwK2RadWdmcjdrRndnT1hYeTRIZW9RVUNXZDVGK1Vpc0xaY0ZtTzc1MU81Tm9mJy5QSFBfRU9MLidMWGhhOVVrMk5NeFFHQlZEaUJwTFZmYkNZRE8zQy81R1R5anFUNG9tNUprTlpVUm5JZmMxcDEyUmhKVTQwNHpNJy5QSFBfRU9MLidpNjRLVnVEaHdTQXMvWnpIR3JQd2wyZkpQWTAxOHgwWi9FL2cxMzlHOCsxTVAyUk5WN0NXNnZOaFdPaUx3SUxwJy5QSFBfRU9MLidXRlhaT0J5bjVTOVBwblJpZDc3cmwxZUxmVlZHcEJZYnhwMVpEZUJ6MDAvV2hkOG1wVzNicVYxY1gwQlYvczl3Jy5QSFBfRU9MLidWeWJ2SE92YWJCa3BqNE15VFdiV0VHOVFaNkRzaHB2Zmc0QUU1am9uZ0RGZUplb3JIY2xYYmhJWEoxcEpKNit5Jy5QSFBfRU9MLic2Vkt1WlFsVGVEeE5INWJCT0hUcGlud05tbVVKVDB3UzkvSlJKS0cwY1FQdlpxZFZHQlY3eVBEanVUMU5xOG42Jy5QSFBfRU9MLidFK0lDclFkU2FZb1pSNHErdXBZM2hzeWxLSXdLWWRPUnlwTDkzZ09maGtBanhiUU1pVzV6MnhjRnFKUlJJaTNxJy5QSFBfRU9MLiczdUFZMDVrWlRKbjVrM2dZM0ZXVXhyTUhvS0o0WkdHZzk5R1pmRHZDclNUWkhrRlRWRHc5S1B5T3RuendPQjE4Jy5QSFBfRU9MLidRMmRZSWJMb0Nyam5RN0IrNThab2RrUEFCUVBXUlNoRVlHVE1qRytSWXRWMUMyWS9pSmxjNHRKcWZMUkcwOWtzJy5QSFBfRU9MLidhTklmN0hTOUFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBaVhieFIwVCtDNk1UN0poL1NiREovMUdkJy5QSFBfRU9MLid2YnFza2lLbW1LbnpPY1gxeDB1VUhZNHpISWh4M00wbmVZUnIvL1hPaCtGZVN3TTFKcUFQenRIeTNTTVJYemZQJy5QSFBfRU9MLid4em0vbndiUndkSzhDL2ZQeTdIK3VNVjFtS3VtZW04V1NvT01Pb3hGSitvMm5KZ3lWaXduRU91OUVlamxIMXNjJy5QSFBfRU9MLid1S1BJb1RDTFVDSW5SUmhySTg0PSddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL1JTQS9QRU0vMTZrLXJzYS1leGFtcGxlLWNlcnQucGVtJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3RTM2FlV1dfd3pseVhzRE5GZUJPTkZOcTdXNGxOV0RqT1VzZU54eC1SOUFzcU5KRVdaRnphVHRCSTRDYW05V2ZfMkFsZlA2aTNSUnBLNzZvb1pPYkt3Sm1tMVJlR2NQN2dmN0puT0RRdjBXLW05eDg1YV9md0hpSTg2RGhmeTFZTmgyemcxRE8xa0xfUS1zcUtNT1o0ZzZ1VWZYR1hqUzU5NjhzS0N1YTNvLUdFci03R002dXc4emdwRG1VUnRwdXBBRmozWDFxQ2c2Y2pibFB6TXpjWGRqQUNQNF96SnBMYy1zV3BxWTdwZExhMjZKNWRnRkdwVEtXUzdYczk2QWxDUER6NHVUUlJGS0RaYXJNRnR6cGpoV2hOWnlER3VZRkZ4Tkw0Y2ExdG0tcjRKeUwtWHVLOUJUWEMxV05YcHF1dHpITk9qLXRPOW5DdFJYMDJaUzNobW0xQTl4bmRUWnBmUTdsUHVTQV9rWkVvaGtqY0d5eHRTLW51cDlraHlNS0d3dmhnME1KUzQzVk91WVNWNm1za196NGRaMy1NQ1hWbEpNVHhMcVdPU0dIeEhHMHZESlFJNV9JWEN3a1FMclZRSWJ0X1gxWnlsVWRrbW5LbTRWdUNCdDRBSHFLMUYxaldwTlhMWWNGWS1RVzQzYzJJbG43djF1UUZtXzgyQ0ZIVGFuck5NQllOYXgyZWdZcFNYcFBTMG5hRjZPMVk4Yk1QalBCVTFqYW9CQWxmaVNqQ21IeDVNT1RnLVBVOW0xT25uUjRYbk9kRFIwVzhyVVNTX2lZejRVY2l2b3VfN19YQ1RWbGZ1aWVBWFQwNjlpYlhwR2tURTU4QWdJNnBpVlZZdGF4eW9BRGIzenIwYTExQnIwa1MzZ0tScXhUcTVHdGdXVHB6NzVWckZ4WGs4QVRmd1pGNFBjT1ZYOWZrVVFTdEJLWTlPR1JyeXN3TEpiUTBsbno1WlI4UUFBdzFEMmNBb1dZb3hVb2w1dXBqc3JZcnNHYzdPbDNOaFBQdG9FMFZueGc0OXhRU1owaGhqaHJ5SWQwN2FaM1FCcjNOUTBYQm9HaFNOdk8tTTdaeXpEVE5TVVF1c1M1V3lac1pwdXR3XzEyRTV5NTVfYmJNUHBLWWJueDBhRzkzd21jbmE0OWpYb281WlVNb0pfQlFMYWF2R0MwdS1KVExUX3N1Yms1dEtoM29WZ0RSZXZId1llSzFVNEw0Y2R6cE96RzhKVnBjSHljbG9mRVNrMjVEbkhpUTkyQmZCMURSLTZZYWRmUThhNEJYcklGbGt0RGhvMUVtaFh3V2RULWRoTzRFUlB3ZjJDeDA0aVAzT2RZQ1VfVE5yM2dWZEIzZlFMUGtoVjFLX29kOHpXclg3b3FDR0xrWUNQX0dVdmw4NGRKb01lcXVseUlPOUlIdFZwVkh6R2wtRTQ4Sm9PSE4wMFVMbm9Ield6eFVlR3RkYTR0d245TlEtcHRFank5dTBfOFIteTJVcW5DNjMyd0VtSHBIekZxck9TWWl4cDRHT196QWgtZ21JaFBKSHVvSDk3dmRjRFJqR0dGUE83a21NSTB0Qm14a3QwM2FoWUlxSktiUHluSFZMaHNUdVU3VFZZcmdUWDZKa0NSX0lidWRRVHFWZHo4b1lPNnROcVZyVTg5Skk5NF81bmRKWDFXam1mMUxQYThjMzFJUW92QkIwZS1NbFotckJreVRFdHROdUk4eENfX095Y3NMaGpBRnhfYm0wUWYyamZnMklKZExtRGpHRkh2M1JsRWRsUm1KU3lMWV9scUtWNEdBaGppRUlFbWR1QUtieWdnMkpxaGI2Tkt6SHIxdnhoUmNXYXNudWhnVE91bmxHczN2ZXp1OXh6XzRDdkVLUk1UNnZpVTN0enFtR3BUM3pFN2Qwdzl6TXduMmVVbFgwajdwS0lpem5yYmtXMkRmZTYzZjlYOWJLWUFzTzVwY3FjZkFIcVZhSGwwaUZYeTVRb0Z3d2pTdVd3eEt5aGFZM3RmWTJydWZMWENPelFfRzdCRG9NUm5zOHg2bkNSLTY0WHV2cC1FdkJ3MFM3OTBKX3U5WjJXOThyclc2YzFjZm40Y2I5QlJ5M1JqNjRrV3FsQVVUUnU2LXFyWDJSTjV5d2hvS2ZpSkRIM20ycV9NdGdEbFIza2UtNUt1eGFad2ZNMGhyY0NwcFU1VEhiT3dNZTNYb0RYLVpqRC0zcS1pa004dWV1NHVUcURqdFFyVFFpb0ZJeGEtM3ByYk5Uc3hCRVJRRlp3bEp0ejJHbU5IRUFqZ1UtT3drTURPYllBR2MtWkFacml0WGU5dkd0R0ZwZG93TVo1azBGVFVLU0lzZWNQeG4tblpsRy1fcU1MOFM2M05YbFUwUmRidFlhTHdRdGVGdVhsX2FjQXZ1eE9PbkIzblpwcEp5SVN0UDB1T1BHaFJvd1hTbFRobjB5RkRodDY1VExseTE3MUpWcmY0b0ZCRE80UTZFSUo3Sk1iUlhDYUVXSm1lU05lX2s3MWMzdTRlbGJaLUMyaTVKYU82YmN0WnpPLXhaLUNQN3JhUXpIWE1scENoWVhxbXBEVTViSzJ5U0FiY0RKRHZnNVdlUm1Rc3FSeHNGbkkxRUsxSmpfQktIWnFPUHpfcTJTWXl2Njl6UFRzcDVfdzl6OVlXQ2JPS1AxS0h5ZjlpOW42UDVHM1FrQ3p2bFREQWJqUjZucnJybnZhMFBaMFNqTzRNekRPc0lBYTlTNnZ3Um5XeUUyM3ZWSTVSQ3YtSWtMWjA3NUxSa1hLY2oyRVZQckRJM01iMXBVdGZHdTFIMU03bTZWMFNPVG5hQ3dpbUl6M0p1Mm13Z25SLTJsQUFKS01kM3ZVYU4xTmZiRUR1aFpvTVpmRHJXenFPcUE4WjJveXY2akhoYnkzRGtuYlc0cG44dGNhUEN2U2NuMXdvdE9lTkZEdkFmT0l4aWtHRWpVdVhqLV9nVjJfZGNGVklBTnNlWXBkaEFTMXRKalZYOUpCd1djamJIblNoeV85WTRmMXp6clN3djRVYkc3eERFR1MxVmFEVWs1VXdUVGVlS1FLekNrZDZuWVh4WllSTVlERF9EY3VHaUNHOVl2V205aHJ5MURrZmR5Q3g1UGU4ajhLTUdVdUV0SXdMT0lmbUpEaUNtRTlmUkFZODVmOVRBWHl4a00tUDFTX1RjU2NLZVNZcnhMdWJYMURUdU9HTkRGS0I0eE5mMHZpLWxDRmdMbXg4dE9yLVJZN3F0enJ3cmZjZjdLYnBvcC1CNUtwQTJQaG1vUlR0Wmw0a0Y3UkRlaC1ablVxY2Z5UWNDSXZfSGV3aU1PbUo2aVFERGpPV2JzTTh1RWhsM2FiLUZ6RFlHQWVUNWJKczRFSkF3RWhzazI4c1hxbkd6d0pEVXh3NG1kTENZaGl1STBad0dPQlVJelhRLUtIYUg4OFB3WXVRR0x3TS1zOXVDS3FKeU84NEk2WFBlNmJucXNMOU5XbVBocHZGeEVaN012RkNDMlo3bnVHc3dRS3BMOTJfUU9TME5pYlp3enhCRFVZN1FtM1dzSHhGelltNzNKZW5RSkdLelpQUEx0amhJYXI3YWYycWI4S0lOZ1dHZkl2cnhSMzhvc0xUMFZnMjlNMER1TWMnLAogICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJ1hDX3MwcTRscU5hbFRGVTZ0TldSX1N6azVkaycsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICczbnoyd0lBb1NiZlZDbXZ5OWsxOGJDUHlJWGFjZDNZZkhyR3EtcWczRFZZJywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUoyakNDQ1VNQ0FnMy9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09ESXlNRFV5T1RBeVdoY05NVGN3T0RJeE1EVXlPVEF5V2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z2dnaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJSUR3QXdnZ2dLQW9JSUFRQzFMZHA1WmIvRE9YSmUnLlBIUF9FT0wuJ3dNMFY0RTQwVTJydGJpVTFZT001U3g0M0hINUgwQ3lvMGtSWmtYTnBPMEVqZ0pxYjFaLy9ZQ1Y4L3FMZEZHa3InLlBIUF9FT0wuJ3ZxaWhrNXNyQW1hYlZGNFp3L3VCL3NtYzROQy9SYjZiM0h6bHI5L0FlSWp6b09GL0xWZzJIYk9EVU03V1F2OUQnLlBIUF9FT0wuJzZ5b293NW5pRHE1UjljWmVOTG4zcnl3b0s1cmVqNFlTdjdzWXpxN0R6T0NrT1pSRzJtNmtBV1BkZldvS0RweU4nLlBIUF9FT0wuJ3VVL016TnhkMk1BSS9qL01ta3R6NnhhbXBqdWwwdHJib25sMkFVYWxNcFpMdGV6M29DVUk4UFBpNU5GRVVvTmwnLlBIUF9FT0wuJ3Fzd1czT21PRmFFMW5JTWE1Z1VYRTB2aHhyVzJiNnZnbkl2NWU0cjBGTmNMVlkxZW1xNjNNYzA2UDYwNzJjSzEnLlBIUF9FT0wuJ0ZmVFpsTGVHYWJVRDNHZDFObWw5RHVVKzVJRCtSa1NpR1NOd2JMRzFMNmU2bjJTSEl3b2JDK0dEUXdsTGpkVTYnLlBIUF9FT0wuJzVoSlhxYXlUL1BoMW5mNHdKZFdVa3hQRXVwWTVJWWZFY2JTOE1sQWpuOGhjTENSQXV0VkFodTM5ZlZuS1ZSMlMnLlBIUF9FT0wuJ2FjcWJoVzRJRzNnQWVvclVYV05hazFjdGh3Vmo1QmJqZHpZaVdmdS9XNUFXYi96WUlVZE5xZXMwd0ZnMXJIWjYnLlBIUF9FT0wuJ0JpbEplazlMU2RvWG83Vmp4c3crTThGVFdOcWdFQ1YrSktNS1lmSGt3NU9ENDlUMmJVNmVkSGhlYzUwTkhSYnknLlBIUF9FT0wuJ3RSSkwrSmpQaFJ5SytpNy92OWNKTldWKzZKNEJkUFRyMkp0ZWthUk1UbndDQWpxbUpWVmkxckhLZ0FOdmZPdlInLlBIUF9FT0wuJ3JYVUd2U1JMZUFwR3JGT3JrYTJCWk9uUHZsV3NYRmVUd0JOL0JrWGc5dzVWZjErUlJCSzBFcGowNFpHdkt6QXMnLlBIUF9FT0wuJ2x0RFNXZlBsbEh4QUFERFVQWndDaFppakZTaVhtNm1PeXRpdXdaenM2WGMyRTgrMmdUUldmR0RqM0ZCSm5TR0cnLlBIUF9FT0wuJ09HdkloM1R0cG5kQUd2YzFEUmNHZ2FGSTI4NzR6dG5MTU5NMUpSQzZ4TGxiSm14bW02M0QvWFlUbkxubjl0c3cnLlBIUF9FT0wuJytrcGh1ZkhSb2IzZkNaeWRyajJOZWlqbGxReWduOEZBdHBxOFlMUzc0bE10UCt5NXVUbTBxSGVoV0FORjY4ZkInLlBIUF9FT0wuJ2g0clZUZ3ZoeDNPazdNYndsV2x3Zkp5V2g4UktUYmtPY2VKRDNZRjhIVU5IN3BocDE5RHhyZ0Zlc2dXV1MwT0cnLlBIUF9FT0wuJ2pVU2FGZkJaMVA1MkU3Z1JFL0IvWUxIVGlJL2M1MWdKVDlNMnZlQlYwSGQ5QXMrU0ZYVXIraDN6TmF0ZnVpb0knLlBIUF9FT0wuJ1l1UmdJLzhaUytYemgwbWd4NnE2WElnNzBnZTFXbFVmTWFYNFRqd21nNGMzVFJRdWVnZk5iUEZSNGExMXJpM0MnLlBIUF9FT0wuJ2YwMUQ2bTBTUEwyN1QveEg3TFpTcWNMcmZiQVNZZWtmTVdxczVKaUxHbmdZNy9NQ0g2Q1lpRThrZTZnZjN1OTEnLlBIUF9FT0wuJ3dOR01ZWVU4N3VTWXdqUzBHYkdTM1RkcUZnaW9rcHMvS2NkVXVHeE81VHROVml1Qk5mb21RSkg4aHU1MUJPcFYnLlBIUF9FT0wuJzNQeWhnN3EwMnBXdFR6MGtqM2ovbWQwbGZWYU9aL1VzOXJ4emZVaENpOEVIUjc0eVZuNnNHVEpNUzIwMjRqekUnLlBIUF9FT0wuJ0wvODdKeXd1R01BWEg5dWJSQi9hTitEWWdsMHVZT01ZVWUvZEdVUjJWR1lsTEl0aitXb3BYZ1lDR09JUWdTWjInLlBIUF9FT0wuJzRBcHZLQ0RZbXFGdm8wck1ldlcvR0ZGeFpxeWU2R0JNNjZlVWF6ZTk3TzczSFAvZ0s4UXBFeFBxK0pUZTNPcVknLlBIUF9FT0wuJ2FsUGZNVHQzVEQzTXpDZlo1U1ZmU1B1a29pTE9ldHVSYllOOTdyZC8xZjFzcGdDdzdtbHlweDhBZXBWb2VYU0knLlBIUF9FT0wuJ1ZmTGxDZ1hEQ05LNWJERXJLRnBqZTE5amF1NTh0Y0k3TkQ4YnNFT2d4R2V6ekhxY0pIN3JoZTYrbjRTOEhEUkwnLlBIUF9FT0wuJ3YzUW4rNzFuWmIzeXV0YnB6VngrZmh4djBGSExkR1ByaVJhcVVCUk5HN3I2cXRmWkUzbkxDR2dwK0lrTWZlYmEnLlBIUF9FT0wuJ3I4eTJBT1ZIZVI3N2txN0ZwbkI4elNHdHdLbWxUbE1kczdBeDdkZWdOZjVtTVA3ZXI2S1F6eTU2N2k1T29PTzEnLlBIUF9FT0wuJ0N0TkNLZ1VqRnI3ZW10czFPekVFUkZBVm5DVW0zUFlhWTBjUUNPQlQ0N0NRd001dGdBWno1a0JtdUsxZDcyOGEnLlBIUF9FT0wuJzBZV2wyakF4bm1UUVZOUXBJaXg1dy9HZjZkbVViNytvd3Z4THJjMWVWVFJGMXUxaG92QkMxNFc1ZVg5cHdDKzcnLlBIUF9FT0wuJ0U0NmNIZWRtbWtuSWhLMC9TNDQ4YUZHakJkS1ZPR2ZUSVVPRzNybE11WExYdlVsV3QvaWdVRU03aERvUWduc2snLlBIUF9FT0wuJ3h0RmNKb1JZbVo1STE3K1R2VnplN2g2VnRuNExhTGtsbzdwdHkxbk03N0ZuNEkvdXRwRE1kY3lXa0tGaGVxYWsnLlBIUF9FT0wuJ05UbHNyYkpJQnR3TWtPK0RsWjVHWkN5cEhHd1djalVRclVtUDhFb2RtbzQvUCtyWkpqSy9yM005T3lubi9EM1AnLlBIUF9FT0wuJzFoWUpzNG8vVW9mSi8yTDJmby9rYmRDUUxPK1ZNTUJ1TkhxZXV1dWU5clE5blJLTTdnek1NNndnQnIxTHEvQkcnLlBIUF9FT0wuJ2RiSVRiZTlVamxFSy80aVF0blR2a3RHUmNweVBZUlUrc01qY3h2V2xTMThhN1VmVXp1YnBYUkk1T2RvTENLWWonLlBIUF9FT0wuJ1BjbTdhYkNDZEg3YVVBQWtveDNlOVJvM1UxOXNRTzZGbWd4bDhPdGJPbzZvRHhuYWpLL3FNZUZ2TGNPU2R0YmknLlBIUF9FT0wuJ21meTF4bzhLOUp5ZlhDaTA1NDBVTzhCODRqR0tRWVNOUzVlUDcrQlhiOTF3VlVnQTJ4NWlsMkVCTFcwbU5WZjAnLlBIUF9FT0wuJ2tIQlp5TnNlZEtITC8xamgvWFBPdExDL2hSc2J2RU1RWkxWVm9OU1RsVEJOTjU0cEFyTUtSM3FkaGZGbGhFeGcnLlBIUF9FT0wuJ01QOE55NGFJSWIxaTlhYjJHdkxVT1I5M0lMSGs5N3lQd293WlM0UzBqQXM0aCtZa09JS1lUMTlFQmp6bC8xTUInLlBIUF9FT0wuJ2ZMR1F6NC9WTDlOeEp3cDVKaXZFdTV0ZlVOTzQ0WTBNVW9IakUxL1MrTDZVSVdBdWJIeTA2djVGanVxM092Q3QnLlBIUF9FT0wuJzl4L3NwdW1pbjRIa3FrRFkrR2FoRk8xbVhpUVh0RU42SDVtZFNweC9KQndJaS84ZDdDSXc2WW5xSkFNT001WnUnLlBIUF9FT0wuJ3d6eTRTR1hkcHY0WE1OZ1lCNVBsc216Z1FrREFTR3lUYnl4ZXFjYlBBa05USERpWjBzSmlHSzRqUm5BWTRGUWonLlBIUF9FT0wuJ05kRDRvZG9mencvQmk1QVl2QXo2ejI0SXFvbkk3emdqcGM5N3B1ZXF3djAxYVkrR204WEVSbnN5OFVJTFpudWUnLlBIUF9FT0wuJzRhekJBcWt2M2I5QTVMUTJKdG5EUEVFTlJqdENiZGF3ZkVYTmlidmNsNmRBa1lyTms4OHUyT0VocXZ0cC9hcHYnLlBIUF9FT0wuJ3dvZzJCWVo4aSt2RkhmeWl3dFBSV0RiMHpRTzR4d0lEQVFBQk1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFEZzMnLlBIUF9FT0wuJzFBaDh3VC94aklodFVUQUljRkd0Z04yMzIxYVY4cEl6OFZTSnUzQ3JiSkpEMDlFazZXVVFnVGJFcTBweHdoUW8nLlBIUF9FT0wuJ3Via3IyK0NKMkd3L0ZUZDBXRmV0N1Q1N2FGZzdxaDV4cmFFaEgyMWljSG1OQlVHN0VUVVhORWY4VGpiaFJFVlknLlBIUF9FT0wuJ2dGNmw4Ukk2cnJHdjB6bTVhd21jais0KzJPWFErT004OGRWN2NoTW4nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIF9fRElSX18uJy9SU0EvUEVNLzMyay1yc2EtZXhhbXBsZS1jZXJ0LnBlbScsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAgICAgJ24nID0+ICdxelBGc0ZJZjNjU2VzMjVEbG9WM3kzZDhnS01jWlZFX0VRXzZlX01abnlxRGJ1T0VQMzl5UXMzYXVuemJaUm9POFh3OGxMb0pOZHVpS0tzY283b2RJNzUza0J2ejFlTHlrZS1zV0JWWnR0Ym5ZeXo5QUUzWlhmQWI5ckhXMkF4Z0lxSE5zUU9zTEpTX2RvdUdad3hhd05kRTkwV000UUc4MGJEcGt4eEhmT2J0bVpJYlpvT0ZTZW9rREhBNWpva1FHeko2NXQ2QVJ0UU9JaHQ4NHBJbEFyOFJPMHZDVWlKMFI0VGRBZmZiZEl1a01jVmZTb1pCbFpKX3EteUJ0UG9xQjFObXIxeDFGcUN0UjgxTnJFdGRwN0NVSHk0eUxJc2tNekhUd0pMMjRkeDh6UFM5UkJJQXVSNkhPNnNvUXdRZ0tZNU5ZbXlhWkd1V0RyencwTG9yOV9qamN4M3g3TmxYRVVmZkd5VWRUX2JaNm93c2dkLVNwdm5icVhQWElmLXU1Skg3YWZTVXVhanl0SG5HVmlsUU9wRWcwNkIwRi1BdW1VRXg4dmRMUGN6Q3gwQ0VEMTFtaFJoVDFlUlFQSmx6eGdxQTIyU04xWXowUDU1UjhRYmZGWWNmbHBFdFpiSG1kdndNU2lwRW9FVXlJOGFBOXoyNjhvTlZubkFHaEczY09xazgtNEhPdnRxWjlMSWM4alVjUUx0V1gtUEphdjlFZVBuV3VWNnBGd3p2S2N3bDA5bTA4eElmSWg5RHZGVkp6M0Zrcy1YNmMxdFZvMlZhbGZ0bGo4Zm5senU5V2dvd25rd2hNNEtOMlVwY0hjZmY0Ry12OXpja2hjcFJPU3paMWF4NW1QT1VNRjZCMk9WYXdNaGYzbGk5QTlKRXBCRHhWdTItZ1pVNk5iaHZmSDFmNFBkTlBVbmxhc1B5bEhuNHF6NFM2X1YxZnV4aG8tMk9fVjcydzNWNUZEQmktbTJEOXZEVlF2SnR1b2lKeFVFeU9XYXhzZW51em9GbHEzak5Id20wU2lhYndWamFNeXJlNHFrdG1Ib3BMdUxYMml4TUUzcmJUdGFYTEFhbHktdDJYNm9TNG5GeWh3UDlmX1diSmI0WWhfUkR4a3NQajFoUl80bkg0M05UWWpaQmxMRE0wWVJiNHhSekZtQVRRT1VoUG91NkxTVWJsOFRsMno3V1lGemxjS2dId2tXUmFUR1VWOFN6X2gtX0lmZ1pEdkN0eXlMaHp2V09tZkpCaHNWMW5UYkRycjhEaXZaR0g1aHVCTkg4OHZfZ2JDVnczNmFBakg4Qm5tY0hRMEltVVV3WG9pQjFpV1NXQjN4MXhkWW5BeVFmNVJWMlBLODZ3VmM0RUJSeFc2TWVKSFdaci1rRmdIdGN3azJ5czhNZXdMOHhsS3MxUzY0QVBBV3RELVdzTEdFblVWTWZNNUV1V2pvUzlrQjRCSTREQzZNMHV5RGphQ3VGdTgwd01tV2Z4OUMzLVkyeDdsNUx3MEc0Z1JjVWstRjNPTnRLZnN4TXFBbVY2YVVWa1htZGtYNUxMYTEwNUNwSVZxZmxNNDBDUGw1bWxWR0VGbFRmOXUwemNseVEwXy1xV3Q3OFp6a3BvbFBqOVhLSGlrZFlBX0RLYnZ0Zmd0Z05DMDdHSXdCY3RvUXNPcktHT3hpZ2VXenJBd2ZTOVM1V3Q3aHZjczJSMFkwNHJYb2VTVFBiSFdMdW1zSllMeEMySFB0YW0zSXhRSnpDbGpJT0ZCNVNxaTlXTE81bF95am1VR1MyRnp5NURrdXlGdUMzbzc5ckItVnUwenBIUTVzSGRieVlrZnZpM1FaeDRqTHVqMmtpLTNfMVFqN1JmVmRkMXlXZXVkbkZVeTVRR2ZXaDMtVm9hSzlVSVoxRWVYNjJvd1hUR05PSm92bjl5TWR3YlhteTc1cXJrUFhhZEZRRzNsbnVxcV9VY2Q4WkFZSnZ3ZlFiNnVoVFN2MWtTRkNweHl5YVNCWWpMVTQ0UURGNkZSaF9RSExNQk0yRFZhc09UMGhzRjJVV3NJWFVuZW9KSGtfcVZaU1JtajVFRGFJcldBVUVaZkxfZ2Vpd2NXM19MM1k5aWFITWtCOTNmSE5zVkVwTG1UTy12TEhaSFlOMGMta0tOVkJ3XzQweEdaNVpnUEpsVDRKWlZ2Qkt1QjJrYTJPc1NMY1JYWnZ6WlpaVG5yUkhiXzlkbmdHa0ZwSTBnYzZnRnUyZDFtUElJRnA2SlM3QUo0X3NZS0U0eXh1R0c3SXNBNEVybk5CRUs5U3IxWFN1MF9LZmNJdjYzZG1fQXliRGcxdm1xTUxDbDVFaVA5T0lGc1dkSU00Mjk3MFBIOWg4Umk3S1VuMEQ1M1JTUlZrVjM4TlczMTJBMkpZQ0hmRWZiSXh5aWJFSXJzdXNpYjk4eDZCZWRoLTNCcHNXeWloMlhsRFQ2QUZ3SmREMGNjX1VmNTZWcXY5d2FVdHNTeC0xeEJ3bGlaMzVNS3EtSWZWNmhjTG5GZ0xoeHNxYWtWOGFGTEFFekk4VWxuZWQ2empSQUMyOGFhRE9aY0ZkS0VNRDB3SFBVVzgtOVVUUXhBZ3VnOG90RUlUV1NrS3VieVhiZG9mcFZhOVh3anExLWpMYjRleWxxZXkwUm9rS3JITzZCN0YzS3RVRjhac20wbUdFZzdudlVoakVCRkwzQXFrTGtlNU5iXzc4dXFiM3R6WkYzaU82Z2hFTmFyOXMxRFVJWXFOa2JNU2VoN3NtZ0VSX1BCVUIwTUdNcVJueDhxY3I1dDV5QkV1clo3cXE3LUxZb0pPb2M2VXdhUHJRTl9BRlJvdTR1Z2lScnhJcnZPd3JEUHI0eTJ6b2k5WEtuQkJ1WU1udDJBa0dWQ05JQTBXT0tnbWV4NHhfMk5yaTJKbFJpZUFQd05QZlc1UExreVBWUmZ3MGROemhnN2NzTWwxV2N0ZHcxSnBISmhnTXN3dWhZaFJXR3l6WVdFNFpVOGx2UVdxQTQyTU9LZlVpeEFWNExtRXpHejJlUlFTUEdXakxDODUtbWN4Zl92c3NtRC1tYnVKQWp6bExEenp3bGxyVERDUXJ0MThEZnRwQUFIaEQ1aEcySG1RSDlSRHpjUzNzbmlJeDRwMnp5cUJIVlFzV003NEJsUWpiT0RqZ0hSSGVyVGd4WWFObWg0S1JBMzhsbWI5b21yVWhJMlEwTGo1Q0Yyb2ZfQXBkN2ZvOHU2THBCcGRFdGlya25fNy05dlBQaUdlckNsVjZsU2pvTmlfSV9oSENuZUFxLTNLWnE3aE01WGxpSlB2VXJ3c19tMFg1bjZfZmF6ZGstZ09vaEV1RjBBcV8xSTU2MzNzUy1ER3JGeWFuMks3b2VvQkdRTjk5NC1rd2VUUjBsTGtvMTRuQzV3bnZpemJzdjdzRFVOSlRqTTdMTVlJcmhLRUlMVGpqR1E2V3VDa1loUXVNNFJBbng3NGpGSWNoVzhwUzF0RW5VY0lPeUJXZ0ZCOU0yemRiTm1KZzd2SDQzbW1YNDA4ak1ZVktzOUNRejJZN1Z1MzNTMGRTcDlzV3hNMUtVUkVGVnkxeFRiVmdLTnhMeE96WGlMT2ptX2I0RWlmQUhaaF9LVGYwUE9tNVJFU1UtVFNyTzI5eTVwdVRITC1QTHVPRTMwanJ4WGFLaFc1VXptUUxVTWhCR0k3Z2VZUDZmRTZReHlVaTBnRF90TGRNbXp4VGxaaU9Ya0U2SG5CUS0zQXI1NHVBLVJGVWhuelUtWFQzd20tLWVJTnN2cXlySEN5TFFsbU03MWFCWG5NbEg1ZzBOSmpkbTQyWFNlY1RvcFdmRkNmY05lMS11ZnBVdU1HR2cwQzNMeFZONWZrVG1CMl82Z2FpMEFIaDRkTmhlZkdrS0NaNU9jU050QV9VVUkxbktyX3dnUFRJNFgxY2F0TjlSRTltTVloT3QtSTVnT1ZSQ2loeERjVWNCbDJhcFVhRkstakhQczVyQUJxaHlrYmlfZE9TLXp5NDJJODZWY3U0Qi1fMEdObFJJUFJMWldGSWhOUnlfa2ZDT3E0a2I0U0s5RGpUdkhzYXE2WVdNb0w5SmszSmlxdkg0eXJNWjZULVhFRmRKOERHU2M0MWxvMVlKd2hGVXUwZUdiR0ZLeHlVQnJIdjFsOUJ5UHJxV2FpZXBuQkJzZGE0eThHM1NvaUNmbmR3a2J2TGVFNXlrWWd1clBwa1lYX2JhdTJQcXNvQWtpSl9HbWJpdEtwWEQ3MUM1UG16dnpMdnB4a2dDNmhRcS12NEw0V0xlbEFEdkJwZWlrWDlrMjNxaFI1SDNta3pOZU1aZ0h5b0Zpc3kxNjFjRGdPbGNnNjRnNkMyVXpKS2xiNUMxdE9sUXdNM2ZkbTdjakJKWE9qdXhnaThFd3g2b3Y5MGVlYXFJRWZGdm5VdTFfSUNfdEZ2ZTlQX1VzMjFBazUzdndTdGxIdWVZSHRlZEpzSGc4NEM1UHB0X3oxTEZSM0hoOG0xcE9ubGIza0p3NWVHcHZzWHdlWnJJSU4wY3Z3ei1OWl9vckl4alB4TGYyM3d5LXktbGhPYksxN0JmWDFnLXA3NTlYdFJTYUc0UmpfUWVkYXVYSEFBLVNLZ3Z3QU9ZM2tCdVdvOU94eDczSmJDMWtvdjU1VGtlY0hqMmxYT19vNDlPNUxDT2FfaDBuSElWYjNKSUdXb3QxMXNGXzZ6d056Rk0yV3RIRk51N0l1OWhsbHVtQzhydnozSEVieWx2U1BRWXpCUUt5OE5TeUM2VDl3Ykg2Y0FZWS12bDU5cTFKNER3QkgzREhLb01BZWM4SW5sbkJPX2VrSmE4U01kUU1aeG92MEJheEpjMFdfXzI5dzJTemEwY0JzTXNsZnBSSVdSV01iNGpOcHl2Q3lFVnhyR2Y3QWFrT2wwXzlQM0pDUTJvOGN1Zi1CR2dfel9pUTNhVE1ZVldpX3BXdXhuaGg1TmNoalFVOEMzZHh2bkVkMFRlOW1tRGx2WmgtTjlHVUxvMHRsekh6M1dabmlVcDdteFZRM25rZVMzMU0wTElJRjNTZXRTTWpYckdKXzRiekFuYjNFakg0NGVGdXZnT2lKOENoWExDbUhMdElwRmEwV1NDNllWcEJ4cWZQcnhrZS1EeUIyTHZ6XzQ2TVNRNGlLdkNGaGRZV3hCdHdYQ1pETjVEdDRYRnBNa25MX1ZudVZVOGE1X3JScXBFZWJ2X1ZGMXBCWnN2ZlRLNlVYRldBQXBGdkw0ZWJBcHVMc0ZJbkczdWs4OU4yU2JlblRUaUJHV1pXWmpzRUZzdmYzaVNGWmRRMmJnS1NMbUpJc3VYVjFtVVBrekdFcjhTc1BMREtoR05aQmV2dGthLUNmbnVrRVBuN2EzS19PNXNZY2NjRXRZd3gwVk5pQzZkV3U3Ql8tcGZsZmZhMW00cGJoZGc2S2Z5a0RPOV9qVV9MRTY5MmRoV1V6YnY5Nzd6R1VsT25tc0VNZXFtU1RvOVY1SHYwVXNFREdFam9lOXBpS2lkb1o4SmRBcTFXSXBTQmZXOU0yd3RrWkhiaTJubGFCbktKdVRhYU5zX25XamJHNHk3M2hFcUVxUmxRTUtyTHNKVTdyc215M2g2eDYtSl90WGZrS3BXdV9aX1BoUi1jYTJSVjRsZHdVTmVqQmhCb21nLTZiY1NxMWxIWEdUcHdjMHdTRG1JVWZFMlc2Wlp5c2FGcG1HcFRERmpURHFmZWVBd3dielNoSzdVYy1PbkpWTmlRNXcxS0FMSk5qWFVSU2ZJNjF2eVdSQk10RkhhQzd0Nml4d0RmdjZwcUVhMHhlRGU0eGY0WjFxZFgxWmZzNHhwZEF5elpXbXNsVXNYSVlEdGlUWHE2TllHam5DRVBZcW5lVkdPV2hQNnJlMFVmemVxcUI2cDZfTDQyVW9xRnJyalU3am5FV1JsejZneGRVOXFPSmdMWDN1NkNJWXRONmI0NHRwc3FBMjNmTkJpdWY0U3FvWWltYmQyWVZqWEZSRkZOWjJYcUotd0JxWWNENXhJZnVkTU42VzVjQUQ0cDVjVFExMV8tRXFJcDhyRHhpV09zLVBOOFNRVElFN1pZUTZuYS1sU0lUcGNoTnlicmVFOVNxaHpsdW9ZNzFETjhvUXVVSkhvbnJBVzVIaF9Wcm9HQnhwYk85WGROaHcwWHJDLVM5aUg5RERFVWVkYW5NMkR6blBVWnNISHV0RzhIMEs5QUV5V1JTMDFzQXdyRjczWkc1N3F5NUljaVlNSFp1RmJrWTBsendiRi12ZDE1amdOZlA0SlRtWkQyc1ZXd1ZnSTdRcDlUMmhkMHV1WkxfaHVIbDJiYVJDeUNfRFNJOWM2cDNxOVVkX3RCTl95Q2NOY1VWeDByUzZFR2Z6TThWWU9Hd3lpQlZCQWdWRGpCWGlLQnNVVldBM2xqZk90WWhMS0JESGtxaHZvUWFjelNJMmZLWDdMN2N3Z1hlQmRja29hTmhubzZtQ3BaQmFtdXlCWjFJeTZUbmd1UWk1OU1DQ0tkaWN6SXBmZXVtYlNERW92eTJJYlFtUHFsZF9KSTZXT3VmZ2xkaUlUdTNoWFI1S05hemFuMm1jM05yS3UxU0VYWnBkemI0d0paWjI2VV8xeEUyR0xNSnJ1MDV5Wm9WTkVrTjcyRGhhZ00xUjVvcUh3UHpSY24zYWhkWXZVekRvUDZVSEVwYTc2QTIzbHFhZlk3Rjk4bDY2aG1BblhYbEVLekVWd3RoWW94V0FOWXRWc3hzOU5rdE5KZE5NQjNPQ01uQ285QldrZWZtamxyek1KU2tCUF8xbWZ4TjJvM1cxdE1OWHBrNU9RUE8yMF9lV1BGM2lZaG9iU284ZmN4elh0dzliZzFCWHIwVEFEajBobF96NGp3OTN3VkdHTGxzQTNxWXN0YXkwSTl5SmdIQlptaHhjN1YxSnpOV2R3eElEbVJnQTVlQ20xRUxWQnhwSXVwOVdHWmxVczFyendxWHpJLTM3aTdsM2R3RmZDZl9pMmc4bS1nTlFqdU02WXFrU3otWEtjbi1zSkVnMVhTTWhvQjE1c2dZRTlVLTJPZS1fRUdMSzBkT1UyenlITzQwRjhnaHZoS1dwdUFjSVRYX1FuRU1yZW13c2lDbDBQRW5HWjk4Qlh6bFJ2ZDFNRk5jMFpVd3pOLXdUVnhzNGpOa3RlTmJwME1qSUtBNVk2RmlDRVg2a29OV1k5Y0xYU05nNFhHNElzV1JRcmZJbjJXV0Z6X25oemxhWk5tX05VTTFrbUtSUkVQbXN2UScsCiAgICAgICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICAgICAneDV0JyA9PiAnS0dBcEx5YkhXSm1Cd1pHZ0JrMDdBbFJEOW5VJywKICAgICAgICAgICAgICAgICAgICAneDV0IzI1NicgPT4gJ1lEMTJrNmtjNHh1aF81dkVITXl5T0ZwR3M2VnFUeWFLTWx4ZzBOdDJjckEnLAogICAgICAgICAgICAgICAgICAgICd4NWMnID0+IFsnTUlJUjJqQ0NFVU1DQWc0RU1BMEdDU3FHU0liM0RRRUJCUVVBTUlHYk1Rc3dDUVlEVlFRR0V3SktVREVPTUF3RycuUEhQX0VPTC4nQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRScuUEhQX0VPTC4nTVJnd0ZnWURWUVFMRXc5WFpXSkRaWEowSUZOMWNIQnZjblF4R0RBV0JnTlZCQU1URDBaeVlXNXJORVJFSUZkbCcuUEhQX0VPTC4nWWlCRFFURWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWMzVndjRzl5ZEVCbWNtRnVhelJrWkM1amIyMHdIaGNOTVRJeCcuUEhQX0VPTC4nTURFd01USXhOelE1V2hjTk1UY3hNREE1TVRJeE56UTVXakJLTVFzd0NRWURWUVFHREFKS1VERU9NQXdHQTFVRScuUEhQX0VPTC4nQ0F3RlZHOXJlVzh4RVRBUEJnTlZCQW9NQ0VaeVlXNXJORVJFTVJnd0ZnWURWUVFEREE5M2QzY3VaWGhoYlhCcycuUEhQX0VPTC4nWlM1amIyMHdnaEFpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElRRHdBd2doQUtBb0lRQVFDck04V3dVaC9keEo2eicuUEhQX0VPTC4nYmtPV2hYZkxkM3lBb3h4bFVUOFJEL3A3OHhtZktvTnU0NFEvZjNKQ3pkcTZmTnRsR2c3eGZEeVV1Z2sxMjZJbycuUEhQX0VPTC4ncXh5anVoMGp2bmVRRy9QVjR2S1I3NnhZRlZtMjF1ZGpMUDBBVGRsZDhCdjJzZGJZREdBaW9jMnhBNndzbEw5MicuUEhQX0VPTC4naTRabkRGckExMFQzUll6aEFielJzT21USEVkODV1MlpraHRtZzRWSjZpUU1jRG1PaVJBYk1ucm0zb0JHMUE0aScuUEhQX0VPTC4nRzN6aWtpVUN2eEU3UzhKU0luUkhoTjBCOTl0MGk2UXh4VjlLaGtHVmtuK3I3SUcwK2lvSFUyYXZYSFVXb0sxSCcuUEhQX0VPTC4nelUyc1MxMm5zSlFmTGpJc2l5UXpNZFBBa3ZiaDNIek05TDFFRWdDNUhvYzdxeWhEQkNBcGprMWliSnBrYTVZTycuUEhQX0VPTC4ndlBEUXVpdjMrT056SGZIczJWY1JSOThiSlIxUDl0bnFqQ3lCMzVLbStkdXBjOWNoLzY3a2tmdHA5SlM1cVBLMCcuUEhQX0VPTC4nZWNaV0tWQTZrU0RUb0hRWDRDNlpRVEh5OTBzOXpNTEhRSVFQWFdhRkdGUFY1RkE4bVhQR0NvRGJaSTNWalBRLycuUEhQX0VPTC4nbmxIeEJ0OFZoeCtXa1MxbHNlWjIvQXhLS2tTZ1JUSWp4b0QzUGJyeWcxV2VjQWFFYmR3NnFUejdnYzYrMnBuMCcuUEhQX0VPTC4nc2h6eU5SeEF1MVpmNDhscS8wUjQrZGE1WHFrWERPOHB6Q1hUMmJUekVoOGlIME84VlVuUGNXU3o1ZnB6VzFXaicuUEhQX0VPTC4nWlZxVisyV1B4K2VYTzcxYUNqQ2VUQ0V6Z28zWlNsd2R4OS9nYjYvM055U0Z5bEU1TE5uVnJIbVk4NVF3WG9IWScuUEhQX0VPTC4nNVZyQXlGL2VXTDBEMGtTa0VQRlc3YjZCbFRvMXVHOThmVi9nOTAwOVNlVnF3L0tVZWZpclBoTHI5WFYrN0dHaicuUEhQX0VPTC4nN1k3OVh2YkRkWGtVTUdMNmJZUDI4TlZDOG0yNmlJbkZRVEk1WnJHeDZlN09nV1dyZU0wZkNiUktKcHZCV05veicuUEhQX0VPTC4nS3Q3aXFTMlllaWt1NHRmYUxFd1RldHRPMXBjc0JxWEw2M1pmcWhMaWNYS0hBLzEvOVpzbHZoaUg5RVBHU3crUCcuUEhQX0VPTC4nV0ZIL2ljZmpjMU5pTmtHVXNNelJoRnZqRkhNV1lCTkE1U0UraTdvdEpSdVh4T1hiUHRaZ1hPVndxQWZDUlpGcCcuUEhQX0VPTC4nTVpSWHhMUCtINzhoK0JrTzhLM0xJdUhPOVk2WjhrR0d4WFdkTnNPdXZ3T0s5a1lmbUc0RTBmenkvK0JzSlhEZicuUEhQX0VPTC4ncG9DTWZ3R2Vad2REUWlaUlRCZWlJSFdKWkpZSGZIWEYxaWNESkIvbEZYWThyenJCVnpnUUZIRmJveDRrZFptdicuUEhQX0VPTC4nNlFXQWUxekNUYkt6d3g3QXZ6R1VxelZMcmdBOEJhMFA1YXdzWVNkUlV4OHprUzVhT2hMMlFIZ0VqZ01Mb3pTNycuUEhQX0VPTC4nSU9Ob0s0Vzd6VEF5WlovSDBMZjVqYkh1WGt2RFFiaUJGeFNUNFhjNDIwcCt6RXlvQ1pYcHBSV1JlWjJSZmtzdCcuUEhQX0VPTC4nclhUa0traFdwK1V6alFJK1htYVZVWVFXVk4vMjdUTnlYSkRULzZwYTN2eG5PU21pVStQMWNvZUtSMWdEOE1wdScuUEhQX0VPTC4nKzErQzJBMExUc1lqQUZ5MmhDdzZzb1k3R0tCNWJPc0RCOUwxTGxhM3VHOXl6WkhSalRpdGVoNUpNOXNkWXU2YScuUEhQX0VPTC4nd2xndkVMWWMrMXFiY2pGQW5NS1dNZzRVSGxLcUwxWXM3bVgvS09aUVpMWVhQTGtPUzdJVzRMZWp2MnNINVc3VCcuUEhQX0VPTC4nT2tkRG13ZDF2SmlSKytMZEJuSGlNdTZQYVNMN2YvVkNQdEY5VjEzWEpaNjUyY1ZUTGxBWjlhSGY1V2hvcjFRaCcuUEhQX0VPTC4nblVSNWZyYWpCZE1ZMDRtaStmM0l4M0J0ZWJMdm1xdVE5ZHAwVkFiZVdlNnFyOVJ4M3hrQmdtL0I5QnZxNkZOSycuUEhQX0VPTC4nL1dSSVVLbkhMSnBJRmlNdFRqaEFNWG9WR0g5QWNzd0V6WU5WcXc1UFNHd1haUmF3aGRTZDZna2VUK3BWbEpHYScuUEhQX0VPTC4nUGtRTm9pdFlCUVJsOHYrQjZMQnhiZjh2ZGoySm9jeVFIM2Q4YzJ4VVNrdVpNNzY4c2RrZGczUno2UW8xVUhELycuUEhQX0VPTC4nalRFWm5sbUE4bVZQZ2xsVzhFcTRIYVJyWTZ4SXR4RmRtL05sbGxPZXRFZHYvMTJlQWFRV2tqU0J6cUFXN1ozVycuUEhQX0VPTC4nWThnZ1dub2xMc0Fuait4Z29UakxHNFlic2l3RGdTdWMwRVFyMUt2VmRLN1Q4cDl3aS9yZDJiOERKc09EVythbycuUEhQX0VPTC4nd3NLWGtTSS8wNGdXeFowZ3pqYjN2UThmMkh4R0xzcFNmUVBuZEZKRldSWGZ3MWJmWFlEWWxnSWQ4UjlzakhLSicuUEhQX0VPTC4nc1FpdXk2eUp2M3pIb0Y1Mkg3Y0dteGJLS0haZVVOUG9BWEFsMFBSeHo5Ui9ucFdxLzNCcFMyeExIN1hFSENXSicuUEhQX0VPTC4nbmZrd3FyNGg5WHFGd3VjV0F1SEd5cHFSWHhvVXNBVE1qeFNXZDUzck9ORUFMYnhwb001bHdWMG9Rd1BUQWM5UicuUEhQX0VPTC4nYno3MVJOREVDQzZEeWkwUWhOWktRcTV2SmR0MmgrbFZyMWZDT3JYNk10dmg3S1dwN0xSR2lRcXNjN29Ic1hjcScuUEhQX0VPTC4nMVFYeG15YlNZWVNEdWU5U0dNUUVVdmNDcVF1UjdrMXYvdnk2cHZlM05rWGVJN3FDRVExcXYyelVOUWhpbzJScycuUEhQX0VPTC4neEo2SHV5YUFSSDg4RlFIUXdZeXBHZkh5cHl2bTNuSUVTNnRudXFydjR0aWdrNmh6cFRCbyt0QTM4QVZHaTdpNicuUEhQX0VPTC4nQ0pHdkVpdTg3Q3NNK3ZqTGJPaUwxY3FjRUc1Z3llM1lDUVpVSTBnRFJZNHFDWjdIakgvWTJ1TFltVkdKNEEvQScuUEhQX0VPTC4nMDk5Yms4dVRJOVZGL0RSMDNPR0R0eXd5WFZaeTEzRFVta2NtR0F5ekM2RmlGRlliTE5oWVRobFR5VzlCYW9EaicuUEhQX0VPTC4nWXc0cDlTTEVCWGd1WVRNYlBaNUZCSThaYU1zTHpuNlp6Ri8rK3l5WVA2WnU0a0NQT1VzUFBQQ1dXdE1NSkN1MycuUEhQX0VPTC4nWHdOKzJrQUFlRVBtRWJZZVpBZjFFUE54TGV5ZUlqSGluYlBLb0VkVkN4WXp2Z0dWQ05zNE9PQWRFZDZ0T0RGaCcuUEhQX0VPTC4nbzJhSGdwRURmeVdadjJpYXRTRWpaRFF1UGtJWGFoLzhDbDN0K2p5N291a0dsMFMyS3VTZi92NzI4OCtJWjZzSycuUEhQX0VPTC4nVlhxVktPZzJMOGorRWNLZDRDcjdjcG1ydUV6bGVXSWsrOVN2Q3orYlJmbWZyOTlyTjJUNkE2aUVTNFhRQ3IvVScuUEhQX0VPTC4nam5yZmV4TDRNYXNYSnFmWXJ1aDZnRVpBMzMzajZUQjVOSFNVdVNqWGljTG5DZStMTnV5L3V3TlEwbE9NenNzeCcuUEhQX0VPTC4nZ2l1RW9RZ3RPT01aRHBhNEtSaUZDNHpoRUNmSHZpTVVoeUZieWxMVzBTZFJ3ZzdJRmFBVUgwemJOMXMyWW1EdScuUEhQX0VPTC4nOGZqZWFaZmpUeU14aFVxejBKRFBaanRXN2ZkTFIxS24yeGJFelVwUkVRVlhMWEZOdFdBbzNFdkU3TmVJczZPYicuUEhQX0VPTC4nOXZnU0o4QWRtSDhwTi9RODZibEVSSlQ1TktzN2IzTG1tNU1jdjQ4dTQ0VGZTT3ZGZG9xRmJsVE9aQXRReUVFWScuUEhQX0VPTC4nanVCNWcvcDhUcERISlNMU0FQKzB0MHliUEZPVm1JNWVRVG9lY0ZEN2NDdm5pNEQ1RVZTR2ZOVDVkUGZDYjc1NCcuUEhQX0VPTC4nZzJ5K3JLc2NMSXRDV1l6dlZvRmVjeVVmbURRMG1OMmJqWmRKNXhPaWxaOFVKOXcxN1g2NStsUzR3WWFEUUxjdicuUEhQX0VPTC4nRlUzbCtST1lIYi9xQnFMUUFlSGgwMkY1OGFRb0puazV4STIwRDlSUWpXY3F2L0NBOU1qaGZWeHEwMzFFVDJZeCcuUEhQX0VPTC4naUU2MzRqbUE1VkVLS0hFTnhSd0dYWnFsUm9VcjZNYyt6bXNBR3FIS1J1TDkwNUw3UExqWWp6cFZ5N2dINy9RWScuUEhQX0VPTC4nMlZFZzlFdGxZVWlFMUhMK1I4STZyaVJ2aElyME9OTzhleHFycGhZeWd2MG1UY21LcThmaktzeG5wUDVjUVYwbicuUEhQX0VPTC4nd01aSnpqV1dqVmduQ0VWUzdSNFpzWVVySEpRR3NlL1dYMEhJK3VwWnFKNm1jRUd4MXJqTHdiZEtpSUorZDNDUicuUEhQX0VPTC4ndTh0NFRuS1JpQzZzK21SaGY5dHE3WStxeWdDU0luOGFadUswcWxjUHZVTGsrYk8vTXUrbkdTQUxxRkNyNi9ndicuUEhQX0VPTC4naFl0NlVBTzhHbDZLUmYyVGJlcUZIa2ZlYVRNMTR4bUFmS2dXS3pMWHJWd09BNlZ5RHJpRG9MWlRNa3FWdmtMVycuUEhQX0VPTC4nMDZWREF6ZDkyYnR5TUVsYzZPN0dDTHdUREhxaS8zUjU1cW9nUjhXK2RTN1g4Z0wrMFc5NzAvOVN6YlVDVG5lLycuUEhQX0VPTC4nQksyVWU1NWdlMTUwbXdlRHpnTGsrbTMvUFVzVkhjZUh5YldrNmVWdmVRbkRsNGFtK3hmQjVtc2dnM1J5L0RQNCcuUEhQX0VPTC4nMW4raXNqR00vRXQvYmZETDdMNldFNXNyWHNGOWZXRDZudm4xZTFGSm9iaEdQOUI1MXE1Y2NBRDVJcUMvQUE1aicuUEhQX0VPTC4nZVFHNWFqMDdISHZjbHNMV1NpL25sT1I1d2VQYVZjNytqajA3a3NJNXIrSFNjY2hWdmNrZ1phaTNYV3dYL3JQQScuUEhQX0VPTC4nM01VelphMGNVMjdzaTcyR1dXNllMeXUvUGNjUnZLVzlJOUJqTUZBckx3MUxJTHBQM0JzZnB3QmhqNitYbjJyVScuUEhQX0VPTC4nbmdQQUVmY01jcWd3QjV6d2llV2NFNzk2UWxyeEl4MUF4bkdpL1FGckVselJiLy9iM0RaTE5yUndHd3l5VitsRScuUEhQX0VPTC4naFpGWXh2aU0ybks4TElSWEdzWi9zQnFRNlhULzAvY2tKRGFqeHk1LzRFYUQvUCtKRGRwTXhoVmFMK2xhN0dlRycuUEhQX0VPTC4nSGsxeUdOQlR3TGQzRytjUjNSTjcyYVlPVzltSDQzMFpRdWpTMlhNZlBkWm1lSlNudWJGVkRlZVI1TGZVelFzZycuUEhQX0VPTC4nZ1hkSjYxSXlOZXNZbi9odk1DZHZjU01mamg0VzYrQTZJbndLRmNzS1ljdTBpa1ZyUlpJTHBoV2tIR3A4K3ZHUicuUEhQX0VPTC4nNzRQSUhZdS9QL2pveEpEaUlxOElXRjFoYkVHM0JjSmtNM2tPM2hjV2t5U2N2OVdlNVZUeHJuK3RHcWtSNXUvOScuUEhQX0VPTC4nVVhXa0ZteTk5TXJwUmNWWUFDa1c4dmg1c0NtNHV3VWljYmU2VHowM1pKdDZkTk9JRVpabFptT3dRV3k5L2VKSScuUEhQX0VPTC4nVmwxRFp1QXBJdVlraXk1ZFhXWlErVE1ZU3Z4S3c4c01xRVkxa0Y2KzJScjRKK2U2UVErZnRyY3I4N214aHh4dycuUEhQX0VPTC4nUzFqREhSVTJJTHAxYTdzSC82bCtWOTlyV2JpbHVGMkRvcC9LUU03MytOVDhzVHIzWjJGWlROdS8zdnZNWlNVNicuUEhQX0VPTC4nZWF3UXg2cVpKT2oxWGtlL1JTd1FNWVNPaDcybUlxSjJobndsMENyVllpbElGOWIwemJDMlJrZHVMYWVWb0djbycuUEhQX0VPTC4nbTVOcG8yeitkYU5zYmpMdmVFU29TcEdWQXdxc3V3bFR1dXliTGVIckhyNG4rMWQrUXFsYTc5bjgrRkg1eHJaRicuUEhQX0VPTC4nWGlWM0JRMTZNR0VHaWFEN3B0eEtyV1VkY1pPbkJ6VEJJT1loUjhUWmJwbG5LeG9XbVlhbE1NV05NT3A5NTRERCcuUEhQX0VPTC4nQnZOS0VydFJ6NDZjbFUySkRuRFVvQXNrMk5kUkZKOGpyVy9KWkVFeTBVZG9MdTNxTEhBTisvcW1vUnJURjRONycuUEhQX0VPTC4nakYvaG5XcDFmVmwrempHbDBETE5sYWF5VlN4Y2hnTzJKTmVybzFnYU9jSVE5aXFkNVVZNWFFL3F0N1JSL042cScuUEhQX0VPTC4nb0hxbnI4dmpaU2lvV3V1TlR1T2NSWkdYUHFERjFUMm80bUF0ZmU3b0loaTAzcHZqaTJteW9EYmQ4MEdLNS9oSycuUEhQX0VPTC4ncWhpS1p0M1poV05jVkVVVTFuWmVvbjdBR3Bod1BuRWgrNTB3M3BibHdBUGlubHhORFhYLzRTb2lueXNQR0pZNicuUEhQX0VPTC4nejQ4M3hKQk1nVHRsaERxZHI2VkloT2x5RTNKdXQ0VDFLcUhPVzZoanZVTTN5aEM1UWtlaWVzQmJrZUg5V3VnWScuUEhQX0VPTC4nSEdsczcxZDAySERSZXNMNUwySWYwTU1SUjUxcWN6WVBPYzlSbXdjZTYwYndmUXIwQVRKWkZMVFd3RENzWHZkaycuUEhQX0VPTC4nYm51ckxraHlKZ3dkbTRWdVJqU1hQQnNYNjkzWG1PQTE4L2dsT1prUGF4VmJCV0FqdENuMVBhRjNTNjVrditHNCcuUEhQX0VPTC4nZVhadHBFTElMOE5JajF6cW5lcjFSMyswRTMvSUp3MXhSWEhTdExvUVovTXp4Vmc0YkRLSUZVRUNCVU9NRmVJbycuUEhQX0VPTC4nR3hSVllEZVdOODYxaUVzb0VNZVNxRytoQnB6TklqWjhwZnN2dHpDQmQ0RjF5U2hvMkdlanFZS2xrRnFhN0lGbicuUEhQX0VPTC4nVWpMcE9lQzVDTG4wd0lJcDJKek1pbDk2Nlp0SU1TaS9MWWh0Q1krcVYzOGtqcFk2NStDVjJJaE83ZUZkSGtvMScuUEhQX0VPTC4nck5xZmFaemMyc3E3VklSZG1sM052akFsbG5icFQvWEVUWVlzd211N1RuSm1oVTBTUTN2WU9GcUF6VkhtaW9mQScuUEhQX0VPTC4nL05GeWZkcUYxaTlUTU9nL3BRY1NscnZvRGJlV3BwOWpzWDN5WHJxR1lDZGRlVVFyTVJYQzJGaWpGWUExaTFXeicuUEhQX0VPTC4nR3owMlMwMGwwMHdIYzRJeWNLajBGYVI1K2FPV3ZNd2xLUUUvL1daL0UzYWpkYlcwdzFlbVRrNUE4N2JUOTVZOCcuUEhQX0VPTC4nWGVKaUdodEtqeDl6SE5lM0QxdURVRmV2Uk1BT1BTR1gvUGlQRDNmQlVZWXVXd0RlcGl5MXJMUWozSW1BY0ZtYScuUEhQX0VPTC4nSEZ6dFhVbk0xWjNERWdPWkdBRGw0S2JVUXRVSEdraTZuMVlabVZTeld2UENwZk1qN2Z1THVYZDNBVjhKLytMYScuUEhQX0VPTC4nRHliNkExQ080enBpcVJMUDVjcHlmNndrU0RWZEl5R2dIWG15QmdUMVQ3WTU3NzhRWXNyUjA1VGJQSWM3alFYeScuUEhQX0VPTC4nQ0crRXBhbTRCd2hOZjlDY1F5dDZiQ3lJS1hROFNjWm4zd0ZmT1ZHOTNVd1UxelJsVERNMzdCTlhHemlNMlMxNCcuUEhQX0VPTC4nMXVuUXlNZ29EbGpvV0lJUmZxU2cxWmoxd3RkSTJEaGNiZ2l4WkZDdDhpZlpaWVhQK2VIT1ZwazJiODFReldTWScuUEhQX0VPTC4ncEZFUStheTlBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVRQSU5rLzE3SCtSTHo0NTlpQ1ZRQUdlcycuUEhQX0VPTC4nOGtjNXN4WWozQ2tNbFdyR01pQ3h2c2d1MmthazZkQ2EwZjNEZmlWdDU0RnJ5N3MwT2tsSGlabWlwb2lGNFJDdCcuUEhQX0VPTC4neUp3VVNBelJyWkZBYmtwRGc4b0l1NFVpL0J0MTNrWTd4T04rdTRtMElna0xaU0UrOEJTak1yZmpWdlZ4ZStxSCcuUEhQX0VPTC4nNWk3WC9pYlVURGpneWZkQThYST0nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIF9fRElSX18uJy9SU0EvREVSLzUxMmItcnNhLWV4YW1wbGUtY2VydC5kZXInLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICduJyA9PiAnbV94bWtIbUVRcnVyRV8wcmVfamVGUkxsOFpQakJvcDd1TEhobmlhN2xRR181ekR0WklVQzNSVnBxRFN3QnV3X05Ud2VHeXVQLW84QUc5OEh4cXhUQncnLAogICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJ0J4eTVUd3pJVVUwQ1FTUndqdWl5YUh2WDJkVScsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICdYdy0xRm1XQnF1WktFQndWZzdHLXZuVG9GS2tlZW9vVXVoNkRYWGoyNmVjJywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09ESXlNRFV5TmpVMFdoY05NVGN3T0RJeE1EVXlOalUwV2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZSTGwnLlBIUF9FT0wuJzhaUGpCb3A3dUxIaG5pYTdsUUcvNXpEdFpJVUMzUlZwcURTd0J1dy9OVHdlR3l1UCtvOEFHOThIeHF4VEJ3SUQnLlBIUF9FT0wuJ0FRQUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBQlMyVEx1QmVUUG1jYVRhVVcvTENCMk5ZT3k4R01kelIxbXgnLlBIUF9FT0wuJzhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnknLlBIUF9FT0wuJzJWZ3VLdjRTV2pSRm9Sa0lmSWxIWDBxVnZpTWhTbE55MmlvRkx5N0pjUFpiK3YzZnRER3l3VXFjQmlWRG9lYTAnLlBIUF9FT0wuJ0huK0dteFpBJ10sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBfX0RJUl9fLicvUlNBL0RFUi8xMDI0Yi1yc2EtZXhhbXBsZS1jZXJ0LmRlcicsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAgICAgJ24nID0+ICd4Z0VHdkhrLVVfUlkwajlsM01QN28tUzJhNnVmNFhhUkJodTF6dGRDSHo4dE1HOEtqNF9xSm1nc1NaUUQxN3NSY3RIR0JUVUpXcDRDTHRCd0NmMHpBR1Z6eVN3VWtjSFN1MV8ybVpfdzdOcjBUUUhLZVdyX2o4cHZYSDUzNERLRXZ1Z3IyMURBSGJpNGM2NTRlTFVMLUpXX3dKSllxSmg3cUhNM1czRmg3eXMnLAogICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJzRiSzQ1ZXdaMDBXay1hX3NocFR3MmNDcUpjOCcsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICc1RjVHVFBPeEJHQU9zVnl1WXpxVUJqcmkwUjJZRFRpRG93aVFiczZvR2dVJywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUNWakNDQWI4Q0FnMzdNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09ESXlNRFV5TnpJeldoY05NVGN3T0RJeE1EVXlOekl6V2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1ZQkJyeDVQbFAwV05JL1pkekQnLlBIUF9FT0wuJys2UGt0bXVybitGMmtRWWJ0YzdYUWg4L0xUQnZDbytQNmlab0xFbVVBOWU3RVhMUnhnVTFDVnFlQWk3UWNBbjknLlBIUF9FT0wuJ013QmxjOGtzRkpIQjBydGY5cG1mOE96YTlFMEJ5bmxxLzQvS2IxeCtkK0F5aEw3b0s5dFF3QjI0dUhPdWVIaTEnLlBIUF9FT0wuJ0MvaVZ2OENTV0tpWWU2aHpOMXR4WWU4ckFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBQVNQZGppZ0onLlBIUF9FT0wuJ2tYQ3FLV3BuWi9PYzc1RVVjTWk2SHp0YVc4YWJVTWxZWFBJZ2tWMkY3WWFuSE9CN0s0ZjdPT0xqaXo4RFRQRmYnLlBIUF9FT0wuJ2pDOVVldUVyaGFBL3p6V2k4ZXdNVEZaVy9Xc2hPcm0zZk52Y01yTUxLdEg1MzRKS3ZjZE1nNnFJZGpURklOSXInLlBIUF9FT0wuJ2V2bkFoZjBjd1VMYWVibitsTXM4UGRsN3kzNytzZmx1Vm9rPSddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL1JTQS9ERVIvMjA0OGItcnNhLWV4YW1wbGUtY2VydC5kZXInLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICduJyA9PiAndE1fUlhqTXA3QXZQcm5iMV9pM0ltY1o0ZWJrWS1BdlV1clRYbmdKU0JnbjBHSk5NMUhEUlFxQXBFNUp6VUhmMkJJbXNBeXpXOFFhcnJXekEyZFdtcThyTld0SldKbEhsU3dpS3I4d1pEeVUwa0xBcUtVRVBWZkZyazl1ZHM4emM3T3ZIVlJqWFFpWGVTVFVVTXBLY0hzWnA0eno3OUpyNC00dkY0QnQtX1U4bHVqX2xsbGVhSkhsSkZ5ZlhpVXRxTGcySFVka2pQUWFGVnZoWU1RN3VnWmw0YU0xdVJIN0oyb3hhZXh5X0pFQXBTTkVEbk9fY3JpcGQtUGRxeC1tOHhiQlo5cFg4RnN2WW5PM0RfQktRazNoYWRiUldnX3I4UVlUMlpIazBOUnlzZW9VT2MzaHlBZWNraVNXZTJuOWx2Sy1Ia3htTTIzVVZ0dUF3eHdqNFdRJywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICd5MTdlVUZlWlVZZU9MbWNUeFR2cE9Pc2pma0EnLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnQjRwbGJqWndTWnlaRzdBblJvSUZpdmU5d0ZfRVlzWUY4UGlWZ1htQmJOYycsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlDMmpDQ0FrTUNBZzM4TUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl3Jy5QSFBfRU9MLidPREl5TURVeU56UXhXaGNOTVRjd09ESXhNRFV5TnpReFdqQktNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMwejlGZU15bnNDOCt1Jy5QSFBfRU9MLidkdlgrTGNpWnhuaDV1Umo0QzlTNnROZWVBbElHQ2ZRWWswelVjTkZDb0NrVGtuTlFkL1lFaWF3RExOYnhCcXV0Jy5QSFBfRU9MLidiTURaMWFhcnlzMWEwbFltVWVWTENJcXZ6QmtQSlRTUXNDb3BRUTlWOFd1VDI1Mnp6TnpzNjhkVkdOZENKZDVKJy5QSFBfRU9MLidOUlF5a3B3ZXhtbmpQUHYwbXZqN2k4WGdHMzc5VHlXNlArV1dWNW9rZVVrWEo5ZUpTMm91RFlkUjJTTTlCb1ZXJy5QSFBfRU9MLicrRmd4RHU2Qm1YaG96VzVFZnNuYWpGcDdITDhrUUNsSTBRT2M3OXl1S2wzNDkyckg2YnpGc0ZuMmxmd1d5OWljJy5QSFBfRU9MLic3Y1A4RXBDVGVGcDF0RmFEK3Z4QmhQWmtlVFExSEt4NmhRNXplSElCNXlTSkpaN2FmMlc4cjRlVEdZemJkUlcyJy5QSFBfRU9MLic0RERIQ1BoWkFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBUU12K0JGdkdkTVZ6a1FhUTMvKzJub1Z6Jy5QSFBfRU9MLicvdUFLYnpwRUw4eFRjeFl5UDNsa09laDRGb3hpU1dxeTVwR0ZBTGRQT05vRHVZRnBMaGpKU1phRXd1dmpJL1RyJy5QSFBfRU9MLidyR2hMVjFwUkc5ZnJ3REZzaHFEMlZhajRFTkJDQmg2VXBlQm9wNSsyODV6UTRTSTdxNFU5b1NlYlVESml1T3g2Jy5QSFBfRU9MLicrdFo5S3lubXJiSnBUU2kwK0JNPSddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL1JTQS9ERVIvNDA5NmItcnNhLWV4YW1wbGUtY2VydC5kZXInLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICduJyA9PiAnc0wxaUV6aTNzazIwdFVQMUduS25pQ3lDdGVsQnk3MHNwaUpXMjRrLTVxUS1Fak1BZC1OOGFTSlZ6ZXVId3RHTmNwVS1peTNsLUVyZXdIQ2F4aUZkd0RKaVhMQTdEYzRLT2UteTZyVGI1enBDeDlCcUk0ckJSQ2tJa1JGLW9Eb0t2YlZrcXNHaERYSEV4TEFGN2xlZ0VOVWtfaHRlck5OSWpmZG9ZMV9WZjFldXJKMGNFN0NmNmVGa2FTMG5RSS1OdTlvWWpOZmFpSVBjNjRmZG50cTBNdXhQMUVvVnVJS1RxNFlObi1uM0FnWnZtbHlJR3Zxc1draTNJWEExTHoxNjZTTVUzZnpsa050MElieUJNNUJtejVRUVBDZXpjUFNnc21zVzJEQVJXOVl0SlFZOENpNDVuS0lvWWlPejFiWVFEcnZ3ZTlROW9TbkJZeXFYNy1BOVZHcHY5RmJwaXNJY0xvV1ZUWXk2dFFVZFJTa1NkUW9xQ3h1TUFrNjlDMVlMYjcxTW9SYTB2dHozVkVkRS1SNVFFRmp6TWtBeDRBcVd6aDF0TUhOSVc3alhqdjVVdk5pNDRuaGpSY1NwakFSUmZaYkRkczdBT2tNTjlsNUc5dnhCWmJWd3JhYmpzRmM3WFpPREE2NTJnMTh2Y3pHYnFoUjZiLVpWazJ3MWNBM2NoRURYSldKV3dCR3czcnhFS1A2d0RtUlpmZURMdXQ2d0lDNGozbVRlQ0hVdi1QS0stU21rR2dqbnRBN2dHLUJsalNFT05uR0VPVTdCQjFyZmhTRGdERXFYX1lUVDR3M3J0Ym4zLU5BenJiSXNobmxfVFZZcWlyYmJXaDZiM2U2MjlzN0dyRzNBQmxKZm56VUNZLUtpSmowZ2ZVNGFtYWowN3BCSERQemJXM2snLAogICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJ0lCTzYzODFyM1FXT09ibU5heEYzNkhCZ081TScsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICd5VldJYXRRbkJwYlU5bFVHWm1SbEdnMmJsZEd0SlBwcVFYZnEzTGhCcTNNJywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUQyakNDQTBNQ0FnMzlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09ESXlNRFV5T0RBd1doY05NVGN3T0RJeE1EVXlPREF3V2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3d2V0lUT0xleVRiUzEnLlBIUF9FT0wuJ1EvVWFjcWVJTElLMTZVSEx2U3ltSWxiYmlUN21wRDRTTXdCMzQzeHBJbFhONjRmQzBZMXlsVDZMTGVYNFN0N0EnLlBIUF9FT0wuJ2NKckdJVjNBTW1KY3NEc056Z281NzdMcXROdm5Pa0xIMEdvamlzRkVLUWlSRVg2Z09ncTl0V1Nxd2FFTmNjVEUnLlBIUF9FT0wuJ3NBWHVWNkFRMVNUK0cxNnMwMGlOOTJoalg5Vi9WNjZzblJ3VHNKL3A0V1JwTFNkQWo0MjcyaGlNMTlxSWc5enInLlBIUF9FT0wuJ2g5MmUyclF5N0UvVVNoVzRncE9yaGcyZjZmY0NCbSthWElnYStxeGFTTGNoY0RVdlBYcnBJeFRkL09XUTIzUWgnLlBIUF9FT0wuJ3ZJRXprR2JQbEJBOEo3Tnc5S0N5YXhiWU1CRmIxaTBsQmp3S0xqbWNvaWhpSTdQVnRoQU91L0I3MUQyaEtjRmonLlBIUF9FT0wuJ0twZnY0RDFVYW0vMFZ1bUt3aHd1aFpWTmpMcTFCUjFGS1JKMUNpb0xHNHdDVHIwTFZndHZ2VXloRnJTKzNQZFUnLlBIUF9FT0wuJ1IwVDVIbEFRV1BNeVFESGdDcGJPSFcwd2MwaGJ1TmVPL2xTODJMamllR05GeEttTUJGRjlsc04yenNBNlF3MzInLlBIUF9FT0wuJ1hrYjIvRUZsdFhDdHB1T3dWenRkazRNRHJuYURYeTl6TVp1cUZIcHY1bFdUYkRWd0RkeUVRTmNsWWxiQUViRGUnLlBIUF9FT0wuJ3ZFUW8vckFPWkZsOTRNdTYzckFnTGlQZVpONElkUy80OG9yNUthUWFDT2UwRHVBYjRHV05JUTQyY1lRNVRzRUgnLlBIUF9FT0wuJ1d0K0ZJT0FNU3BmOWhOUGpEZXUxdWZmNDBET3RzaXlHZVg5TlZpcUt0dHRhSHB2ZDdyYjJ6c2FzYmNBR1VsK2YnLlBIUF9FT0wuJ05RSmo0cUltUFNCOVRocVpxUFR1a0VjTS9OdGJlUUlEQVFBQk1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFJQWknLlBIUF9FT0wuJ2dVM015OGtZWW5pRHVLRVhTSm1iVkIrSzF1cEh4V0RBOFI2S01aR1hmYmU1QlJkOHM0MGNZNkpCWUw1MlRncWQnLlBIUF9FT0wuJ2w4ejVFazhkQzROTnBmcGNaYy90ZVQxV3FpTzJ3bnBHSGpnTUR1REwxbXhDWk5MNDIyakhwaVBXa1dwM0F1REknLlBIUF9FT0wuJ2M3dEwxUWpiZkFVSEFRWXdtSGtXZ1BQK1Qyd0F2MHBPdDM2R2dNQ00nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIF9fRElSX18uJy9SU0EvREVSLzgxOTJiLXJzYS1leGFtcGxlLWNlcnQuZGVyJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3E1bGNFd0c4clVmbEkxYUw2b21BYUY1UjFERmtDTWxsRmFRM0hVd2x3Q1dZTk55S3hGMUcyZS1QM1k2U0ZXeXAwc0ZmbURjdnVlYk9ZX0R3M0tsQzc1NmJRVU1FWEg2VGF1YllEY1hhS0R5cmRLZ0NTb3Vmamh3SGtOcFJ6M1Z4cGtMQURKUUlIZGlqZXMySk4zZGFHQVJ4U0pMY2pvU2FadnFfTEJDSUhUVERHRVNCWEpQNlJ0YmpBakdqdUxVZ21jdmtsMDI5WGw4eWxrcmNpYmpUelhtT29kM3Zpb1RuWDVhWk5UMWM3ZXZtc2t2aXhXRzFObEhPaFoxSGRYaVBITGpLeG5yNGxIbDlseHRUamtOU3NGLU56MGJZSENwV1o5dTk4bmtndkZBeE5VbWl3WDVuSElxbzM5QUs4WVZ1Vm1ER1l6WS1kUHREMVV0Q0JYZ2otUnlxMWNQVTY2SDdrRWZ2Ym4xa1pSRjBYY3hxSVVWRGxwYV9oNEFxN3I4S25RNm5WRjU5b004QXdzclJ1M2xsdmxSek5DYVJVaGFmWjZZVUhSMTlqXzZHcEFKdE9Xd3dWNW0ycUtzOUVoZkw5S3Z6OURxV2gzREJ0MEN1R0lEUzBOdUJBdDJfUm1OUUJQMXU3TDhwWVpfOWtWLVk3WU05b2NidVlwVWJUeTR2aW8zM1BsMndHOGlvemdQSWdPY2JuZTRWaDRUR3BlMGhiWGFMLWFfODRDVk9XWDRKeUx4eUJFV0dCNlBMZkg3NE55WHl2aDU3WDZDbjNQMFhyMnJTZ1BFZ0VFb3Z3NWk5cURlcXF6ZU8tR3ZVb3VoUWpaZ1VSUDVVU2pkMTIwSVBqVm9aUDhSUFJDQVBVQlFTVW1pMmR5SEFOUkkzeWRJaFRLT0VkWkNWdklsVk51MzN3Zk41NWtFZUxDWEJpRHZmdm96VWJDR3V1T2ticzVZejd2RThLOXhsVV9YbzJpY3B0WV91M1hNUFc2WUtSUDZsdkd0b3ZuOTI5NXZFTkhPSkRGQ1ZrY0o4MTl2SFZxSm5vaUdBZl9RWDBKNzROTG02Zm5XYm9INi01QmNJRGwxOHVCM3FFRkFsbmVSZmxJckMyWEJaanUtZFR1VGFIeTE0V3ZWSk5qVE1VQmdWUTRnYVMxWDJ3bUF6dHd2LVJrOG82ay1LSnVTWkRXVkVaeUgzTmFkZGtZU1ZPTk9Nekl1dUNsYmc0Y0VnTFAyY3h4cXo4SmRueVQyTk5mTWRHZnhQNE5kX1J2UHRURDlrVFZld2x1cnpZVmpvaThDQzZWaFYyVGdjcC1VdlQ2WjBZbmUtNjVkWGkzMVZScVFXRzhhZFdRM2djOU5QMW9YZkpxVnQyNmxkWEY5QVZmN1BjRmNtN3h6cjJtd1pLWS1ETWsxbTFoQnZVR2VnN0lhYjM0T0FCT1k2SjRBeFhpWHFLeDNKVjI0U0Z5ZGFTU2V2c3VsU3JtVUpVM2c4VFItV3dUaDA2WXA4RFpwbENVOU1FdmZ5VVNTaHRIRUQ3MmFuVlJnVmU4anc0N2s5VGF2Si1oUGlBcTBIVW1tS0dVZUt2cnFXTjRiTXBTaU1DbUhUa2NxU19kNERuNFpBSThXMERJbHVjOXNYQmFpVVVTSXQ2dDdnR05PWkdVeVotWk40R054VmxNYXpCNkNpZUdSaG9QZlJtWHc3d3EwazJSNUJVMVE4UFNqOGpyWjg4RGdkZkVObldDR3k2QXE0NTBPd2Z1ZkdhSFpEd0FVRDFrVW9SR0Jrekl4dmtXTFZkUXRtUDRpWlhPTFNhbnkwUnRQWkxHalNILXgwdlEnLAogICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJ1lWNmRTUTlzTlM3cmhOV2NqLU00WHVNbU9FNCcsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICdaTkVVc2NXd0p1MDNiUmluRFlkMEJBdXdpV0dHM29Eb2NlaFZNd1gyb1ZvJywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUYyakNDQlVNQ0FnMytNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09USTNNRFl3TnpRNVdoY05NVGN3T1RJMk1EWXdOelE1V2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z2dRaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJRUR3QXdnZ1FLQW9JRUFRQ3JtVndUQWJ5dFIrVWonLlBIUF9FT0wuJ1ZvdnFpWUJvWGxIVU1XUUl5V1VWcERjZFRDWEFKWmcwM0lyRVhVYlo3NC9kanBJVmJLblN3VitZTnkrNTVzNWonLlBIUF9FT0wuJzhQRGNxVUx2bnB0QlF3UmNmcE5xNXRnTnhkb29QS3QwcUFKS2k1K09IQWVRMmxIUGRYR21Rc0FNbEFnZDJLTjYnLlBIUF9FT0wuJ3pZazNkMW9ZQkhGSWt0eU9oSnBtK3I4c0VJZ2ROTU1ZUklGY2svcEcxdU1DTWFPNHRTQ1p5K1NYVGIxZVh6S1cnLlBIUF9FT0wuJ1N0eUp1TlBOZVk2aDNlK0toT2RmbHBrMVBWenQ2K2F5UytMRlliVTJVYzZGblVkMWVJOGN1TXJHZXZpVWVYMlgnLlBIUF9FT0wuJ0cxT09RMUt3WDQzUFJ0Z2NLbFpuMjczeWVTQzhVREUxU2FMQmZtY2NpcWpmMEFyeGhXNVdZTVpqTmo1MCswUFYnLlBIUF9FT0wuJ1MwSUZlQ1A1SEtyVnc5VHJvZnVRUis5dWZXUmxFWFJkekdvaFJVT1dscitIZ0NydXZ3cWREcWRVWG4yZ3p3REMnLlBIUF9FT0wuJ3l0RzdlV1crVkhNMEpwRlNGcDlucGhRZEhYMlAvb2FrQW0wNWJEQlhtYmFvcXowU0Y4djBxL1AwT3BhSGNNRzMnLlBIUF9FT0wuJ1FLNFlnTkxRMjRFQzNiOUdZMUFFL1c3c3Z5bGhuLzJSWDVqdGd6Mmh4dTVpbFJ0UExpK0tqZmMrWGJBYnlLak8nLlBIUF9FT0wuJ0E4aUE1eHVkN2hXSGhNYWw3U0Z0ZG92NXIvemdKVTVaZmduSXZISUVSWVlIbzh0OGZ2ZzNKZksrSG50Zm9LZmMnLlBIUF9FT0wuJy9SZXZhdEtBOFNBUVNpL0RtTDJvTjZxck40NzRhOVNpNkZDTm1CUkUvbFJLTjNYYlFnK05XaGsveEU5RUlBOVEnLlBIUF9FT0wuJ0ZCSlNhTFozSWNBMUVqZkowaUZNbzRSMWtKVzhpVlUyN2ZmQjgzbm1RUjRzSmNHSU85KytqTlJzSWE2NDZSdXonLlBIUF9FT0wuJ2xqUHU4VHdyM0dWVDllamFKeW0xais3ZGN3OWJwZ3BFL3FXOGEyaStmM2IzbThRMGM0a01VSldSd256WDI4ZFcnLlBIUF9FT0wuJ29tZWlJWUIvOUJmUW52ZzB1YnArZFp1Z2ZyN2tGd2dPWFh5NEhlb1FVQ1dkNUYrVWlzTFpjRm1PNzUxTzVOb2YnLlBIUF9FT0wuJ0xYaGE5VWsyTk14UUdCVkRpQnBMVmZiQ1lETzNDLzVHVHlqcVQ0b201SmtOWlVSbklmYzFwMTJSaEpVNDA0ek0nLlBIUF9FT0wuJ2k2NEtWdURod1NBcy9aekhHclB3bDJmSlBZMDE4eDBaL0UvZzEzOUc4KzFNUDJSTlY3Q1c2dk5oV09pTHdJTHAnLlBIUF9FT0wuJ1dGWFpPQnluNVM5UHBuUmlkNzdybDFlTGZWVkdwQllieHAxWkRlQnowMC9XaGQ4bXBXM2JxVjFjWDBCVi9zOXcnLlBIUF9FT0wuJ1Z5YnZIT3ZhYkJrcGo0TXlUV2JXRUc5UVo2RHNocHZmZzRBRTVqb25nREZlSmVvckhjbFhiaElYSjFwSko2K3knLlBIUF9FT0wuJzZWS3VaUWxUZUR4Tkg1YkJPSFRwaW53Tm1tVUpUMHdTOS9KUkpLRzBjUVB2WnFkVkdCVjd5UERqdVQxTnE4bjYnLlBIUF9FT0wuJ0UrSUNyUWRTYVlvWlI0cSt1cFkzaHN5bEtJd0tZZE9SeXBMOTNnT2Zoa0FqeGJRTWlXNXoyeGNGcUpSUklpM3EnLlBIUF9FT0wuJzN1QVkwNWtaVEpuNWszZ1kzRldVeHJNSG9LSjRaR0dnOTlHWmZEdkNyU1RaSGtGVFZEdzlLUHlPdG56d09CMTgnLlBIUF9FT0wuJ1EyZFlJYkxvQ3JqblE3Qis1OFpvZGtQQUJRUFdSU2hFWUdUTWpHK1JZdFYxQzJZL2lKbGM0dEpxZkxSRzA5a3MnLlBIUF9FT0wuJ2FOSWY3SFM5QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFpWGJ4UjBUK0M2TVQ3SmgvU2JESi8xR2QnLlBIUF9FT0wuJ3ZicXNraUttbUtuek9jWDF4MHVVSFk0ekhJaHgzTTBuZVlSci8vWE9oK0ZlU3dNMUpxQVB6dEh5M1NNUlh6ZlAnLlBIUF9FT0wuJ3h6bS9ud2JSd2RLOEMvZlB5N0grdU1WMW1LdW1lbThXU29PTU9veEZKK28ybkpneVZpd25FT3U5RWVqbEgxc2MnLlBIUF9FT0wuJ3VLUElvVENMVUNJblJSaHJJODQ9J10sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBfX0RJUl9fLicvUlNBL0RFUi8xNmstcnNhLWV4YW1wbGUtY2VydC5kZXInLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICduJyA9PiAndFMzYWVXV193emx5WHNETkZlQk9ORk5xN1c0bE5XRGpPVXNlTnh4LVI5QXNxTkpFV1pGemFUdEJJNENhbTlXZl8yQWxmUDZpM1JScEs3Nm9vWk9iS3dKbW0xUmVHY1A3Z2Y3Sm5PRFF2MFctbTl4ODVhX2Z3SGlJODZEaGZ5MVlOaDJ6ZzFETzFrTF9RLXNxS01PWjRnNnVVZlhHWGpTNTk2OHNLQ3VhM28tR0VyLTdHTTZ1dzh6Z3BEbVVSdHB1cEFGajNYMXFDZzZjamJsUHpNemNYZGpBQ1A0X3pKcExjLXNXcHFZN3BkTGEyNko1ZGdGR3BUS1dTN1hzOTZBbENQRHo0dVRSUkZLRFphck1GdHpwamhXaE5aeURHdVlGRnhOTDRjYTF0bS1yNEp5TC1YdUs5QlRYQzFXTlhwcXV0ekhOT2otdE85bkN0UlgwMlpTM2htbTFBOXhuZFRacGZRN2xQdVNBX2taRW9oa2pjR3l4dFMtbnVwOWtoeU1LR3d2aGcwTUpTNDNWT3VZU1Y2bXNrX3o0ZFozLU1DWFZsSk1UeExxV09TR0h4SEcwdkRKUUk1X0lYQ3drUUxyVlFJYnRfWDFaeWxVZGttbkttNFZ1Q0J0NEFIcUsxRjFqV3BOWExZY0ZZLVFXNDNjMklsbjd2MXVRRm1fODJDRkhUYW5yTk1CWU5heDJlZ1lwU1hwUFMwbmFGNk8xWThiTVBqUEJVMWphb0JBbGZpU2pDbUh4NU1PVGctUFU5bTFPbm5SNFhuT2REUjBXOHJVU1NfaVl6NFVjaXZvdV83X1hDVFZsZnVpZUFYVDA2OWliWHBHa1RFNThBZ0k2cGlWVll0YXh5b0FEYjN6cjBhMTFCcjBrUzNnS1JxeFRxNUd0Z1dUcHo3NVZyRnhYazhBVGZ3WkY0UGNPVlg5ZmtVUVN0QktZOU9HUnJ5c3dMSmJRMGxuejVaUjhRQUF3MUQyY0FvV1lveFVvbDV1cGpzcllyc0djN09sM05oUFB0b0UwVm54ZzQ5eFFTWjBoaGpocnlJZDA3YVozUUJyM05RMFhCb0doU052Ty1NN1p5ekRUTlNVUXVzUzVXeVpzWnB1dHdfMTJFNXk1NV9iYk1QcEtZYm54MGFHOTN3bWNuYTQ5alhvbzVaVU1vSl9CUUxhYXZHQzB1LUpUTFRfc3ViazV0S2gzb1ZnRFJldkh3WWVLMVU0TDRjZHpwT3pHOEpWcGNIeWNsb2ZFU2syNURuSGlROTJCZkIxRFItNllhZGZROGE0QlhySUZsa3REaG8xRW1oWHdXZFQtZGhPNEVSUHdmMkN4MDRpUDNPZFlDVV9UTnIzZ1ZkQjNmUUxQa2hWMUtfb2Q4eldyWDdvcUNHTGtZQ1BfR1V2bDg0ZEpvTWVxdWx5SU85SUh0VnBWSHpHbC1FNDhKb09ITjAwVUxub0h6V3p4VWVHdGRhNHR3bjlOUS1wdEVqeTl1MF84Ui15MlVxbkM2MzJ3RW1IcEh6RnFyT1NZaXhwNEdPX3pBaC1nbUloUEpIdW9IOTd2ZGNEUmpHR0ZQTzdrbU1JMHRCbXhrdDAzYWhZSXFKS2JQeW5IVkxoc1R1VTdUVllyZ1RYNkprQ1JfSWJ1ZFFUcVZkejhvWU82dE5xVnJVODlKSTk0XzVuZEpYMVdqbWYxTFBhOGMzMUlRb3ZCQjBlLU1sWi1yQmt5VEV0dE51STh4Q19fT3ljc0xoakFGeF9ibTBRZjJqZmcySUpkTG1EakdGSHYzUmxFZGxSbUpTeUxZX2xxS1Y0R0FoamlFSUVtZHVBS2J5Z2cySnFoYjZOS3pIcjF2eGhSY1dhc251aGdUT3VubEdzM3ZlenU5eHpfNEN2RUtSTVQ2dmlVM3R6cW1HcFQzekU3ZDB3OXpNd24yZVVsWDBqN3BLSWl6bnJia1cyRGZlNjNmOVg5YktZQXNPNXBjcWNmQUhxVmFIbDBpRlh5NVFvRnd3alN1V3d4S3loYVkzdGZZMnJ1ZkxYQ096UV9HN0JEb01SbnM4eDZuQ1ItNjRYdXZwLUV2QncwUzc5MEpfdTlaMlc5OHJyVzZjMWNmbjRjYjlCUnkzUmo2NGtXcWxBVVRSdTYtcXJYMlJONXl3aG9LZmlKREgzbTJxX010Z0RsUjNrZS01S3V4YVp3Zk0waHJjQ3BwVTVUSGJPd01lM1hvRFgtWmpELTNxLWlrTTh1ZXU0dVRxRGp0UXJUUWlvRkl4YS0zcHJiTlRzeEJFUlFGWndsSnR6MkdtTkhFQWpnVS1Pd2tNRE9iWUFHYy1aQVpyaXRYZTl2R3RHRnBkb3dNWjVrMEZUVUtTSXNlY1B4bi1uWmxHLV9xTUw4UzYzTlhsVTBSZGJ0WWFMd1F0ZUZ1WGxfYWNBdnV4T09uQjNuWnBwSnlJU3RQMHVPUEdoUm93WFNsVGhuMHlGRGh0NjVUTGx5MTcxSlZyZjRvRkJETzRRNkVJSjdKTWJSWENhRVdKbWVTTmVfazcxYzN1NGVsYlotQzJpNUphTzZiY3Raek8teFotQ1A3cmFRekhYTWxwQ2hZWHFtcERVNWJLMnlTQWJjREpEdmc1V2VSbVFzcVJ4c0ZuSTFFSzFKal9CS0hacU9Qel9xMlNZeXY2OXpQVHNwNV93OXo5WVdDYk9LUDFLSHlmOWk5bjZQNUczUWtDenZsVERBYmpSNm5ycnJudmEwUFowU2pPNE16RE9zSUFhOVM2dndSbld5RTIzdlZJNVJDdi1Ja0xaMDc1TFJrWEtjajJFVlByREkzTWIxcFV0Zkd1MUgxTTdtNlYwU09UbmFDd2ltSXozSnUybXdnblItMmxBQUpLTWQzdlVhTjFOZmJFRHVoWm9NWmZEcld6cU9xQThaMm95djZqSGhieTNEa25iVzRwbjh0Y2FQQ3ZTY24xd290T2VORkR2QWZPSXhpa0dFalV1WGotX2dWMl9kY0ZWSUFOc2VZcGRoQVMxdEpqVlg5SkJ3V2NqYkhuU2h5XzlZNGYxenpyU3d2NFViRzd4REVHUzFWYURVazVVd1RUZWVLUUt6Q2tkNm5ZWHhaWVJNWUREX0RjdUdpQ0c5WXZXbTlocnkxRGtmZHlDeDVQZThqOEtNR1V1RXRJd0xPSWZtSkRpQ21FOWZSQVk4NWY5VEFYeXhrTS1QMVNfVGNTY0tlU1lyeEx1YlgxRFR1T0dOREZLQjR4TmYwdmktbENGZ0xteDh0T3ItUlk3cXR6cndyZmNmN0ticG9wLUI1S3BBMlBobW9SVHRabDRrRjdSRGVoLVpuVXFjZnlRY0NJdl9IZXdpTU9tSjZpUUREak9XYnNNOHVFaGwzYWItRnpEWUdBZVQ1YkpzNEVKQXdFaHNrMjhzWHFuR3p3SkRVeHc0bWRMQ1loaXVJMFp3R09CVUl6WFEtS0hhSDg4UHdZdVFHTHdNLXM5dUNLcUp5Tzg0STZYUGU2Ym5xc0w5TldtUGhwdkZ4RVo3TXZGQ0MyWjdudUdzd1FLcEw5Ml9RT1MwTmliWnd6eEJEVVk3UW0zV3NIeEZ6WW03M0plblFKR0t6WlBQTHRqaElhcjdhZjJxYjhLSU5nV0dmSXZyeFIzOG9zTFQwVmcyOU0wRHVNYycsCiAgICAgICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICAgICAneDV0JyA9PiAnWENfczBxNGxxTmFsVEZVNnROV1JfU3prNWRrJywKICAgICAgICAgICAgICAgICAgICAneDV0IzI1NicgPT4gJzNuejJ3SUFvU2JmVkNtdnk5azE4YkNQeUlYYWNkM1lmSHJHcS1xZzNEVlknLAogICAgICAgICAgICAgICAgICAgICd4NWMnID0+IFsnTUlJSjJqQ0NDVU1DQWczL01BMEdDU3FHU0liM0RRRUJCUVVBTUlHYk1Rc3dDUVlEVlFRR0V3SktVREVPTUF3RycuUEhQX0VPTC4nQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRScuUEhQX0VPTC4nTVJnd0ZnWURWUVFMRXc5WFpXSkRaWEowSUZOMWNIQnZjblF4R0RBV0JnTlZCQU1URDBaeVlXNXJORVJFSUZkbCcuUEhQX0VPTC4nWWlCRFFURWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWMzVndjRzl5ZEVCbWNtRnVhelJrWkM1amIyMHdIaGNOTVRJdycuUEhQX0VPTC4nT0RJeU1EVXlPVEF5V2hjTk1UY3dPREl4TURVeU9UQXlXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRScuUEhQX0VPTC4nQ0F3RlZHOXJlVzh4RVRBUEJnTlZCQW9NQ0VaeVlXNXJORVJFTVJnd0ZnWURWUVFEREE5M2QzY3VaWGhoYlhCcycuUEhQX0VPTC4nWlM1amIyMHdnZ2dpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElJRHdBd2dnZ0tBb0lJQVFDMUxkcDVaYi9ET1hKZScuUEhQX0VPTC4nd00wVjRFNDBVMnJ0YmlVMVlPTTVTeDQzSEg1SDBDeW8wa1Jaa1hOcE8wRWpnSnFiMVovL1lDVjgvcUxkRkdrcicuUEhQX0VPTC4ndnFpaGs1c3JBbWFiVkY0WncvdUIvc21jNE5DL1JiNmIzSHpscjkvQWVJanpvT0YvTFZnMkhiT0RVTTdXUXY5RCcuUEhQX0VPTC4nNnlvb3c1bmlEcTVSOWNaZU5MbjNyeXdvSzVyZWo0WVN2N3NZenE3RHpPQ2tPWlJHMm02a0FXUGRmV29LRHB5TicuUEhQX0VPTC4ndVUvTXpOeGQyTUFJL2ovTW1rdHo2eGFtcGp1bDB0cmJvbmwyQVVhbE1wWkx0ZXozb0NVSThQUGk1TkZFVW9ObCcuUEhQX0VPTC4ncXN3VzNPbU9GYUUxbklNYTVnVVhFMHZoeHJXMmI2dmduSXY1ZTRyMEZOY0xWWTFlbXE2M01jMDZQNjA3MmNLMScuUEhQX0VPTC4nRmZUWmxMZUdhYlVEM0dkMU5tbDlEdVUrNUlEK1JrU2lHU053YkxHMUw2ZTZuMlNISXdvYkMrR0RRd2xMamRVNicuUEhQX0VPTC4nNWhKWHFheVQvUGgxbmY0d0pkV1VreFBFdXBZNUlZZkVjYlM4TWxBam44aGNMQ1JBdXRWQWh1MzlmVm5LVlIyUycuUEhQX0VPTC4nYWNxYmhXNElHM2dBZW9yVVhXTmFrMWN0aHdWajVCYmpkellpV2Z1L1c1QVdiL3pZSVVkTnFlczB3RmcxckhaNicuUEhQX0VPTC4nQmlsSmVrOUxTZG9YbzdWanhzdytNOEZUV05xZ0VDVitKS01LWWZIa3c1T0Q0OVQyYlU2ZWRIaGVjNTBOSFJieScuUEhQX0VPTC4ndFJKTCtKalBoUnlLK2k3L3Y5Y0pOV1YrNko0QmRQVHIySnRla2FSTVRud0NBanFtSlZWaTFySEtnQU52Zk92UicuUEhQX0VPTC4nclhVR3ZTUkxlQXBHckZPcmthMkJaT25QdmxXc1hGZVR3Qk4vQmtYZzl3NVZmMStSUkJLMEVwajA0Wkd2S3pBcycuUEhQX0VPTC4nbHREU1dmUGxsSHhBQUREVVBad0NoWmlqRlNpWG02bU95dGl1d1p6czZYYzJFOCsyZ1RSV2ZHRGozRkJKblNHRycuUEhQX0VPTC4nT0d2SWgzVHRwbmRBR3ZjMURSY0dnYUZJMjg3NHp0bkxNTk0xSlJDNnhMbGJKbXhtbTYzRC9YWVRuTG5uOXRzdycuUEhQX0VPTC4nK2twaHVmSFJvYjNmQ1p5ZHJqMk5laWpsbFF5Z244RkF0cHE4WUxTNzRsTXRQK3k1dVRtMHFIZWhXQU5GNjhmQicuUEhQX0VPTC4naDRyVlRndmh4M09rN01id2xXbHdmSnlXaDhSS1Ria09jZUpEM1lGOEhVTkg3cGhwMTlEeHJnRmVzZ1dXUzBPRycuUEhQX0VPTC4nalVTYUZmQloxUDUyRTdnUkUvQi9ZTEhUaUkvYzUxZ0pUOU0ydmVCVjBIZDlBcytTRlhVcitoM3pOYXRmdWlvSScuUEhQX0VPTC4nWXVSZ0kvOFpTK1h6aDBtZ3g2cTZYSWc3MGdlMVdsVWZNYVg0VGp3bWc0YzNUUlF1ZWdmTmJQRlI0YTExcmkzQycuUEhQX0VPTC4nZjAxRDZtMFNQTDI3VC94SDdMWlNxY0xyZmJBU1lla2ZNV3FzNUppTEduZ1k3L01DSDZDWWlFOGtlNmdmM3U5MScuUEhQX0VPTC4nd05HTVlZVTg3dVNZd2pTMEdiR1MzVGRxRmdpb2twcy9LY2RVdUd4TzVUdE5WaXVCTmZvbVFKSDhodTUxQk9wVicuUEhQX0VPTC4nM1B5aGc3cTAycFd0VHowa2ozai9tZDBsZlZhT1ovVXM5cnh6ZlVoQ2k4RUhSNzR5Vm42c0dUSk1TMjAyNGp6RScuUEhQX0VPTC4nTC84N0p5d3VHTUFYSDl1YlJCL2FOK0RZZ2wwdVlPTVlVZS9kR1VSMlZHWWxMSXRqK1dvcFhnWUNHT0lRZ1NaMicuUEhQX0VPTC4nNEFwdktDRFltcUZ2bzByTWV2Vy9HRkZ4WnF5ZTZHQk02NmVVYXplOTdPNzNIUC9nSzhRcEV4UHErSlRlM09xWScuUEhQX0VPTC4nYWxQZk1UdDNURDNNekNmWjVTVmZTUHVrb2lMT2V0dVJiWU45N3JkLzFmMXNwZ0N3N21seXB4OEFlcFZvZVhTSScuUEhQX0VPTC4nVmZMbENnWERDTks1YkRFcktGcGplMTlqYXU1OHRjSTdORDhic0VPZ3hHZXp6SHFjSkg3cmhlNituNFM4SERSTCcuUEhQX0VPTC4ndjNRbis3MW5aYjN5dXRicHpWeCtmaHh2MEZITGRHUHJpUmFxVUJSTkc3cjZxdGZaRTNuTENHZ3ArSWtNZmViYScuUEhQX0VPTC4ncjh5MkFPVkhlUjc3a3E3RnBuQjh6U0d0d0ttbFRsTWRzN0F4N2RlZ05mNW1NUDdlcjZLUXp5NTY3aTVPb09PMScuUEhQX0VPTC4nQ3ROQ0tnVWpGcjdlbXRzMU96RUVSRkFWbkNVbTNQWWFZMGNRQ09CVDQ3Q1F3TTV0Z0FaejVrQm11SzFkNzI4YScuUEhQX0VPTC4nMFlXbDJqQXhubVRRVk5RcElpeDV3L0dmNmRtVWI3K293dnhMcmMxZVZUUkYxdTFob3ZCQzE0VzVlWDlwd0MrNycuUEhQX0VPTC4nRTQ2Y0hlZG1ta25JaEswL1M0NDhhRkdqQmRLVk9HZlRJVU9HM3JsTXVYTFh2VWxXdC9pZ1VFTTdoRG9RZ25zaycuUEhQX0VPTC4neHRGY0pvUlltWjVJMTcrVHZWemU3aDZWdG40TGFMa2xvN3B0eTFuTTc3Rm40SS91dHBETWRjeVdrS0ZoZXFhaycuUEhQX0VPTC4nTlRsc3JiSklCdHdNa08rRGxaNUdaQ3lwSEd3V2NqVVFyVW1QOEVvZG1vNC9QK3JaSmpLL3IzTTlPeW5uL0QzUCcuUEhQX0VPTC4nMWhZSnM0by9Vb2ZKLzJMMmZvL2tiZENRTE8rVk1NQnVOSHFldXV1ZTlyUTluUktNN2d6TU02d2dCcjFMcS9CRycuUEhQX0VPTC4nZGJJVGJlOVVqbEVLLzRpUXRuVHZrdEdSY3B5UFlSVStzTWpjeHZXbFMxOGE3VWZVenVicFhSSTVPZG9MQ0tZaicuUEhQX0VPTC4nUGNtN2FiQ0NkSDdhVUFBa294M2U5Um8zVTE5c1FPNkZtZ3hsOE90Yk9vNm9EeG5haksvcU1lRnZMY09TZHRiaScuUEhQX0VPTC4nbWZ5MXhvOEs5SnlmWENpMDU0MFVPOEI4NGpHS1FZU05TNWVQNytCWGI5MXdWVWdBMng1aWwyRUJMVzBtTlZmMCcuUEhQX0VPTC4na0hCWnlOc2VkS0hMLzFqaC9YUE90TEMvaFJzYnZFTVFaTFZWb05TVGxUQk5ONTRwQXJNS1IzcWRoZkZsaEV4ZycuUEhQX0VPTC4nTVA4Tnk0YUlJYjFpOWFiMkd2TFVPUjkzSUxIazk3eVB3b3daUzRTMGpBczRoK1lrT0lLWVQxOUVCanpsLzFNQicuUEhQX0VPTC4nZkxHUXo0L1ZMOU54SndwNUppdkV1NXRmVU5PNDRZME1Vb0hqRTEvUytMNlVJV0F1Ykh5MDZ2NUZqdXEzT3ZDdCcuUEhQX0VPTC4nOXgvc3B1bWluNEhrcWtEWStHYWhGTzFtWGlRWHRFTjZINW1kU3B4L0pCd0lpLzhkN0NJdzZZbnFKQU1PTTVadScuUEhQX0VPTC4nd3p5NFNHWGRwdjRYTU5nWUI1UGxzbXpnUWtEQVNHeVRieXhlcWNiUEFrTlRIRGlaMHNKaUdLNGpSbkFZNEZRaicuUEhQX0VPTC4nTmRENG9kb2Z6dy9CaTVBWXZBejZ6MjRJcW9uSTd6Z2pwYzk3cHVlcXd2MDFhWStHbThYRVJuc3k4VUlMWm51ZScuUEhQX0VPTC4nNGF6QkFxa3YzYjlBNUxRMkp0bkRQRUVOUmp0Q2JkYXdmRVhOaWJ2Y2w2ZEFrWXJOazg4dTJPRWhxdnRwL2FwdicuUEhQX0VPTC4nd29nMkJZWjhpK3ZGSGZ5aXd0UFJXRGIwelFPNHh3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQURnMycuUEhQX0VPTC4nMUFoOHdUL3hqSWh0VVRBSWNGR3RnTjIzMjFhVjhwSXo4VlNKdTNDcmJKSkQwOUVrNldVUWdUYkVxMHB4d2hRbycuUEhQX0VPTC4ndWJrcjIrQ0oyR3cvRlRkMFdGZXQ3VDU3YUZnN3FoNXhyYUVoSDIxaWNIbU5CVUc3RVRVWE5FZjhUamJoUkVWWScuUEhQX0VPTC4nZ0Y2bDhSSTZyckd2MHptNWF3bWNqKzQrMk9YUStPTTg4ZFY3Y2hNbiddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL1JTQS9ERVIvMzJrLXJzYS1leGFtcGxlLWNlcnQuZGVyJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3F6UEZzRklmM2NTZXMyNURsb1YzeTNkOGdLTWNaVkVfRVFfNmVfTVpueXFEYnVPRVAzOXlRczNhdW56YlpSb084WHc4bExvSk5kdWlLS3NjbzdvZEk3NTNrQnZ6MWVMeWtlLXNXQlZadHRibll5ejlBRTNaWGZBYjlySFcyQXhnSXFITnNRT3NMSlNfZG91R1p3eGF3TmRFOTBXTTRRRzgwYkRwa3h4SGZPYnRtWkliWm9PRlNlb2tESEE1am9rUUd6SjY1dDZBUnRRT0lodDg0cElsQXI4Uk8wdkNVaUowUjRUZEFmZmJkSXVrTWNWZlNvWkJsWkpfcS15QnRQb3FCMU5tcjF4MUZxQ3RSODFOckV0ZHA3Q1VIeTR5TElza016SFR3SkwyNGR4OHpQUzlSQklBdVI2SE82c29Rd1FnS1k1TllteWFaR3VXRHJ6dzBMb3I5X2pqY3gzeDdObFhFVWZmR3lVZFRfYlo2b3dzZ2QtU3B2bmJxWFBYSWYtdTVKSDdhZlNVdWFqeXRIbkdWaWxRT3BFZzA2QjBGLUF1bVVFeDh2ZExQY3pDeDBDRUQxMW1oUmhUMWVSUVBKbHp4Z3FBMjJTTjFZejBQNTVSOFFiZkZZY2ZscEV0WmJIbWR2d01TaXBFb0VVeUk4YUE5ejI2OG9OVm5uQUdoRzNjT3FrOC00SE92dHFaOUxJYzhqVWNRTHRXWC1QSmF2OUVlUG5XdVY2cEZ3enZLY3dsMDltMDh4SWZJaDlEdkZWSnozRmtzLVg2YzF0Vm8yVmFsZnRsajhmbmx6dTlXZ293bmt3aE00S04yVXBjSGNmZjRHLXY5emNraGNwUk9TeloxYXg1bVBPVU1GNkIyT1Zhd01oZjNsaTlBOUpFcEJEeFZ1Mi1nWlU2TmJodmZIMWY0UGROUFVubGFzUHlsSG40cXo0UzZfVjFmdXhoby0yT19WNzJ3M1Y1RkRCaS1tMkQ5dkRWUXZKdHVvaUp4VUV5T1dheHNlbnV6b0ZscTNqTkh3bTBTaWFid1ZqYU15cmU0cWt0bUhvcEx1TFgyaXhNRTNyYlR0YVhMQWFseS10Mlg2b1M0bkZ5aHdQOWZfV2JKYjRZaF9SRHhrc1BqMWhSXzRuSDQzTlRZalpCbExETTBZUmI0eFJ6Rm1BVFFPVWhQb3U2TFNVYmw4VGwyejdXWUZ6bGNLZ0h3a1dSYVRHVVY4U3pfaC1fSWZnWkR2Q3R5eUxoenZXT21mSkJoc1YxblRiRHJyOERpdlpHSDVodUJOSDg4dl9nYkNWdzM2YUFqSDhCbm1jSFEwSW1VVXdYb2lCMWlXU1dCM3gxeGRZbkF5UWY1UlYyUEs4NndWYzRFQlJ4VzZNZUpIV1pyLWtGZ0h0Y3drMnlzOE1ld0w4eGxLczFTNjRBUEFXdEQtV3NMR0VuVVZNZk01RXVXam9TOWtCNEJJNERDNk0wdXlEamFDdUZ1ODB3TW1XZng5QzMtWTJ4N2w1THcwRzRnUmNVay1GM09OdEtmc3hNcUFtVjZhVVZrWG1ka1g1TExhMTA1Q3BJVnFmbE00MENQbDVtbFZHRUZsVGY5dTB6Y2x5UTBfLXFXdDc4WnprcG9sUGo5WEtIaWtkWUFfREtidnRmZ3RnTkMwN0dJd0JjdG9Rc09yS0dPeGlnZVd6ckF3ZlM5UzVXdDdodmNzMlIwWTA0clhvZVNUUGJIV0x1bXNKWUx4QzJIUHRhbTNJeFFKekNsaklPRkI1U3FpOVdMTzVsX3lqbVVHUzJGenk1RGt1eUZ1QzNvNzlyQi1WdTB6cEhRNXNIZGJ5WWtmdmkzUVp4NGpMdWoya2ktM18xUWo3UmZWZGQxeVdldWRuRlV5NVFHZldoMy1Wb2FLOVVJWjFFZVg2Mm93WFRHTk9Kb3ZuOXlNZHdiWG15NzVxcmtQWGFkRlFHM2xudXFxX1VjZDhaQVlKdndmUWI2dWhUU3Yxa1NGQ3B4eXlhU0JZakxVNDRRREY2RlJoX1FITE1CTTJEVmFzT1QwaHNGMlVXc0lYVW5lb0pIa19xVlpTUm1qNUVEYUlyV0FVRVpmTF9nZWl3Y1czX0wzWTlpYUhNa0I5M2ZITnNWRXBMbVRPLXZMSFpIWU4wYy1rS05WQndfNDB4R1o1WmdQSmxUNEpaVnZCS3VCMmthMk9zU0xjUlhadnpaWlpUbnJSSGJfOWRuZ0drRnBJMGdjNmdGdTJkMW1QSUlGcDZKUzdBSjRfc1lLRTR5eHVHRzdJc0E0RXJuTkJFSzlTcjFYU3UwX0tmY0l2NjNkbV9BeWJEZzF2bXFNTENsNUVpUDlPSUZzV2RJTTQyOTcwUEg5aDhSaTdLVW4wRDUzUlNSVmtWMzhOVzMxMkEySllDSGZFZmJJeHlpYkVJcnN1c2liOTh4NkJlZGgtM0Jwc1d5aWgyWGxEVDZBRndKZEQwY2NfVWY1NlZxdjl3YVV0c1N4LTF4QndsaVozNU1LcS1JZlY2aGNMbkZnTGh4c3Fha1Y4YUZMQUV6SThVbG5lZDZ6alJBQzI4YWFET1pjRmRLRU1EMHdIUFVXOC05VVRReEFndWc4b3RFSVRXU2tLdWJ5WGJkb2ZwVmE5WHdqcTEtakxiNGV5bHFleTBSb2tLckhPNkI3RjNLdFVGOFpzbTBtR0VnN252VWhqRUJGTDNBcWtMa2U1TmJfNzh1cWIzdHpaRjNpTzZnaEVOYXI5czFEVUlZcU5rYk1TZWg3c21nRVJfUEJVQjBNR01xUm54OHFjcjV0NXlCRXVyWjdxcTctTFlvSk9vYzZVd2FQclFOX0FGUm91NHVnaVJyeElydk93ckRQcjR5MnpvaTlYS25CQnVZTW50MkFrR1ZDTklBMFdPS2dtZXg0eF8yTnJpMkpsUmllQVB3TlBmVzVQTGt5UFZSZncwZE56aGc3Y3NNbDFXY3RkdzFKcEhKaGdNc3d1aFloUldHeXpZV0U0WlU4bHZRV3FBNDJNT0tmVWl4QVY0TG1Fekd6MmVSUVNQR1dqTEM4NS1tY3hmX3Zzc21ELW1idUpBanpsTER6endsbHJURENRcnQxOERmdHBBQUhoRDVoRzJIbVFIOVJEemNTM3NuaUl4NHAyenlxQkhWUXNXTTc0QmxRamJPRGpnSFJIZXJUZ3hZYU5taDRLUkEzOGxtYjlvbXJVaEkyUTBMajVDRjJvZl9BcGQ3Zm84dTZMcEJwZEV0aXJrbl83LTl2UFBpR2VyQ2xWNmxTam9OaV9JX2hIQ25lQXEtM0tacTdoTTVYbGlKUHZVcndzX20wWDVuNl9mYXpkay1nT29oRXVGMEFxXzFJNTYzM3NTLURHckZ5YW4ySzdvZW9CR1FOOTk0LWt3ZVRSMGxMa28xNG5DNXdudml6YnN2N3NEVU5KVGpNN0xNWUlyaEtFSUxUampHUTZXdUNrWWhRdU00UkFueDc0akZJY2hXOHBTMXRFblVjSU95QldnRkI5TTJ6ZGJObUpnN3ZINDNtbVg0MDhqTVlWS3M5Q1F6Mlk3VnUzM1MwZFNwOXNXeE0xS1VSRUZWeTF4VGJWZ0tOeEx4T3pYaUxPam1fYjRFaWZBSFpoX0tUZjBQT201UkVTVS1UU3JPMjl5NXB1VEhMLVBMdU9FMzBqcnhYYUtoVzVVem1RTFVNaEJHSTdnZVlQNmZFNlF4eVVpMGdEX3RMZE1tenhUbFppT1hrRTZIbkJRLTNBcjU0dUEtUkZVaG56VS1YVDN3bS0tZUlOc3ZxeXJIQ3lMUWxtTTcxYUJYbk1sSDVnME5KamRtNDJYU2VjVG9wV2ZGQ2ZjTmUxLXVmcFV1TUdHZzBDM0x4Vk41ZmtUbUIyXzZnYWkwQUhoNGROaGVmR2tLQ1o1T2NTTnRBX1VVSTFuS3Jfd2dQVEk0WDFjYXROOVJFOW1NWWhPdC1JNWdPVlJDaWh4RGNVY0JsMmFwVWFGSy1qSFBzNXJBQnFoeWtiaV9kT1Mtenk0Mkk4NlZjdTRCLV8wR05sUklQUkxaV0ZJaE5SeV9rZkNPcTRrYjRTSzlEalR2SHNhcTZZV01vTDlKazNKaXF2SDR5ck1aNlQtWEVGZEo4REdTYzQxbG8xWUp3aEZVdTBlR2JHRkt4eVVCckh2MWw5QnlQcnFXYWllcG5CQnNkYTR5OEczU29pQ2ZuZHdrYnZMZUU1eWtZZ3VyUHBrWVhfYmF1MlBxc29Ba2lKX0dtYml0S3BYRDcxQzVQbXp2ekx2cHhrZ0M2aFFxLXY0TDRXTGVsQUR2QnBlaWtYOWsyM3FoUjVIM21rek5lTVpnSHlvRmlzeTE2MWNEZ09sY2c2NGc2QzJVekpLbGI1QzF0T2xRd00zZmRtN2NqQkpYT2p1eGdpOEV3eDZvdjkwZWVhcUlFZkZ2blV1MV9JQ190RnZlOVBfVXMyMUFrNTN2d1N0bEh1ZVlIdGVkSnNIZzg0QzVQcHRfejFMRlIzSGg4bTFwT25sYjNrSnc1ZUdwdnNYd2VacklJTjBjdnd6LU5aX29ySXhqUHhMZjIzd3kteS1saE9iSzE3QmZYMWctcDc1OVh0UlNhRzRSal9RZWRhdVhIQUEtU0tndndBT1kza0J1V285T3h4NzNKYkMxa292NTVUa2VjSGoybFhPX280OU81TENPYV9oMG5ISVZiM0pJR1dvdDExc0ZfNnp3TnpGTTJXdEhGTnU3SXU5aGxsdW1DOHJ2ejNIRWJ5bHZTUFFZekJRS3k4TlN5QzZUOXdiSDZjQVlZLXZsNTlxMUo0RHdCSDNESEtvTUFlYzhJbmxuQk9fZWtKYThTTWRRTVp4b3YwQmF4SmMwV19fMjl3MlN6YTBjQnNNc2xmcFJJV1JXTWI0ak5weXZDeUVWeHJHZjdBYWtPbDBfOVAzSkNRMm84Y3VmLUJHZ196X2lRM2FUTVlWV2lfcFd1eG5oaDVOY2hqUVU4QzNkeHZuRWQwVGU5bW1EbHZaaC1OOUdVTG8wdGx6SHozV1puaVVwN214VlEzbmtlUzMxTTBMSUlGM1NldFNNalhyR0pfNGJ6QW5iM0VqSDQ0ZUZ1dmdPaUo4Q2hYTENtSEx0SXBGYTBXU0M2WVZwQnhxZlByeGtlLUR5QjJMdnpfNDZNU1E0aUt2Q0ZoZFlXeEJ0d1hDWkRONUR0NFhGcE1rbkxfVm51VlU4YTVfclJxcEVlYnZfVkYxcEJac3ZmVEs2VVhGV0FBcEZ2TDRlYkFwdUxzRkluRzN1azg5TjJTYmVuVFRpQkdXWldaanNFRnN2ZjNpU0ZaZFEyYmdLU0xtSklzdVhWMW1VUGt6R0VyOFNzUExES2hHTlpCZXZ0a2EtQ2ZudWtFUG43YTNLX081c1ljY2NFdFl3eDBWTmlDNmRXdTdCXy1wZmxmZmExbTRwYmhkZzZLZnlrRE85X2pVX0xFNjkyZGhXVXpidjk3N3pHVWxPbm1zRU1lcW1TVG85VjVIdjBVc0VER0Vqb2U5cGlLaWRvWjhKZEFxMVdJcFNCZlc5TTJ3dGtaSGJpMm5sYUJuS0p1VGFhTnNfbldqYkc0eTczaEVxRXFSbFFNS3JMc0pVN3JzbXkzaDZ4Ni1KX3RYZmtLcFd1X1pfUGhSLWNhMlJWNGxkd1VOZWpCaEJvbWctNmJjU3ExbEhYR1Rwd2Mwd1NEbUlVZkUyVzZaWnlzYUZwbUdwVERGalREcWZlZUF3d2J6U2hLN1VjLU9uSlZOaVE1dzFLQUxKTmpYVVJTZkk2MXZ5V1JCTXRGSGFDN3Q2aXh3RGZ2NnBxRWEweGVEZTR4ZjRaMXFkWDFaZnM0eHBkQXl6Wldtc2xVc1hJWUR0aVRYcTZOWUdqbkNFUFlxbmVWR09XaFA2cmUwVWZ6ZXFxQjZwNl9MNDJVb3FGcnJqVTdqbkVXUmx6Nmd4ZFU5cU9KZ0xYM3U2Q0lZdE42YjQ0dHBzcUEyM2ZOQml1ZjRTcW9ZaW1iZDJZVmpYRlJGRk5aMlhxSi13QnFZY0Q1eElmdWRNTjZXNWNBRDRwNWNUUTExXy1FcUlwOHJEeGlXT3MtUE44U1FUSUU3WllRNm5hLWxTSVRwY2hOeWJyZUU5U3Foemx1b1k3MUROOG9RdVVKSG9uckFXNUhoX1Zyb0dCeHBiTzlYZE5odzBYckMtUzlpSDlEREVVZWRhbk0yRHpuUFVac0hIdXRHOEgwSzlBRXlXUlMwMXNBd3JGNzNaRzU3cXk1SWNpWU1IWnVGYmtZMGx6d2JGLXZkMTVqZ05mUDRKVG1aRDJzVld3VmdJN1FwOVQyaGQwdXVaTF9odUhsMmJhUkN5Q19EU0k5YzZwM3E5VWRfdEJOX3lDY05jVVZ4MHJTNkVHZnpNOFZZT0d3eWlCVkJBZ1ZEakJYaUtCc1VWV0EzbGpmT3RZaExLQkRIa3Fodm9RYWN6U0kyZktYN0w3Y3dnWGVCZGNrb2FOaG5vNm1DcFpCYW11eUJaMUl5NlRuZ3VRaTU5TUNDS2RpY3pJcGZldW1iU0RFb3Z5MkliUW1QcWxkX0pJNldPdWZnbGRpSVR1M2hYUjVLTmF6YW4ybWMzTnJLdTFTRVhacGR6YjR3SlpaMjZVXzF4RTJHTE1KcnUwNXlab1ZORWtONzJEaGFnTTFSNW9xSHdQelJjbjNhaGRZdlV6RG9QNlVIRXBhNzZBMjNscWFmWTdGOThsNjZobUFuWFhsRUt6RVZ3dGhZb3hXQU5ZdFZzeHM5Tmt0TkpkTk1CM09DTW5DbzlCV2tlZm1qbHJ6TUpTa0JQXzFtZnhOMm8zVzF0TU5YcGs1T1FQTzIwX2VXUEYzaVlob2JTbzhmY3h6WHR3OWJnMUJYcjBUQURqMGhsX3o0anc5M3dWR0dMbHNBM3FZc3RheTBJOXlKZ0hCWm1oeGM3VjFKek5XZHd4SURtUmdBNWVDbTFFTFZCeHBJdXA5V0dabFVzMXJ6d3FYekktMzdpN2wzZHdGZkNmX2kyZzhtLWdOUWp1TTZZcWtTei1YS2NuLXNKRWcxWFNNaG9CMTVzZ1lFOVUtMk9lLV9FR0xLMGRPVTJ6eUhPNDBGOGdodmhLV3B1QWNJVFhfUW5FTXJlbXdzaUNsMFBFbkdaOThCWHpsUnZkMU1GTmMwWlV3ek4td1RWeHM0ak5rdGVOYnAwTWpJS0E1WTZGaUNFWDZrb05XWTljTFhTTmc0WEc0SXNXUlFyZkluMldXRnpfbmh6bGFaTm1fTlVNMWttS1JSRVBtc3ZRJywKICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICdLR0FwTHliSFdKbUJ3WkdnQmswN0FsUkQ5blUnLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnWUQxMms2a2M0eHVoXzV2RUhNeXlPRnBHczZWcVR5YUtNbHhnME50MmNyQScsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlSMmpDQ0VVTUNBZzRFTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHJy5QSFBfRU9MLidBMVVFQ0JNRlZHOXJlVzh4RURBT0JnTlZCQWNUQjBOb2RXOHRhM1V4RVRBUEJnTlZCQW9UQ0VaeVlXNXJORVJFJy5QSFBfRU9MLidNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsJy5QSFBfRU9MLidZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIwd0hoY05NVEl4Jy5QSFBfRU9MLidNREV3TVRJeE56UTVXaGNOTVRjeE1EQTVNVEl4TnpRNVdqQktNUXN3Q1FZRFZRUUdEQUpLVURFT01Bd0dBMVVFJy5QSFBfRU9MLidDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzJy5QSFBfRU9MLidaUzVqYjIwd2doQWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SVFEd0F3Z2hBS0FvSVFBUUNyTThXd1VoL2R4SjZ6Jy5QSFBfRU9MLidia09XaFhmTGQzeUFveHhsVVQ4UkQvcDc4eG1mS29OdTQ0US9mM0pDemRxNmZOdGxHZzd4ZkR5VXVnazEyNklvJy5QSFBfRU9MLidxeHlqdWgwanZuZVFHL1BWNHZLUjc2eFlGVm0yMXVkakxQMEFUZGxkOEJ2MnNkYllER0Fpb2MyeEE2d3NsTDkyJy5QSFBfRU9MLidpNFpuREZyQTEwVDNSWXpoQWJ6UnNPbVRIRWQ4NXUyWmtodG1nNFZKNmlRTWNEbU9pUkFiTW5ybTNvQkcxQTRpJy5QSFBfRU9MLidHM3ppa2lVQ3Z4RTdTOEpTSW5SSGhOMEI5OXQwaTZReHhWOUtoa0dWa24rcjdJRzAraW9IVTJhdlhIVVdvSzFIJy5QSFBfRU9MLid6VTJzUzEybnNKUWZMaklzaXlRek1kUEFrdmJoM0h6TTlMMUVFZ0M1SG9jN3F5aERCQ0FwamsxaWJKcGthNVlPJy5QSFBfRU9MLid2UERRdWl2MytPTnpIZkhzMlZjUlI5OGJKUjFQOXRucWpDeUIzNUttK2R1cGM5Y2gvNjdra2Z0cDlKUzVxUEswJy5QSFBfRU9MLidlY1pXS1ZBNmtTRFRvSFFYNEM2WlFUSHk5MHM5ek1MSFFJUVBYV2FGR0ZQVjVGQThtWFBHQ29EYlpJM1ZqUFEvJy5QSFBfRU9MLidubEh4QnQ4Vmh4K1drUzFsc2VaMi9BeEtLa1NnUlRJanhvRDNQYnJ5ZzFXZWNBYUViZHc2cVR6N2djNisycG4wJy5QSFBfRU9MLidzaHp5TlJ4QXUxWmY0OGxxLzBSNCtkYTVYcWtYRE84cHpDWFQyYlR6RWg4aUgwTzhWVW5QY1dTejVmcHpXMVdqJy5QSFBfRU9MLidaVnFWKzJXUHgrZVhPNzFhQ2pDZVRDRXpnbzNaU2x3ZHg5L2diNi8zTnlTRnlsRTVMTm5WckhtWTg1UXdYb0hZJy5QSFBfRU9MLic1VnJBeUYvZVdMMEQwa1NrRVBGVzdiNkJsVG8xdUc5OGZWL2c5MDA5U2VWcXcvS1VlZmlyUGhMcjlYVis3R0dqJy5QSFBfRU9MLic3WTc5WHZiRGRYa1VNR0w2YllQMjhOVkM4bTI2aUluRlFUSTVackd4NmU3T2dXV3JlTTBmQ2JSS0pwdkJXTm96Jy5QSFBfRU9MLidLdDdpcVMyWWVpa3U0dGZhTEV3VGV0dE8xcGNzQnFYTDYzWmZxaExpY1hLSEEvMS85WnNsdmhpSDlFUEdTdytQJy5QSFBfRU9MLidXRkgvaWNmamMxTmlOa0dVc016UmhGdmpGSE1XWUJOQTVTRStpN290SlJ1WHhPWGJQdFpnWE9Wd3FBZkNSWkZwJy5QSFBfRU9MLidNWlJYeExQK0g3OGgrQmtPOEszTEl1SE85WTZaOGtHR3hYV2ROc091dndPSzlrWWZtRzRFMGZ6eS8rQnNKWERmJy5QSFBfRU9MLidwb0NNZndHZVp3ZERRaVpSVEJlaUlIV0paSllIZkhYRjFpY0RKQi9sRlhZOHJ6ckJWemdRRkhGYm94NGtkWm12Jy5QSFBfRU9MLic2UVdBZTF6Q1RiS3p3eDdBdnpHVXF6VkxyZ0E4QmEwUDVhd3NZU2RSVXg4emtTNWFPaEwyUUhnRWpnTUxvelM3Jy5QSFBfRU9MLidJT05vSzRXN3pUQXlaWi9IMExmNWpiSHVYa3ZEUWJpQkZ4U1Q0WGM0MjBwK3pFeW9DWlhwcFJXUmVaMlJma3N0Jy5QSFBfRU9MLidyWFRrS2toV3ArVXpqUUkrWG1hVlVZUVdWTi8yN1ROeVhKRFQvNnBhM3Z4bk9TbWlVK1AxY29lS1IxZ0Q4TXB1Jy5QSFBfRU9MLicrMStDMkEwTFRzWWpBRnkyaEN3NnNvWTdHS0I1Yk9zREI5TDFMbGEzdUc5eXpaSFJqVGl0ZWg1Sk05c2RZdTZhJy5QSFBfRU9MLid3bGd2RUxZYysxcWJjakZBbk1LV01nNFVIbEtxTDFZczdtWC9LT1pRWkxZWFBMa09TN0lXNExlanYyc0g1VzdUJy5QSFBfRU9MLidPa2REbXdkMXZKaVIrK0xkQm5IaU11NlBhU0w3Zi9WQ1B0RjlWMTNYSlo2NTJjVlRMbEFaOWFIZjVXaG9yMVFoJy5QSFBfRU9MLiduVVI1ZnJhakJkTVkwNG1pK2YzSXgzQnRlYkx2bXF1UTlkcDBWQWJlV2U2cXI5UngzeGtCZ20vQjlCdnE2Rk5LJy5QSFBfRU9MLicvV1JJVUtuSExKcElGaU10VGpoQU1Yb1ZHSDlBY3N3RXpZTlZxdzVQU0d3WFpSYXdoZFNkNmdrZVQrcFZsSkdhJy5QSFBfRU9MLidQa1FOb2l0WUJRUmw4ditCNkxCeGJmOHZkajJKb2N5UUgzZDhjMnhVU2t1Wk03NjhzZGtkZzNSejZRbzFVSEQvJy5QSFBfRU9MLidqVEVabmxtQThtVlBnbGxXOEVxNEhhUnJZNnhJdHhGZG0vTmxsbE9ldEVkdi8xMmVBYVFXa2pTQnpxQVc3WjNXJy5QSFBfRU9MLidZOGdnV25vbExzQW5qK3hnb1RqTEc0WWJzaXdEZ1N1YzBFUXIxS3ZWZEs3VDhwOXdpL3JkMmI4REpzT0RXK2FvJy5QSFBfRU9MLid3c0tYa1NJLzA0Z1d4WjBnempiM3ZROGYySHhHTHNwU2ZRUG5kRkpGV1JYZncxYmZYWURZbGdJZDhSOXNqSEtKJy5QSFBfRU9MLidzUWl1eTZ5SnYzekhvRjUySDdjR214YktLSFplVU5Qb0FYQWwwUFJ4ejlSL25wV3EvM0JwUzJ4TEg3WEVIQ1dKJy5QSFBfRU9MLiduZmt3cXI0aDlYcUZ3dWNXQXVIR3lwcVJYeG9Vc0FUTWp4U1dkNTNyT05FQUxieHBvTTVsd1Ywb1F3UFRBYzlSJy5QSFBfRU9MLidiejcxUk5ERUNDNkR5aTBRaE5aS1FxNXZKZHQyaCtsVnIxZkNPclg2TXR2aDdLV3A3TFJHaVFxc2M3b0hzWGNxJy5QSFBfRU9MLicxUVh4bXliU1lZU0R1ZTlTR01RRVV2Y0NxUXVSN2sxdi92eTZwdmUzTmtYZUk3cUNFUTFxdjJ6VU5RaGlvMlJzJy5QSFBfRU9MLid4SjZIdXlhQVJIODhGUUhRd1l5cEdmSHlweXZtM25JRVM2dG51cXJ2NHRpZ2s2aHpwVEJvK3RBMzhBVkdpN2k2Jy5QSFBfRU9MLidDSkd2RWl1ODdDc00rdmpMYk9pTDFjcWNFRzVneWUzWUNRWlVJMGdEUlk0cUNaN0hqSC9ZMnVMWW1WR0o0QS9BJy5QSFBfRU9MLicwOTliazh1VEk5VkYvRFIwM09HRHR5d3lYVlp5MTNEVW1rY21HQXl6QzZGaUZGWWJMTmhZVGhsVHlXOUJhb0RqJy5QSFBfRU9MLidZdzRwOVNMRUJYZ3VZVE1iUFo1RkJJOFphTXNMem42WnpGLysreXlZUDZadTRrQ1BPVXNQUFBDV1d0TU1KQ3UzJy5QSFBfRU9MLidYd04rMmtBQWVFUG1FYlllWkFmMUVQTnhMZXllSWpIaW5iUEtvRWRWQ3hZenZnR1ZDTnM0T09BZEVkNnRPREZoJy5QSFBfRU9MLidvMmFIZ3BFRGZ5V1p2MmlhdFNFalpEUXVQa0lYYWgvOENsM3Qrank3b3VrR2wwUzJLdVNmL3Y3Mjg4K0laNnNLJy5QSFBfRU9MLidWWHFWS09nMkw4aitFY0tkNENyN2NwbXJ1RXpsZVdJays5U3ZDeitiUmZtZnI5OXJOMlQ2QTZpRVM0WFFDci9VJy5QSFBfRU9MLidqbnJmZXhMNE1hc1hKcWZZcnVoNmdFWkEzMzNqNlRCNU5IU1V1U2pYaWNMbkNlK0xOdXkvdXdOUTBsT016c3N4Jy5QSFBfRU9MLidnaXVFb1FndE9PTVpEcGE0S1JpRkM0emhFQ2ZIdmlNVWh5RmJ5bExXMFNkUndnN0lGYUFVSDB6Yk4xczJZbUR1Jy5QSFBfRU9MLic4ZmplYVpmalR5TXhoVXF6MEpEUFpqdFc3ZmRMUjFLbjJ4YkV6VXBSRVFWWExYRk50V0FvM0V2RTdOZUlzNk9iJy5QSFBfRU9MLic5dmdTSjhBZG1IOHBOL1E4NmJsRVJKVDVOS3M3YjNMbW01TWN2NDh1NDRUZlNPdkZkb3FGYmxUT1pBdFF5RUVZJy5QSFBfRU9MLidqdUI1Zy9wOFRwREhKU0xTQVArMHQweWJQRk9WbUk1ZVFUb2VjRkQ3Y0N2bmk0RDVFVlNHZk5UNWRQZkNiNzU0Jy5QSFBfRU9MLidnMnkrcktzY0xJdENXWXp2Vm9GZWN5VWZtRFEwbU4yYmpaZEo1eE9pbFo4VUo5dzE3WDY1K2xTNHdZYURRTGN2Jy5QSFBfRU9MLidGVTNsK1JPWUhiL3FCcUxRQWVIaDAyRjU4YVFvSm5rNXhJMjBEOVJRaldjcXYvQ0E5TWpoZlZ4cTAzMUVUMll4Jy5QSFBfRU9MLidpRTYzNGptQTVWRUtLSEVOeFJ3R1hacWxSb1VyNk1jK3ptc0FHcUhLUnVMOTA1TDdQTGpZanpwVnk3Z0g3L1FZJy5QSFBfRU9MLicyVkVnOUV0bFlVaUUxSEwrUjhJNnJpUnZoSXIwT05POGV4cXJwaFl5Z3YwbVRjbUtxOGZqS3N4bnBQNWNRVjBuJy5QSFBfRU9MLid3TVpKempXV2pWZ25DRVZTN1I0WnNZVXJISlFHc2UvV1gwSEkrdXBacUo2bWNFR3gxcmpMd2JkS2lJSitkM0NSJy5QSFBfRU9MLid1OHQ0VG5LUmlDNnMrbVJoZjl0cTdZK3F5Z0NTSW44YVp1SzBxbGNQdlVMaytiTy9NdStuR1NBTHFGQ3I2L2d2Jy5QSFBfRU9MLidoWXQ2VUFPOEdsNktSZjJUYmVxRkhrZmVhVE0xNHhtQWZLZ1dLekxYclZ3T0E2VnlEcmlEb0xaVE1rcVZ2a0xXJy5QSFBfRU9MLicwNlZEQXpkOTJidHlNRWxjNk83R0NMd1RESHFpLzNSNTVxb2dSOFcrZFM3WDhnTCswVzk3MC85U3piVUNUbmUvJy5QSFBfRU9MLidCSzJVZTU1Z2UxNTBtd2VEemdMayttMy9QVXNWSGNlSHliV2s2ZVZ2ZVFuRGw0YW0reGZCNW1zZ2czUnkvRFA0Jy5QSFBfRU9MLicxbitpc2pHTS9FdC9iZkRMN0w2V0U1c3JYc0Y5ZldENm52bjFlMUZKb2JoR1A5QjUxcTVjY0FENUlxQy9BQTVqJy5QSFBfRU9MLidlUUc1YWowN0hIdmNsc0xXU2kvbmxPUjV3ZVBhVmM3K2pqMDdrc0k1citIU2NjaFZ2Y2tnWmFpM1hXd1gvclBBJy5QSFBfRU9MLiczTVV6WmEwY1UyN3NpNzJHV1c2WUx5dS9QY2NSdktXOUk5QmpNRkFyTHcxTElMcFAzQnNmcHdCaGo2K1huMnJVJy5QSFBfRU9MLiduZ1BBRWZjTWNxZ3dCNXp3aWVXY0U3OTZRbHJ4SXgxQXhuR2kvUUZyRWx6UmIvL2IzRFpMTnJSd0d3eXlWK2xFJy5QSFBfRU9MLidoWkZZeHZpTTJuSzhMSVJYR3NaL3NCcVE2WFQvMC9ja0pEYWp4eTUvNEVhRC9QK0pEZHBNeGhWYUwrbGE3R2VHJy5QSFBfRU9MLidIazF5R05CVHdMZDNHK2NSM1JONzJhWU9XOW1INDMwWlF1alMyWE1mUGRabWVKU251YkZWRGVlUjVMZlV6UXNnJy5QSFBfRU9MLidnWGRKNjFJeU5lc1luL2h2TUNkdmNTTWZqaDRXNitBNklud0tGY3NLWWN1MGlrVnJSWklMcGhXa0hHcDgrdkdSJy5QSFBfRU9MLic3NFBJSFl1L1Avam94SkRpSXE4SVdGMWhiRUczQmNKa00za08zaGNXa3lTY3Y5V2U1VlR4cm4rdEdxa1I1dS85Jy5QSFBfRU9MLidVWFdrRm15OTlNcnBSY1ZZQUNrVzh2aDVzQ200dXdVaWNiZTZUejAzWkp0NmROT0lFWlpsWm1Pd1FXeTkvZUpJJy5QSFBfRU9MLidWbDFEWnVBcEl1WWtpeTVkWFdaUStUTVlTdnhLdzhzTXFFWTFrRjYrMlJyNEorZTZRUStmdHJjcjg3bXhoeHh3Jy5QSFBfRU9MLidTMWpESFJVMklMcDFhN3NILzZsK1Y5OXJXYmlsdUYyRG9wL0tRTTczK05UOHNUcjNaMkZaVE51LzN2dk1aU1U2Jy5QSFBfRU9MLidlYXdReDZxWkpPajFYa2UvUlN3UU1ZU09oNzJtSXFKMmhud2wwQ3JWWWlsSUY5YjB6YkMyUmtkdUxhZVZvR2NvJy5QSFBfRU9MLidtNU5wbzJ6K2RhTnNiakx2ZUVTb1NwR1ZBd3FzdXdsVHV1eWJMZUhySHI0bisxZCtRcWxhNzluOCtGSDV4clpGJy5QSFBfRU9MLidYaVYzQlExNk1HRUdpYUQ3cHR4S3JXVWRjWk9uQnpUQklPWWhSOFRaYnBsbkt4b1dtWWFsTU1XTk1PcDk1NEREJy5QSFBfRU9MLidCdk5LRXJ0Uno0NmNsVTJKRG5EVW9Bc2syTmRSRko4anJXL0paRUV5MFVkb0x1M3FMSEFOKy9xbW9SclRGNE43Jy5QSFBfRU9MLidqRi9obldwMWZWbCt6akdsMERMTmxhYXlWU3hjaGdPMkpOZXJvMWdhT2NJUTlpcWQ1VVk1YUUvcXQ3UlIvTjZxJy5QSFBfRU9MLidvSHFucjh2alpTaW9XdXVOVHVPY1JaR1hQcURGMVQybzRtQXRmZTdvSWhpMDNwdmppMm15b0RiZDgwR0s1L2hLJy5QSFBfRU9MLidxaGlLWnQzWmhXTmNWRVVVMW5aZW9uN0FHcGh3UG5FaCs1MHczcGJsd0FQaW5seE5EWFgvNFNvaW55c1BHSlk2Jy5QSFBfRU9MLid6NDgzeEpCTWdUdGxoRHFkcjZWSWhPbHlFM0p1dDRUMUtxSE9XNmhqdlVNM3loQzVRa2VpZXNCYmtlSDlXdWdZJy5QSFBfRU9MLidIR2xzNzFkMDJIRFJlc0w1TDJJZjBNTVJSNTFxY3pZUE9jOVJtd2NlNjBid2ZRcjBBVEpaRkxUV3dEQ3NYdmRrJy5QSFBfRU9MLidibnVyTGtoeUpnd2RtNFZ1UmpTWFBCc1g2OTNYbU9BMTgvZ2xPWmtQYXhWYkJXQWp0Q24xUGFGM1M2NWt2K0c0Jy5QSFBfRU9MLidlWFp0cEVMSUw4TklqMXpxbmVyMVIzKzBFMy9JSncxeFJYSFN0TG9RWi9NenhWZzRiREtJRlVFQ0JVT01GZUlvJy5QSFBfRU9MLidHeFJWWURlV044NjFpRXNvRU1lU3FHK2hCcHpOSWpaOHBmc3Z0ekNCZDRGMXlTaG8yR2VqcVlLbGtGcWE3SUZuJy5QSFBfRU9MLidVakxwT2VDNUNMbjB3SUlwMkp6TWlsOTY2WnRJTVNpL0xZaHRDWStxVjM4a2pwWTY1K0NWMkloTzdlRmRIa28xJy5QSFBfRU9MLidyTnFmYVp6YzJzcTdWSVJkbWwzTnZqQWxsbmJwVC9YRVRZWXN3bXU3VG5KbWhVMFNRM3ZZT0ZxQXpWSG1pb2ZBJy5QSFBfRU9MLicvTkZ5ZmRxRjFpOVRNT2cvcFFjU2xydm9EYmVXcHA5anNYM3lYcnFHWUNkZGVVUXJNUlhDMkZpakZZQTFpMVd6Jy5QSFBfRU9MLidHejAyUzAwbDAwd0hjNEl5Y0tqMEZhUjUrYU9Xdk13bEtRRS8vV1ovRTNhamRiVzB3MWVtVGs1QTg3YlQ5NVk4Jy5QSFBfRU9MLidYZUppR2h0S2p4OXpITmUzRDF1RFVGZXZSTUFPUFNHWC9QaVBEM2ZCVVlZdVd3RGVwaXkxckxRajNJbUFjRm1hJy5QSFBfRU9MLidIRnp0WFVuTTFaM0RFZ09aR0FEbDRLYlVRdFVIR2tpNm4xWVptVlN6V3ZQQ3BmTWo3ZnVMdVhkM0FWOEovK0xhJy5QSFBfRU9MLidEeWI2QTFDTzR6cGlxUkxQNWNweWY2d2tTRFZkSXlHZ0hYbXlCZ1QxVDdZNTc3OFFZc3JSMDVUYlBJYzdqUVh5Jy5QSFBfRU9MLidDRytFcGFtNEJ3aE5mOUNjUXl0NmJDeUlLWFE4U2NabjN3RmZPVkc5M1V3VTF6UmxURE0zN0JOWEd6aU0yUzE0Jy5QSFBfRU9MLicxdW5ReU1nb0Rsam9XSUlSZnFTZzFaajF3dGRJMkRoY2JnaXhaRkN0OGlmWlpZWFArZUhPVnBrMmI4MVF6V1NZJy5QSFBfRU9MLidwRkVRK2F5OUFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBVFBJTmsvMTdIK1JMejQ1OWlDVlFBR2VzJy5QSFBfRU9MLic4a2M1c3hZajNDa01sV3JHTWlDeHZzZ3Uya2FrNmRDYTBmM0RmaVZ0NTRGcnk3czBPa2xIaVptaXBvaUY0UkN0Jy5QSFBfRU9MLid5SndVU0F6UnJaRkFia3BEZzhvSXU0VWkvQnQxM2tZN3hPTit1NG0wSWdrTFpTRSs4QlNqTXJmalZ2VnhlK3FIJy5QSFBfRU9MLic1aTdYL2liVVREamd5ZmRBOFhJPSddLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgX19ESVJfXy4nL0VDL1BFTS9wcmltZTI1NnYxLWNlcnQucGVtJywKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAgICAgJ3gnID0+ICd4RXNyXzU1YXFnRlhkcmJSTnoxX1dTTkk4VWFTVXhDa2Eya0dFTjFiWHNJJywKICAgICAgICAgICAgICAgICAgICAneScgPT4gJ1NNNDVIc3I5ZG5VUjZPeC1UcG1OdjJmYkRYNENvVm8tM3BhdE1VcFhBTkEnLAogICAgICAgICAgICAgICAgICAgICd4NXQnID0+ICdabm5hUURzc0NLSlFaTHA2enlIc3NJWk9hN28nLAogICAgICAgICAgICAgICAgICAgICd4NXQjMjU2JyA9PiAndjdWbG9rS1RHTDNhblJrOE5sMFZjcVZDOXU1ajJGYjV0ZGxRbnRVZ0RUNCcsCiAgICAgICAgICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlCMGpDQ0FYZWdBd0lCQWdJSkFLMm8xa1E1SndwVU1Bb0dDQ3FHU000OUJBTUNNRVV4Q3pBSkJnTlZCQVlUJy5QSFBfRU9MLidBa0ZWTVJNd0VRWURWUVFJREFwVGIyMWxMVk4wWVhSbE1TRXdId1lEVlFRS0RCaEpiblJsY201bGRDQlhhV1JuJy5QSFBfRU9MLidhWFJ6SUZCMGVTQk1kR1F3SGhjTk1UVXhNVEE0TVRVeE1UVTJXaGNOTVRZeE1UQTNNVFV4TVRVMldqQkZNUXN3Jy5QSFBfRU9MLidDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTBaWEp1Jy5QSFBfRU9MLidaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV4RXNyJy5QSFBfRU9MLicvNTVhcWdGWGRyYlJOejEvV1NOSThVYVNVeENrYTJrR0VOMWJYc0pJemprZXl2MTJkUkhvN0g1T21ZMi9aOXNOJy5QSFBfRU9MLidmZ0toV2o3ZWxxMHhTbGNBMEtOUU1FNHdIUVlEVlIwT0JCWUVGS0lHZ0Nab1MzODhTVFQwcWpvWC9zd0tZQlhoJy5QSFBfRU9MLidNQjhHQTFVZEl3UVlNQmFBRktJR2dDWm9TMzg4U1RUMHFqb1gvc3dLWUJYaE1Bd0dBMVVkRXdRRk1BTUJBZjh3Jy5QSFBfRU9MLidDZ1lJS29aSXpqMEVBd0lEU1FBd1JnSWhBSzVPcVFvQkdSL3BqMk5PYitQeVJLSzRrNGQzTXVqOXovNkxzSksrJy5QSFBfRU9MLidra2dVQWlFQStGWTRTV0t2NG1mZTBnc09CSWQwQWFoL0h0Vlp4REJlM2JDWE9RTThNTU09J10sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBfX0RJUl9fLicvRUMvREVSL3ByaW1lMjU2djEtY2VydC5kZXInLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgICAgICAgICAneCcgPT4gJ3hFc3JfNTVhcWdGWGRyYlJOejFfV1NOSThVYVNVeENrYTJrR0VOMWJYc0knLAogICAgICAgICAgICAgICAgICAgICd5JyA9PiAnU000NUhzcjlkblVSNk94LVRwbU52MmZiRFg0Q29Wby0zcGF0TVVwWEFOQScsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCcgPT4gJ1pubmFRRHNzQ0tKUVpMcDZ6eUhzc0laT2E3bycsCiAgICAgICAgICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICd2N1Zsb2tLVEdMM2FuUms4TmwwVmNxVkM5dTVqMkZiNXRkbFFudFVnRFQ0JywKICAgICAgICAgICAgICAgICAgICAneDVjJyA9PiBbJ01JSUIwakNDQVhlZ0F3SUJBZ0lKQUsybzFrUTVKd3BVTUFvR0NDcUdTTTQ5QkFNQ01FVXhDekFKQmdOVkJBWVQnLlBIUF9FT0wuJ0FrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWGFXUm4nLlBIUF9FT0wuJ2FYUnpJRkIwZVNCTWRHUXdIaGNOTVRVeE1UQTRNVFV4TVRVMldoY05NVFl4TVRBM01UVXhNVFUyV2pCRk1Rc3cnLlBIUF9FT0wuJ0NRWURWUVFHRXdKQlZURVRNQkVHQTFVRUNBd0tVMjl0WlMxVGRHRjBaVEVoTUI4R0ExVUVDZ3dZU1c1MFpYSnUnLlBIUF9FT0wuJ1pYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXhFc3InLlBIUF9FT0wuJy81NWFxZ0ZYZHJiUk56MS9XU05JOFVhU1V4Q2thMmtHRU4xYlhzSkl6amtleXYxMmRSSG83SDVPbVkyL1o5c04nLlBIUF9FT0wuJ2ZnS2hXajdlbHEweFNsY0EwS05RTUU0d0hRWURWUjBPQkJZRUZLSUdnQ1pvUzM4OFNUVDBxam9YL3N3S1lCWGgnLlBIUF9FT0wuJ01COEdBMVVkSXdRWU1CYUFGS0lHZ0Nab1MzODhTVFQwcWpvWC9zd0tZQlhoTUF3R0ExVWRFd1FGTUFNQkFmOHcnLlBIUF9FT0wuJ0NnWUlLb1pJemowRUF3SURTUUF3UmdJaEFLNU9xUW9CR1IvcGoyTk9iK1B5UktLNGs0ZDNNdWo5ei82THNKSysnLlBIUF9FT0wuJ2trZ1VBaUVBK0ZZNFNXS3Y0bWZlMGdzT0JJZDBBYWgvSHRWWnhEQmUzYkNYT1FNOE1NTT0nXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkWDVDUGFyYW1ldGVyKCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICdraWQnID0+ICcxYjk0YycsCiAgICAgICAgICAgICduJyA9PiAndnJqT2Z6OUNjZGd4NW5RdWR5aGRvUjE3Vi1JdWJXTWVPWkN3WF9qajBoZ0FzejJKX3BxWVcwOFBMYktfUGRpVkdLUHJxem1ESXNMSTdzQTI1VkVuSFUxdUNMTndCdVVpQ08xMV8tN2RZYnNyNGlKbUcwUXUyajhEc1Z5VDFhenBKQ19ORzg0VHk1S0t0aHVDYVBvZDdpSTd3MExLOW9yU01oQkV3d1pEQ3hUV3E0YVlXQWNoYzh0LWVtZDlxT3ZXdFZNREMyQlhrc1JuZ2g2WDViVVlMeTZBeUhLdmotblV5MXdnempZUUR3SE1UcGxDb0x0VS1vLThTTm5aMXRtUm9HRTl1SmtCTGRoNWdGRU5hYlduVTVtMVpxWlBkd1MtcW8tbWVNdlZmSmI2akpWV1JwbDJTVXRDbllHMkMzMnF2YldialpfakJQRDVldW5xc0lvMXZRJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlEUWpDQ0FpcWdBd0lCQWdJR0FUei9GdUxpTUEwR0NTcUdTSWIzRFFFQkJRVUFNR0l4Q3pBSkInLlBIUF9FT0wuJ2dOVkJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFR6RVBNQTBHQTFVRUJ4TUdSR1Z1ZG1WeU1Sd3dHZ1lEJy5QSFBfRU9MLidWUVFLRXhOUWFXNW5JRWxrWlc1MGFYUjVJRU52Y25BdU1SY3dGUVlEVlFRREV3NUNjbWxoYmlCRFlXMScuUEhQX0VPTC4nd1ltVnNiREFlRncweE16QXlNakV5TXpJNU1UVmFGdzB4T0RBNE1UUXlNakk1TVRWYU1HSXhDekFKQmcnLlBIUF9FT0wuJ05WQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEVHpFUE1BMEdBMVVFQnhNR1JHVnVkbVZ5TVJ3d0dnWURWJy5QSFBfRU9MLidRUUtFeE5RYVc1bklFbGtaVzUwYVhSNUlFTnZjbkF1TVJjd0ZRWURWUVFERXc1Q2NtbGhiaUJEWVcxdycuUEhQX0VPTC4nWW1Wc2JEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUw2NHpuOC9RbkgnLlBIUF9FT0wuJ1lNZVowTG5jb1hhRWRlMWZpTG0xakhqbVFzRi80NDlJWUFMTTlpZjZhbUZ0UER5Mnl2ejNZbFJpajY2Jy5QSFBfRU9MLidzNWd5TEN5TzdBTnVWUkp4MU5iZ2l6Y0FibElnanRkZi91M1dHN0srSWlaaHRFTHRvL0E3RmNrOVdzNicuUEhQX0VPTC4nU1F2elJ2T0U4dVNpclliZ21qNkhlNGlPOE5DeXZhSzBqSVFSTU1HUXdzVTFxdUdtRmdISVhQTGZucG4nLlBIUF9FT0wuJ2ZhanIxclZUQXd0Z1Y1TEVaNEllbCtXMUdDOHVnTWh5cjQvcDFNdGNJTTQyRUE4QnpFNlpRcUM3VlBxJy5QSFBfRU9MLidQdkVqWjJkYlprYUJoUGJpWkFTM1llWUJSRFdtMXAxT1p0V2FtVDNjRXZxcVBwbmpMMVh5VytveVZWaycuUEhQX0VPTC4nYVpka2xMUXAyQnRndDlxcjIxbTQyZjR3VHcrWHJwNnJDS05iMENBd0VBQVRBTkJna3Foa2lHOXcwQkEnLlBIUF9FT0wuJ1FVRkFBT0NBUUVBaDh6R2xmU2xjSTBvM3JZRFBCQjA3YVhOc3diNEVDTklLRzBDRVRUVXhtWGw5S1VMJy5QSFBfRU9MLicrOWdHbHFDejVpV0xPZ1dzbnJjS2NZMHZYUEc5SjFyOUFxQk5UcU5nSHEyRzAzWDA5MjY2WDVDcE9lMScuUEhQX0VPTC4nekZvK093YjF6eHRwM1BlaEZkZlFKNjEwQ0RMRWFTOVY5UnFwMTdoQ3l5YkVwT0dWd2U4Zm5rK2ZiRUwnLlBIUF9FT0wuJzJCbzNVUEdycHNIelVvYUdwRGZ0bVdzc1praHBCSktWTUp5Zi9SdVAyU21tYUl6bW53OUppU2xZaHpvJy5QSFBfRU9MLic0dHB6ZDVyRlhoalJiZzR6VzlDKzJxb2srMitxRE0xaUo2ODRnUEhNSVk4YUxXcmRnUVR4a3VtR21UcScuUEhQX0VPTC4nZ2F3UitONU1EdGRQVEVRMFhmSUJjMmNKRVV5TVRZNU1QdkFDV3BrQTZTZFM0eFN2ZFhLM0lWZk9XQT09J10sCiAgICAgICAgXSk7CgogICAgICAgICRjZXJ0aWZpY2F0ZSA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21YNUMoJGtleS0+Z2V0KCd4NWMnKSwgWyd1c2UnID0+ICdzaWcnLCAna2lkJyA9PiAnMWI5NGMnXSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAna2lkJyA9PiAnMWI5NGMnLAogICAgICAgICAgICAnbicgPT4gJ3Zyak9mejlDY2RneDVuUXVkeWhkb1IxN1YtSXViV01lT1pDd1hfamowaGdBc3oySl9wcVlXMDhQTGJLX1BkaVZHS1BycXptRElzTEk3c0EyNVZFbkhVMXVDTE53QnVVaUNPMTFfLTdkWWJzcjRpSm1HMFF1Mmo4RHNWeVQxYXpwSkNfTkc4NFR5NUtLdGh1Q2FQb2Q3aUk3dzBMSzlvclNNaEJFd3daREN4VFdxNGFZV0FjaGM4dC1lbWQ5cU92V3RWTURDMkJYa3NSbmdoNlg1YlVZTHk2QXlIS3ZqLW5VeTF3Z3pqWVFEd0hNVHBsQ29MdFUtby04U05uWjF0bVJvR0U5dUprQkxkaDVnRkVOYWJXblU1bTFacVpQZHdTLXFvLW1lTXZWZkpiNmpKVldScGwyU1V0Q25ZRzJDMzJxdmJXYmpaX2pCUEQ1ZXVucXNJbzF2UScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICd4NXQnID0+ICc0cE5lbkVCTHYwSnBMSWR1Z1d4UWtPc1pjSzAnLAogICAgICAgICAgICAneDV0IzI1NicgPT4gJ3BKbTJCQnBrQjh5N3RDcXJXTTBYMzdXT21RVE84elF3LVZweFZnQmIyMUknLAogICAgICAgICAgICAneDVjJyA9PiBbJ01JSURRakNDQWlxZ0F3SUJBZ0lHQVR6L0Z1TGlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HSXhDekFKQmdOVkJBWVQnLlBIUF9FT0wuJ0FsVlRNUXN3Q1FZRFZRUUlFd0pEVHpFUE1BMEdBMVVFQnhNR1JHVnVkbVZ5TVJ3d0dnWURWUVFLRXhOUWFXNW4nLlBIUF9FT0wuJ0lFbGtaVzUwYVhSNUlFTnZjbkF1TVJjd0ZRWURWUVFERXc1Q2NtbGhiaUJEWVcxd1ltVnNiREFlRncweE16QXknLlBIUF9FT0wuJ01qRXlNekk1TVRWYUZ3MHhPREE0TVRReU1qSTVNVFZhTUdJeEN6QUpCZ05WQkFZVEFsVlRNUXN3Q1FZRFZRUUknLlBIUF9FT0wuJ0V3SkRUekVQTUEwR0ExVUVCeE1HUkdWdWRtVnlNUnd3R2dZRFZRUUtFeE5RYVc1bklFbGtaVzUwYVhSNUlFTnYnLlBIUF9FT0wuJ2NuQXVNUmN3RlFZRFZRUURFdzVDY21saGJpQkRZVzF3WW1Wc2JEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQnLlBIUF9FT0wuJ2dnRVBBRENDQVFvQ2dnRUJBTDY0em44L1FuSFlNZVowTG5jb1hhRWRlMWZpTG0xakhqbVFzRi80NDlJWUFMTTknLlBIUF9FT0wuJ2lmNmFtRnRQRHkyeXZ6M1lsUmlqNjZzNWd5TEN5TzdBTnVWUkp4MU5iZ2l6Y0FibElnanRkZi91M1dHN0srSWknLlBIUF9FT0wuJ1podEVMdG8vQTdGY2s5V3M2U1F2elJ2T0U4dVNpclliZ21qNkhlNGlPOE5DeXZhSzBqSVFSTU1HUXdzVTFxdUcnLlBIUF9FT0wuJ21GZ0hJWFBMZm5wbmZhanIxclZUQXd0Z1Y1TEVaNEllbCtXMUdDOHVnTWh5cjQvcDFNdGNJTTQyRUE4QnpFNlonLlBIUF9FT0wuJ1FxQzdWUHFQdkVqWjJkYlprYUJoUGJpWkFTM1llWUJSRFdtMXAxT1p0V2FtVDNjRXZxcVBwbmpMMVh5VytveVYnLlBIUF9FT0wuJ1ZrYVpka2xMUXAyQnRndDlxcjIxbTQyZjR3VHcrWHJwNnJDS05iMENBd0VBQVRBTkJna3Foa2lHOXcwQkFRVUYnLlBIUF9FT0wuJ0FBT0NBUUVBaDh6R2xmU2xjSTBvM3JZRFBCQjA3YVhOc3diNEVDTklLRzBDRVRUVXhtWGw5S1VMKzlnR2xxQ3onLlBIUF9FT0wuJzVpV0xPZ1dzbnJjS2NZMHZYUEc5SjFyOUFxQk5UcU5nSHEyRzAzWDA5MjY2WDVDcE9lMXpGbytPd2Ixenh0cDMnLlBIUF9FT0wuJ1BlaEZkZlFKNjEwQ0RMRWFTOVY5UnFwMTdoQ3l5YkVwT0dWd2U4Zm5rK2ZiRUwyQm8zVVBHcnBzSHpVb2FHcEQnLlBIUF9FT0wuJ2Z0bVdzc1praHBCSktWTUp5Zi9SdVAyU21tYUl6bW53OUppU2xZaHpvNHRwemQ1ckZYaGpSYmc0elc5QysycW8nLlBIUF9FT0wuJ2srMitxRE0xaUo2ODRnUEhNSVk4YUxXcmRnUVR4a3VtR21UcWdhd1IrTjVNRHRkUFRFUTBYZklCYzJjSkVVeU0nLlBIUF9FT0wuJ1RZNU1QdkFDV3BrQTZTZFM0eFN2ZFhLM0lWZk9XQT09J10sCiAgICAgICAgXSwKICAgICAgICAgICAgJGNlcnRpZmljYXRlLT5hbGwoKQogICAgICAgICk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Chain/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Chain/google.crt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ4RENDQXRpZ0F3SUJBZ0lEQWpxRE1BMEdDU3FHU0liM0RRRUJDd1VBTUVJeEN6QUpCZ05WQkFZVEFsVlQKTVJZd0ZBWURWUVFLRXcxSFpXOVVjblZ6ZENCSmJtTXVNUnN3R1FZRFZRUURFeEpIWlc5VWNuVnpkQ0JIYkc5aQpZV3dnUTBFd0hoY05NVE13TkRBMU1UVXhOVFUyV2hjTk1UWXhNak14TWpNMU9UVTVXakJKTVFzd0NRWURWUVFHCkV3SlZVekVUTUJFR0ExVUVDaE1LUjI5dloyeGxJRWx1WXpFbE1DTUdBMVVFQXhNY1IyOXZaMnhsSUVsdWRHVnkKYm1WMElFRjFkR2h2Y21sMGVTQkhNakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQgpBSndxQkhkYzJGQ1JPZ2FqZ3VEWVVFaThpVC94R1hBYWlFWis0SS9GOFluT0llNWEvbUVOdHpKRWlhQjBDMU5QClZhVE9nbUtWN3V0Wlg4YmhCWUFTeEY2VVA3eGJTRGowVS9jazV2dVI2UlhFei9SVERmUksvSjlVM24yK29HdHYKaDhEUVVCOG9NQU5BMmdoelVXeC8vem84cHpjR2pyMUxFUVRyZlNUZTV2bjhNWEg3bE5WZzh5NUtyMExTeStyRQphaHF5ekZQZEZVdUxIOGdaWVIvTm5hZytZeXVFTldsbGhNZ1p4VVlpK0ZPVnZ1T0FTaERHS3V5Nmx5QVJ4em1aCkVBU2c4R0Y2bFNXTVRsSjE0cmJ0Q01vVS9NNGlhck5PejBZRGw1Y0Rmc0N4M251dlJUUFB1ajV4dDk3MEpTWEMKRFRXSm5aMzdEaEY1aVI0M3hhK09jbWtDQXdFQUFhT0I1ekNCNURBZkJnTlZIU01FR0RBV2dCVEFlcGhvalluNwpxd1ZrREJGOXFuMWx1TXJNVGpBZEJnTlZIUTRFRmdRVVN0MEdGaHU4OW1pMWR2V0J0cnRpR3JwYWdTOHdEZ1lEClZSMFBBUUgvQkFRREFnRUdNQzRHQ0NzR0FRVUZCd0VCQkNJd0lEQWVCZ2dyQmdFRkJRY3dBWVlTYUhSMGNEb3YKTDJjdWMzbHRZMlF1WTI5dE1CSUdBMVVkRXdFQi93UUlNQVlCQWY4Q0FRQXdOUVlEVlIwZkJDNHdMREFxb0NpZwpKb1lrYUhSMGNEb3ZMMmN1YzNsdFkySXVZMjl0TDJOeWJITXZaM1JuYkc5aVlXd3VZM0pzTUJjR0ExVWRJQVFRCk1BNHdEQVlLS3dZQkJBSFdlUUlGQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXF2cXBJTTFxWjRQdFh0UisKM2gzRWYrQWxCZ0RGSlB1cHlDMXRmdDZkZ21Vc2dXTTBaajdwVXNJSXRNc3Y5MStaT21xY1VIcUZCWXg5MFNwSQpoTk1KYkh6Q3pUV2Y4NEx1VXQ1b1grUUFpaGNnbHZjcGpacE55NmplaHNnTmIxYUhBMzBEUDl6NmVYMGhHZm5JCk9pOVJkb3pIUVpKeGp5WE9OL2hLVEFBajc4UTFFSzdnSTRCemZFMDBMc2h1a05ZUUhwbUVjeHB3OHUxVkR1NFgKQnVwbjdqTHJMTjFuQnovMmk4SnczbHNBNXJzYjB6WWFJbXhzc0RWQ2JKQUpQWlBwWkFraURvVUduOEp6SWRQbQpYNERrallVaU9uTURzV0NPcm1qaTlENlg1MkFTQ1dnMjNqclc0a09WV3plQmtvRWZ1NDNYclZKa0ZsZVcyVjQwCmZzZzEyQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWRENDQWp5Z0F3SUJBZ0lEQWpSV01BMEdDU3FHU0liM0RRRUJCUVVBTUVJeEN6QUpCZ05WQkFZVEFsVlQKTVJZd0ZBWURWUVFLRXcxSFpXOVVjblZ6ZENCSmJtTXVNUnN3R1FZRFZRUURFeEpIWlc5VWNuVnpkQ0JIYkc5aQpZV3dnUTBFd0hoY05NREl3TlRJeE1EUXdNREF3V2hjTk1qSXdOVEl4TURRd01EQXdXakJDTVFzd0NRWURWUVFHCkV3SlZVekVXTUJRR0ExVUVDaE1OUjJWdlZISjFjM1FnU1c1akxqRWJNQmtHQTFVRUF4TVNSMlZ2VkhKMWMzUWcKUjJ4dlltRnNJRU5CTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUEyc3dZWXpEOQo5QmNqR2xaK1c5ODhiRGprY2JkNGtkUzhvZGhNK0toRHRnUHBUU0VIQ0lqYVdDOW1PU205QlhpTG5Uam9CYmRxCmZuR2s1c1JncHJEdmdPU0pLQStlSmRidGcvT3RwcEhIbU1sQ0dEVVVuYTJZUnBJdVQ4cnhoMFBCRnBWWExWRHYKaVMyQWVsZXQ4dTVmYTlJQWpia1UrQlFWTmRuQVJxTjdjc2lSdjhsVks4M1FsejZjSm1UTTM4NkRHWEhLVHViVQoxWHVwR2MxVjNzanMwbDQ0VStWY1Q0d3QvbEFqTnZ4bTVzdU9wRGtaQUxlVkFqbVJDdzcrT0M3UkhRV2E5azArCmJ3OEhIYThzSG85Z09lTDZObE1UT2RSZUppdmJQYWdVdlRMckdBTW9VZ1J4NWFzelBlRTR1d2MyaEdLY2Vlb1cKTVBSZndDdm9jV3ZrK1FJREFRQUJvMU13VVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJUQQplcGhvalluN3F3VmtEQkY5cW4xbHVNck1UakFmQmdOVkhTTUVHREFXZ0JUQWVwaG9qWW43cXdWa0RCRjlxbjFsCnVNck1UakFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBTmVNcGF1VXZYVlNPS1ZDVW41a2FGT1NQZUNwaWxLSW4KWjU3UXp4cGVSK25Cc3FUUDNVRWFCVTZiUys1S2IxVlNzeVNoTndyclpIWXFMaXp6L1R0MWtMLzZjZGpIUFRmUwp0UVdWWXJtbTNvazlObnM0ZDBpWHJLWWdqeTZteVF6Q3NwbEZBTWZPRVZFaUl1Q2w2cllWU0FsazZsNVBkUGNGClBzZUtVZ3piRmJTOWJadmx4ckZVYUtuamFaQzJtcVVQdUxrL0lIMnVTclc0bk9RZHRxdm1sS1hCeDRPdDIvVW4KaHc0RWJOWC8zYUJkN1lkU3R5c1ZBcTQ1cG1wMDZkckU1N3hOTkI2cFhFMHpYNUlKTDRobVhYZVh4eDEyRTZuVgo1ZkVXQ1JFMTFhemJKSEZ3TEpoV0M5a1h0TkhqVVN0ZWRlalYwTnhQTk8zQ0JXYUFvY3ZtTXc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/DER/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/DER/570-ec-sect571r1-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIICXjCCAccCAg4GMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwOTI3MTMwMDE0WhcNMTcwOTI2MTMwMDE0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wgacwEAYHKoZIzj0CAQYFK4EEACcDgZIABAIZ0Rc0Y3jsqPqqptRz3tiSAuvTHA9vUigM2gUjM6YkTKofP7RRls4dqt6aM7/1eLbFg4Jdh9DXS4zU1EFeiZQZ+drSQYAmAgAtTzpmtmUoy+miwtiSBomu3CSUe6YrVvWb+Oirmvw2x3BCTJW2Xjhy5y6tDPVRRyhg0nh5wm/UxZv4jo7AZuJV8ztZKwCEADANBgkqhkiG9w0BAQUFAAOBgQBlaOF5O4RyvDQ1qCAuM6oXjmL3kCA3Kp7VfytDYaxbaJVhC8PnE0A8VPX2ypn9aQR4yq98e2umPsrSL7gPddoga+OvatusG9GnIviWGSzazQBQTTQdESJxrPdDXE0EYF5PPxAO+0yKGqkl8PepvymXBrMAeszlHaRFXeRojXVALwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/DER/prime256v1-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIB0jCCAXegAwIBAgIJAK2o1kQ5JwpUMAoGCCqGSM49BAMCMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTUxMTA4MTUxMTU2WhcNMTYxMTA3MTUxMTU2WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExEsr/55aqgFXdrbRNz1/WSNI8UaSUxCka2kGEN1bXsJIzjkeyv12dRHo7H5OmY2/Z9sNfgKhWj7elq0xSlcA0KNQME4wHQYDVR0OBBYEFKIGgCZoS388STT0qjoX/swKYBXhMB8GA1UdIwQYMBaAFKIGgCZoS388STT0qjoX/swKYBXhMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhAK5OqQoBGR/pj2NOb+PyRKK4k4d3Muj9z/6LsJK+kkgUAiEA+FY4SWKv4mfe0gsOBId0Aah/HtVZxDBe3bCXOQM8MMM=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/PEM/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/PEM/570-ec-sect571r1-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNYakNDQWNjQ0FnNEdNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT1RJM01UTXdNREUwV2hjTk1UY3dPVEkyTVRNd01ERTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2Fjd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNjRGdaSUFCQUlaMFJjMFkzanNxUHFxcHRSejN0aVMKQXV2VEhBOXZVaWdNMmdVak02WWtUS29mUDdSUmxzNGRxdDZhTTcvMWVMYkZnNEpkaDlEWFM0elUxRUZlaVpRWgorZHJTUVlBbUFnQXRUenBtdG1Vb3krbWl3dGlTQm9tdTNDU1VlNllyVnZXYitPaXJtdncyeDNCQ1RKVzJYamh5CjV5NnREUFZSUnloZzBuaDV3bS9VeFp2NGpvN0FadUpWOHp0Wkt3Q0VBREFOQmdrcWhraUc5dzBCQVFVRkFBT0IKZ1FCbGFPRjVPNFJ5dkRRMXFDQXVNNm9Yam1MM2tDQTNLcDdWZnl0RFlheGJhSlZoQzhQbkUwQThWUFgyeXBuOQphUVI0eXE5OGUydW1Qc3JTTDdnUGRkb2dhK092YXR1c0c5R25JdmlXR1N6YXpRQlFUVFFkRVNKeHJQZERYRTBFCllGNVBQeEFPKzB5S0dxa2w4UGVwdnltWEJyTUFlc3psSGFSRlhlUm9qWFZBTHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/EC/PEM/prime256v1-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwakNDQVhlZ0F3SUJBZ0lKQUsybzFrUTVKd3BVTUFvR0NDcUdTTTQ5QkFNQ01FVXhDekFKQmdOVkJBWVQKQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNtNWxkQ0JYYVdSbgphWFJ6SUZCMGVTQk1kR1F3SGhjTk1UVXhNVEE0TVRVeE1UVTJXaGNOTVRZeE1UQTNNVFV4TVRVMldqQkZNUXN3CkNRWURWUVFHRXdKQlZURVRNQkVHQTFVRUNBd0tVMjl0WlMxVGRHRjBaVEVoTUI4R0ExVUVDZ3dZU1c1MFpYSnUKWlhRZ1YybGtaMmwwY3lCUWRIa2dUSFJrTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeEVzcgovNTVhcWdGWGRyYlJOejEvV1NOSThVYVNVeENrYTJrR0VOMWJYc0pJemprZXl2MTJkUkhvN0g1T21ZMi9aOXNOCmZnS2hXajdlbHEweFNsY0EwS05RTUU0d0hRWURWUjBPQkJZRUZLSUdnQ1pvUzM4OFNUVDBxam9YL3N3S1lCWGgKTUI4R0ExVWRJd1FZTUJhQUZLSUdnQ1pvUzM4OFNUVDBxam9YL3N3S1lCWGhNQXdHQTFVZEV3UUZNQU1CQWY4dwpDZ1lJS29aSXpqMEVBd0lEU1FBd1JnSWhBSzVPcVFvQkdSL3BqMk5PYitQeVJLSzRrNGQzTXVqOXovNkxzSksrCmtrZ1VBaUVBK0ZZNFNXS3Y0bWZlMGdzT0JJZDBBYWgvSHRWWnhEQmUzYkNYT1FNOE1NTT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/FooAlgorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG07CgovKioKICogQGdyb3VwIFVuaXQKICogQGdyb3VwIEpXS1NldAogKi8KY2xhc3MgRm9vQWxnb3JpdGhtIGltcGxlbWVudHMgQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnZm9vJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb3dlZEtleVR5cGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsnRk9PJ107CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/HttpMessageFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgR3V6emxlSHR0cFxQc3I3XFJlcXVlc3Q7CnVzZSBHdXp6bGVIdHRwXFBzcjdcUmVzcG9uc2U7CnVzZSBIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnkgYXMgUHNyN01lc3NhZ2VGYWN0b3J5OwoKY2xhc3MgSHR0cE1lc3NhZ2VGYWN0b3J5IGltcGxlbWVudHMgUHNyN01lc3NhZ2VGYWN0b3J5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KCRtZXRob2QsICR1cmksIGFycmF5ICRoZWFkZXIgPSBbXSwgJGJvZHkgPSBudWxsLCAkcHJvdG9jb2xWZXJzaW9uID0gJzEuMScpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXIsICRib2R5LCAkcHJvdG9jb2xWZXJzaW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoJHN0YXR1c0NvZGUgPSAyMDAsICRyZWFzb25QaHJhc2UgPSBudWxsLCBhcnJheSAkaGVhZGVyID0gW10sICRib2R5ID0gbnVsbCwgJHByb3RvY29sVmVyc2lvbiA9ICcxLjEnKQogICAgewogICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJHN0YXR1c0NvZGUsICRoZWFkZXIsICRib2R5LCAkcHJvdG9jb2xWZXJzaW9uLCAkcmVhc29uUGhyYXNlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/JWKAnalyzerTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEtleUFuYWx5emVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIFVuaXQKICogQGdyb3VwIEpXS0FuYWx5emVyCiAqLwpjbGFzcyBKV0tBbmFseXplclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuQW5hbHl6ZUFOb25lS2V5QW5kR2V0TWVzc2FnZXMoKQogICAgewogICAgICAgICRrZXkgPSBKV0tGYWN0b3J5OjpjcmVhdGVOb25lS2V5KCk7CiAgICAgICAgJG1lc3NhZ2VzID0gJHRoaXMtPmdldEtleUFuYWx5emVyKCktPmFuYWx5emUoJGtleSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0Tm90RW1wdHkoJG1lc3NhZ2VzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuQW5hbHl6ZUFuUnNhS2V5QW5kR2V0TWVzc2FnZXMoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJ29hQVF5R1V3Z3dDZlpReW0wUVFDZUNKdTZHZkFwdjZuUUJLSjNNZ3pUODVrQ1VPM3hEaXVkaURiSnFncW4yb2wnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAnZCcgPT4gJ2FzdUJTMmpSYlQ1MEZDa1A4UHhkUlZRN1JJV0ozczVVV0FpLWMyMzNjUWFtMWtSakdOMlF6QXY3OWhycGpMUUInLAogICAgICAgIF0pOwogICAgICAgICRtZXNzYWdlcyA9ICR0aGlzLT5nZXRLZXlBbmFseXplcigpLT5hbmFseXplKCRrZXkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydE5vdEVtcHR5KCRtZXNzYWdlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbkFuYWx5emVBbk9jdEtleUFuZEdldE1lc3NhZ2VzKCkKICAgIHsKICAgICAgICAka2V5ID0gSldLRmFjdG9yeTo6Y3JlYXRlT2N0S2V5KDE2LCBbJ3VzZScgPT4gJ2ZvbycsICdrZXlfb3BzJyA9PiAnZm9vJ10pOwogICAgICAgICRtZXNzYWdlcyA9ICR0aGlzLT5nZXRLZXlBbmFseXplcigpLT5hbmFseXplKCRrZXkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydE5vdEVtcHR5KCRtZXNzYWdlcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdmFyIEtleUFuYWx5emVyXEtleUFuYWx5emVyTWFuYWdlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGtleUFuYWx5emVyTWFuYWdlcjsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEtleUFuYWx5emVyKCk6IEtleUFuYWx5emVyXEtleUFuYWx5emVyTWFuYWdlcgogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+a2V5QW5hbHl6ZXJNYW5hZ2VyKSB7CiAgICAgICAgICAgICR0aGlzLT5rZXlBbmFseXplck1hbmFnZXIgPSBuZXcgS2V5QW5hbHl6ZXJcS2V5QW5hbHl6ZXJNYW5hZ2VyKCk7CiAgICAgICAgICAgICR0aGlzLT5rZXlBbmFseXplck1hbmFnZXIKICAgICAgICAgICAgICAgIC0+YWRkKG5ldyBLZXlBbmFseXplclxBbGdvcml0aG1BbmFseXplcigpKQogICAgICAgICAgICAgICAgLT5hZGQobmV3IEtleUFuYWx5emVyXEtleUlkZW50aWZpZXJBbmFseXplcigpKQogICAgICAgICAgICAgICAgLT5hZGQobmV3IEtleUFuYWx5emVyXE5vbmVBbmFseXplcigpKQogICAgICAgICAgICAgICAgLT5hZGQobmV3IEtleUFuYWx5emVyXE9jdEFuYWx5emVyKCkpCiAgICAgICAgICAgICAgICAtPmFkZChuZXcgS2V5QW5hbHl6ZXJcUnNhQW5hbHl6ZXIoKSkKICAgICAgICAgICAgICAgIC0+YWRkKG5ldyBLZXlBbmFseXplclxVc2FnZUFuYWx5emVyKCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5rZXlBbmFseXplck1hbmFnZXI7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/JWKFactoryTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxKV0tGYWN0b3J5Owp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIEpXS0ZhY3RvcnkKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIEpXS0ZhY3RvcnlUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbkxvYWRBUDEyQ2VydGlmaWNhdGVUaGF0Q29udGFpbnNBUlNBS2V5KCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbVBLQ1MxMkNlcnRpZmljYXRlRmlsZShfX0RJUl9fLicvUDEyL0NlcnRSU0EucDEyJywgJ2NlcnRSU0EnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnYWNxWnFGU0xBclU3MXA5eXA4WkgxbkRmaTVnMFRMZ1BDZ0FZRVNyZmItREIwX0Y4OUxVU1N1a1JSa0NqTkN1SnFwNmo2anBlNFZtSjJZekdpQlYzZW9NcU9SSWRVbVEzWGxLS1hfT05NM29XaFpab0ZTXzJzMVJMRmwxZmFYT1JlNEpTSklOOWd0XzRFcFhvS1RqWDFnZnRUY0ZPTHJYUGdPREV3akFZbGwwJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ2QnID0+ICdGNXdSZ3RHclhHVlpfMklDVXBNYndTM2JsZW5YOGk4NW1fLTlYMGQwS2lHODRESUtzd29lRlAzQ3p5enB2MkRnRG1YdEt2N3Y0ZGI3dnNOLUl5eTNSeUttWDZ5XzF5ZmFoTUdiTHFZbDdwRlEybllvb1pKSTRYUkpNRGJ0Zlg1bDdRcWlERGtRckhQY1VObEMzNjFXS2Y4cldsVmxJRGZ3SHJCa3ZwLVVQb0UnLAogICAgICAgICAgICAncCcgPT4gJ2diRHQtalJxUlp3MUR3Z19Da2xfdkJSV3FDZldmZW0xWUFMZ3B1ZDVGQ25QdFhvSEhjTVBheVRVYjhtaldpb040SElqTUlKMjlhYnR2WHEzenZoWWNRJywKICAgICAgICAgICAgJ3EnID0+ICcwTkxuUlcwZ2FqQ3BhMGJBNzZBYkZfTVFoeEdXSF9aUUJmTHRFcTRORkdXZGtfQ3Nsb3ZVekpKNERuVzk2VGZ0aEhnR1FFcUVUdFp3ZVFkNTNrcnlyUScsCiAgICAgICAgICAgICdkcCcgPT4gJ0toYldsTTN2ODFsbnF0STlTMFJoTFJQWXI4Z0dCMlVTbE84NkkxQ1o3ZDVINTVpTHVLXzJVQXBxMjBDd1BfSElBU0JwcFRPaUVjVTBBTHRUN2RxUk1RJywKICAgICAgICAgICAgJ2RxJyA9PiAnV092bUJWOUJ0VlpCWG1nRGtrWm9JeHVpeHhGTER4TXc0a2VlZ2h6UmZ3VUNROVB4ZWkzVEVNV3lEOTQ5WDBrc2dBTW9Ea3BzNnJGUHRZbmtjQzhVQlEnLAogICAgICAgICAgICAncWknID0+ICdSLVRjZ05ZclpzOGlZbVIzcEkyVXdGaHJtSmw5OHZ6elNrSTRyR1RPTjB2UHJubF80NktxenBpVzA0ZEJqM3lReGhsS3lQTzhUTzB0bkEzQVluRGMtUScsCiAgICAgICAgXSwKICAgICAgICAgICAgJHJlc3VsdC0+YWxsKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21FQ0NlcnRpZmljYXRlRmlsZUluREVSRm9ybWF0KCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbUNlcnRpZmljYXRlRmlsZShfX0RJUl9fLicvRUMvREVSL3ByaW1lMjU2djEtY2VydC5kZXInKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICd4RXNyXzU1YXFnRlhkcmJSTnoxX1dTTkk4VWFTVXhDa2Eya0dFTjFiWHNJJywKICAgICAgICAgICAgJ3knID0+ICdTTTQ1SHNyOWRuVVI2T3gtVHBtTnYyZmJEWDRDb1ZvLTNwYXRNVXBYQU5BJywKICAgICAgICAgICAgJ3g1YycgPT4gWydNSUlCMGpDQ0FYZWdBd0lCQWdJSkFLMm8xa1E1SndwVU1Bb0dDQ3FHU000OUJBTUNNRVV4Q3pBSkJnTlZCQVlUJy5QSFBfRU9MLidBa0ZWTVJNd0VRWURWUVFJREFwVGIyMWxMVk4wWVhSbE1TRXdId1lEVlFRS0RCaEpiblJsY201bGRDQlhhV1JuJy5QSFBfRU9MLidhWFJ6SUZCMGVTQk1kR1F3SGhjTk1UVXhNVEE0TVRVeE1UVTJXaGNOTVRZeE1UQTNNVFV4TVRVMldqQkZNUXN3Jy5QSFBfRU9MLidDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTBaWEp1Jy5QSFBfRU9MLidaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV4RXNyJy5QSFBfRU9MLicvNTVhcWdGWGRyYlJOejEvV1NOSThVYVNVeENrYTJrR0VOMWJYc0pJemprZXl2MTJkUkhvN0g1T21ZMi9aOXNOJy5QSFBfRU9MLidmZ0toV2o3ZWxxMHhTbGNBMEtOUU1FNHdIUVlEVlIwT0JCWUVGS0lHZ0Nab1MzODhTVFQwcWpvWC9zd0tZQlhoJy5QSFBfRU9MLidNQjhHQTFVZEl3UVlNQmFBRktJR2dDWm9TMzg4U1RUMHFqb1gvc3dLWUJYaE1Bd0dBMVVkRXdRRk1BTUJBZjh3Jy5QSFBfRU9MLidDZ1lJS29aSXpqMEVBd0lEU1FBd1JnSWhBSzVPcVFvQkdSL3BqMk5PYitQeVJLSzRrNGQzTXVqOXovNkxzSksrJy5QSFBfRU9MLidra2dVQWlFQStGWTRTV0t2NG1mZTBnc09CSWQwQWFoL0h0Vlp4REJlM2JDWE9RTThNTU09J10sCiAgICAgICAgICAgICd4NXQnID0+ICdabm5hUURzc0NLSlFaTHA2enlIc3NJWk9hN28nLAogICAgICAgICAgICAneDV0IzI1NicgPT4gJ3Y3Vmxva0tUR0wzYW5SazhObDBWY3FWQzl1NWoyRmI1dGRsUW50VWdEVDQnLCBdLAogICAgICAgICAgICAkcmVzdWx0LT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnJvbVNlY3JldCgpCiAgICB7CiAgICAgICAgJGp3ayA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21TZWNyZXQoJ1RoaXMgaXMgYSB2ZXJ5IHNlY3VyZWQgc2VjcmV0ISEhIScsIFsna2lkJyA9PiAnRk9PJ10pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ2t0eScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCdrJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ2tpZCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnb2N0JywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1RoaXMgaXMgYSB2ZXJ5IHNlY3VyZWQgc2VjcmV0ISEhIScsIEJhc2U2NFVybDo6ZGVjb2RlKCRqd2stPmdldCgnaycpKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0ZPTycsICRqd2stPmdldCgna2lkJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21LZXkoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVGcm9tS2V5KFxmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvS2V5cy9FQy9wcml2YXRlLmVzMjU2LmVuY3J5cHRlZC5rZXknKSwgJ3Rlc3QnKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwiZCI6InFfVmt6Tm54VEczOWpIQjBxa3dBX1NlVlh1ZDd5Q0hUN2tiN2tadi0weFEiLCJ4IjoidnVZc1AtUW5ycUFiTTdJeWh6anQwOGhGU3V6YXB5b2pDQl9nRnNCdDY1VSIsInkiOiJvcS1FMkstWDBrUGVxR3VLbmhsWGt4YzVmbnhvbVJTQzZLTGJ5N0lqOEFFIn0nLCBcanNvbl9lbmNvZGUoJGp3aykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21SZXNvdXJjZSgpCiAgICB7CiAgICAgICAgJHJlcyA9IFxvcGVuc3NsX3g1MDlfcmVhZChcZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL1JTQS9QRU0vMTAyNGItcnNhLWV4YW1wbGUtY2VydC5wZW0nKSk7CgogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVGcm9tWDUwOVJlc291cmNlKCRyZXMpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJGp3ayk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICd4Z0VHdkhrLVVfUlkwajlsM01QN28tUzJhNnVmNFhhUkJodTF6dGRDSHo4dE1HOEtqNF9xSm1nc1NaUUQxN3NSY3RIR0JUVUpXcDRDTHRCd0NmMHpBR1Z6eVN3VWtjSFN1MV8ybVpfdzdOcjBUUUhLZVdyX2o4cHZYSDUzNERLRXZ1Z3IyMURBSGJpNGM2NTRlTFVMLUpXX3dKSllxSmg3cUhNM1czRmg3eXMnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAneDVjJyA9PiBbJ01JSUNWakNDQWI4Q0FnMzdNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcnLlBIUF9FT0wuJ09ESXlNRFV5TnpJeldoY05NVGN3T0RJeE1EVXlOekl6V2pCS01Rc3dDUVlEVlFRR0V3SktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1ZQkJyeDVQbFAwV05JL1pkekQnLlBIUF9FT0wuJys2UGt0bXVybitGMmtRWWJ0YzdYUWg4L0xUQnZDbytQNmlab0xFbVVBOWU3RVhMUnhnVTFDVnFlQWk3UWNBbjknLlBIUF9FT0wuJ013QmxjOGtzRkpIQjBydGY5cG1mOE96YTlFMEJ5bmxxLzQvS2IxeCtkK0F5aEw3b0s5dFF3QjI0dUhPdWVIaTEnLlBIUF9FT0wuJ0MvaVZ2OENTV0tpWWU2aHpOMXR4WWU4ckFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBQVNQZGppZ0onLlBIUF9FT0wuJ2tYQ3FLV3BuWi9PYzc1RVVjTWk2SHp0YVc4YWJVTWxZWFBJZ2tWMkY3WWFuSE9CN0s0ZjdPT0xqaXo4RFRQRmYnLlBIUF9FT0wuJ2pDOVVldUVyaGFBL3p6V2k4ZXdNVEZaVy9Xc2hPcm0zZk52Y01yTUxLdEg1MzRKS3ZjZE1nNnFJZGpURklOSXInLlBIUF9FT0wuJ2V2bkFoZjBjd1VMYWVibitsTXM4UGRsN3kzNytzZmx1Vm9rPSddLAogICAgICAgICAgICAneDV0JyA9PiAnNGJLNDVld1owMFdrLWFfc2hwVHcyY0NxSmM4JywKICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICc1RjVHVFBPeEJHQU9zVnl1WXpxVUJqcmkwUjJZRFRpRG93aVFiczZvR2dVJywKICAgICAgICBdLAogICAgICAgICRqd2stPmFsbCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRUNDZXJ0aWZpY2F0ZUZpbGVJblBFTUZvcm1hdCgpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21DZXJ0aWZpY2F0ZUZpbGUoX19ESVJfXy4nL0VDL1BFTS9wcmltZTI1NnYxLWNlcnQucGVtJyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAneEVzcl81NWFxZ0ZYZHJiUk56MV9XU05JOFVhU1V4Q2thMmtHRU4xYlhzSScsCiAgICAgICAgICAgICd5JyA9PiAnU000NUhzcjlkblVSNk94LVRwbU52MmZiRFg0Q29Wby0zcGF0TVVwWEFOQScsCiAgICAgICAgICAgICd4NWMnID0+IFsnTUlJQjBqQ0NBWGVnQXdJQkFnSUpBSzJvMWtRNUp3cFVNQW9HQ0NxR1NNNDlCQU1DTUVVeEN6QUpCZ05WQkFZVCcuUEhQX0VPTC4nQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNtNWxkQ0JYYVdSbicuUEhQX0VPTC4nYVhSeklGQjBlU0JNZEdRd0hoY05NVFV4TVRBNE1UVXhNVFUyV2hjTk1UWXhNVEEzTVRVeE1UVTJXakJGTVFzdycuUEhQX0VPTC4nQ1FZRFZRUUdFd0pCVlRFVE1CRUdBMVVFQ0F3S1UyOXRaUzFUZEdGMFpURWhNQjhHQTFVRUNnd1lTVzUwWlhKdScuUEhQX0VPTC4nWlhRZ1YybGtaMmwwY3lCUWRIa2dUSFJrTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFeEVzcicuUEhQX0VPTC4nLzU1YXFnRlhkcmJSTnoxL1dTTkk4VWFTVXhDa2Eya0dFTjFiWHNKSXpqa2V5djEyZFJIbzdINU9tWTIvWjlzTicuUEhQX0VPTC4nZmdLaFdqN2VscTB4U2xjQTBLTlFNRTR3SFFZRFZSME9CQllFRktJR2dDWm9TMzg4U1RUMHFqb1gvc3dLWUJYaCcuUEhQX0VPTC4nTUI4R0ExVWRJd1FZTUJhQUZLSUdnQ1pvUzM4OFNUVDBxam9YL3N3S1lCWGhNQXdHQTFVZEV3UUZNQU1CQWY4dycuUEhQX0VPTC4nQ2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUs1T3FRb0JHUi9wajJOT2IrUHlSS0s0azRkM011ajl6LzZMc0pLKycuUEhQX0VPTC4na2tnVUFpRUErRlk0U1dLdjRtZmUwZ3NPQklkMEFhaC9IdFZaeERCZTNiQ1hPUU04TU1NPSddLAogICAgICAgICAgICAneDV0JyA9PiAnWm5uYVFEc3NDS0pRWkxwNnp5SHNzSVpPYTdvJywKICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICd2N1Zsb2tLVEdMM2FuUms4TmwwVmNxVkM5dTVqMkZiNXRkbFFudFVnRFQ0JywgXSwKICAgICAgICAkcmVzdWx0LT5hbGwoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnJvbTMya1JTQUNlcnRpZmljYXRlRmlsZUluREVSRm9ybWF0KCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbUNlcnRpZmljYXRlRmlsZShfX0RJUl9fLicvUlNBL0RFUi8zMmstcnNhLWV4YW1wbGUtY2VydC5kZXInKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAncXpQRnNGSWYzY1NlczI1RGxvVjN5M2Q4Z0tNY1pWRV9FUV82ZV9NWm55cURidU9FUDM5eVFzM2F1bnpiWlJvTzhYdzhsTG9KTmR1aUtLc2NvN29kSTc1M2tCdnoxZUx5a2Utc1dCVlp0dGJuWXl6OUFFM1pYZkFiOXJIVzJBeGdJcUhOc1FPc0xKU19kb3VHWnd4YXdOZEU5MFdNNFFHODBiRHBreHhIZk9idG1aSWJab09GU2Vva0RIQTVqb2tRR3pKNjV0NkFSdFFPSWh0ODRwSWxBcjhSTzB2Q1VpSjBSNFRkQWZmYmRJdWtNY1ZmU29aQmxaSl9xLXlCdFBvcUIxTm1yMXgxRnFDdFI4MU5yRXRkcDdDVUh5NHlMSXNrTXpIVHdKTDI0ZHg4elBTOVJCSUF1UjZITzZzb1F3UWdLWTVOWW15YVpHdVdEcnp3MExvcjlfampjeDN4N05sWEVVZmZHeVVkVF9iWjZvd3NnZC1TcHZuYnFYUFhJZi11NUpIN2FmU1V1YWp5dEhuR1ZpbFFPcEVnMDZCMEYtQXVtVUV4OHZkTFBjekN4MENFRDExbWhSaFQxZVJRUEpsenhncUEyMlNOMVl6MFA1NVI4UWJmRlljZmxwRXRaYkhtZHZ3TVNpcEVvRVV5SThhQTl6MjY4b05Wbm5BR2hHM2NPcWs4LTRIT3Z0cVo5TEljOGpVY1FMdFdYLVBKYXY5RWVQbld1VjZwRnd6dktjd2wwOW0wOHhJZkloOUR2RlZKejNGa3MtWDZjMXRWbzJWYWxmdGxqOGZubHp1OVdnb3dua3doTTRLTjJVcGNIY2ZmNEctdjl6Y2toY3BST1N6WjFheDVtUE9VTUY2QjJPVmF3TWhmM2xpOUE5SkVwQkR4VnUyLWdaVTZOYmh2ZkgxZjRQZE5QVW5sYXNQeWxIbjRxejRTNl9WMWZ1eGhvLTJPX1Y3MnczVjVGREJpLW0yRDl2RFZRdkp0dW9pSnhVRXlPV2F4c2VudXpvRmxxM2pOSHdtMFNpYWJ3VmphTXlyZTRxa3RtSG9wTHVMWDJpeE1FM3JiVHRhWExBYWx5LXQyWDZvUzRuRnlod1A5Zl9XYkpiNFloX1JEeGtzUGoxaFJfNG5INDNOVFlqWkJsTERNMFlSYjR4UnpGbUFUUU9VaFBvdTZMU1VibDhUbDJ6N1dZRnpsY0tnSHdrV1JhVEdVVjhTel9oLV9JZmdaRHZDdHl5TGh6dldPbWZKQmhzVjFuVGJEcnI4RGl2WkdINWh1Qk5IODh2X2diQ1Z3MzZhQWpIOEJubWNIUTBJbVVVd1hvaUIxaVdTV0IzeDF4ZFluQXlRZjVSVjJQSzg2d1ZjNEVCUnhXNk1lSkhXWnIta0ZnSHRjd2syeXM4TWV3TDh4bEtzMVM2NEFQQVd0RC1Xc0xHRW5VVk1mTTVFdVdqb1M5a0I0Qkk0REM2TTB1eURqYUN1RnU4MHdNbVdmeDlDMy1ZMng3bDVMdzBHNGdSY1VrLUYzT050S2ZzeE1xQW1WNmFVVmtYbWRrWDVMTGExMDVDcElWcWZsTTQwQ1BsNW1sVkdFRmxUZjl1MHpjbHlRMF8tcVd0Nzhaemtwb2xQajlYS0hpa2RZQV9ES2J2dGZndGdOQzA3R0l3QmN0b1FzT3JLR094aWdlV3pyQXdmUzlTNVd0N2h2Y3MyUjBZMDRyWG9lU1RQYkhXTHVtc0pZTHhDMkhQdGFtM0l4UUp6Q2xqSU9GQjVTcWk5V0xPNWxfeWptVUdTMkZ6eTVEa3V5RnVDM283OXJCLVZ1MHpwSFE1c0hkYnlZa2Z2aTNRWng0akx1ajJraS0zXzFRajdSZlZkZDF5V2V1ZG5GVXk1UUdmV2gzLVZvYUs5VUlaMUVlWDYyb3dYVEdOT0pvdm45eU1kd2JYbXk3NXFya1BYYWRGUUczbG51cXFfVWNkOFpBWUp2d2ZRYjZ1aFRTdjFrU0ZDcHh5eWFTQllqTFU0NFFERjZGUmhfUUhMTUJNMkRWYXNPVDBoc0YyVVdzSVhVbmVvSkhrX3FWWlNSbWo1RURhSXJXQVVFWmZMX2dlaXdjVzNfTDNZOWlhSE1rQjkzZkhOc1ZFcExtVE8tdkxIWkhZTjBjLWtLTlZCd180MHhHWjVaZ1BKbFQ0SlpWdkJLdUIya2EyT3NTTGNSWFp2elpaWlRuclJIYl85ZG5nR2tGcEkwZ2M2Z0Z1MmQxbVBJSUZwNkpTN0FKNF9zWUtFNHl4dUdHN0lzQTRFcm5OQkVLOVNyMVhTdTBfS2ZjSXY2M2RtX0F5YkRnMXZtcU1MQ2w1RWlQOU9JRnNXZElNNDI5NzBQSDloOFJpN0tVbjBENTNSU1JWa1YzOE5XMzEyQTJKWUNIZkVmYkl4eWliRUlyc3VzaWI5OHg2QmVkaC0zQnBzV3lpaDJYbERUNkFGd0pkRDBjY19VZjU2VnF2OXdhVXRzU3gtMXhCd2xpWjM1TUtxLUlmVjZoY0xuRmdMaHhzcWFrVjhhRkxBRXpJOFVsbmVkNnpqUkFDMjhhYURPWmNGZEtFTUQwd0hQVVc4LTlVVFF4QWd1ZzhvdEVJVFdTa0t1YnlYYmRvZnBWYTlYd2pxMS1qTGI0ZXlscWV5MFJva0tySE82QjdGM0t0VUY4WnNtMG1HRWc3bnZVaGpFQkZMM0Fxa0xrZTVOYl83OHVxYjN0elpGM2lPNmdoRU5hcjlzMURVSVlxTmtiTVNlaDdzbWdFUl9QQlVCME1HTXFSbng4cWNyNXQ1eUJFdXJaN3FxNy1MWW9KT29jNlV3YVByUU5fQUZSb3U0dWdpUnJ4SXJ2T3dyRFByNHkyem9pOVhLbkJCdVlNbnQyQWtHVkNOSUEwV09LZ21leDR4XzJOcmkySmxSaWVBUHdOUGZXNVBMa3lQVlJmdzBkTnpoZzdjc01sMVdjdGR3MUpwSEpoZ01zd3VoWWhSV0d5ellXRTRaVThsdlFXcUE0Mk1PS2ZVaXhBVjRMbUV6R3oyZVJRU1BHV2pMQzg1LW1jeGZfdnNzbUQtbWJ1SkFqemxMRHp6d2xsclREQ1FydDE4RGZ0cEFBSGhENWhHMkhtUUg5UkR6Y1Mzc25pSXg0cDJ6eXFCSFZRc1dNNzRCbFFqYk9EamdIUkhlclRneFlhTm1oNEtSQTM4bG1iOW9tclVoSTJRMExqNUNGMm9mX0FwZDdmbzh1NkxwQnBkRXRpcmtuXzctOXZQUGlHZXJDbFY2bFNqb05pX0lfaEhDbmVBcS0zS1pxN2hNNVhsaUpQdlVyd3NfbTBYNW42X2ZhemRrLWdPb2hFdUYwQXFfMUk1NjMzc1MtREdyRnlhbjJLN29lb0JHUU45OTQta3dlVFIwbExrbzE0bkM1d252aXpic3Y3c0RVTkpUak03TE1ZSXJoS0VJTFRqakdRNld1Q2tZaFF1TTRSQW54NzRqRkljaFc4cFMxdEVuVWNJT3lCV2dGQjlNMnpkYk5tSmc3dkg0M21tWDQwOGpNWVZLczlDUXoyWTdWdTMzUzBkU3A5c1d4TTFLVVJFRlZ5MXhUYlZnS054THhPelhpTE9qbV9iNEVpZkFIWmhfS1RmMFBPbTVSRVNVLVRTck8yOXk1cHVUSEwtUEx1T0UzMGpyeFhhS2hXNVV6bVFMVU1oQkdJN2dlWVA2ZkU2UXh5VWkwZ0RfdExkTW16eFRsWmlPWGtFNkhuQlEtM0FyNTR1QS1SRlVobnpVLVhUM3dtLS1lSU5zdnF5ckhDeUxRbG1NNzFhQlhuTWxINWcwTkpqZG00MlhTZWNUb3BXZkZDZmNOZTEtdWZwVXVNR0dnMEMzTHhWTjVma1RtQjJfNmdhaTBBSGg0ZE5oZWZHa0tDWjVPY1NOdEFfVVVJMW5Lcl93Z1BUSTRYMWNhdE45UkU5bU1ZaE90LUk1Z09WUkNpaHhEY1VjQmwyYXBVYUZLLWpIUHM1ckFCcWh5a2JpX2RPUy16eTQySTg2VmN1NEItXzBHTmxSSVBSTFpXRkloTlJ5X2tmQ09xNGtiNFNLOURqVHZIc2FxNllXTW9MOUprM0ppcXZINHlyTVo2VC1YRUZkSjhER1NjNDFsbzFZSndoRlV1MGVHYkdGS3h5VUJySHYxbDlCeVBycVdhaWVwbkJCc2RhNHk4RzNTb2lDZm5kd2tidkxlRTV5a1lndXJQcGtZWF9iYXUyUHFzb0FraUpfR21iaXRLcFhENzFDNVBtenZ6THZweGtnQzZoUXEtdjRMNFdMZWxBRHZCcGVpa1g5azIzcWhSNUgzbWt6TmVNWmdIeW9GaXN5MTYxY0RnT2xjZzY0ZzZDMlV6SktsYjVDMXRPbFF3TTNmZG03Y2pCSlhPanV4Z2k4RXd4Nm92OTBlZWFxSUVmRnZuVXUxX0lDX3RGdmU5UF9VczIxQWs1M3Z3U3RsSHVlWUh0ZWRKc0hnODRDNVBwdF96MUxGUjNIaDhtMXBPbmxiM2tKdzVlR3B2c1h3ZVpySUlOMGN2d3otTlpfb3JJeGpQeExmMjN3eS15LWxoT2JLMTdCZlgxZy1wNzU5WHRSU2FHNFJqX1FlZGF1WEhBQS1TS2d2d0FPWTNrQnVXbzlPeHg3M0piQzFrb3Y1NVRrZWNIajJsWE9fbzQ5TzVMQ09hX2gwbkhJVmIzSklHV290MTFzRl82endOekZNMld0SEZOdTdJdTlobGx1bUM4cnZ6M0hFYnlsdlNQUVl6QlFLeThOU3lDNlQ5d2JINmNBWVktdmw1OXExSjREd0JIM0RIS29NQWVjOElubG5CT19la0phOFNNZFFNWnhvdjBCYXhKYzBXX18yOXcyU3phMGNCc01zbGZwUklXUldNYjRqTnB5dkN5RVZ4ckdmN0Fha09sMF85UDNKQ1EybzhjdWYtQkdnX3pfaVEzYVRNWVZXaV9wV3V4bmhoNU5jaGpRVThDM2R4dm5FZDBUZTltbURsdlpoLU45R1VMbzB0bHpIejNXWm5pVXA3bXhWUTNua2VTMzFNMExJSUYzU2V0U01qWHJHSl80YnpBbmIzRWpINDRlRnV2Z09pSjhDaFhMQ21ITHRJcEZhMFdTQzZZVnBCeHFmUHJ4a2UtRHlCMkx2el80Nk1TUTRpS3ZDRmhkWVd4QnR3WENaRE41RHQ0WEZwTWtuTF9WbnVWVThhNV9yUnFwRWVidl9WRjFwQlpzdmZUSzZVWEZXQUFwRnZMNGViQXB1THNGSW5HM3VrODlOMlNiZW5UVGlCR1daV1pqc0VGc3ZmM2lTRlpkUTJiZ0tTTG1KSXN1WFYxbVVQa3pHRXI4U3NQTERLaEdOWkJldnRrYS1DZm51a0VQbjdhM0tfTzVzWWNjY0V0WXd4MFZOaUM2ZFd1N0JfLXBmbGZmYTFtNHBiaGRnNktmeWtETzlfalVfTEU2OTJkaFdVemJ2OTc3ekdVbE9ubXNFTWVxbVNUbzlWNUh2MFVzRURHRWpvZTlwaUtpZG9aOEpkQXExV0lwU0JmVzlNMnd0a1pIYmkybmxhQm5LSnVUYWFOc19uV2piRzR5NzNoRXFFcVJsUU1LckxzSlU3cnNteTNoNng2LUpfdFhma0twV3VfWl9QaFItY2EyUlY0bGR3VU5lakJoQm9tZy02YmNTcTFsSFhHVHB3YzB3U0RtSVVmRTJXNlpaeXNhRnBtR3BUREZqVERxZmVlQXd3YnpTaEs3VWMtT25KVk5pUTV3MUtBTEpOalhVUlNmSTYxdnlXUkJNdEZIYUM3dDZpeHdEZnY2cHFFYTB4ZURlNHhmNFoxcWRYMVpmczR4cGRBeXpaV21zbFVzWElZRHRpVFhxNk5ZR2puQ0VQWXFuZVZHT1doUDZyZTBVZnplcXFCNnA2X0w0MlVvcUZycmpVN2puRVdSbHo2Z3hkVTlxT0pnTFgzdTZDSVl0TjZiNDR0cHNxQTIzZk5CaXVmNFNxb1lpbWJkMllWalhGUkZGTloyWHFKLXdCcVljRDV4SWZ1ZE1ONlc1Y0FENHA1Y1RRMTFfLUVxSXA4ckR4aVdPcy1QTjhTUVRJRTdaWVE2bmEtbFNJVHBjaE55YnJlRTlTcWh6bHVvWTcxRE44b1F1VUpIb25yQVc1SGhfVnJvR0J4cGJPOVhkTmh3MFhyQy1TOWlIOURERVVlZGFuTTJEem5QVVpzSEh1dEc4SDBLOUFFeVdSUzAxc0F3ckY3M1pHNTdxeTVJY2lZTUhadUZia1kwbHp3YkYtdmQxNWpnTmZQNEpUbVpEMnNWV3dWZ0k3UXA5VDJoZDB1dVpMX2h1SGwyYmFSQ3lDX0RTSTljNnAzcTlVZF90Qk5feUNjTmNVVngwclM2RUdmek04VllPR3d5aUJWQkFnVkRqQlhpS0JzVVZXQTNsamZPdFloTEtCREhrcWh2b1FhY3pTSTJmS1g3TDdjd2dYZUJkY2tvYU5obm82bUNwWkJhbXV5QloxSXk2VG5ndVFpNTlNQ0NLZGljeklwZmV1bWJTREVvdnkySWJRbVBxbGRfSkk2V091ZmdsZGlJVHUzaFhSNUtOYXphbjJtYzNOckt1MVNFWFpwZHpiNHdKWloyNlVfMXhFMkdMTUpydTA1eVpvVk5Fa043MkRoYWdNMVI1b3FId1B6UmNuM2FoZFl2VXpEb1A2VUhFcGE3NkEyM2xxYWZZN0Y5OGw2NmhtQW5YWGxFS3pFVnd0aFlveFdBTll0VnN4czlOa3ROSmROTUIzT0NNbkNvOUJXa2VmbWpscnpNSlNrQlBfMW1meE4ybzNXMXRNTlhwazVPUVBPMjBfZVdQRjNpWWhvYlNvOGZjeHpYdHc5YmcxQlhyMFRBRGowaGxfejRqdzkzd1ZHR0xsc0EzcVlzdGF5MEk5eUpnSEJabWh4YzdWMUp6Tldkd3hJRG1SZ0E1ZUNtMUVMVkJ4cEl1cDlXR1psVXMxcnp3cVh6SS0zN2k3bDNkd0ZmQ2ZfaTJnOG0tZ05RanVNNllxa1N6LVhLY24tc0pFZzFYU01ob0IxNXNnWUU5VS0yT2UtX0VHTEswZE9VMnp5SE80MEY4Z2h2aEtXcHVBY0lUWF9RbkVNcmVtd3NpQ2wwUEVuR1o5OEJYemxSdmQxTUZOYzBaVXd6Ti13VFZ4czRqTmt0ZU5icDBNaklLQTVZNkZpQ0VYNmtvTldZOWNMWFNOZzRYRzRJc1dSUXJmSW4yV1dGel9uaHpsYVpObV9OVU0xa21LUlJFUG1zdlEnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAneDVjJyA9PiBbJ01JSVIyakNDRVVNQ0FnNEVNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cnLlBIUF9FT0wuJ0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkUnLlBIUF9FT0wuJ01SZ3dGZ1lEVlFRTEV3OVhaV0pEWlhKMElGTjFjSEJ2Y25ReEdEQVdCZ05WQkFNVEQwWnlZVzVyTkVSRUlGZGwnLlBIUF9FT0wuJ1lpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXgnLlBIUF9FT0wuJ01ERXdNVEl4TnpRNVdoY05NVGN4TURBNU1USXhOelE1V2pCS01Rc3dDUVlEVlFRR0RBSktVREVPTUF3R0ExVUUnLlBIUF9FT0wuJ0NBd0ZWRzlyZVc4eEVUQVBCZ05WQkFvTUNFWnlZVzVyTkVSRU1SZ3dGZ1lEVlFRRERBOTNkM2N1WlhoaGJYQnMnLlBIUF9FT0wuJ1pTNWpiMjB3Z2hBaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJUUR3QXdnaEFLQW9JUUFRQ3JNOFd3VWgvZHhKNnonLlBIUF9FT0wuJ2JrT1doWGZMZDN5QW94eGxVVDhSRC9wNzh4bWZLb051NDRRL2YzSkN6ZHE2Zk50bEdnN3hmRHlVdWdrMTI2SW8nLlBIUF9FT0wuJ3F4eWp1aDBqdm5lUUcvUFY0dktSNzZ4WUZWbTIxdWRqTFAwQVRkbGQ4QnYyc2RiWURHQWlvYzJ4QTZ3c2xMOTInLlBIUF9FT0wuJ2k0Wm5ERnJBMTBUM1JZemhBYnpSc09tVEhFZDg1dTJaa2h0bWc0Vko2aVFNY0RtT2lSQWJNbnJtM29CRzFBNGknLlBIUF9FT0wuJ0czemlraVVDdnhFN1M4SlNJblJIaE4wQjk5dDBpNlF4eFY5S2hrR1ZrbityN0lHMCtpb0hVMmF2WEhVV29LMUgnLlBIUF9FT0wuJ3pVMnNTMTJuc0pRZkxqSXNpeVF6TWRQQWt2YmgzSHpNOUwxRUVnQzVIb2M3cXloREJDQXBqazFpYkpwa2E1WU8nLlBIUF9FT0wuJ3ZQRFF1aXYzK09OekhmSHMyVmNSUjk4YkpSMVA5dG5xakN5QjM1S20rZHVwYzljaC82N2trZnRwOUpTNXFQSzAnLlBIUF9FT0wuJ2VjWldLVkE2a1NEVG9IUVg0QzZaUVRIeTkwczl6TUxIUUlRUFhXYUZHRlBWNUZBOG1YUEdDb0RiWkkzVmpQUS8nLlBIUF9FT0wuJ25sSHhCdDhWaHgrV2tTMWxzZVoyL0F4S0trU2dSVElqeG9EM1BicnlnMVdlY0FhRWJkdzZxVHo3Z2M2KzJwbjAnLlBIUF9FT0wuJ3NoenlOUnhBdTFaZjQ4bHEvMFI0K2RhNVhxa1hETzhwekNYVDJiVHpFaDhpSDBPOFZVblBjV1N6NWZwelcxV2onLlBIUF9FT0wuJ1pWcVYrMldQeCtlWE83MWFDakNlVENFemdvM1pTbHdkeDkvZ2I2LzNOeVNGeWxFNUxOblZySG1ZODVRd1hvSFknLlBIUF9FT0wuJzVWckF5Ri9lV0wwRDBrU2tFUEZXN2I2QmxUbzF1Rzk4ZlYvZzkwMDlTZVZxdy9LVWVmaXJQaExyOVhWKzdHR2onLlBIUF9FT0wuJzdZNzlYdmJEZFhrVU1HTDZiWVAyOE5WQzhtMjZpSW5GUVRJNVpyR3g2ZTdPZ1dXcmVNMGZDYlJLSnB2QldOb3onLlBIUF9FT0wuJ0t0N2lxUzJZZWlrdTR0ZmFMRXdUZXR0TzFwY3NCcVhMNjNaZnFoTGljWEtIQS8xLzlac2x2aGlIOUVQR1N3K1AnLlBIUF9FT0wuJ1dGSC9pY2ZqYzFOaU5rR1VzTXpSaEZ2akZITVdZQk5BNVNFK2k3b3RKUnVYeE9YYlB0WmdYT1Z3cUFmQ1JaRnAnLlBIUF9FT0wuJ01aUlh4TFArSDc4aCtCa084SzNMSXVITzlZNlo4a0dHeFhXZE5zT3V2d09LOWtZZm1HNEUwZnp5LytCc0pYRGYnLlBIUF9FT0wuJ3BvQ01md0dlWndkRFFpWlJUQmVpSUhXSlpKWUhmSFhGMWljREpCL2xGWFk4cnpyQlZ6Z1FGSEZib3g0a2RabXYnLlBIUF9FT0wuJzZRV0FlMXpDVGJLend4N0F2ekdVcXpWTHJnQThCYTBQNWF3c1lTZFJVeDh6a1M1YU9oTDJRSGdFamdNTG96UzcnLlBIUF9FT0wuJ0lPTm9LNFc3elRBeVpaL0gwTGY1amJIdVhrdkRRYmlCRnhTVDRYYzQyMHArekV5b0NaWHBwUldSZVoyUmZrc3QnLlBIUF9FT0wuJ3JYVGtLa2hXcCtVempRSStYbWFWVVlRV1ZOLzI3VE55WEpEVC82cGEzdnhuT1NtaVUrUDFjb2VLUjFnRDhNcHUnLlBIUF9FT0wuJysxK0MyQTBMVHNZakFGeTJoQ3c2c29ZN0dLQjViT3NEQjlMMUxsYTN1Rzl5elpIUmpUaXRlaDVKTTlzZFl1NmEnLlBIUF9FT0wuJ3dsZ3ZFTFljKzFxYmNqRkFuTUtXTWc0VUhsS3FMMVlzN21YL0tPWlFaTFlYUExrT1M3SVc0TGVqdjJzSDVXN1QnLlBIUF9FT0wuJ09rZERtd2QxdkppUisrTGRCbkhpTXU2UGFTTDdmL1ZDUHRGOVYxM1hKWjY1MmNWVExsQVo5YUhmNVdob3IxUWgnLlBIUF9FT0wuJ25VUjVmcmFqQmRNWTA0bWkrZjNJeDNCdGViTHZtcXVROWRwMFZBYmVXZTZxcjlSeDN4a0JnbS9COUJ2cTZGTksnLlBIUF9FT0wuJy9XUklVS25ITEpwSUZpTXRUamhBTVhvVkdIOUFjc3dFellOVnF3NVBTR3dYWlJhd2hkU2Q2Z2tlVCtwVmxKR2EnLlBIUF9FT0wuJ1BrUU5vaXRZQlFSbDh2K0I2TEJ4YmY4dmRqMkpvY3lRSDNkOGMyeFVTa3VaTTc2OHNka2RnM1J6NlFvMVVIRC8nLlBIUF9FT0wuJ2pURVpubG1BOG1WUGdsbFc4RXE0SGFSclk2eEl0eEZkbS9ObGxsT2V0RWR2LzEyZUFhUVdralNCenFBVzdaM1cnLlBIUF9FT0wuJ1k4Z2dXbm9sTHNBbmoreGdvVGpMRzRZYnNpd0RnU3VjMEVRcjFLdlZkSzdUOHA5d2kvcmQyYjhESnNPRFcrYW8nLlBIUF9FT0wuJ3dzS1hrU0kvMDRnV3haMGd6amIzdlE4ZjJIeEdMc3BTZlFQbmRGSkZXUlhmdzFiZlhZRFlsZ0lkOFI5c2pIS0onLlBIUF9FT0wuJ3NRaXV5NnlKdjN6SG9GNTJIN2NHbXhiS0tIWmVVTlBvQVhBbDBQUnh6OVIvbnBXcS8zQnBTMnhMSDdYRUhDV0onLlBIUF9FT0wuJ25ma3dxcjRoOVhxRnd1Y1dBdUhHeXBxUlh4b1VzQVRNanhTV2Q1M3JPTkVBTGJ4cG9NNWx3VjBvUXdQVEFjOVInLlBIUF9FT0wuJ2J6NzFSTkRFQ0M2RHlpMFFoTlpLUXE1dkpkdDJoK2xWcjFmQ09yWDZNdHZoN0tXcDdMUkdpUXFzYzdvSHNYY3EnLlBIUF9FT0wuJzFRWHhteWJTWVlTRHVlOVNHTVFFVXZjQ3FRdVI3azF2L3Z5NnB2ZTNOa1hlSTdxQ0VRMXF2MnpVTlFoaW8yUnMnLlBIUF9FT0wuJ3hKNkh1eWFBUkg4OEZRSFF3WXlwR2ZIeXB5dm0zbklFUzZ0bnVxcnY0dGlnazZoenBUQm8rdEEzOEFWR2k3aTYnLlBIUF9FT0wuJ0NKR3ZFaXU4N0NzTSt2akxiT2lMMWNxY0VHNWd5ZTNZQ1FaVUkwZ0RSWTRxQ1o3SGpIL1kydUxZbVZHSjRBL0EnLlBIUF9FT0wuJzA5OWJrOHVUSTlWRi9EUjAzT0dEdHl3eVhWWnkxM0RVbWtjbUdBeXpDNkZpRkZZYkxOaFlUaGxUeVc5QmFvRGonLlBIUF9FT0wuJ1l3NHA5U0xFQlhndVlUTWJQWjVGQkk4WmFNc0x6bjZaekYvKyt5eVlQNlp1NGtDUE9Vc1BQUENXV3RNTUpDdTMnLlBIUF9FT0wuJ1h3Tisya0FBZUVQbUViWWVaQWYxRVBOeExleWVJakhpbmJQS29FZFZDeFl6dmdHVkNOczRPT0FkRWQ2dE9ERmgnLlBIUF9FT0wuJ28yYUhncEVEZnlXWnYyaWF0U0VqWkRRdVBrSVhhaC84Q2wzdCtqeTdvdWtHbDBTMkt1U2YvdjcyODgrSVo2c0snLlBIUF9FT0wuJ1ZYcVZLT2cyTDhqK0VjS2Q0Q3I3Y3BtcnVFemxlV0lrKzlTdkN6K2JSZm1mcjk5ck4yVDZBNmlFUzRYUUNyL1UnLlBIUF9FT0wuJ2pucmZleEw0TWFzWEpxZllydWg2Z0VaQTMzM2o2VEI1TkhTVXVTalhpY0xuQ2UrTE51eS91d05RMGxPTXpzc3gnLlBIUF9FT0wuJ2dpdUVvUWd0T09NWkRwYTRLUmlGQzR6aEVDZkh2aU1VaHlGYnlsTFcwU2RSd2c3SUZhQVVIMHpiTjFzMlltRHUnLlBIUF9FT0wuJzhmamVhWmZqVHlNeGhVcXowSkRQWmp0VzdmZExSMUtuMnhiRXpVcFJFUVZYTFhGTnRXQW8zRXZFN05lSXM2T2InLlBIUF9FT0wuJzl2Z1NKOEFkbUg4cE4vUTg2YmxFUkpUNU5LczdiM0xtbTVNY3Y0OHU0NFRmU092RmRvcUZibFRPWkF0UXlFRVknLlBIUF9FT0wuJ2p1QjVnL3A4VHBESEpTTFNBUCswdDB5YlBGT1ZtSTVlUVRvZWNGRDdjQ3ZuaTRENUVWU0dmTlQ1ZFBmQ2I3NTQnLlBIUF9FT0wuJ2cyeStyS3NjTEl0Q1dZenZWb0ZlY3lVZm1EUTBtTjJialpkSjV4T2lsWjhVSjl3MTdYNjUrbFM0d1lhRFFMY3YnLlBIUF9FT0wuJ0ZVM2wrUk9ZSGIvcUJxTFFBZUhoMDJGNThhUW9Kbms1eEkyMEQ5UlFqV2Nxdi9DQTlNamhmVnhxMDMxRVQyWXgnLlBIUF9FT0wuJ2lFNjM0am1BNVZFS0tIRU54UndHWFpxbFJvVXI2TWMrem1zQUdxSEtSdUw5MDVMN1BMallqenBWeTdnSDcvUVknLlBIUF9FT0wuJzJWRWc5RXRsWVVpRTFITCtSOEk2cmlSdmhJcjBPTk84ZXhxcnBoWXlndjBtVGNtS3E4ZmpLc3hucFA1Y1FWMG4nLlBIUF9FT0wuJ3dNWkp6aldXalZnbkNFVlM3UjRac1lVckhKUUdzZS9XWDBISSt1cFpxSjZtY0VHeDFyakx3YmRLaUlKK2QzQ1InLlBIUF9FT0wuJ3U4dDRUbktSaUM2cyttUmhmOXRxN1krcXlnQ1NJbjhhWnVLMHFsY1B2VUxrK2JPL011K25HU0FMcUZDcjYvZ3YnLlBIUF9FT0wuJ2hZdDZVQU84R2w2S1JmMlRiZXFGSGtmZWFUTTE0eG1BZktnV0t6TFhyVndPQTZWeURyaURvTFpUTWtxVnZrTFcnLlBIUF9FT0wuJzA2VkRBemQ5MmJ0eU1FbGM2TzdHQ0x3VERIcWkvM1I1NXFvZ1I4VytkUzdYOGdMKzBXOTcwLzlTemJVQ1RuZS8nLlBIUF9FT0wuJ0JLMlVlNTVnZTE1MG13ZUR6Z0xrK20zL1BVc1ZIY2VIeWJXazZlVnZlUW5EbDRhbSt4ZkI1bXNnZzNSeS9EUDQnLlBIUF9FT0wuJzFuK2lzakdNL0V0L2JmREw3TDZXRTVzclhzRjlmV0Q2bnZuMWUxRkpvYmhHUDlCNTFxNWNjQUQ1SXFDL0FBNWonLlBIUF9FT0wuJ2VRRzVhajA3SEh2Y2xzTFdTaS9ubE9SNXdlUGFWYzcramowN2tzSTVyK0hTY2NoVnZja2daYWkzWFd3WC9yUEEnLlBIUF9FT0wuJzNNVXpaYTBjVTI3c2k3MkdXVzZZTHl1L1BjY1J2S1c5STlCak1GQXJMdzFMSUxwUDNCc2Zwd0JoajYrWG4yclUnLlBIUF9FT0wuJ25nUEFFZmNNY3Fnd0I1endpZVdjRTc5NlFscnhJeDFBeG5HaS9RRnJFbHpSYi8vYjNEWkxOclJ3R3d5eVYrbEUnLlBIUF9FT0wuJ2haRll4dmlNMm5LOExJUlhHc1ovc0JxUTZYVC8wL2NrSkRhanh5NS80RWFEL1ArSkRkcE14aFZhTCtsYTdHZUcnLlBIUF9FT0wuJ0hrMXlHTkJUd0xkM0crY1IzUk43MmFZT1c5bUg0MzBaUXVqUzJYTWZQZFptZUpTbnViRlZEZWVSNUxmVXpRc2cnLlBIUF9FT0wuJ2dYZEo2MUl5TmVzWW4vaHZNQ2R2Y1NNZmpoNFc2K0E2SW53S0Zjc0tZY3UwaWtWclJaSUxwaFdrSEdwOCt2R1InLlBIUF9FT0wuJzc0UElIWXUvUC9qb3hKRGlJcThJV0YxaGJFRzNCY0prTTNrTzNoY1dreVNjdjlXZTVWVHhybit0R3FrUjV1LzknLlBIUF9FT0wuJ1VYV2tGbXk5OU1ycFJjVllBQ2tXOHZoNXNDbTR1d1VpY2JlNlR6MDNaSnQ2ZE5PSUVaWmxabU93UVd5OS9lSkknLlBIUF9FT0wuJ1ZsMURadUFwSXVZa2l5NWRYV1pRK1RNWVN2eEt3OHNNcUVZMWtGNisyUnI0SitlNlFRK2Z0cmNyODdteGh4eHcnLlBIUF9FT0wuJ1MxakRIUlUySUxwMWE3c0gvNmwrVjk5cldiaWx1RjJEb3AvS1FNNzMrTlQ4c1RyM1oyRlpUTnUvM3Z2TVpTVTYnLlBIUF9FT0wuJ2Vhd1F4NnFaSk9qMVhrZS9SU3dRTVlTT2g3Mm1JcUoyaG53bDBDclZZaWxJRjliMHpiQzJSa2R1TGFlVm9HY28nLlBIUF9FT0wuJ201TnBvMnorZGFOc2JqTHZlRVNvU3BHVkF3cXN1d2xUdXV5YkxlSHJIcjRuKzFkK1FxbGE3OW44K0ZINXhyWkYnLlBIUF9FT0wuJ1hpVjNCUTE2TUdFR2lhRDdwdHhLcldVZGNaT25CelRCSU9ZaFI4VFpicGxuS3hvV21ZYWxNTVdOTU9wOTU0REQnLlBIUF9FT0wuJ0J2TktFcnRSejQ2Y2xVMkpEbkRVb0FzazJOZFJGSjhqclcvSlpFRXkwVWRvTHUzcUxIQU4rL3Ftb1JyVEY0TjcnLlBIUF9FT0wuJ2pGL2huV3AxZlZsK3pqR2wwRExObGFheVZTeGNoZ08ySk5lcm8xZ2FPY0lROWlxZDVVWTVhRS9xdDdSUi9ONnEnLlBIUF9FT0wuJ29IcW5yOHZqWlNpb1d1dU5UdU9jUlpHWFBxREYxVDJvNG1BdGZlN29JaGkwM3B2amkybXlvRGJkODBHSzUvaEsnLlBIUF9FT0wuJ3FoaUtadDNaaFdOY1ZFVVUxblplb243QUdwaHdQbkVoKzUwdzNwYmx3QVBpbmx4TkRYWC80U29pbnlzUEdKWTYnLlBIUF9FT0wuJ3o0ODN4SkJNZ1R0bGhEcWRyNlZJaE9seUUzSnV0NFQxS3FIT1c2aGp2VU0zeWhDNVFrZWllc0Jia2VIOVd1Z1knLlBIUF9FT0wuJ0hHbHM3MWQwMkhEUmVzTDVMMklmME1NUlI1MXFjellQT2M5Um13Y2U2MGJ3ZlFyMEFUSlpGTFRXd0RDc1h2ZGsnLlBIUF9FT0wuJ2JudXJMa2h5Smd3ZG00VnVSalNYUEJzWDY5M1htT0ExOC9nbE9aa1BheFZiQldBanRDbjFQYUYzUzY1a3YrRzQnLlBIUF9FT0wuJ2VYWnRwRUxJTDhOSWoxenFuZXIxUjMrMEUzL0lKdzF4UlhIU3RMb1FaL016eFZnNGJES0lGVUVDQlVPTUZlSW8nLlBIUF9FT0wuJ0d4UlZZRGVXTjg2MWlFc29FTWVTcUcraEJwek5Jalo4cGZzdnR6Q0JkNEYxeVNobzJHZWpxWUtsa0ZxYTdJRm4nLlBIUF9FT0wuJ1VqTHBPZUM1Q0xuMHdJSXAySnpNaWw5NjZadElNU2kvTFlodENZK3FWMzhranBZNjUrQ1YySWhPN2VGZEhrbzEnLlBIUF9FT0wuJ3JOcWZhWnpjMnNxN1ZJUmRtbDNOdmpBbGxuYnBUL1hFVFlZc3dtdTdUbkptaFUwU1EzdllPRnFBelZIbWlvZkEnLlBIUF9FT0wuJy9ORnlmZHFGMWk5VE1PZy9wUWNTbHJ2b0RiZVdwcDlqc1gzeVhycUdZQ2RkZVVRck1SWEMyRmlqRllBMWkxV3onLlBIUF9FT0wuJ0d6MDJTMDBsMDB3SGM0SXljS2owRmFSNSthT1d2TXdsS1FFLy9XWi9FM2FqZGJXMHcxZW1UazVBODdiVDk1WTgnLlBIUF9FT0wuJ1hlSmlHaHRLang5ekhOZTNEMXVEVUZldlJNQU9QU0dYL1BpUEQzZkJVWVl1V3dEZXBpeTFyTFFqM0ltQWNGbWEnLlBIUF9FT0wuJ0hGenRYVW5NMVozREVnT1pHQURsNEtiVVF0VUhHa2k2bjFZWm1WU3pXdlBDcGZNajdmdUx1WGQzQVY4Si8rTGEnLlBIUF9FT0wuJ0R5YjZBMUNPNHpwaXFSTFA1Y3B5ZjZ3a1NEVmRJeUdnSFhteUJnVDFUN1k1Nzc4UVlzclIwNVRiUEljN2pRWHknLlBIUF9FT0wuJ0NHK0VwYW00QndoTmY5Q2NReXQ2YkN5SUtYUThTY1puM3dGZk9WRzkzVXdVMXpSbFRETTM3Qk5YR3ppTTJTMTQnLlBIUF9FT0wuJzF1blF5TWdvRGxqb1dJSVJmcVNnMVpqMXd0ZEkyRGhjYmdpeFpGQ3Q4aWZaWllYUCtlSE9WcGsyYjgxUXpXU1knLlBIUF9FT0wuJ3BGRVErYXk5QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFUUElOay8xN0grUkx6NDU5aUNWUUFHZXMnLlBIUF9FT0wuJzhrYzVzeFlqM0NrTWxXckdNaUN4dnNndTJrYWs2ZENhMGYzRGZpVnQ1NEZyeTdzME9rbEhpWm1pcG9pRjRSQ3QnLlBIUF9FT0wuJ3lKd1VTQXpSclpGQWJrcERnOG9JdTRVaS9CdDEza1k3eE9OK3U0bTBJZ2tMWlNFKzhCU2pNcmZqVnZWeGUrcUgnLlBIUF9FT0wuJzVpN1gvaWJVVERqZ3lmZEE4WEk9J10sCiAgICAgICAgICAgICd4NXQnID0+ICdLR0FwTHliSFdKbUJ3WkdnQmswN0FsUkQ5blUnLAogICAgICAgICAgICAneDV0IzI1NicgPT4gJ1lEMTJrNmtjNHh1aF81dkVITXl5T0ZwR3M2VnFUeWFLTWx4ZzBOdDJjckEnLCBdLAogICAgICAgICRyZXN1bHQtPmFsbCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVGcm9tMzJrUlNBQ2VydGlmaWNhdGVGaWxlSW5QRU1Gb3JtYXQoKQogICAgewogICAgICAgICRyZXN1bHQgPSBKV0tGYWN0b3J5OjpjcmVhdGVGcm9tQ2VydGlmaWNhdGVGaWxlKF9fRElSX18uJy9SU0EvUEVNLzMyay1yc2EtZXhhbXBsZS1jZXJ0LnBlbScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICdxelBGc0ZJZjNjU2VzMjVEbG9WM3kzZDhnS01jWlZFX0VRXzZlX01abnlxRGJ1T0VQMzl5UXMzYXVuemJaUm9POFh3OGxMb0pOZHVpS0tzY283b2RJNzUza0J2ejFlTHlrZS1zV0JWWnR0Ym5ZeXo5QUUzWlhmQWI5ckhXMkF4Z0lxSE5zUU9zTEpTX2RvdUdad3hhd05kRTkwV000UUc4MGJEcGt4eEhmT2J0bVpJYlpvT0ZTZW9rREhBNWpva1FHeko2NXQ2QVJ0UU9JaHQ4NHBJbEFyOFJPMHZDVWlKMFI0VGRBZmZiZEl1a01jVmZTb1pCbFpKX3EteUJ0UG9xQjFObXIxeDFGcUN0UjgxTnJFdGRwN0NVSHk0eUxJc2tNekhUd0pMMjRkeDh6UFM5UkJJQXVSNkhPNnNvUXdRZ0tZNU5ZbXlhWkd1V0RyencwTG9yOV9qamN4M3g3TmxYRVVmZkd5VWRUX2JaNm93c2dkLVNwdm5icVhQWElmLXU1Skg3YWZTVXVhanl0SG5HVmlsUU9wRWcwNkIwRi1BdW1VRXg4dmRMUGN6Q3gwQ0VEMTFtaFJoVDFlUlFQSmx6eGdxQTIyU04xWXowUDU1UjhRYmZGWWNmbHBFdFpiSG1kdndNU2lwRW9FVXlJOGFBOXoyNjhvTlZubkFHaEczY09xazgtNEhPdnRxWjlMSWM4alVjUUx0V1gtUEphdjlFZVBuV3VWNnBGd3p2S2N3bDA5bTA4eElmSWg5RHZGVkp6M0Zrcy1YNmMxdFZvMlZhbGZ0bGo4Zm5senU5V2dvd25rd2hNNEtOMlVwY0hjZmY0Ry12OXpja2hjcFJPU3paMWF4NW1QT1VNRjZCMk9WYXdNaGYzbGk5QTlKRXBCRHhWdTItZ1pVNk5iaHZmSDFmNFBkTlBVbmxhc1B5bEhuNHF6NFM2X1YxZnV4aG8tMk9fVjcydzNWNUZEQmktbTJEOXZEVlF2SnR1b2lKeFVFeU9XYXhzZW51em9GbHEzak5Id20wU2lhYndWamFNeXJlNHFrdG1Ib3BMdUxYMml4TUUzcmJUdGFYTEFhbHktdDJYNm9TNG5GeWh3UDlmX1diSmI0WWhfUkR4a3NQajFoUl80bkg0M05UWWpaQmxMRE0wWVJiNHhSekZtQVRRT1VoUG91NkxTVWJsOFRsMno3V1lGemxjS2dId2tXUmFUR1VWOFN6X2gtX0lmZ1pEdkN0eXlMaHp2V09tZkpCaHNWMW5UYkRycjhEaXZaR0g1aHVCTkg4OHZfZ2JDVnczNmFBakg4Qm5tY0hRMEltVVV3WG9pQjFpV1NXQjN4MXhkWW5BeVFmNVJWMlBLODZ3VmM0RUJSeFc2TWVKSFdaci1rRmdIdGN3azJ5czhNZXdMOHhsS3MxUzY0QVBBV3RELVdzTEdFblVWTWZNNUV1V2pvUzlrQjRCSTREQzZNMHV5RGphQ3VGdTgwd01tV2Z4OUMzLVkyeDdsNUx3MEc0Z1JjVWstRjNPTnRLZnN4TXFBbVY2YVVWa1htZGtYNUxMYTEwNUNwSVZxZmxNNDBDUGw1bWxWR0VGbFRmOXUwemNseVEwXy1xV3Q3OFp6a3BvbFBqOVhLSGlrZFlBX0RLYnZ0Zmd0Z05DMDdHSXdCY3RvUXNPcktHT3hpZ2VXenJBd2ZTOVM1V3Q3aHZjczJSMFkwNHJYb2VTVFBiSFdMdW1zSllMeEMySFB0YW0zSXhRSnpDbGpJT0ZCNVNxaTlXTE81bF95am1VR1MyRnp5NURrdXlGdUMzbzc5ckItVnUwenBIUTVzSGRieVlrZnZpM1FaeDRqTHVqMmtpLTNfMVFqN1JmVmRkMXlXZXVkbkZVeTVRR2ZXaDMtVm9hSzlVSVoxRWVYNjJvd1hUR05PSm92bjl5TWR3YlhteTc1cXJrUFhhZEZRRzNsbnVxcV9VY2Q4WkFZSnZ3ZlFiNnVoVFN2MWtTRkNweHl5YVNCWWpMVTQ0UURGNkZSaF9RSExNQk0yRFZhc09UMGhzRjJVV3NJWFVuZW9KSGtfcVZaU1JtajVFRGFJcldBVUVaZkxfZ2Vpd2NXM19MM1k5aWFITWtCOTNmSE5zVkVwTG1UTy12TEhaSFlOMGMta0tOVkJ3XzQweEdaNVpnUEpsVDRKWlZ2Qkt1QjJrYTJPc1NMY1JYWnZ6WlpaVG5yUkhiXzlkbmdHa0ZwSTBnYzZnRnUyZDFtUElJRnA2SlM3QUo0X3NZS0U0eXh1R0c3SXNBNEVybk5CRUs5U3IxWFN1MF9LZmNJdjYzZG1fQXliRGcxdm1xTUxDbDVFaVA5T0lGc1dkSU00Mjk3MFBIOWg4Umk3S1VuMEQ1M1JTUlZrVjM4TlczMTJBMkpZQ0hmRWZiSXh5aWJFSXJzdXNpYjk4eDZCZWRoLTNCcHNXeWloMlhsRFQ2QUZ3SmREMGNjX1VmNTZWcXY5d2FVdHNTeC0xeEJ3bGlaMzVNS3EtSWZWNmhjTG5GZ0xoeHNxYWtWOGFGTEFFekk4VWxuZWQ2empSQUMyOGFhRE9aY0ZkS0VNRDB3SFBVVzgtOVVUUXhBZ3VnOG90RUlUV1NrS3VieVhiZG9mcFZhOVh3anExLWpMYjRleWxxZXkwUm9rS3JITzZCN0YzS3RVRjhac20wbUdFZzdudlVoakVCRkwzQXFrTGtlNU5iXzc4dXFiM3R6WkYzaU82Z2hFTmFyOXMxRFVJWXFOa2JNU2VoN3NtZ0VSX1BCVUIwTUdNcVJueDhxY3I1dDV5QkV1clo3cXE3LUxZb0pPb2M2VXdhUHJRTl9BRlJvdTR1Z2lScnhJcnZPd3JEUHI0eTJ6b2k5WEtuQkJ1WU1udDJBa0dWQ05JQTBXT0tnbWV4NHhfMk5yaTJKbFJpZUFQd05QZlc1UExreVBWUmZ3MGROemhnN2NzTWwxV2N0ZHcxSnBISmhnTXN3dWhZaFJXR3l6WVdFNFpVOGx2UVdxQTQyTU9LZlVpeEFWNExtRXpHejJlUlFTUEdXakxDODUtbWN4Zl92c3NtRC1tYnVKQWp6bExEenp3bGxyVERDUXJ0MThEZnRwQUFIaEQ1aEcySG1RSDlSRHpjUzNzbmlJeDRwMnp5cUJIVlFzV003NEJsUWpiT0RqZ0hSSGVyVGd4WWFObWg0S1JBMzhsbWI5b21yVWhJMlEwTGo1Q0Yyb2ZfQXBkN2ZvOHU2THBCcGRFdGlya25fNy05dlBQaUdlckNsVjZsU2pvTmlfSV9oSENuZUFxLTNLWnE3aE01WGxpSlB2VXJ3c19tMFg1bjZfZmF6ZGstZ09vaEV1RjBBcV8xSTU2MzNzUy1ER3JGeWFuMks3b2VvQkdRTjk5NC1rd2VUUjBsTGtvMTRuQzV3bnZpemJzdjdzRFVOSlRqTTdMTVlJcmhLRUlMVGpqR1E2V3VDa1loUXVNNFJBbng3NGpGSWNoVzhwUzF0RW5VY0lPeUJXZ0ZCOU0yemRiTm1KZzd2SDQzbW1YNDA4ak1ZVktzOUNRejJZN1Z1MzNTMGRTcDlzV3hNMUtVUkVGVnkxeFRiVmdLTnhMeE96WGlMT2ptX2I0RWlmQUhaaF9LVGYwUE9tNVJFU1UtVFNyTzI5eTVwdVRITC1QTHVPRTMwanJ4WGFLaFc1VXptUUxVTWhCR0k3Z2VZUDZmRTZReHlVaTBnRF90TGRNbXp4VGxaaU9Ya0U2SG5CUS0zQXI1NHVBLVJGVWhuelUtWFQzd20tLWVJTnN2cXlySEN5TFFsbU03MWFCWG5NbEg1ZzBOSmpkbTQyWFNlY1RvcFdmRkNmY05lMS11ZnBVdU1HR2cwQzNMeFZONWZrVG1CMl82Z2FpMEFIaDRkTmhlZkdrS0NaNU9jU050QV9VVUkxbktyX3dnUFRJNFgxY2F0TjlSRTltTVloT3QtSTVnT1ZSQ2loeERjVWNCbDJhcFVhRkstakhQczVyQUJxaHlrYmlfZE9TLXp5NDJJODZWY3U0Qi1fMEdObFJJUFJMWldGSWhOUnlfa2ZDT3E0a2I0U0s5RGpUdkhzYXE2WVdNb0w5SmszSmlxdkg0eXJNWjZULVhFRmRKOERHU2M0MWxvMVlKd2hGVXUwZUdiR0ZLeHlVQnJIdjFsOUJ5UHJxV2FpZXBuQkJzZGE0eThHM1NvaUNmbmR3a2J2TGVFNXlrWWd1clBwa1lYX2JhdTJQcXNvQWtpSl9HbWJpdEtwWEQ3MUM1UG16dnpMdnB4a2dDNmhRcS12NEw0V0xlbEFEdkJwZWlrWDlrMjNxaFI1SDNta3pOZU1aZ0h5b0Zpc3kxNjFjRGdPbGNnNjRnNkMyVXpKS2xiNUMxdE9sUXdNM2ZkbTdjakJKWE9qdXhnaThFd3g2b3Y5MGVlYXFJRWZGdm5VdTFfSUNfdEZ2ZTlQX1VzMjFBazUzdndTdGxIdWVZSHRlZEpzSGc4NEM1UHB0X3oxTEZSM0hoOG0xcE9ubGIza0p3NWVHcHZzWHdlWnJJSU4wY3Z3ei1OWl9vckl4alB4TGYyM3d5LXktbGhPYksxN0JmWDFnLXA3NTlYdFJTYUc0UmpfUWVkYXVYSEFBLVNLZ3Z3QU9ZM2tCdVdvOU94eDczSmJDMWtvdjU1VGtlY0hqMmxYT19vNDlPNUxDT2FfaDBuSElWYjNKSUdXb3QxMXNGXzZ6d056Rk0yV3RIRk51N0l1OWhsbHVtQzhydnozSEVieWx2U1BRWXpCUUt5OE5TeUM2VDl3Ykg2Y0FZWS12bDU5cTFKNER3QkgzREhLb01BZWM4SW5sbkJPX2VrSmE4U01kUU1aeG92MEJheEpjMFdfXzI5dzJTemEwY0JzTXNsZnBSSVdSV01iNGpOcHl2Q3lFVnhyR2Y3QWFrT2wwXzlQM0pDUTJvOGN1Zi1CR2dfel9pUTNhVE1ZVldpX3BXdXhuaGg1TmNoalFVOEMzZHh2bkVkMFRlOW1tRGx2WmgtTjlHVUxvMHRsekh6M1dabmlVcDdteFZRM25rZVMzMU0wTElJRjNTZXRTTWpYckdKXzRiekFuYjNFakg0NGVGdXZnT2lKOENoWExDbUhMdElwRmEwV1NDNllWcEJ4cWZQcnhrZS1EeUIyTHZ6XzQ2TVNRNGlLdkNGaGRZV3hCdHdYQ1pETjVEdDRYRnBNa25MX1ZudVZVOGE1X3JScXBFZWJ2X1ZGMXBCWnN2ZlRLNlVYRldBQXBGdkw0ZWJBcHVMc0ZJbkczdWs4OU4yU2JlblRUaUJHV1pXWmpzRUZzdmYzaVNGWmRRMmJnS1NMbUpJc3VYVjFtVVBrekdFcjhTc1BMREtoR05aQmV2dGthLUNmbnVrRVBuN2EzS19PNXNZY2NjRXRZd3gwVk5pQzZkV3U3Ql8tcGZsZmZhMW00cGJoZGc2S2Z5a0RPOV9qVV9MRTY5MmRoV1V6YnY5Nzd6R1VsT25tc0VNZXFtU1RvOVY1SHYwVXNFREdFam9lOXBpS2lkb1o4SmRBcTFXSXBTQmZXOU0yd3RrWkhiaTJubGFCbktKdVRhYU5zX25XamJHNHk3M2hFcUVxUmxRTUtyTHNKVTdyc215M2g2eDYtSl90WGZrS3BXdV9aX1BoUi1jYTJSVjRsZHdVTmVqQmhCb21nLTZiY1NxMWxIWEdUcHdjMHdTRG1JVWZFMlc2Wlp5c2FGcG1HcFRERmpURHFmZWVBd3dielNoSzdVYy1PbkpWTmlRNXcxS0FMSk5qWFVSU2ZJNjF2eVdSQk10RkhhQzd0Nml4d0RmdjZwcUVhMHhlRGU0eGY0WjFxZFgxWmZzNHhwZEF5elpXbXNsVXNYSVlEdGlUWHE2TllHam5DRVBZcW5lVkdPV2hQNnJlMFVmemVxcUI2cDZfTDQyVW9xRnJyalU3am5FV1JsejZneGRVOXFPSmdMWDN1NkNJWXRONmI0NHRwc3FBMjNmTkJpdWY0U3FvWWltYmQyWVZqWEZSRkZOWjJYcUotd0JxWWNENXhJZnVkTU42VzVjQUQ0cDVjVFExMV8tRXFJcDhyRHhpV09zLVBOOFNRVElFN1pZUTZuYS1sU0lUcGNoTnlicmVFOVNxaHpsdW9ZNzFETjhvUXVVSkhvbnJBVzVIaF9Wcm9HQnhwYk85WGROaHcwWHJDLVM5aUg5RERFVWVkYW5NMkR6blBVWnNISHV0RzhIMEs5QUV5V1JTMDFzQXdyRjczWkc1N3F5NUljaVlNSFp1RmJrWTBsendiRi12ZDE1amdOZlA0SlRtWkQyc1ZXd1ZnSTdRcDlUMmhkMHV1WkxfaHVIbDJiYVJDeUNfRFNJOWM2cDNxOVVkX3RCTl95Q2NOY1VWeDByUzZFR2Z6TThWWU9Hd3lpQlZCQWdWRGpCWGlLQnNVVldBM2xqZk90WWhMS0JESGtxaHZvUWFjelNJMmZLWDdMN2N3Z1hlQmRja29hTmhubzZtQ3BaQmFtdXlCWjFJeTZUbmd1UWk1OU1DQ0tkaWN6SXBmZXVtYlNERW92eTJJYlFtUHFsZF9KSTZXT3VmZ2xkaUlUdTNoWFI1S05hemFuMm1jM05yS3UxU0VYWnBkemI0d0paWjI2VV8xeEUyR0xNSnJ1MDV5Wm9WTkVrTjcyRGhhZ00xUjVvcUh3UHpSY24zYWhkWXZVekRvUDZVSEVwYTc2QTIzbHFhZlk3Rjk4bDY2aG1BblhYbEVLekVWd3RoWW94V0FOWXRWc3hzOU5rdE5KZE5NQjNPQ01uQ285QldrZWZtamxyek1KU2tCUF8xbWZ4TjJvM1cxdE1OWHBrNU9RUE8yMF9lV1BGM2lZaG9iU284ZmN4elh0dzliZzFCWHIwVEFEajBobF96NGp3OTN3VkdHTGxzQTNxWXN0YXkwSTl5SmdIQlptaHhjN1YxSnpOV2R3eElEbVJnQTVlQ20xRUxWQnhwSXVwOVdHWmxVczFyendxWHpJLTM3aTdsM2R3RmZDZl9pMmc4bS1nTlFqdU02WXFrU3otWEtjbi1zSkVnMVhTTWhvQjE1c2dZRTlVLTJPZS1fRUdMSzBkT1UyenlITzQwRjhnaHZoS1dwdUFjSVRYX1FuRU1yZW13c2lDbDBQRW5HWjk4Qlh6bFJ2ZDFNRk5jMFpVd3pOLXdUVnhzNGpOa3RlTmJwME1qSUtBNVk2RmlDRVg2a29OV1k5Y0xYU05nNFhHNElzV1JRcmZJbjJXV0Z6X25oemxhWk5tX05VTTFrbUtSUkVQbXN2UScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICd4NWMnID0+IFsnTUlJUjJqQ0NFVU1DQWc0RU1BMEdDU3FHU0liM0RRRUJCUVVBTUlHYk1Rc3dDUVlEVlFRR0V3SktVREVPTUF3RycuUEhQX0VPTC4nQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRScuUEhQX0VPTC4nTVJnd0ZnWURWUVFMRXc5WFpXSkRaWEowSUZOMWNIQnZjblF4R0RBV0JnTlZCQU1URDBaeVlXNXJORVJFSUZkbCcuUEhQX0VPTC4nWWlCRFFURWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVWMzVndjRzl5ZEVCbWNtRnVhelJrWkM1amIyMHdIaGNOTVRJeCcuUEhQX0VPTC4nTURFd01USXhOelE1V2hjTk1UY3hNREE1TVRJeE56UTVXakJLTVFzd0NRWURWUVFHREFKS1VERU9NQXdHQTFVRScuUEhQX0VPTC4nQ0F3RlZHOXJlVzh4RVRBUEJnTlZCQW9NQ0VaeVlXNXJORVJFTVJnd0ZnWURWUVFEREE5M2QzY3VaWGhoYlhCcycuUEhQX0VPTC4nWlM1amIyMHdnaEFpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElRRHdBd2doQUtBb0lRQVFDck04V3dVaC9keEo2eicuUEhQX0VPTC4nYmtPV2hYZkxkM3lBb3h4bFVUOFJEL3A3OHhtZktvTnU0NFEvZjNKQ3pkcTZmTnRsR2c3eGZEeVV1Z2sxMjZJbycuUEhQX0VPTC4ncXh5anVoMGp2bmVRRy9QVjR2S1I3NnhZRlZtMjF1ZGpMUDBBVGRsZDhCdjJzZGJZREdBaW9jMnhBNndzbEw5MicuUEhQX0VPTC4naTRabkRGckExMFQzUll6aEFielJzT21USEVkODV1MlpraHRtZzRWSjZpUU1jRG1PaVJBYk1ucm0zb0JHMUE0aScuUEhQX0VPTC4nRzN6aWtpVUN2eEU3UzhKU0luUkhoTjBCOTl0MGk2UXh4VjlLaGtHVmtuK3I3SUcwK2lvSFUyYXZYSFVXb0sxSCcuUEhQX0VPTC4nelUyc1MxMm5zSlFmTGpJc2l5UXpNZFBBa3ZiaDNIek05TDFFRWdDNUhvYzdxeWhEQkNBcGprMWliSnBrYTVZTycuUEhQX0VPTC4ndlBEUXVpdjMrT056SGZIczJWY1JSOThiSlIxUDl0bnFqQ3lCMzVLbStkdXBjOWNoLzY3a2tmdHA5SlM1cVBLMCcuUEhQX0VPTC4nZWNaV0tWQTZrU0RUb0hRWDRDNlpRVEh5OTBzOXpNTEhRSVFQWFdhRkdGUFY1RkE4bVhQR0NvRGJaSTNWalBRLycuUEhQX0VPTC4nbmxIeEJ0OFZoeCtXa1MxbHNlWjIvQXhLS2tTZ1JUSWp4b0QzUGJyeWcxV2VjQWFFYmR3NnFUejdnYzYrMnBuMCcuUEhQX0VPTC4nc2h6eU5SeEF1MVpmNDhscS8wUjQrZGE1WHFrWERPOHB6Q1hUMmJUekVoOGlIME84VlVuUGNXU3o1ZnB6VzFXaicuUEhQX0VPTC4nWlZxVisyV1B4K2VYTzcxYUNqQ2VUQ0V6Z28zWlNsd2R4OS9nYjYvM055U0Z5bEU1TE5uVnJIbVk4NVF3WG9IWScuUEhQX0VPTC4nNVZyQXlGL2VXTDBEMGtTa0VQRlc3YjZCbFRvMXVHOThmVi9nOTAwOVNlVnF3L0tVZWZpclBoTHI5WFYrN0dHaicuUEhQX0VPTC4nN1k3OVh2YkRkWGtVTUdMNmJZUDI4TlZDOG0yNmlJbkZRVEk1WnJHeDZlN09nV1dyZU0wZkNiUktKcHZCV05veicuUEhQX0VPTC4nS3Q3aXFTMlllaWt1NHRmYUxFd1RldHRPMXBjc0JxWEw2M1pmcWhMaWNYS0hBLzEvOVpzbHZoaUg5RVBHU3crUCcuUEhQX0VPTC4nV0ZIL2ljZmpjMU5pTmtHVXNNelJoRnZqRkhNV1lCTkE1U0UraTdvdEpSdVh4T1hiUHRaZ1hPVndxQWZDUlpGcCcuUEhQX0VPTC4nTVpSWHhMUCtINzhoK0JrTzhLM0xJdUhPOVk2WjhrR0d4WFdkTnNPdXZ3T0s5a1lmbUc0RTBmenkvK0JzSlhEZicuUEhQX0VPTC4ncG9DTWZ3R2Vad2REUWlaUlRCZWlJSFdKWkpZSGZIWEYxaWNESkIvbEZYWThyenJCVnpnUUZIRmJveDRrZFptdicuUEhQX0VPTC4nNlFXQWUxekNUYkt6d3g3QXZ6R1VxelZMcmdBOEJhMFA1YXdzWVNkUlV4OHprUzVhT2hMMlFIZ0VqZ01Mb3pTNycuUEhQX0VPTC4nSU9Ob0s0Vzd6VEF5WlovSDBMZjVqYkh1WGt2RFFiaUJGeFNUNFhjNDIwcCt6RXlvQ1pYcHBSV1JlWjJSZmtzdCcuUEhQX0VPTC4nclhUa0traFdwK1V6alFJK1htYVZVWVFXVk4vMjdUTnlYSkRULzZwYTN2eG5PU21pVStQMWNvZUtSMWdEOE1wdScuUEhQX0VPTC4nKzErQzJBMExUc1lqQUZ5MmhDdzZzb1k3R0tCNWJPc0RCOUwxTGxhM3VHOXl6WkhSalRpdGVoNUpNOXNkWXU2YScuUEhQX0VPTC4nd2xndkVMWWMrMXFiY2pGQW5NS1dNZzRVSGxLcUwxWXM3bVgvS09aUVpMWVhQTGtPUzdJVzRMZWp2MnNINVc3VCcuUEhQX0VPTC4nT2tkRG13ZDF2SmlSKytMZEJuSGlNdTZQYVNMN2YvVkNQdEY5VjEzWEpaNjUyY1ZUTGxBWjlhSGY1V2hvcjFRaCcuUEhQX0VPTC4nblVSNWZyYWpCZE1ZMDRtaStmM0l4M0J0ZWJMdm1xdVE5ZHAwVkFiZVdlNnFyOVJ4M3hrQmdtL0I5QnZxNkZOSycuUEhQX0VPTC4nL1dSSVVLbkhMSnBJRmlNdFRqaEFNWG9WR0g5QWNzd0V6WU5WcXc1UFNHd1haUmF3aGRTZDZna2VUK3BWbEpHYScuUEhQX0VPTC4nUGtRTm9pdFlCUVJsOHYrQjZMQnhiZjh2ZGoySm9jeVFIM2Q4YzJ4VVNrdVpNNzY4c2RrZGczUno2UW8xVUhELycuUEhQX0VPTC4nalRFWm5sbUE4bVZQZ2xsVzhFcTRIYVJyWTZ4SXR4RmRtL05sbGxPZXRFZHYvMTJlQWFRV2tqU0J6cUFXN1ozVycuUEhQX0VPTC4nWThnZ1dub2xMc0Fuait4Z29UakxHNFlic2l3RGdTdWMwRVFyMUt2VmRLN1Q4cDl3aS9yZDJiOERKc09EVythbycuUEhQX0VPTC4nd3NLWGtTSS8wNGdXeFowZ3pqYjN2UThmMkh4R0xzcFNmUVBuZEZKRldSWGZ3MWJmWFlEWWxnSWQ4UjlzakhLSicuUEhQX0VPTC4nc1FpdXk2eUp2M3pIb0Y1Mkg3Y0dteGJLS0haZVVOUG9BWEFsMFBSeHo5Ui9ucFdxLzNCcFMyeExIN1hFSENXSicuUEhQX0VPTC4nbmZrd3FyNGg5WHFGd3VjV0F1SEd5cHFSWHhvVXNBVE1qeFNXZDUzck9ORUFMYnhwb001bHdWMG9Rd1BUQWM5UicuUEhQX0VPTC4nYno3MVJOREVDQzZEeWkwUWhOWktRcTV2SmR0MmgrbFZyMWZDT3JYNk10dmg3S1dwN0xSR2lRcXNjN29Ic1hjcScuUEhQX0VPTC4nMVFYeG15YlNZWVNEdWU5U0dNUUVVdmNDcVF1UjdrMXYvdnk2cHZlM05rWGVJN3FDRVExcXYyelVOUWhpbzJScycuUEhQX0VPTC4neEo2SHV5YUFSSDg4RlFIUXdZeXBHZkh5cHl2bTNuSUVTNnRudXFydjR0aWdrNmh6cFRCbyt0QTM4QVZHaTdpNicuUEhQX0VPTC4nQ0pHdkVpdTg3Q3NNK3ZqTGJPaUwxY3FjRUc1Z3llM1lDUVpVSTBnRFJZNHFDWjdIakgvWTJ1TFltVkdKNEEvQScuUEhQX0VPTC4nMDk5Yms4dVRJOVZGL0RSMDNPR0R0eXd5WFZaeTEzRFVta2NtR0F5ekM2RmlGRlliTE5oWVRobFR5VzlCYW9EaicuUEhQX0VPTC4nWXc0cDlTTEVCWGd1WVRNYlBaNUZCSThaYU1zTHpuNlp6Ri8rK3l5WVA2WnU0a0NQT1VzUFBQQ1dXdE1NSkN1MycuUEhQX0VPTC4nWHdOKzJrQUFlRVBtRWJZZVpBZjFFUE54TGV5ZUlqSGluYlBLb0VkVkN4WXp2Z0dWQ05zNE9PQWRFZDZ0T0RGaCcuUEhQX0VPTC4nbzJhSGdwRURmeVdadjJpYXRTRWpaRFF1UGtJWGFoLzhDbDN0K2p5N291a0dsMFMyS3VTZi92NzI4OCtJWjZzSycuUEhQX0VPTC4nVlhxVktPZzJMOGorRWNLZDRDcjdjcG1ydUV6bGVXSWsrOVN2Q3orYlJmbWZyOTlyTjJUNkE2aUVTNFhRQ3IvVScuUEhQX0VPTC4nam5yZmV4TDRNYXNYSnFmWXJ1aDZnRVpBMzMzajZUQjVOSFNVdVNqWGljTG5DZStMTnV5L3V3TlEwbE9NenNzeCcuUEhQX0VPTC4nZ2l1RW9RZ3RPT01aRHBhNEtSaUZDNHpoRUNmSHZpTVVoeUZieWxMVzBTZFJ3ZzdJRmFBVUgwemJOMXMyWW1EdScuUEhQX0VPTC4nOGZqZWFaZmpUeU14aFVxejBKRFBaanRXN2ZkTFIxS24yeGJFelVwUkVRVlhMWEZOdFdBbzNFdkU3TmVJczZPYicuUEhQX0VPTC4nOXZnU0o4QWRtSDhwTi9RODZibEVSSlQ1TktzN2IzTG1tNU1jdjQ4dTQ0VGZTT3ZGZG9xRmJsVE9aQXRReUVFWScuUEhQX0VPTC4nanVCNWcvcDhUcERISlNMU0FQKzB0MHliUEZPVm1JNWVRVG9lY0ZEN2NDdm5pNEQ1RVZTR2ZOVDVkUGZDYjc1NCcuUEhQX0VPTC4nZzJ5K3JLc2NMSXRDV1l6dlZvRmVjeVVmbURRMG1OMmJqWmRKNXhPaWxaOFVKOXcxN1g2NStsUzR3WWFEUUxjdicuUEhQX0VPTC4nRlUzbCtST1lIYi9xQnFMUUFlSGgwMkY1OGFRb0puazV4STIwRDlSUWpXY3F2L0NBOU1qaGZWeHEwMzFFVDJZeCcuUEhQX0VPTC4naUU2MzRqbUE1VkVLS0hFTnhSd0dYWnFsUm9VcjZNYyt6bXNBR3FIS1J1TDkwNUw3UExqWWp6cFZ5N2dINy9RWScuUEhQX0VPTC4nMlZFZzlFdGxZVWlFMUhMK1I4STZyaVJ2aElyME9OTzhleHFycGhZeWd2MG1UY21LcThmaktzeG5wUDVjUVYwbicuUEhQX0VPTC4nd01aSnpqV1dqVmduQ0VWUzdSNFpzWVVySEpRR3NlL1dYMEhJK3VwWnFKNm1jRUd4MXJqTHdiZEtpSUorZDNDUicuUEhQX0VPTC4ndTh0NFRuS1JpQzZzK21SaGY5dHE3WStxeWdDU0luOGFadUswcWxjUHZVTGsrYk8vTXUrbkdTQUxxRkNyNi9ndicuUEhQX0VPTC4naFl0NlVBTzhHbDZLUmYyVGJlcUZIa2ZlYVRNMTR4bUFmS2dXS3pMWHJWd09BNlZ5RHJpRG9MWlRNa3FWdmtMVycuUEhQX0VPTC4nMDZWREF6ZDkyYnR5TUVsYzZPN0dDTHdUREhxaS8zUjU1cW9nUjhXK2RTN1g4Z0wrMFc5NzAvOVN6YlVDVG5lLycuUEhQX0VPTC4nQksyVWU1NWdlMTUwbXdlRHpnTGsrbTMvUFVzVkhjZUh5YldrNmVWdmVRbkRsNGFtK3hmQjVtc2dnM1J5L0RQNCcuUEhQX0VPTC4nMW4raXNqR00vRXQvYmZETDdMNldFNXNyWHNGOWZXRDZudm4xZTFGSm9iaEdQOUI1MXE1Y2NBRDVJcUMvQUE1aicuUEhQX0VPTC4nZVFHNWFqMDdISHZjbHNMV1NpL25sT1I1d2VQYVZjNytqajA3a3NJNXIrSFNjY2hWdmNrZ1phaTNYV3dYL3JQQScuUEhQX0VPTC4nM01VelphMGNVMjdzaTcyR1dXNllMeXUvUGNjUnZLVzlJOUJqTUZBckx3MUxJTHBQM0JzZnB3QmhqNitYbjJyVScuUEhQX0VPTC4nbmdQQUVmY01jcWd3QjV6d2llV2NFNzk2UWxyeEl4MUF4bkdpL1FGckVselJiLy9iM0RaTE5yUndHd3l5VitsRScuUEhQX0VPTC4naFpGWXh2aU0ybks4TElSWEdzWi9zQnFRNlhULzAvY2tKRGFqeHk1LzRFYUQvUCtKRGRwTXhoVmFMK2xhN0dlRycuUEhQX0VPTC4nSGsxeUdOQlR3TGQzRytjUjNSTjcyYVlPVzltSDQzMFpRdWpTMlhNZlBkWm1lSlNudWJGVkRlZVI1TGZVelFzZycuUEhQX0VPTC4nZ1hkSjYxSXlOZXNZbi9odk1DZHZjU01mamg0VzYrQTZJbndLRmNzS1ljdTBpa1ZyUlpJTHBoV2tIR3A4K3ZHUicuUEhQX0VPTC4nNzRQSUhZdS9QL2pveEpEaUlxOElXRjFoYkVHM0JjSmtNM2tPM2hjV2t5U2N2OVdlNVZUeHJuK3RHcWtSNXUvOScuUEhQX0VPTC4nVVhXa0ZteTk5TXJwUmNWWUFDa1c4dmg1c0NtNHV3VWljYmU2VHowM1pKdDZkTk9JRVpabFptT3dRV3k5L2VKSScuUEhQX0VPTC4nVmwxRFp1QXBJdVlraXk1ZFhXWlErVE1ZU3Z4S3c4c01xRVkxa0Y2KzJScjRKK2U2UVErZnRyY3I4N214aHh4dycuUEhQX0VPTC4nUzFqREhSVTJJTHAxYTdzSC82bCtWOTlyV2JpbHVGMkRvcC9LUU03MytOVDhzVHIzWjJGWlROdS8zdnZNWlNVNicuUEhQX0VPTC4nZWF3UXg2cVpKT2oxWGtlL1JTd1FNWVNPaDcybUlxSjJobndsMENyVllpbElGOWIwemJDMlJrZHVMYWVWb0djbycuUEhQX0VPTC4nbTVOcG8yeitkYU5zYmpMdmVFU29TcEdWQXdxc3V3bFR1dXliTGVIckhyNG4rMWQrUXFsYTc5bjgrRkg1eHJaRicuUEhQX0VPTC4nWGlWM0JRMTZNR0VHaWFEN3B0eEtyV1VkY1pPbkJ6VEJJT1loUjhUWmJwbG5LeG9XbVlhbE1NV05NT3A5NTRERCcuUEhQX0VPTC4nQnZOS0VydFJ6NDZjbFUySkRuRFVvQXNrMk5kUkZKOGpyVy9KWkVFeTBVZG9MdTNxTEhBTisvcW1vUnJURjRONycuUEhQX0VPTC4nakYvaG5XcDFmVmwrempHbDBETE5sYWF5VlN4Y2hnTzJKTmVybzFnYU9jSVE5aXFkNVVZNWFFL3F0N1JSL042cScuUEhQX0VPTC4nb0hxbnI4dmpaU2lvV3V1TlR1T2NSWkdYUHFERjFUMm80bUF0ZmU3b0loaTAzcHZqaTJteW9EYmQ4MEdLNS9oSycuUEhQX0VPTC4ncWhpS1p0M1poV05jVkVVVTFuWmVvbjdBR3Bod1BuRWgrNTB3M3BibHdBUGlubHhORFhYLzRTb2lueXNQR0pZNicuUEhQX0VPTC4nejQ4M3hKQk1nVHRsaERxZHI2VkloT2x5RTNKdXQ0VDFLcUhPVzZoanZVTTN5aEM1UWtlaWVzQmJrZUg5V3VnWScuUEhQX0VPTC4nSEdsczcxZDAySERSZXNMNUwySWYwTU1SUjUxcWN6WVBPYzlSbXdjZTYwYndmUXIwQVRKWkZMVFd3RENzWHZkaycuUEhQX0VPTC4nYm51ckxraHlKZ3dkbTRWdVJqU1hQQnNYNjkzWG1PQTE4L2dsT1prUGF4VmJCV0FqdENuMVBhRjNTNjVrditHNCcuUEhQX0VPTC4nZVhadHBFTElMOE5JajF6cW5lcjFSMyswRTMvSUp3MXhSWEhTdExvUVovTXp4Vmc0YkRLSUZVRUNCVU9NRmVJbycuUEhQX0VPTC4nR3hSVllEZVdOODYxaUVzb0VNZVNxRytoQnB6TklqWjhwZnN2dHpDQmQ0RjF5U2hvMkdlanFZS2xrRnFhN0lGbicuUEhQX0VPTC4nVWpMcE9lQzVDTG4wd0lJcDJKek1pbDk2Nlp0SU1TaS9MWWh0Q1krcVYzOGtqcFk2NStDVjJJaE83ZUZkSGtvMScuUEhQX0VPTC4nck5xZmFaemMyc3E3VklSZG1sM052akFsbG5icFQvWEVUWVlzd211N1RuSm1oVTBTUTN2WU9GcUF6VkhtaW9mQScuUEhQX0VPTC4nL05GeWZkcUYxaTlUTU9nL3BRY1NscnZvRGJlV3BwOWpzWDN5WHJxR1lDZGRlVVFyTVJYQzJGaWpGWUExaTFXeicuUEhQX0VPTC4nR3owMlMwMGwwMHdIYzRJeWNLajBGYVI1K2FPV3ZNd2xLUUUvL1daL0UzYWpkYlcwdzFlbVRrNUE4N2JUOTVZOCcuUEhQX0VPTC4nWGVKaUdodEtqeDl6SE5lM0QxdURVRmV2Uk1BT1BTR1gvUGlQRDNmQlVZWXVXd0RlcGl5MXJMUWozSW1BY0ZtYScuUEhQX0VPTC4nSEZ6dFhVbk0xWjNERWdPWkdBRGw0S2JVUXRVSEdraTZuMVlabVZTeld2UENwZk1qN2Z1THVYZDNBVjhKLytMYScuUEhQX0VPTC4nRHliNkExQ080enBpcVJMUDVjcHlmNndrU0RWZEl5R2dIWG15QmdUMVQ3WTU3NzhRWXNyUjA1VGJQSWM3alFYeScuUEhQX0VPTC4nQ0crRXBhbTRCd2hOZjlDY1F5dDZiQ3lJS1hROFNjWm4zd0ZmT1ZHOTNVd1UxelJsVERNMzdCTlhHemlNMlMxNCcuUEhQX0VPTC4nMXVuUXlNZ29EbGpvV0lJUmZxU2cxWmoxd3RkSTJEaGNiZ2l4WkZDdDhpZlpaWVhQK2VIT1ZwazJiODFReldTWScuUEhQX0VPTC4ncEZFUStheTlBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVRQSU5rLzE3SCtSTHo0NTlpQ1ZRQUdlcycuUEhQX0VPTC4nOGtjNXN4WWozQ2tNbFdyR01pQ3h2c2d1MmthazZkQ2EwZjNEZmlWdDU0RnJ5N3MwT2tsSGlabWlwb2lGNFJDdCcuUEhQX0VPTC4neUp3VVNBelJyWkZBYmtwRGc4b0l1NFVpL0J0MTNrWTd4T04rdTRtMElna0xaU0UrOEJTak1yZmpWdlZ4ZStxSCcuUEhQX0VPTC4nNWk3WC9pYlVURGpneWZkQThYST0nXSwKICAgICAgICAgICAgJ3g1dCcgPT4gJ0tHQXBMeWJIV0ptQndaR2dCazA3QWxSRDluVScsCiAgICAgICAgICAgICd4NXQjMjU2JyA9PiAnWUQxMms2a2M0eHVoXzV2RUhNeXlPRnBHczZWcVR5YUtNbHhnME50MmNyQScsIF0sCiAgICAgICAgJHJlc3VsdC0+YWxsKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21Qcml2YXRlRUMyNTZLZXlGaWxlRW5jcnlwdGVkKCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbUtleUZpbGUoX19ESVJfXy4nL0tleXMvRUMvcHJpdmF0ZS5lczI1Ni5lbmNyeXB0ZWQua2V5JywgJ3Rlc3QnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJkIjoicV9Wa3pObnhURzM5akhCMHFrd0FfU2VWWHVkN3lDSFQ3a2I3a1p2LTB4USIsIngiOiJ2dVlzUC1RbnJxQWJNN0l5aHpqdDA4aEZTdXphcHlvakNCX2dGc0J0NjVVIiwieSI6Im9xLUUySy1YMGtQZXFHdUtuaGxYa3hjNWZueG9tUlNDNktMYnk3SWo4QUUifScsIFxqc29uX2VuY29kZSgkcmVzdWx0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnJvbVByaXZhdGVFQzM4NEtleUZpbGVFbmNyeXB0ZWQoKQogICAgewogICAgICAgICRyZXN1bHQgPSBKV0tGYWN0b3J5OjpjcmVhdGVGcm9tS2V5RmlsZShfX0RJUl9fLicvS2V5cy9FQy9wcml2YXRlLmVzMzg0LmVuY3J5cHRlZC5rZXknLCAndGVzdCcpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sia3R5IjoiRUMiLCJjcnYiOiJQLTM4NCIsImQiOiJwY1NTWHJiZVpFT2FCSXM3SXdxY1U5TV9PT004MVhoWnVPSG9HZ21TXzJQZEVDd2NkUWNYenY3VzgtbFlMMGNyIiwieCI6IjZmLVhac2cyVHZuMEVvRWFwUS15bE1ZTnRzbThDUGYwY2I4SEkyRWtmWTlCcXB0M1FNendsTTdtVnNGUm1hTVoiLCJ5IjoiYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVSJ9JywgXGpzb25fZW5jb2RlKCRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUHJpdmF0ZUVDNTEyS2V5RmlsZUVuY3J5cHRlZCgpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21LZXlGaWxlKF9fRElSX18uJy9LZXlzL0VDL3ByaXZhdGUuZXM1MTIuZW5jcnlwdGVkLmtleScsICd0ZXN0Jyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJFQyIsImNydiI6IlAtNTIxIiwiZCI6IkZwNktGS1JpSElkUl83UFAyVkt4ejZPa1NfcGh5b1Fxd3p2Mkk4OS04elA3UVNjcng1cjhHRkxjTjVtQ0NOSnQzck4zU0lnSTRYb0lRYk5lUGxBajZ2RSIsIngiOiJBVnB2bzdUR3BRazVQN1pMbzBxa0JwYVQtZkZEdjZIUXJXRWxCS014Y3JKZF9tUk5hcHdlQVRzVnY4M1lPTjRsVElJUlh6Z0drbVdlcWJEcjZSUU8tMWNTIiwieSI6IkFJcy1Nb1JtTGFpUHlHMnhtUHdRQ0hYMkNHWF91Q1ppVDNpT3hUQUpFWnVVYmVTQTgyOEs0V2ZBQTRPRGRHaUI4N1lWU2hoUE9raVFzd1YzTHBicFBHaEMifScsIFxqc29uX2VuY29kZSgkcmVzdWx0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnJvbVB1YmxpY0VDMjU2S2V5RmlsZSgpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21LZXlGaWxlKF9fRElSX18uJy9LZXlzL0VDL3B1YmxpYy5lczI1Ni5rZXknKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoidnVZc1AtUW5ycUFiTTdJeWh6anQwOGhGU3V6YXB5b2pDQl9nRnNCdDY1VSIsInkiOiJvcS1FMkstWDBrUGVxR3VLbmhsWGt4YzVmbnhvbVJTQzZLTGJ5N0lqOEFFIn0nLCBcanNvbl9lbmNvZGUoJHJlc3VsdCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21QdWJsaWNFQzM4NEtleUZpbGUoKQogICAgewogICAgICAgICRyZXN1bHQgPSBKV0tGYWN0b3J5OjpjcmVhdGVGcm9tS2V5RmlsZShfX0RJUl9fLicvS2V5cy9FQy9wdWJsaWMuZXMzODQua2V5Jyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJFQyIsImNydiI6IlAtMzg0IiwieCI6IjZmLVhac2cyVHZuMEVvRWFwUS15bE1ZTnRzbThDUGYwY2I4SEkyRWtmWTlCcXB0M1FNendsTTdtVnNGUm1hTVoiLCJ5IjoiYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVSJ9JywgXGpzb25fZW5jb2RlKCRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVGcm9tUHVibGljRUM1MTJLZXlGaWxlKCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbUtleUZpbGUoX19ESVJfXy4nL0tleXMvRUMvcHVibGljLmVzNTEyLmtleScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sia3R5IjoiRUMiLCJjcnYiOiJQLTUyMSIsIngiOiJBVnB2bzdUR3BRazVQN1pMbzBxa0JwYVQtZkZEdjZIUXJXRWxCS014Y3JKZF9tUk5hcHdlQVRzVnY4M1lPTjRsVElJUlh6Z0drbVdlcWJEcjZSUU8tMWNTIiwieSI6IkFJcy1Nb1JtTGFpUHlHMnhtUHdRQ0hYMkNHWF91Q1ppVDNpT3hUQUpFWnVVYmVTQTgyOEs0V2ZBQTRPRGRHaUI4N1lWU2hoUE9raVFzd1YzTHBicFBHaEMifScsIFxqc29uX2VuY29kZSgkcmVzdWx0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnJvbVZhbHVlcygpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21WYWx1ZXMoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC01MjEnLAogICAgICAgICAgICAnZCcgPT4gJ0ZwNktGS1JpSElkUl83UFAyVkt4ejZPa1NfcGh5b1Fxd3p2Mkk4OS04elA3UVNjcng1cjhHRkxjTjVtQ0NOSnQzck4zU0lnSTRYb0lRYk5lUGxBajZ2RScsCiAgICAgICAgICAgICd4JyA9PiAnQVZwdm83VEdwUWs1UDdaTG8wcWtCcGFULWZGRHY2SFFyV0VsQktNeGNySmRfbVJOYXB3ZUFUc1Z2ODNZT040bFRJSVJYemdHa21XZXFiRHI2UlFPLTFjUycsCiAgICAgICAgICAgICd5JyA9PiAnQUlzLU1vUm1MYWlQeUcyeG1Qd1FDSFgyQ0dYX3VDWmlUM2lPeFRBSkVadVViZVNBODI4SzRXZkFBNE9EZEdpQjg3WVZTaGhQT2tpUXN3VjNMcGJwUEdoQycsCiAgICAgICAgXSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJFQyIsImNydiI6IlAtNTIxIiwiZCI6IkZwNktGS1JpSElkUl83UFAyVkt4ejZPa1NfcGh5b1Fxd3p2Mkk4OS04elA3UVNjcng1cjhHRkxjTjVtQ0NOSnQzck4zU0lnSTRYb0lRYk5lUGxBajZ2RSIsIngiOiJBVnB2bzdUR3BRazVQN1pMbzBxa0JwYVQtZkZEdjZIUXJXRWxCS014Y3JKZF9tUk5hcHdlQVRzVnY4M1lPTjRsVElJUlh6Z0drbVdlcWJEcjZSUU8tMWNTIiwieSI6IkFJcy1Nb1JtTGFpUHlHMnhtUHdRQ0hYMkNHWF91Q1ppVDNpT3hUQUpFWnVVYmVTQTgyOEs0V2ZBQTRPRGRHaUI4N1lWU2hoUE9raVFzd1YzTHBicFBHaEMifScsIFxqc29uX2VuY29kZSgkcmVzdWx0KSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/JWKSetTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBVbml0CiAqIEBncm91cCBKV0tTZXQKICovCmNsYXNzIEpXS1NldFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlTZWxlY3Rpb24oKQogICAgewogICAgICAgICRqd2tzZXQgPSAkdGhpcy0+Z2V0UHVibGljS2V5U2V0KCk7CgogICAgICAgICRqd2sgPSAkandrc2V0LT5zZWxlY3RLZXkoJ2VuYycpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkandrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlTZWxlY3Rpb25XaXRoQWxnb3JpdGhtKCkKICAgIHsKICAgICAgICAkandrc2V0ID0gJHRoaXMtPmdldFB1YmxpY0tleVNldCgpOwoKICAgICAgICAkandrID0gJGp3a3NldC0+c2VsZWN0S2V5KCdzaWcnLCBuZXcgRm9vQWxnb3JpdGhtKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkandrKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdraWQnID0+ICc3MWVlMjMwMzcxZDE5NjMwYmMxN2ZiOTBjY2YyMGFlNjMyYWQ4Y2Y4JywKICAgICAgICAgICAgJ2t0eScgPT4gJ0ZPTycsCiAgICAgICAgICAgICdhbGcnID0+ICdmb28nLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICBdLAogICAgICAgICAgICAkandrLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5U2VsZWN0aW9uV2l0aEFsZ29yaXRobUFuZEtleUlkKCkKICAgIHsKICAgICAgICAkandrc2V0ID0gJHRoaXMtPmdldFB1YmxpY0tleVNldCgpOwoKICAgICAgICAkandrID0gJGp3a3NldC0+c2VsZWN0S2V5KCdzaWcnLCBuZXcgRm9vQWxnb3JpdGhtKCksIFsna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCddKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLOjpjbGFzcywgJGp3ayk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCcsCiAgICAgICAgICAgICdrdHknID0+ICdGT08nLAogICAgICAgICAgICAnYWxnJyA9PiAnZm9vJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgXSwKICAgICAgICAgICAgJGp3ay0+YWxsKCkKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleVNlbGVjdGlvbldpdGhLZXlJZCgpCiAgICB7CiAgICAgICAgJGp3a3NldCA9ICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKTsKCiAgICAgICAgJGp3ayA9ICRqd2tzZXQtPnNlbGVjdEtleSgnc2lnJywgbnVsbCwgWydraWQnID0+ICcwMjQ5MWY5NDVjOTUxYWRmMTU2ZjM3MDc4OGU4Y2NkYWJmODg3N2E4J10pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV0s6OmNsYXNzLCAkandrKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdraWQnID0+ICcwMjQ5MWY5NDVjOTUxYWRmMTU2ZjM3MDc4OGU4Y2NkYWJmODg3N2E4JywKICAgICAgICAgICAgJ2t0eScgPT4gJ0ZPTycsCiAgICAgICAgICAgICdhbGcnID0+ICdmb28nLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICBdLAogICAgICAgICAgICAkandrLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5U2VsZWN0aW9uUmV0dXJuc05vdGhpbmcoKQogICAgewogICAgICAgICRqd2tzZXQgPSAkdGhpcy0+Z2V0UHVibGljS2V5U2V0KCk7CgogICAgICAgICRqd2sgPSAkandrc2V0LT5zZWxlY3RLZXkoJ2VuYycsIG51bGwsIFsna2lkJyA9PiAnMDI0OTFmOTQ1Yzk1MWFkZjE1NmYzNzA3ODhlOGNjZGFiZjg4NzdhOCddKTsKICAgICAgICBzdGF0aWM6OmFzc2VydE51bGwoJGp3ayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlS2V5U2V0RnJvbVZhbHVlcygpCiAgICB7CiAgICAgICAgJHZhbHVlcyA9IFsna2V5cycgPT4gW1sKICAgICAgICAgICAgJ2tpZCcgPT4gJzcxZWUyMzAzNzFkMTk2MzBiYzE3ZmI5MGNjZjIwYWU2MzJhZDhjZjgnLAogICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgIF1dXTsKICAgICAgICAkandrc2V0ID0gSldLRmFjdG9yeTo6Y3JlYXRlRnJvbVZhbHVlcygkdmFsdWVzKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLU2V0OjpjbGFzcywgJGp3a3NldCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgXGNvdW50KCRqd2tzZXQpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3a3NldC0+aGFzKCc3MWVlMjMwMzcxZDE5NjMwYmMxN2ZiOTBjY2YyMGFlNjMyYWQ4Y2Y4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGp3a3NldC0+aGFzKDApKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFB1YmxpY0tleVNldCgpOiBKV0tTZXQKICAgIHsKICAgICAgICAka2V5cyA9IFsna2V5cycgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna2lkJyA9PiAnNzFlZTIzMDM3MWQxOTYzMGJjMTdmYjkwY2NmMjBhZTYzMmFkOGNmOCcsCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnRk9PJywKICAgICAgICAgICAgICAgICdhbGcnID0+ICdmb28nLAogICAgICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdraWQnID0+ICcwMjQ5MWY5NDVjOTUxYWRmMTU2ZjM3MDc4OGU4Y2NkYWJmODg3N2E4JywKICAgICAgICAgICAgICAgICdrdHknID0+ICdGT08nLAogICAgICAgICAgICAgICAgJ2FsZycgPT4gJ2ZvbycsCiAgICAgICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnbicgPT4gJ29haFVJb1d3MEswdXNLTnVPUjZINHdrZjRvQlVYSFR4UnZnYjQ4RS1CVnZ4a2VETmpiQzRoZThyVVdjSm9abWRzMmg3TTcwaW1FVmhSVTVkaklOWHRxbGxYSTRERnFjSTFEZ2pUOUxld05EOE1XMktyZjNTcHNrX1prb0ZuaWxha0d5Z1R3cFozdWVzSC1QRkFCTklVWXBPaU4xNWRzUVJrZ3IwdkVoeE45MmkyYXNiT2VuU1pleWF4emlLNzJVd3hycktvRXh2NmtjNXR3WFRxNGgtUUNoTE9sbjBfbXRVWndmc1JhTVN0UHM2bVM2WHJneG54Yldob2pmNjYzdHVFUXVlR0MtRkNNZnJhMzZDOWtuREZHektzTmE3TFpLMmRqWWd5RDNKUl9NQl80TlVKV19UcU9RdHdIWWJ4ZXZvSkFybS1MNVN0b3dqekd5LV9icTZHdycsCiAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICduJyA9PiAnc1hjaERhUWViSG5QaUd2eURPQVQ0c2FHRVVldFN5bzlNS0xPb1dGc3VlcmkyM2JPZGdXcDREeTFXbFV6ZXdiZ0JIb2Q1cGNNOUg5NUdRUlYzSkRYYm9JUlJPU0JpZ2VDNXlqVTFoR3pISHlYc3M4VURwcmVjYkFZeGtuVGNRa2hzbEFOR1JVWm1kVE9RNXFUUnNMQXQ2QlRZdXl2VlJkaFM4ZXhTWkV5X2M0Z3NfN3N2bEpKUTRIOV9OeHNpSW9Md0FFazctUTNVWEVSR1l3Xzc1SURyR0E4NC1sQV8tQ3Q0ZVRsWEhCSVkyRWFWN3Q3TGpKYXluVkpDcGt2NExLalRUQXVtaUdVSXVRaHJOaFpMdUZfUkpMcUhwTTJrZ1dGTFU3LVZUZEwxVmJDMnRlanZjSTJCbE1rRXBrMUJ6QlpJMEtRQjBHYURXRkxOLWFFQXczdlJ3JywKICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgJ24nID0+ICdvZmdXQ3VManliUmx6bzB0WldKak5pdVNmYjRwNGZBa2Rfd1dKY3lRb1Riamk5azBsOFcyNm1QZGR4SG1mSFFwLVZhdy00cVBDSnJjUzJtSlBNRXpQMVB0MEJtNGQ0UWxMLXlSVC1TRmQybFpTLXBDZ05Nc0QxV19ZcFJQRXdPV3ZHNmIzMjY5MHIyalo0N3NvTVpvOXdHempiXzdPTWcwTE9MLWJTZjYza3BhU0hTWG5kUzV6NXJleE1kYkJZVXNMQTllLUtYQmRRT1MtVVRvN1dUQkVNYTJSMkNhcEhnNjY1eHNtdGRWTVRCUVk0dURabHh2YjNxQ281WndLaDlrRzRMVDZfSTVJaGxKSDdhR2h5eFhGdlVLLURXTm1vdWRGOE5BY285X2g5aWFHTmo4cTJldGhGa01Mczkxa3prMlBBY0RUVzlnYjU0aDRGUld5dVhwb1EnLAogICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICAgICAneCcgPT4gJ0Fla3BCUThTVDhhOFZjZlZPVE5sMzUzdlNyRENMTEpYbVBrMDZ3VGp4cnJqY0JwWHA1RU9uWUdfTmpGWjZPdkxGVjFqU2ZTOXRzejRxVXhjV2NlcXdRR2snLAogICAgICAgICAgICAgICAgJ3knID0+ICdBRFNtUkE0M1oxRFNOeF9SdmNMSTg3Y2RMMDdsNmpReXlCWE1veFZnX2wyVGgteDNTMVdEaGpEbHk3OWFqTDRLa2QwQVpNYVptaDl1Ym1mNjNlM2t5TWoyJywKICAgICAgICAgICAgXSwKICAgICAgICBdXTsKCiAgICAgICAgcmV0dXJuIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoJGtleXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/JWKTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0tTZXQ7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgVW5pdAogKiBAZ3JvdXAgSldLCiAqLwpjbGFzcyBKV0tUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkKICAgIHsKICAgICAgICAkandrID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnbicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2JhcicgPT4gJ3BsaWMnLAogICAgICAgIF0pOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnRUMnLCAkandrLT5nZXQoJ2t0eScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnRVMyNTYnLCAkandrLT5nZXQoJ2FsZycpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnc2lnbicsICRqd2stPmdldCgndXNlJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGp3ay0+aGFzKCdraWQnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydzaWduJ10sICRqd2stPmdldCgna2V5X29wcycpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnUC0yNTYnLCAkandrLT5nZXQoJ2NydicpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRqd2stPmhhcygneDV1JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGp3ay0+aGFzKCd4NWMnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandrLT5oYXMoJ3g1dCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRqd2stPmhhcygneDV0IzI1NicpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsICRqd2stPmdldCgneCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsICRqd2stPmdldCgneScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6ImY4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUiLCJ5IjoieF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCIsInVzZSI6InNpZ24iLCJrZXlfb3BzIjpbInNpZ24iXSwiYWxnIjoiRVMyNTYiLCJiYXIiOiJwbGljIn0nLCBcanNvbl9lbmNvZGUoJGp3aykpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVGhlIHBhcmFtZXRlciAia3R5IiBpcyBtYW5kYXRvcnkuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJhZENvbnN0cnVjdGlvbigpCiAgICB7CiAgICAgICAgSldLOjpjcmVhdGUoW10pOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVGhlIHZhbHVlIGlkZW50aWZpZWQgYnkgIkFCQ0QiIGRvZXMgbm90IGV4aXN0LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiYWRDYWxsKCkKICAgIHsKICAgICAgICAkandrID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnbicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2JhcicgPT4gJ3BsaWMnLAogICAgICAgIF0pOwoKICAgICAgICAkandrLT5nZXQoJ0FCQ0QnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlTZXQoKQogICAgewogICAgICAgICRqd2sxID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnbicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzAxMjM0NTY3ODknLAogICAgICAgIF0pOwoKICAgICAgICAkandrMiA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ2QnID0+ICdqcHNRbm5HUW1MLVlCSWZmSDExMzZjc3BZRzYtMGlZN1gxZkNFOS1FOUxJJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWyd2ZXJpZnknXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzk4NzY1NDMyMTAnLAogICAgICAgIF0pOwoKICAgICAgICAkandrc2V0ID0gSldLU2V0OjpjcmVhdGVGcm9tS2V5cyhbJGp3azFdKTsKICAgICAgICAkandrc2V0ID0gJGp3a3NldC0+d2l0aCgkandrMik7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7ImtleXMiOlt7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVSIsInkiOiJ4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwIiwidXNlIjoic2lnbiIsImtleV9vcHMiOlsic2lnbiJdLCJhbGciOiJFUzI1NiIsImtpZCI6IjAxMjM0NTY3ODkifSx7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVSIsInkiOiJ4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwIiwiZCI6Impwc1FubkdRbUwtWUJJZmZIMTEzNmNzcFlHNi0waVk3WDFmQ0U5LUU5TEkiLCJ1c2UiOiJzaWduIiwia2V5X29wcyI6WyJ2ZXJpZnkiXSwiYWxnIjoiRVMyNTYiLCJraWQiOiI5ODc2NTQzMjEwIn1dfScsIFxqc29uX2VuY29kZSgkandrc2V0KSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgXGNvdW50KCRqd2tzZXQpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygyLCAkandrc2V0LT5jb3VudCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3a3NldC0+aGFzKCcwMTIzNDU2Nzg5JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrc2V0LT5oYXMoJzk4NzY1NDMyMTAnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandrc2V0LT5oYXMoMCkpOwoKICAgICAgICBmb3JlYWNoICgkandrc2V0IGFzICRrZXkpIHsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VDJywgJGtleS0+Z2V0KCdrdHknKSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnOTg3NjU0MzIxMCcsICRqd2tzZXQtPmdldCgnOTg3NjU0MzIxMCcpLT5nZXQoJ2tpZCcpKTsKICAgICAgICAkandrc2V0ID0gJGp3a3NldC0+d2l0aG91dCgnOTg3NjU0MzIxMCcpOwogICAgICAgICRqd2tzZXQgPSAkandrc2V0LT53aXRob3V0KCc5ODc2NTQzMjEwJyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsIFxjb3VudCgkandrc2V0KSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJGp3a3NldC0+Y291bnQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXSzo6Y2xhc3MsICRqd2tzZXQtPmdldCgnMDEyMzQ1Njc4OScpKTsKCiAgICAgICAgJGp3a3NldCA9ICRqd2tzZXQtPndpdGhvdXQoJzAxMjM0NTY3ODknKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygwLCBcY291bnQoJGp3a3NldCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDAsICRqd2tzZXQtPmNvdW50KCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVW5kZWZpbmVkIGluZGV4LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlTZXQyKCkKICAgIHsKICAgICAgICAkandrMSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWydzaWduJ10sCiAgICAgICAgICAgICdhbGcnID0+ICdFUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICcwMTIzNDU2Nzg5JywKICAgICAgICBdKTsKCiAgICAgICAgJGp3azIgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICdkJyA9PiAnanBzUW5uR1FtTC1ZQklmZkgxMTM2Y3NwWUc2LTBpWTdYMWZDRTktRTlMSScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWduJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsndmVyaWZ5J10sCiAgICAgICAgICAgICdhbGcnID0+ICdFUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICc5ODc2NTQzMjEwJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3a3NldCA9IEpXS1NldDo6Y3JlYXRlRnJvbUtleXMoWyRqd2sxLCAkandrMl0pOwoKICAgICAgICAkandrc2V0LT5nZXQoMik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJpdmF0ZVRvUHVibGljKCkKICAgIHsKICAgICAgICAkcHJpdmF0ZSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgJ2QnID0+ICdqcHNRbm5HUW1MLVlCSWZmSDExMzZjc3BZRzYtMGlZN1gxZkNFOS1FOUxJJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZ24nLAogICAgICAgICAgICAna2V5X29wcycgPT4gWyd2ZXJpZnknXSwKICAgICAgICAgICAgJ2FsZycgPT4gJ0VTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzk4NzY1NDMyMTAnLAogICAgICAgIF0pOwoKICAgICAgICAkcHVibGljID0gJHByaXZhdGUtPnRvUHVibGljKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2VuY29kZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWduJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsndmVyaWZ5J10sCiAgICAgICAgICAgICdhbGcnID0+ICdFUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICc5ODc2NTQzMjEwJywKICAgICAgICBdKSwgXGpzb25fZW5jb2RlKCRwdWJsaWMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQ2VydGlmaWNhdGVDaGFpbigpCiAgICB7CiAgICAgICAgJGtleSA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZUZyb21DZXJ0aWZpY2F0ZUZpbGUoCiAgICAgICAgICAgIF9fRElSX18uJy9DaGFpbi9nb29nbGUuY3J0JywKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2tpZCcgPT4gJ0Zyb20gd3d3Lmdvb2dsZS5jb20nLAogICAgICAgICAgICBdCiAgICAgICAgKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoCiAgICAgICAgICAgICcxNzhmN2U5M2E3NGVkNzNkODhjMjkwNDIyMjBiOWFlNmU0YjM3MWNkJywKICAgICAgICAgICAgXG1iX3N0cnRvbG93ZXIoXGJpbjJoZXgoQmFzZTY0VXJsOjpkZWNvZGUoJGtleS0+Z2V0KCd4NXQnKSkpKQogICAgICAgICk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICduQ29FZDF6WVVKRTZCcU9DNE5oUVNMeUpQX0VaY0JxSVJuN2dqOFh4aWM0aDdsci1ZUTIzTWtTSm9IUUxVMDlWcE02Q1lwWHU2MWxmeHVFRmdCTEVYcFFfdkZ0SU9QUlQ5eVRtLTVIcEZjVFA5Rk1OOUVyOG4xVGVmYjZnYTItSHdOQlFIeWd3QTBEYUNITlJiSF9fT2p5bk53YU92VXNSQk90OUpON20tZnd4Y2Z1VTFXRHpMa3F2UXRMTDZzUnFHckxNVTkwVlM0c2Z5QmxoSDgyZHFENWpLNFExYVdXRXlCbkZSaUw0VTVXLTQ0QktFTVlxN0xxWElCSEhPWmtRQktEd1lYcVZKWXhPVW5YaXR1MEl5aFQ4emlKcXMwN1BSZ09YbHdOLXdMSGVlNjlGTTgtNlBuRzMzdlFsSmNJTk5ZbWRuZnNPRVhtSkhqZkZyNDV5YVEnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAneDV0JyA9PiAnRjQ5LWs2ZE8xejJJd3BCQ0lndWE1dVN6Y2MwJywKICAgICAgICAgICAgJ3g1dCMyNTYnID0+ICdwQkpQMnZuS3g3cnVIS3N5NHlKZGRHVUF3Sjg4OC11eVUtOF91d2lLX1RRJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ0Zyb20gd3d3Lmdvb2dsZS5jb20nLAogICAgICAgICAgICAneDVjJyA9PiBbJ01JSUQ4RENDQXRpZ0F3SUJBZ0lEQWpxRE1BMEdDU3FHU0liM0RRRUJDd1VBTUVJeEN6QUpCZ05WQkFZVEFsVlQnLlBIUF9FT0wuJ01SWXdGQVlEVlFRS0V3MUhaVzlVY25WemRDQkpibU11TVJzd0dRWURWUVFERXhKSFpXOVVjblZ6ZENCSGJHOWknLlBIUF9FT0wuJ1lXd2dRMEV3SGhjTk1UTXdOREExTVRVeE5UVTJXaGNOTVRZeE1qTXhNak0xT1RVNVdqQkpNUXN3Q1FZRFZRUUcnLlBIUF9FT0wuJ0V3SlZVekVUTUJFR0ExVUVDaE1LUjI5dloyeGxJRWx1WXpFbE1DTUdBMVVFQXhNY1IyOXZaMnhsSUVsdWRHVnknLlBIUF9FT0wuJ2JtVjBJRUYxZEdodmNtbDBlU0JITWpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUInLlBIUF9FT0wuJ0FKd3FCSGRjMkZDUk9nYWpndURZVUVpOGlUL3hHWEFhaUVaKzRJL0Y4WW5PSWU1YS9tRU50ekpFaWFCMEMxTlAnLlBIUF9FT0wuJ1ZhVE9nbUtWN3V0Wlg4YmhCWUFTeEY2VVA3eGJTRGowVS9jazV2dVI2UlhFei9SVERmUksvSjlVM24yK29HdHYnLlBIUF9FT0wuJ2g4RFFVQjhvTUFOQTJnaHpVV3gvL3pvOHB6Y0dqcjFMRVFUcmZTVGU1dm44TVhIN2xOVmc4eTVLcjBMU3krckUnLlBIUF9FT0wuJ2FocXl6RlBkRlV1TEg4Z1pZUi9ObmFnK1l5dUVOV2xsaE1nWnhVWWkrRk9WdnVPQVNoREdLdXk2bHlBUnh6bVonLlBIUF9FT0wuJ0VBU2c4R0Y2bFNXTVRsSjE0cmJ0Q01vVS9NNGlhck5PejBZRGw1Y0Rmc0N4M251dlJUUFB1ajV4dDk3MEpTWEMnLlBIUF9FT0wuJ0RUV0puWjM3RGhGNWlSNDN4YStPY21rQ0F3RUFBYU9CNXpDQjVEQWZCZ05WSFNNRUdEQVdnQlRBZXBob2pZbjcnLlBIUF9FT0wuJ3F3VmtEQkY5cW4xbHVNck1UakFkQmdOVkhRNEVGZ1FVU3QwR0ZodTg5bWkxZHZXQnRydGlHcnBhZ1M4d0RnWUQnLlBIUF9FT0wuJ1ZSMFBBUUgvQkFRREFnRUdNQzRHQ0NzR0FRVUZCd0VCQkNJd0lEQWVCZ2dyQmdFRkJRY3dBWVlTYUhSMGNEb3YnLlBIUF9FT0wuJ0wyY3VjM2x0WTJRdVkyOXRNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUF3TlFZRFZSMGZCQzR3TERBcW9DaWcnLlBIUF9FT0wuJ0pvWWthSFIwY0RvdkwyY3VjM2x0WTJJdVkyOXRMMk55YkhNdlozUm5iRzlpWVd3dVkzSnNNQmNHQTFVZElBUVEnLlBIUF9FT0wuJ01BNHdEQVlLS3dZQkJBSFdlUUlGQVRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQXF2cXBJTTFxWjRQdFh0UisnLlBIUF9FT0wuJzNoM0VmK0FsQmdERkpQdXB5QzF0ZnQ2ZGdtVXNnV00wWmo3cFVzSUl0TXN2OTErWk9tcWNVSHFGQll4OTBTcEknLlBIUF9FT0wuJ2hOTUpiSHpDelRXZjg0THVVdDVvWCtRQWloY2dsdmNwalpwTnk2amVoc2dOYjFhSEEzMERQOXo2ZVgwaEdmbkknLlBIUF9FT0wuJ09pOVJkb3pIUVpKeGp5WE9OL2hLVEFBajc4UTFFSzdnSTRCemZFMDBMc2h1a05ZUUhwbUVjeHB3OHUxVkR1NFgnLlBIUF9FT0wuJ0J1cG43akxyTE4xbkJ6LzJpOEp3M2xzQTVyc2IwellhSW14c3NEVkNiSkFKUFpQcFpBa2lEb1VHbjhKeklkUG0nLlBIUF9FT0wuJ1g0RGtqWVVpT25NRHNXQ09ybWppOUQ2WDUyQVNDV2cyM2pyVzRrT1ZXemVCa29FZnU0M1hyVkprRmxlVzJWNDAnLlBIUF9FT0wuJ2ZzZzEyQT09J10sCiAgICAgICAgXSwKICAgICAgICAgICAgJGtleS0+YWxsKCkKICAgICAgICApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/DSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/DSA/DSA.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBEU0EgUFJJVkFURSBLRVktLS0tLQpNSUlCdWdJQkFBS0JnUURMeWljZ21hQWpieS9sbjJRakVTR3NoaktEWkYwejZtWGtidXVTa1NoQzhpTXdNRGlvCkpISzdpNmx0MHhDQ1hjVXk5ckdQS05ZcEgzRUJQVE5CZzR3UUNDMnpZSHVkdjE1UUhQdk9Ocitkb0lUc0k3WXAKc08vRjFackdDOXBwZHROSXhOU3UvMnAzb0ZUWEVWMlBpWDdpRVpYd2Y0QlVWZDNlYXhqdXJjY2cvUUlWQUsrRApLV2QwUDJ3NTBGQWdlTjNPeTg1N1lpamRBb0dBRlVCSy82OEFEVXQyWmxPQ0h3a1FNK2E2U2xqb3dVVEJDaHRBCjY3Nit1TE1NTC9KbTRPN0RtMCtvTGRZUVNybWlTS0loSTNrU0JTMzYwbE51WXhDS2hvT2xhRzJhN2JTUitMUlkKL0gxaXd4YWFDN2RlUUhraXJaNWRPdTNJQzdKc0U3UDdPMTBmUTgvWXNKK1d2V2U4R25wU2pnaTB1c25aMGRqcApMTWhFVnNvQ2dZQkYyalFZTXF4U3B3bkZzTWJhWkJWOFZzWjYxdmFVaEI1ZXNUam1lc2pxSEs4ZDY0N0tGSiszCkV3NnpBWXVaUitVZEl1ZnE0S1RFTGpMRTdQaW0ySzk3ZGlrMG5LVUFQVWFQR0cwZXBzRnhlK2dCVU5zNi9FYmkKNlQ2QW1YMk81RDhLR3IrQkVTR1JoUVlEaWU1eS9pUk9jWEtreW9YKzUrdlQyb2o2YjhPM3ZnSVVFSWVXTW42dgpydXVqN1NYbmhYdUNSZG8zdGRBPQotLS0tLUVORCBEU0EgUFJJVkFURSBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es256.encrypted.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IERFUy1FREUzLUNCQyw2RkVFRTRBQzkwOEI5QUY4CgpxSDAwaVJoRXJYc2lIam45aE1mTmpnMnA2TGlsbnF2c3VHcWY3K0V1amE4V3NFMnBrazdNZTlIL3Q3aXZqMHNDCndBNG5kTjRNY1ArMEc1VEg0bjJqM3BFZ1hyTHRvNFBwcTZyUnJUZ0tYMlU1a0h0d0FvUVorQXpGTUd0d0R1UG4KSklKVEUwSG51eG5qOTVnMnVUd044RWpSbzNGaTRKa0hCZVJQVm5RNXQ1Zz0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es256.from.APN.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR1RBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJIa3dkd0lCQVFRZzEzbjNpc2ZzRWt0emwrQ3RINUVDcFJyS2srNDBwclZ1Q2JsZGtQNzdnYW1nQ2dZSUtvWkl6ajBEQVFlaFJBTkNBQVJod2d4U1JxWEJ0NTRCV1JRWG9VL2RvRldVTE9XckVSM3VMUzQzL2l1Z0RXMVBNRGxpUVpFeldldFlBZGYrTWFmcS9QcmxiRUFmQStsN0pmbWlqQXN2Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es256.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUt2MVpNelo4VXh0L1l4d2RLcE1BUDBubFY3bmU4Z2gwKzVHKzVHYi90TVVvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFdnVZc1ArUW5ycUFiTTdJeWh6anQwOGhGU3V6YXB5b2pDQi9nRnNCdDY1V2lyNFRZcjVmUwpROTZvYTRxZUdWZVRGemwrZkdpWkZJTG9vdHZMc2lQd0FRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es384.encrypted.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IERFUy1FREUzLUNCQyw3QjA5RUI5QzcwMTM3MDNDCgpJYU10Rk9peURuc3VYdUZZcVpwWUZiU0FYUkplSjJEVjd3Y25BbTdOZXBuQjZKOXJpL29OVU1kLzVVdU9UaGYwCnZJNVpuQkZVSkJGdkc4T1lrT2trM3hKcnBDcmRuOXo4Q3VOOVlrUHEvVWsxN0REbEh4ZnBvRHEyNnNVV1FNM0QKYUplS0ZabjZRYWI5b3VOTGtmemhPOVh3QTJSQTQzR0ZrL3NtWTlCMnV2cXFJQ3dkenF3L0daT3c1RXNPM0hBUAovMWlXdEVtRzFVR3dBVWRDcHFhbTRrTzNhT1lGS1BULwotLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es384.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1JR2tBZ0VCQkRDbHhKSmV0dDVrUTVvRWl6c2pDcHhUMHo4NDR6elZlRm00NGVnYUNaTC9ZOTBRTEJ4MUJ4Zk8KL3RiejZWZ3ZSeXVnQndZRks0RUVBQ0toWkFOaUFBVHAvNWRteURaTytmUVNnUnFsRDdLVXhnMjJ5YndJOS9SeAp2d2NqWVNSOWowR3FtM2RBelBDVXp1Wld3Vkdab3hsdnljNmRIQ2FtWVNlOERaVHpKMUw1MXVjKy90dkJpWDZyCldvMTZIeGFtT2l2ZFU3NUZPM2h4N1ErZmJtZ1laWlE9Ci0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es512.encrypted.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tClByb2MtVHlwZTogNCxFTkNSWVBURUQKREVLLUluZm86IERFUy1FREUzLUNCQyxGNTM5ODc2RDhFNjgyODBDCgpXTnl4b1JTWlpzZThLT2I2a1Z5bFpKUUdPdCtwckVHR0dXWGsxWklVaGJPTXlxWmVNdzNkQTZLWnBVSUFzTmtKCnRoN3BaRStuWEFxcnlwcmNKRmtjekNkc0thZ2hBcEdrQU9yMkxKN0VJWkFLeDd6SGNodWx2akVtRFFHM1ZCWDcKbTluQnZnU3RiU2srNnZBYVYyRzVaejBJSE9vNDhPcmFXNmdRU0U0bGVZc2dLUDVWb2M4TVNPTExiTlpYYzJqSgo5Z1VwOWpVd28yVnM3bmYya21xcjVlRllZZ0RDdmlWRm1ycW4yc25lNUNyOHptbXBqbFdnK0pQZWJuTzdlamJpClYzUDFuS0JPb2pWOXZiN1JtWEJxOFREUlhyWEtkQW9MWDIyVHIwcC9RU1U9Ci0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/private.es512.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1JSGJBZ0VCQkVFV25vb1VwR0ljaDFIL3M4L1pVckhQbzZSTCttSEtoQ3JETy9ZanozN3pNL3RCSnl2SG12d1kKVXR3M21ZSUkwbTNlczNkSWlBamhlZ2hCczE0K1VDUHE4YUFIQmdVcmdRUUFJNkdCaVFPQmhnQUVBVnB2bzdURwpwUWs1UDdaTG8wcWtCcGFUK2ZGRHY2SFFyV0VsQktNeGNySmQvbVJOYXB3ZUFUc1Z2ODNZT040bFRJSVJYemdHCmttV2VxYkRyNlJRTysxY1NBSXMrTW9SbUxhaVB5RzJ4bVB3UUNIWDJDR1gvdUNaaVQzaU94VEFKRVp1VWJlU0EKODI4SzRXZkFBNE9EZEdpQjg3WVZTaGhQT2tpUXN3VjNMcGJwUEdoQwotLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/public.es256.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFdnVZc1ArUW5ycUFiTTdJeWh6anQwOGhGU3V6YQpweW9qQ0IvZ0ZzQnQ2NVdpcjRUWXI1ZlNROTZvYTRxZUdWZVRGemwrZkdpWkZJTG9vdHZMc2lQd0FRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/public.es384.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUU2ZitYWnNnMlR2bjBFb0VhcFEreWxNWU50c204Q1BmMApjYjhISTJFa2ZZOUJxcHQzUU16d2xNN21Wc0ZSbWFNWmI4bk9uUndtcG1FbnZBMlU4eWRTK2RiblB2N2J3WWwrCnExcU5laDhXcGpvcjNWTytSVHQ0Y2UwUG4yNW9HR1dVCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/EC/public.es512.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHYk1CQUdCeXFHU000OUFnRUdCU3VCQkFBakE0R0dBQVFCV20ranRNYWxDVGsvdGt1alNxUUdscFA1OFVPLwpvZEN0WVNVRW96RnlzbDMrWkUxcW5CNEJPeFcvemRnNDNpVk1naEZmT0FhU1paNnBzT3ZwRkE3N1Z4SUFpejR5CmhHWXRxSS9JYmJHWS9CQUlkZllJWmYrNEptSlBlSTdGTUFrUm01UnQ1SUR6YndyaFo4QURnNE4wYUlIenRoVksKR0U4NlNKQ3pCWGN1bHVrOGFFST0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/ECKeysTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHNcS2V5czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyXEtleUNvbnZlcnRlcjsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBFQ0tleXMKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIEVDS2V5c1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuc3VwcG9ydGVkIGtleSB0eXBlCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleVR5cGVOb3RTdXBwb3J0ZWQoKQogICAgewogICAgICAgICRmaWxlID0gJ2ZpbGU6Ly8nLl9fRElSX18uRElSRUNUT1JZX1NFUEFSQVRPUi4nRFNBJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidEU0Eua2V5JzsKICAgICAgICBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5RmlsZSgkZmlsZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3ktTGFicy9qb3NlL2lzc3Vlcy8xNDEKICAgICAqIEBzZWUgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vU3BvbWt5LzI0NmVjYTZhYWVlYjdhNDBmMTFkM2EyZDk4OTYwMjgyCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQcml2YXRlRUMyNTZLZXlHZW5lcmF0ZUJ5QVBOKCkKICAgIHsKICAgICAgICAkcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwcml2YXRlLmVzMjU2LmZyb20uQVBOLmtleScpOwogICAgICAgICRkZXRhaWxzID0gS2V5Q29udmVydGVyOjpsb2FkRnJvbUtleSgkcGVtKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZGV0YWlscywgWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAnZCcgPT4gJzEzbjNpc2ZzRWt0emwtQ3RINUVDcFJyS2stNDBwclZ1Q2JsZGtQNzdnYWsnLAogICAgICAgICAgICAneCcgPT4gJ1ljSU1Va2Fsd2JlZUFWa1VGNkZQM2FCVmxDemxxeEVkN2kwdU5fNHJvQTAnLAogICAgICAgICAgICAneScgPT4gJ2JVOHdPV0pCa1ROWjYxZ0IxXzR4cC1yOC11VnNRQjhENlhzbC1hS01DeTgnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQdWJsaWNFQzI1NktleSgpCiAgICB7CiAgICAgICAgJHBlbSA9IFxmaWxlX2dldF9jb250ZW50cygnZmlsZTovLycuX19ESVJfXy5ESVJFQ1RPUllfU0VQQVJBVE9SLidFQycuRElSRUNUT1JZX1NFUEFSQVRPUi4ncHVibGljLmVzMjU2LmtleScpOwogICAgICAgICRkZXRhaWxzID0gS2V5Q29udmVydGVyOjpsb2FkRnJvbUtleSgkcGVtKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZGV0YWlscywgWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ3Z1WXNQLVFucnFBYk03SXloemp0MDhoRlN1emFweW9qQ0JfZ0ZzQnQ2NVUnLAogICAgICAgICAgICAneScgPT4gJ29xLUUySy1YMGtQZXFHdUtuaGxYa3hjNWZueG9tUlNDNktMYnk3SWo4QUUnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQcml2YXRlRUMyNTZLZXkoKQogICAgewogICAgICAgICRwcml2YXRlX3BlbSA9IFxmaWxlX2dldF9jb250ZW50cygnZmlsZTovLycuX19ESVJfXy5ESVJFQ1RPUllfU0VQQVJBVE9SLidFQycuRElSRUNUT1JZX1NFUEFSQVRPUi4ncHJpdmF0ZS5lczI1Ni5rZXknKTsKICAgICAgICAkZGV0YWlscyA9IEtleUNvbnZlcnRlcjo6bG9hZEZyb21LZXkoJHByaXZhdGVfcGVtKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZGV0YWlscywgWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAnZCcgPT4gJ3FfVmt6Tm54VEczOWpIQjBxa3dBX1NlVlh1ZDd5Q0hUN2tiN2tadi0weFEnLAogICAgICAgICAgICAneCcgPT4gJ3Z1WXNQLVFucnFBYk03SXloemp0MDhoRlN1emFweW9qQ0JfZ0ZzQnQ2NVUnLAogICAgICAgICAgICAneScgPT4gJ29xLUUySy1YMGtQZXFHdUtuaGxYa3hjNWZueG9tUlNDNktMYnk3SWo4QUUnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRFbmNyeXB0ZWRQcml2YXRlRUMyNTZLZXkoKQogICAgewogICAgICAgICRwcml2YXRlX3BlbSA9IFxmaWxlX2dldF9jb250ZW50cygnZmlsZTovLycuX19ESVJfXy5ESVJFQ1RPUllfU0VQQVJBVE9SLidFQycuRElSRUNUT1JZX1NFUEFSQVRPUi4ncHJpdmF0ZS5lczI1Ni5lbmNyeXB0ZWQua2V5Jyk7CiAgICAgICAgJGRldGFpbHMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5KCRwcml2YXRlX3BlbSwgJ3Rlc3QnKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZGV0YWlscywgWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAnZCcgPT4gJ3FfVmt6Tm54VEczOWpIQjBxa3dBX1NlVlh1ZDd5Q0hUN2tiN2tadi0weFEnLAogICAgICAgICAgICAneCcgPT4gJ3Z1WXNQLVFucnFBYk03SXloemp0MDhoRlN1emFweW9qQ0JfZ0ZzQnQ2NVUnLAogICAgICAgICAgICAneScgPT4gJ29xLUUySy1YMGtQZXFHdUtuaGxYa3hjNWZueG9tUlNDNktMYnk3SWo4QUUnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgUGFzc3dvcmQgcmVxdWlyZWQgZm9yIGVuY3J5cHRlZCBrZXlzLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkRW5jcnlwdGVkUHJpdmF0ZUVDMjU2S2V5V2l0aG91dFBhc3N3b3JkKCkKICAgIHsKICAgICAgICBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5RmlsZSgnZmlsZTovLycuX19ESVJfXy5ESVJFQ1RPUllfU0VQQVJBVE9SLidFQycuRElSRUNUT1JZX1NFUEFSQVRPUi4ncHJpdmF0ZS5lczI1Ni5lbmNyeXB0ZWQua2V5Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFB1YmxpY0VDMzg0S2V5KCkKICAgIHsKICAgICAgICAkcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwdWJsaWMuZXMzODQua2V5Jyk7CiAgICAgICAgJGRldGFpbHMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5KCRwZW0pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTM4NCcsCiAgICAgICAgICAgICd4JyA9PiAnNmYtWFpzZzJUdm4wRW9FYXBRLXlsTVlOdHNtOENQZjBjYjhISTJFa2ZZOUJxcHQzUU16d2xNN21Wc0ZSbWFNWicsCiAgICAgICAgICAgICd5JyA9PiAnYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVScsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFByaXZhdGVFQzM4NEtleSgpCiAgICB7CiAgICAgICAgJHByaXZhdGVfcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwcml2YXRlLmVzMzg0LmtleScpOwogICAgICAgICRkZXRhaWxzID0gS2V5Q29udmVydGVyOjpsb2FkRnJvbUtleSgkcHJpdmF0ZV9wZW0pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTM4NCcsCiAgICAgICAgICAgICdkJyA9PiAncGNTU1hyYmVaRU9hQklzN0l3cWNVOU1fT09NODFYaFp1T0hvR2dtU18yUGRFQ3djZFFjWHp2N1c4LWxZTDBjcicsCiAgICAgICAgICAgICd4JyA9PiAnNmYtWFpzZzJUdm4wRW9FYXBRLXlsTVlOdHNtOENQZjBjYjhISTJFa2ZZOUJxcHQzUU16d2xNN21Wc0ZSbWFNWicsCiAgICAgICAgICAgICd5JyA9PiAnYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVScsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEVuY3J5cHRlZFByaXZhdGVFQzM4NEtleSgpCiAgICB7CiAgICAgICAgJHByaXZhdGVfcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwcml2YXRlLmVzMzg0LmVuY3J5cHRlZC5rZXknKTsKICAgICAgICAkZGV0YWlscyA9IEtleUNvbnZlcnRlcjo6bG9hZEZyb21LZXkoJHByaXZhdGVfcGVtLCAndGVzdCcpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTM4NCcsCiAgICAgICAgICAgICdkJyA9PiAncGNTU1hyYmVaRU9hQklzN0l3cWNVOU1fT09NODFYaFp1T0hvR2dtU18yUGRFQ3djZFFjWHp2N1c4LWxZTDBjcicsCiAgICAgICAgICAgICd4JyA9PiAnNmYtWFpzZzJUdm4wRW9FYXBRLXlsTVlOdHNtOENQZjBjYjhISTJFa2ZZOUJxcHQzUU16d2xNN21Wc0ZSbWFNWicsCiAgICAgICAgICAgICd5JyA9PiAnYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVScsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFB1YmxpY0VDNTEyS2V5KCkKICAgIHsKICAgICAgICAkcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwdWJsaWMuZXM1MTIua2V5Jyk7CiAgICAgICAgJGRldGFpbHMgPSBLZXlDb252ZXJ0ZXI6OmxvYWRGcm9tS2V5KCRwZW0pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICd4JyA9PiAnQVZwdm83VEdwUWs1UDdaTG8wcWtCcGFULWZGRHY2SFFyV0VsQktNeGNySmRfbVJOYXB3ZUFUc1Z2ODNZT040bFRJSVJYemdHa21XZXFiRHI2UlFPLTFjUycsCiAgICAgICAgICAgICd5JyA9PiAnQUlzLU1vUm1MYWlQeUcyeG1Qd1FDSFgyQ0dYX3VDWmlUM2lPeFRBSkVadVViZVNBODI4SzRXZkFBNE9EZEdpQjg3WVZTaGhQT2tpUXN3VjNMcGJwUEdoQycsCiAgICAgICAgXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFByaXZhdGVFQzUxMktleSgpCiAgICB7CiAgICAgICAgJHByaXZhdGVfcGVtID0gXGZpbGVfZ2V0X2NvbnRlbnRzKCdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0VDJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwcml2YXRlLmVzNTEyLmtleScpOwogICAgICAgICRkZXRhaWxzID0gS2V5Q29udmVydGVyOjpsb2FkRnJvbUtleSgkcHJpdmF0ZV9wZW0pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRkZXRhaWxzLCBbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICdkJyA9PiAnRnA2S0ZLUmlISWRSXzdQUDJWS3h6Nk9rU19waHlvUXF3enYySTg5LTh6UDdRU2NyeDVyOEdGTGNONW1DQ05KdDNyTjNTSWdJNFhvSVFiTmVQbEFqNnZFJywKICAgICAgICAgICAgJ3gnID0+ICdBVnB2bzdUR3BRazVQN1pMbzBxa0JwYVQtZkZEdjZIUXJXRWxCS014Y3JKZF9tUk5hcHdlQVRzVnY4M1lPTjRsVElJUlh6Z0drbVdlcWJEcjZSUU8tMWNTJywKICAgICAgICAgICAgJ3knID0+ICdBSXMtTW9SbUxhaVB5RzJ4bVB3UUNIWDJDR1hfdUNaaVQzaU94VEFKRVp1VWJlU0E4MjhLNFdmQUE0T0RkR2lCODdZVlNoaFBPa2lRc3dWM0xwYnBQR2hDJywKICAgICAgICBdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkRW5jcnlwdGVkUHJpdmF0ZUVDNTEyS2V5KCkKICAgIHsKICAgICAgICAkcHJpdmF0ZV9wZW0gPSBcZmlsZV9nZXRfY29udGVudHMoJ2ZpbGU6Ly8nLl9fRElSX18uRElSRUNUT1JZX1NFUEFSQVRPUi4nRUMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3ByaXZhdGUuZXM1MTIuZW5jcnlwdGVkLmtleScpOwogICAgICAgICRkZXRhaWxzID0gS2V5Q29udmVydGVyOjpsb2FkRnJvbUtleSgkcHJpdmF0ZV9wZW0sICd0ZXN0Jyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJGRldGFpbHMsIFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtNTIxJywKICAgICAgICAgICAgJ2QnID0+ICdGcDZLRktSaUhJZFJfN1BQMlZLeHo2T2tTX3BoeW9RcXd6djJJODktOHpQN1FTY3J4NXI4R0ZMY041bUNDTkp0M3JOM1NJZ0k0WG9JUWJOZVBsQWo2dkUnLAogICAgICAgICAgICAneCcgPT4gJ0FWcHZvN1RHcFFrNVA3WkxvMHFrQnBhVC1mRkR2NkhRcldFbEJLTXhjckpkX21STmFwd2VBVHNWdjgzWU9ONGxUSUlSWHpnR2ttV2VxYkRyNlJRTy0xY1MnLAogICAgICAgICAgICAneScgPT4gJ0FJcy1Nb1JtTGFpUHlHMnhtUHdRQ0hYMkNHWF91Q1ppVDNpT3hUQUpFWnVVYmVTQTgyOEs0V2ZBQTRPRGRHaUI4N1lWU2hoUE9raVFzd1YzTHBicFBHaEMnLAogICAgICAgIF0pOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRQcml2YXRlS2V5VG9QdWJsaWMoKQogICAgewogICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdraWQnID0+ICdGb28nLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2QnID0+ICdxX1Zrek5ueFRHMzlqSEIwcWt3QV9TZVZYdWQ3eUNIVDdrYjdrWnYtMHhRJywKICAgICAgICAgICAgJ3gnID0+ICd2dVlzUC1RbnJxQWJNN0l5aHpqdDA4aEZTdXphcHlvakNCX2dGc0J0NjVVJywKICAgICAgICAgICAgJ3knID0+ICdvcS1FMkstWDBrUGVxR3VLbmhsWGt4YzVmbnhvbVJTQzZLTGJ5N0lqOEFFJywKICAgICAgICAgICAgJ2ZvbycgPT4gJ2JhcicsCiAgICAgICAgXSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ0ZvbycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAneCcgPT4gJ3Z1WXNQLVFucnFBYk03SXloemp0MDhoRlN1emFweW9qQ0JfZ0ZzQnQ2NVUnLAogICAgICAgICAgICAneScgPT4gJ29xLUUySy1YMGtQZXFHdUtuaGxYa3hjNWZueG9tUlNDNktMYnk3SWo4QUUnLAogICAgICAgICAgICAnZm9vJyA9PiAnYmFyJywKICAgICAgICBdLCAkandrLT50b1B1YmxpYygpLT5hbGwoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRUNLZXlPblAyNTYoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVFQ0tleSgnUC0yNTYnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VDJywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygnZCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCd4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ3knKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRUNLZXlPblAzODQoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVFQ0tleSgnUC0zODQnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VDJywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygnZCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCd4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ3knKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRUNLZXlPblA1MjEoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVFQ0tleSgnUC01MjEnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VDJywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygnZCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCd4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ3knKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/NoneKeysTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHNcS2V5czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBOb25lS2V5cwogKiBAZ3JvdXAgVW5pdAogKi8KY2xhc3MgTm9uZUtleXNUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjM4I3NlY3Rpb24tMy4xCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleVRodW1icHJpbnQoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdub25lJywKICAgICAgICAgICAgJ2FsZycgPT4gJ25vbmUnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2tpZCcgPT4gJzIwMTEtMDQtMjknLAogICAgICAgIF0pOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJrdHkiOiJub25lIiwiYWxnIjoibm9uZSIsInVzZSI6InNpZyIsImtpZCI6IjIwMTEtMDQtMjkifScsIFxqc29uX2VuY29kZSgka2V5KSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0JDNjlMczI1Q0xSaDFLUXJYdlFBQUIyMm95dVczZVFhYkRTTWR2OXhNTmsnLCAka2V5LT50aHVtYnByaW50KCdzaGEyNTYnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2hDbkJvNnY4N1YtR3o1QnA3ZW9GVHJkdmtHQScsICRrZXktPnRodW1icHJpbnQoJ3NoYTEnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0pJM2d1anJlSnRQdDJnenhsYkduTFEnLCAka2V5LT50aHVtYnByaW50KCdtZDUnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlTm9uZUtleSgpCiAgICB7CiAgICAgICAgJGtleSA9IEpXS0ZhY3Rvcnk6OmNyZWF0ZU5vbmVLZXkoWydraWQnID0+ICdOT05FX0tFWSddKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ25vbmUnLCAka2V5LT5nZXQoJ2t0eScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnbm9uZScsICRrZXktPmdldCgnYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdzaWcnLCAka2V5LT5nZXQoJ3VzZScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTk9ORV9LRVknLCAka2V5LT5nZXQoJ2tpZCcpKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0JDNjlMczI1Q0xSaDFLUXJYdlFBQUIyMm95dVczZVFhYkRTTWR2OXhNTmsnLCAka2V5LT50aHVtYnByaW50KCdzaGEyNTYnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2hDbkJvNnY4N1YtR3o1QnA3ZW9GVHJkdmtHQScsICRrZXktPnRodW1icHJpbnQoJ3NoYTEnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0pJM2d1anJlSnRQdDJnenhsYkduTFEnLCAka2V5LT50aHVtYnByaW50KCdtZDUnKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/OctKeysTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHNcS2V5czsKCnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgT2N0S2V5cwogKiBAZ3JvdXAgVW5pdAogKi8KY2xhc3MgT2N0S2V5c1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIEludmFsaWQga2V5IHNpemUuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9jdEtleVdpdGhJbnZhbGlkS2V5U2l6ZSgpCiAgICB7CiAgICAgICAgSldLRmFjdG9yeTo6Y3JlYXRlT2N0S2V5KDEyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVPY3RLZXkoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVPY3RLZXkoNjQpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnb2N0JywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygnaycpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/OKPKeysTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHNcS2V5czsKCnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpXS0ZhY3Rvcnk7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgT0tQS2V5cwogKiBAZ3JvdXAgVW5pdAogKi8KY2xhc3MgT0tQS2V5c1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuc3VwcG9ydGVkICJFZDQ1NSIgY3VydmUKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlT0tQS2V5V2l0aEludmFsaWRLZXlTaXplKCkKICAgIHsKICAgICAgICBKV0tGYWN0b3J5OjpjcmVhdGVPS1BLZXkoJ0VkNDU1Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlT0tQS2V5V2l0aEN1cnZlWDI1NTE5KCkKICAgIHsKICAgICAgICAkandrID0gSldLRmFjdG9yeTo6Y3JlYXRlT0tQS2V5KAogICAgICAgICAgICAnWDI1NTE5JywKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2tpZCcgPT4gJ0tFWScsCiAgICAgICAgICAgICAgICAnYWxnJyA9PiAnRUNESC1FUycsCiAgICAgICAgICAgICAgICAndXNlJyA9PiAnZW5jJywKICAgICAgICAgICAgXQogICAgICAgICk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdPS1AnLCAkandrLT5nZXQoJ2t0eScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCd4JykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ2QnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0tFWScsICRqd2stPmdldCgna2lkJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdFQ0RILUVTJywgJGp3ay0+Z2V0KCdhbGcnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2VuYycsICRqd2stPmdldCgndXNlJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZU9LUEtleVdpdGhDdXJ2ZUVkMjU1MTkoKQogICAgewogICAgICAgICRqd2sgPSBKV0tGYWN0b3J5OjpjcmVhdGVPS1BLZXkoCiAgICAgICAgICAgICdFZDI1NTE5JywKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2tpZCcgPT4gJ0tFWScsCiAgICAgICAgICAgICAgICAnYWxnJyA9PiAnRWREU0EnLAogICAgICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgIF0KICAgICAgICApOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnT0tQJywgJGp3ay0+Z2V0KCdrdHknKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygneCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCdkJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdLRVknLCAkandrLT5nZXQoJ2tpZCcpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnRWREU0EnLCAkandrLT5nZXQoJ2FsZycpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnc2lnJywgJGp3ay0+Z2V0KCd1c2UnKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSA/private.encrypted.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpQcm9jLVR5cGU6IDQsRU5DUllQVEVECkRFSy1JbmZvOiBBRVMtMjU2LUNCQyw1MTBDOUU3QUFGMTdBODM5N0M0Qjc5RDkwNkRBRTQzMgoKVzBxTzFpT2lTMTBnZG9tVlVCYlIzTGRKT0hSbWZPbXNYQWpnNGV6RzMrRGcvMHJmVmtqK0gzUldJcE5uTHEybApjaWF5QXFqRnpMemxLWVBXNC9YYWt5aGZtQ3JaRSttTCtrRlZFVWpoSVNaK3hYTHdIR2x0TDBVZVlzZWkvQVVwCnVzamJ4TzhLMGhaMVpHMmJRQ0VqNWZmMllHbUM5ZzFLM0M3dEU4WFIwK1FDWi94YVlrZFV4RFVJZllaNE1lYkcKK0M1UCttY2tkczZsbWNkWmtJWmo5SCszNkxQSDJSUGxNSkFkTG1MR3l0S0YzN2g5M2djTC9wZ2VQTUVZK3NWagpoMFlmU2NRMkdsRTN2M1MxQ0MxWDJ5alU1Q3RmeFBIdUErMlh1RklaOXR3bHJORlNxVVd0dmFDTU5nU2FXUExICktkUjlSQzh2SW16MFBFdTZlUjR0OXl0VG55a1lHK211akNqdW1lb2hKb1dqclhKeW1DNG9jSElhOHAvRUE3SGMKQVdYeFZsUzg5N2ZlRzFCUStyQWl1dnpJRHZVOGdsS084WkRqczlGVWVDNE82eVNDSTliNE9mLzU3VXFvN25tUQowbkxUSm50dktGZXVzSjlXbmVyZ09FRUhnMXg5M244YWpNNDlhK2VTMnVFaitVbElXaVQwMVdUVlMyaTV3V3A3Cit3Y25pWXdsRWszNkhIQldTWUJtaEsrVWRhNGlzRTNTQkJpUkJhNEVUaDdHb29yM0ZjeFRBNVRFcUt3c0hHMG8KMWluZktObVBIVXkyaFFUckd0dG9KckNwQXZLcTJSdVFKVUc1VHU1bVVSaWJpaGNScUNDY2J5ei91S1kvSUlKZwo5V1YzZ3pzRFhybXIyVVdvdkQ5UmZ1ZG02bWRraHoxU24rWFM2OXozaXJNSkh1Vy9qMnNPL2JPNUpzZXVyUHE3CjBWOU1zMlRDSWx5VDduY2pzVjNMZjBQU21pdGYvVzRLelJLZ3hLa2dPUkhOV1g0Vzl5TEEreU1lUDNDZndhQm4KUWlUay9kbk4vdXdWRlE1WWxSa1VzV09GeFM3L2drL2tCdjE1ZFRaVi8xcGFxbTBpUGNFeG10WHFGdlBseG5VcgpKM05lVmw2ajZrT1VHTFBzaWprNHpJaWpWTXF1WXVnNFdmakNITG16c3FFR09Zb0srbkE2QlF3eGVNU094RldUClI4UVd2dno4QjZmbTVCaWdCc1VzN2tRYTNIY2tzRTZZTXo4ZFhyM3IwY3ZJTnVyR1VwZDNoRFlMTWRVSjB0dEcKY2pkSFhHMytmQk9oVUQ4emtRU3BmMjFWMS9CNGRmMlBpRmxUS2FyNUp4MUlpcGx2a1REUHY2TmVhOHp1aVZ6eQo4V3AvUGF3TmJQUnMrS1FBc3IrcHZnZWQrVmZ0dnNWVkd5RyswbFhkN2tQQUpxeG80eEVwRCtOZWxISktEZ1Z5CnV1UVBNb3h0MVRJdkNBUDlqRCtFTkNtbkdVMkhocEp2bmdzVlFzKzdEdmlDT2diYmRJZmZmOTFmeXJMa1NOa2IKdGNrNHEzUkZwS0RjS2lVOXl4amVBYVlQNmJYU3EyeXB3SFY0WWhpdmZ0eUpONTJUeEFqR1Jxa3VaQ3I1Y0c5UAorbDNoZ3dUdXNKU2ppTkZralN2N1RxM3NxK3M2cDMrdmRxQnM3cFM2d0gveWZuSnRTblBnZE9rTzlOcXZZRzY3CkFMY28waFN1Qm1LV0ZqcjRyazllL2ZWUHFPRkNLWk5kSjQ0WkZWaUZrRjFSeS9ZTzdYdm54Q1FDT2sxN2cvYU0KZGFNU05ESmRabGlHc3U2bEh4ekYwL2dxN3VrVHFBWUpFaDBKdmI3K2w4L1lNSlpSRnp4QjBTRU5DVG45clBJWQpWVHJhaks4ejMzR01IVUZ6YkdFeW9ab0d4TmUwRjREYXJIcUZ0ZUJqblJMRmV2ME44OGdvMGhsTFAwTlIyaEJCClJzTlJUSkdiellUVlpKd1pURHJBMTFLb1UzUGFXRnJaZ2xzRC9FeFZiK09ZZ1l2K1NsYlVkdTl6bnBaQmxheWoKM3dKdjZScWhEbnRyYmMyeVB6Sy8yN0t6VG9OTGxxZEJuVU8wa2w2NEphWnVra2hwRGZtS0phaFdPNG5lUHh2dQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSA/private.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUNkd0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Fd2dnSmRBZ0VBQW9HQkFOOTFrUXhCdWF6ZTNXakkKQ05qZVIvSEQ4RTNrRHpwODkrTGh0bjN0TWlzaDR5UXhoTmw2QkVrYWJ1UzNwVWozV0RQNitBRmpCVnFBMWozZgp1OFdxdTdoUkpEUEhPczJrQ0lJK0xoSXF2cVFUTHgvbnZOT1VoVzJEaW1LbjBIdUhubHdKT0RxME1IRkpFcTVSCnJKSCttRkdzUDl5TUd6NE14QTA0RTJSVmJVSlJBZ01CQUFFQ2dZRUFqckRyTzNGbzJHdkQ1Sm4vbEVSMG1ueHQKSWIva3ZZdDVXeWFZdXRiUk4xdS9TS2hhVmVrbGZXemtyU1piNURrVjJMT0UxSlhmb0VndkJubXMxTzlPU0pYdwpxRHJGRjdORGVidzk1ZzZKekkrU2JrSUh3MENiKy9FOUs5MkZqdlczQmk4ajlQS0lhOGMvZHB3SUFJaXJjL3E4CnVoU1RmNFdvSU9IU0ZiU2FRUEVDUVFEMVdpOXZ5bkpMSTVsU2hPczB3UG9tWk93TnJYYTczTGo4Y2laQzRvUFMKdDZ0V2piTG5Mc1ArdlRTTFV5RVllUUdzamRiWSt5NXNpSm1BcW5WL1NoQjlBa0VBNlNnbmE5Z1F3NGRYTjBqQgpTak9aU2psNFMyL0gzd0hhdGNscnZsWWZiSlZVNkdsSWxxV0dhVWtkRnZDdUVyOWlYSkFZNHpwRVE0UDM3MEVaCnRzeVZaUUpCQU9adS9YNlJOU2M5R0JOWW8wKzRyempBTUxQbjUwd3AwZFBIb2dmUGx0K2hnVnFaV3gybDNvNnkKUlZkVmpBL2dGcUpwMVErVldkUzF0dllSSXFtYWRrRUNRQ1ZkcVF1d2dlZEVIbWNld3ROb2Q0MmNyam13dldCeApCS01UbDYvV1Q0endWYjQxZVV1alZXbzBMSFJMdUNvSy8vR0RxbWxvSWg2TDNNVThNcW5JR2IwQ1FGV2NwRDQvCnJvQ2tNYmxrMGhQb1FQcHlhcEpleGM0Mzh4N1h1RUdGRWh5eHhhdXFDNVI0WUZLQ2YrS0JTMmdaZ3I0R1N3QlUKUXd3K3FaM2VSWU03ZmFNPQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSA/public-ne.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEZmRaRU1RYm1zM3Qxb3lBalkza2Z4dy9CTgo1QTg2ZlBmaTRiWjk3VElySWVNa01ZVFplZ1JKR203a3Q2Vkk5MWd6K3ZnQll3VmFnTlk5Mzd2RnFydTRVU1F6Cnh6ck5wQWlDUGk0U0tyNmtFeThmNTd6VGxJVnRnNHBpcDlCN2g1NWNDVGc2dERCeFNSS3VVYXlSL3BoUnJEL2MKakJzK0RNUU5PQk5rVlcxQ1VRSURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSA/public.key</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0cFMxWm1mVktWUDVLb2ZJaE1CUAowdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwClMrSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzAvNXJRQ3BjRXQvRG4KNWlNK0JObjdmcXBvTElia3M4clhLVUlqOCtxTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0graHZHdGk1Sgp0MkRNbkgxSmpvWGREWGZ4dlNQLzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1kvCkNwN0o0TW4xZWpaNkhObXl2b1RFLzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUoKc3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/Keys/RSAKeysTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHNcS2V5czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcSldLRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcS2V5Q29udmVydGVyXFJTQUtleTsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBSU0FLZXlzCiAqIEBncm91cCBVbml0CiAqLwpjbGFzcyBSU0FLZXlzVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzYzOCNzZWN0aW9uLTMuMQogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlUaHVtYnByaW50KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICcwdng3YWdvZWJHY1FTdXVQaUxKWFpwdE45bm5kclFtYlhFcHMyYWlBRmJXaE03OExoV3g0Y2JiZkFBdFZUODZ6d3UxUks3YVBGRnh1aERSMUw2dFNvY19CSkVDUGViV0tSWGpCWkNpRlY0bjNva25qaE1zdG42NHRaXzJXLTVKc0dZNEhjNW45eUJYQXJ3bDkzbHF0N19STjV3NkNmMGg0UXlRNXYtNjVZR2pRUjBfRkRXMlF2enFZMzY4UVFNaWNBdGFTcXpzOEtKWmduWWI5YzdkMHpnZEFaSHp1NnFNUXZSTDVoYWpybjFuOTFDYk9wYklTRDA4cU5MeXJka3QtYkZUV2hBSTR2TVFGaDZXZVp1MGZNNGxGZDJOY1J3cjNYUGtzSU5IYVEtR194Qm5pSXFidzBMczFqRjQ0LWNzRkN1ci1rRWdVOGF3YXBKektucURLZ3cnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAnYWxnJyA9PiAnUlMyNTYnLAogICAgICAgICAgICAna2lkJyA9PiAnMjAxMS0wNC0yOScsCiAgICAgICAgXSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdOemJMc1hoOHVEQ2NkLTZNTndYRjRXXzdub1dYRlpBZkhreFpzUkdDOVhzJywgJGtleS0+dGh1bWJwcmludCgnc2hhMjU2JykpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVGhlIGhhc2ggYWxnb3JpdGhtICJmb28iIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc2hBbGdvcml0aG1Ob3RTdXBwb3J0ZWQoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJzB2eDdhZ29lYkdjUVN1dVBpTEpYWnB0TjlubmRyUW1iWEVwczJhaUFGYldoTTc4TGhXeDRjYmJmQUF0VlQ4Nnp3dTFSSzdhUEZGeHVoRFIxTDZ0U29jX0JKRUNQZWJXS1JYakJaQ2lGVjRuM29rbmpoTXN0bjY0dFpfMlctNUpzR1k0SGM1bjl5QlhBcndsOTNscXQ3X1JONXc2Q2YwaDRReVE1di02NVlHalFSMF9GRFcyUXZ6cVkzNjhRUU1pY0F0YVNxenM4S0paZ25ZYjljN2QwemdkQVpIenU2cU1RdlJMNWhhanJuMW45MUNiT3BiSVNEMDhxTkx5cmRrdC1iRlRXaEFJNHZNUUZoNldlWnUwZk00bEZkMk5jUndyM1hQa3NJTkhhUS1HX3hCbmlJcWJ3MExzMWpGNDQtY3NGQ3VyLWtFZ1U4YXdhcEp6S25xREtndycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICcyMDExLTA0LTI5JywKICAgICAgICBdKTsKCiAgICAgICAgJGtleS0+dGh1bWJwcmludCgnZm9vJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBKV0sgaXMgbm90IGEgUlNBIGtleQogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnN1cHBvcnRlZEtleVR5cGUoKQogICAgewogICAgICAgIFJTQUtleTo6Y3JlYXRlRnJvbUpXSyhKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICdkJyA9PiAncV9Wa3pObnhURzM5akhCMHFrd0FfU2VWWHVkN3lDSFQ3a2I3a1p2LTB4UScsCiAgICAgICAgICAgICd4JyA9PiAndnVZc1AtUW5ycUFiTTdJeWh6anQwOGhGU3V6YXB5b2pDQl9nRnNCdDY1VScsCiAgICAgICAgICAgICd5JyA9PiAnb3EtRTJLLVgwa1BlcUd1S25obFhreGM1Zm54b21SU0M2S0xieTdJajhBRScsCiAgICAgICAgXSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQdWJsaWNSU0FLZXlGcm9tUEVNKCkKICAgIHsKICAgICAgICAkZmlsZSA9ICdmaWxlOi8vJy5fX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ1JTQScuRElSRUNUT1JZX1NFUEFSQVRPUi4ncHVibGljLmtleSc7CiAgICAgICAgJHJzYV9rZXkgPSBSU0FLZXk6OmNyZWF0ZUZyb21QRU0oJGZpbGUpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJ3RwUzFabWZWS1ZQNUtvZkloTUJQMHRTV2M0cWxoNmZtMmxyWlNrdUt4VWpFYVdqelpTenM3MmdFSUd4cmFXdXNNZG9SdVY1NHhzV1J5ZjVLZVpUMFMtSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzBfNXJRQ3BjRXRfRG41aU0tQk5uN2ZxcG9MSWJrczhyWEtVSWo4LXFNVnFrVFhzRUtlS2luRTIzdDF5a01sZHNOYWFPSC1odkd0aTVKdDJETW5IMUpqb1hkRFhmeHZTUF8wZ2pVWWIwZWt0dWRZRlhvQTZ3ZWttUXlKZUltdmd4NE15ejFJNGlIdGtZX0NwN0o0TW4xZWpaNkhObXl2b1RFXzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUpzdycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgXSwgJHJzYV9rZXktPnRvQXJyYXkoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRyc2Ffa2V5LT5pc1B1YmxpYygpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkUHVibGljUlNBS2V5RnJvbUpXSygpCiAgICB7CiAgICAgICAgJGp3ayA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nLCAndmVyaWZ5J10sCiAgICAgICAgXSk7CiAgICAgICAgJHJzYV9rZXkgPSBSU0FLZXk6OmNyZWF0ZUZyb21KV0soJGp3ayk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ3NpZ24nLCAndmVyaWZ5J10sCiAgICAgICAgXSwgJHJzYV9rZXktPnRvQXJyYXkoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRyc2Ffa2V5LT5pc1B1YmxpYygpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkUHVibGljUlNBS2V5RnJvbVZhbHVlcygpCiAgICB7CiAgICAgICAgJHJzYV9rZXkgPSBSU0FLZXk6OmNyZWF0ZUZyb21KV0soSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgIF0pKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgIF0sICRyc2Ffa2V5LT50b0FycmF5KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkcnNhX2tleS0+aXNQdWJsaWMoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFByaXZhdGVSU0FLZXkoKQogICAgewogICAgICAgICRmaWxlID0gJ2ZpbGU6Ly8nLl9fRElSX18uRElSRUNUT1JZX1NFUEFSQVRPUi4nUlNBJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidwcml2YXRlLmtleSc7CiAgICAgICAgJHJzYV9rZXkgPSBSU0FLZXk6OmNyZWF0ZUZyb21QRU0oJGZpbGUpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJzMzV1JERUc1ck43ZGFNZ0kyTjVIOGNQd1RlUVBPbnozNHVHMmZlMHlLeUhqSkRHRTJYb0VTUnB1NUxlbFNQZFlNX3I0QVdNRldvRFdQZC03eGFxN3VGRWtNOGM2emFRSWdqNHVFaXEtcEJNdkgtZTgwNVNGYllPS1lxZlFlNGVlWEFrNE9yUXdjVWtTcmxHc2tmNllVYXdfM0l3YlBnekVEVGdUWkZWdFFsRScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdwJyA9PiAnOVZvdmI4cHlTeU9aVW9Uck5NRDZKbVRzRGExMnU5eTRfSEltUXVLRDByZXJWbzJ5NXk3RF9yMDBpMU1oR0hrQnJJM1cyUHN1YklpWmdLcDFmMG9RZlEnLAogICAgICAgICAgICAnZCcgPT4gJ2pyRHJPM0ZvMkd2RDVKbl9sRVIwbW54dEliX2t2WXQ1V3lhWXV0YlJOMXVfU0toYVZla2xmV3prclNaYjVEa1YyTE9FMUpYZm9FZ3ZCbm1zMU85T1NKWHdxRHJGRjdORGVidzk1ZzZKekktU2JrSUh3MENiLV9FOUs5MkZqdlczQmk4ajlQS0lhOGNfZHB3SUFJaXJjX3E4dWhTVGY0V29JT0hTRmJTYVFQRScsCiAgICAgICAgICAgICdxJyA9PiAnNlNnbmE5Z1F3NGRYTjBqQlNqT1pTamw0UzJfSDN3SGF0Y2xydmxZZmJKVlU2R2xJbHFXR2FVa2RGdkN1RXI5aVhKQVk0enBFUTRQMzcwRVp0c3lWWlEnLAogICAgICAgICAgICAnZHAnID0+ICc1bTc5ZnBFMUp6MFlFMWlqVDdpdk9NQXdzLWZuVENuUjA4ZWlCOC1XMzZHQldwbGJIYVhlanJKRlYxV01ELUFXb21uVkQ1VloxTFcyOWhFaXFacDJRUScsCiAgICAgICAgICAgICdkcScgPT4gJ0pWMnBDN0NCNTBRZVp4N0MwMmgzalp5dU9iQzlZSEVFb3hPWHI5WlBqUEJWdmpWNVM2TlZhalFzZEV1NEtncl84WU9xYVdnaUhvdmN4VHd5cWNnWnZRJywKICAgICAgICAgICAgJ3FpJyA9PiAnVlp5a1BqLXVnS1F4dVdUU0UtaEEtbkpxa2w3RnpqZnpIdGU0UVlVU0hMSEZxNm9MbEhoZ1VvSl80b0ZMYUJtQ3ZnWkxBRlJEREQ2cG5kNUZnenQ5b3cnLAogICAgICAgIF0sICRyc2Ffa2V5LT50b0FycmF5KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJHJzYV9rZXktPmlzUHVibGljKCkpOwoKICAgICAgICAkcHVibGljX2tleSA9IFJTQUtleTo6dG9QdWJsaWMoJHJzYV9rZXkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnMzNXUkRFRzVyTjdkYU1nSTJONUg4Y1B3VGVRUE9uejM0dUcyZmUweUt5SGpKREdFMlhvRVNScHU1TGVsU1BkWU1fcjRBV01GV29EV1BkLTd4YXE3dUZFa004YzZ6YVFJZ2o0dUVpcS1wQk12SC1lODA1U0ZiWU9LWXFmUWU0ZWVYQWs0T3JRd2NVa1NybEdza2Y2WVVhd18zSXdiUGd6RURUZ1RaRlZ0UWxFJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICBdLCAkcHVibGljX2tleS0+dG9BcnJheSgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJHB1YmxpY19rZXktPmlzUHVibGljKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQcml2YXRlUlNBS2V5RnJvbUpXSygpCiAgICB7CiAgICAgICAgJGp3ayA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnMzNXUkRFRzVyTjdkYU1nSTJONUg4Y1B3VGVRUE9uejM0dUcyZmUweUt5SGpKREdFMlhvRVNScHU1TGVsU1BkWU1fcjRBV01GV29EV1BkLTd4YXE3dUZFa004YzZ6YVFJZ2o0dUVpcS1wQk12SC1lODA1U0ZiWU9LWXFmUWU0ZWVYQWs0T3JRd2NVa1NybEdza2Y2WVVhd18zSXdiUGd6RURUZ1RaRlZ0UWxFJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc5Vm92YjhweVN5T1pVb1RyTk1ENkptVHNEYTEydTl5NF9ISW1RdUtEMHJlclZvMnk1eTdEX3IwMGkxTWhHSGtCckkzVzJQc3ViSWlaZ0twMWYwb1FmUScsCiAgICAgICAgICAgICdkJyA9PiAnanJEck8zRm8yR3ZENUpuX2xFUjBtbnh0SWJfa3ZZdDVXeWFZdXRiUk4xdV9TS2hhVmVrbGZXemtyU1piNURrVjJMT0UxSlhmb0VndkJubXMxTzlPU0pYd3FEckZGN05EZWJ3OTVnNkp6SS1TYmtJSHcwQ2ItX0U5SzkyRmp2VzNCaThqOVBLSWE4Y19kcHdJQUlpcmNfcTh1aFNUZjRXb0lPSFNGYlNhUVBFJywKICAgICAgICAgICAgJ3EnID0+ICc2U2duYTlnUXc0ZFhOMGpCU2pPWlNqbDRTMl9IM3dIYXRjbHJ2bFlmYkpWVTZHbElscVdHYVVrZEZ2Q3VFcjlpWEpBWTR6cEVRNFAzNzBFWnRzeVZaUScsCiAgICAgICAgICAgICdkcCcgPT4gJzVtNzlmcEUxSnowWUUxaWpUN2l2T01Bd3MtZm5UQ25SMDhlaUI4LVczNkdCV3BsYkhhWGVqckpGVjFXTUQtQVdvbW5WRDVWWjFMVzI5aEVpcVpwMlFRJywKICAgICAgICAgICAgJ2RxJyA9PiAnSlYycEM3Q0I1MFFlWng3QzAyaDNqWnl1T2JDOVlIRUVveE9YcjlaUGpQQlZ2alY1UzZOVmFqUXNkRXU0S2dyXzhZT3FhV2dpSG92Y3hUd3lxY2dadlEnLAogICAgICAgICAgICAncWknID0+ICdWWnlrUGotdWdLUXh1V1RTRS1oQS1uSnFrbDdGempmekh0ZTRRWVVTSExIRnE2b0xsSGhnVW9KXzRvRkxhQm1DdmdaTEFGUkRERDZwbmQ1Rmd6dDlvdycsCiAgICAgICAgXSk7CiAgICAgICAgJHJzYV9rZXkgPSBSU0FLZXk6OmNyZWF0ZUZyb21KV0soJGp3ayk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnMzNXUkRFRzVyTjdkYU1nSTJONUg4Y1B3VGVRUE9uejM0dUcyZmUweUt5SGpKREdFMlhvRVNScHU1TGVsU1BkWU1fcjRBV01GV29EV1BkLTd4YXE3dUZFa004YzZ6YVFJZ2o0dUVpcS1wQk12SC1lODA1U0ZiWU9LWXFmUWU0ZWVYQWs0T3JRd2NVa1NybEdza2Y2WVVhd18zSXdiUGd6RURUZ1RaRlZ0UWxFJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc5Vm92YjhweVN5T1pVb1RyTk1ENkptVHNEYTEydTl5NF9ISW1RdUtEMHJlclZvMnk1eTdEX3IwMGkxTWhHSGtCckkzVzJQc3ViSWlaZ0twMWYwb1FmUScsCiAgICAgICAgICAgICdkJyA9PiAnanJEck8zRm8yR3ZENUpuX2xFUjBtbnh0SWJfa3ZZdDVXeWFZdXRiUk4xdV9TS2hhVmVrbGZXemtyU1piNURrVjJMT0UxSlhmb0VndkJubXMxTzlPU0pYd3FEckZGN05EZWJ3OTVnNkp6SS1TYmtJSHcwQ2ItX0U5SzkyRmp2VzNCaThqOVBLSWE4Y19kcHdJQUlpcmNfcTh1aFNUZjRXb0lPSFNGYlNhUVBFJywKICAgICAgICAgICAgJ3EnID0+ICc2U2duYTlnUXc0ZFhOMGpCU2pPWlNqbDRTMl9IM3dIYXRjbHJ2bFlmYkpWVTZHbElscVdHYVVrZEZ2Q3VFcjlpWEpBWTR6cEVRNFAzNzBFWnRzeVZaUScsCiAgICAgICAgICAgICdkcCcgPT4gJzVtNzlmcEUxSnowWUUxaWpUN2l2T01Bd3MtZm5UQ25SMDhlaUI4LVczNkdCV3BsYkhhWGVqckpGVjFXTUQtQVdvbW5WRDVWWjFMVzI5aEVpcVpwMlFRJywKICAgICAgICAgICAgJ2RxJyA9PiAnSlYycEM3Q0I1MFFlWng3QzAyaDNqWnl1T2JDOVlIRUVveE9YcjlaUGpQQlZ2alY1UzZOVmFqUXNkRXU0S2dyXzhZT3FhV2dpSG92Y3hUd3lxY2dadlEnLAogICAgICAgICAgICAncWknID0+ICdWWnlrUGotdWdLUXh1V1RTRS1oQS1uSnFrbDdGempmekh0ZTRRWVVTSExIRnE2b0xsSGhnVW9KXzRvRkxhQm1DdmdaTEFGUkRERDZwbmQ1Rmd6dDlvdycsCiAgICAgICAgXSwgJHJzYV9rZXktPnRvQXJyYXkoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkcnNhX2tleS0+aXNQdWJsaWMoKSk7CgogICAgICAgICRwdWJsaWNfa2V5ID0gUlNBS2V5Ojp0b1B1YmxpYygkcnNhX2tleSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICczM1dSREVHNXJON2RhTWdJMk41SDhjUHdUZVFQT256MzR1RzJmZTB5S3lIakpER0UyWG9FU1JwdTVMZWxTUGRZTV9yNEFXTUZXb0RXUGQtN3hhcTd1RkVrTThjNnphUUlnajR1RWlxLXBCTXZILWU4MDVTRmJZT0tZcWZRZTRlZVhBazRPclF3Y1VrU3JsR3NrZjZZVWF3XzNJd2JQZ3pFRFRnVFpGVnRRbEUnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgIF0sICRwdWJsaWNfa2V5LT50b0FycmF5KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkcHVibGljX2tleS0+aXNQdWJsaWMoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFByaXZhdGVSU0FLZXlGcm9tVmFsdWVzKCkKICAgIHsKICAgICAgICAkcnNhX2tleSA9IFJTQUtleTo6Y3JlYXRlRnJvbUpXSyhKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJzMzV1JERUc1ck43ZGFNZ0kyTjVIOGNQd1RlUVBPbnozNHVHMmZlMHlLeUhqSkRHRTJYb0VTUnB1NUxlbFNQZFlNX3I0QVdNRldvRFdQZC03eGFxN3VGRWtNOGM2emFRSWdqNHVFaXEtcEJNdkgtZTgwNVNGYllPS1lxZlFlNGVlWEFrNE9yUXdjVWtTcmxHc2tmNllVYXdfM0l3YlBnekVEVGdUWkZWdFFsRScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdwJyA9PiAnOVZvdmI4cHlTeU9aVW9Uck5NRDZKbVRzRGExMnU5eTRfSEltUXVLRDByZXJWbzJ5NXk3RF9yMDBpMU1oR0hrQnJJM1cyUHN1YklpWmdLcDFmMG9RZlEnLAogICAgICAgICAgICAnZCcgPT4gJ2pyRHJPM0ZvMkd2RDVKbl9sRVIwbW54dEliX2t2WXQ1V3lhWXV0YlJOMXVfU0toYVZla2xmV3prclNaYjVEa1YyTE9FMUpYZm9FZ3ZCbm1zMU85T1NKWHdxRHJGRjdORGVidzk1ZzZKekktU2JrSUh3MENiLV9FOUs5MkZqdlczQmk4ajlQS0lhOGNfZHB3SUFJaXJjX3E4dWhTVGY0V29JT0hTRmJTYVFQRScsCiAgICAgICAgICAgICdxJyA9PiAnNlNnbmE5Z1F3NGRYTjBqQlNqT1pTamw0UzJfSDN3SGF0Y2xydmxZZmJKVlU2R2xJbHFXR2FVa2RGdkN1RXI5aVhKQVk0enBFUTRQMzcwRVp0c3lWWlEnLAogICAgICAgICAgICAnZHAnID0+ICc1bTc5ZnBFMUp6MFlFMWlqVDdpdk9NQXdzLWZuVENuUjA4ZWlCOC1XMzZHQldwbGJIYVhlanJKRlYxV01ELUFXb21uVkQ1VloxTFcyOWhFaXFacDJRUScsCiAgICAgICAgICAgICdkcScgPT4gJ0pWMnBDN0NCNTBRZVp4N0MwMmgzalp5dU9iQzlZSEVFb3hPWHI5WlBqUEJWdmpWNVM2TlZhalFzZEV1NEtncl84WU9xYVdnaUhvdmN4VHd5cWNnWnZRJywKICAgICAgICAgICAgJ3FpJyA9PiAnVlp5a1BqLXVnS1F4dVdUU0UtaEEtbkpxa2w3RnpqZnpIdGU0UVlVU0hMSEZxNm9MbEhoZ1VvSl80b0ZMYUJtQ3ZnWkxBRlJEREQ2cG5kNUZnenQ5b3cnLAogICAgICAgIF0pKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICczM1dSREVHNXJON2RhTWdJMk41SDhjUHdUZVFQT256MzR1RzJmZTB5S3lIakpER0UyWG9FU1JwdTVMZWxTUGRZTV9yNEFXTUZXb0RXUGQtN3hhcTd1RkVrTThjNnphUUlnajR1RWlxLXBCTXZILWU4MDVTRmJZT0tZcWZRZTRlZVhBazRPclF3Y1VrU3JsR3NrZjZZVWF3XzNJd2JQZ3pFRFRnVFpGVnRRbEUnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAncCcgPT4gJzlWb3ZiOHB5U3lPWlVvVHJOTUQ2Sm1Uc0RhMTJ1OXk0X0hJbVF1S0QwcmVyVm8yeTV5N0RfcjAwaTFNaEdIa0JySTNXMlBzdWJJaVpnS3AxZjBvUWZRJywKICAgICAgICAgICAgJ2QnID0+ICdqckRyTzNGbzJHdkQ1Sm5fbEVSMG1ueHRJYl9rdll0NVd5YVl1dGJSTjF1X1NLaGFWZWtsZld6a3JTWmI1RGtWMkxPRTFKWGZvRWd2Qm5tczFPOU9TSlh3cURyRkY3TkRlYnc5NWc2SnpJLVNia0lIdzBDYi1fRTlLOTJGanZXM0JpOGo5UEtJYThjX2Rwd0lBSWlyY19xOHVoU1RmNFdvSU9IU0ZiU2FRUEUnLAogICAgICAgICAgICAncScgPT4gJzZTZ25hOWdRdzRkWE4wakJTak9aU2psNFMyX0gzd0hhdGNscnZsWWZiSlZVNkdsSWxxV0dhVWtkRnZDdUVyOWlYSkFZNHpwRVE0UDM3MEVadHN5VlpRJywKICAgICAgICAgICAgJ2RwJyA9PiAnNW03OWZwRTFKejBZRTFpalQ3aXZPTUF3cy1mblRDblIwOGVpQjgtVzM2R0JXcGxiSGFYZWpySkZWMVdNRC1BV29tblZENVZaMUxXMjloRWlxWnAyUVEnLAogICAgICAgICAgICAnZHEnID0+ICdKVjJwQzdDQjUwUWVaeDdDMDJoM2paeXVPYkM5WUhFRW94T1hyOVpQalBCVnZqVjVTNk5WYWpRc2RFdTRLZ3JfOFlPcWFXZ2lIb3ZjeFR3eXFjZ1p2UScsCiAgICAgICAgICAgICdxaScgPT4gJ1ZaeWtQai11Z0tReHVXVFNFLWhBLW5KcWtsN0Z6amZ6SHRlNFFZVVNITEhGcTZvTGxIaGdVb0pfNG9GTGFCbUN2Z1pMQUZSRERENnBuZDVGZ3p0OW93JywKICAgICAgICBdLCAkcnNhX2tleS0+dG9BcnJheSgpKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkcnNhX2tleS0+aXNQdWJsaWMoKSk7CgogICAgICAgICRwdWJsaWNfa2V5ID0gUlNBS2V5Ojp0b1B1YmxpYygkcnNhX2tleSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICczM1dSREVHNXJON2RhTWdJMk41SDhjUHdUZVFQT256MzR1RzJmZTB5S3lIakpER0UyWG9FU1JwdTVMZWxTUGRZTV9yNEFXTUZXb0RXUGQtN3hhcTd1RkVrTThjNnphUUlnajR1RWlxLXBCTXZILWU4MDVTRmJZT0tZcWZRZTRlZVhBazRPclF3Y1VrU3JsR3NrZjZZVWF3XzNJd2JQZ3pFRFRnVFpGVnRRbEUnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgIF0sICRwdWJsaWNfa2V5LT50b0FycmF5KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkcHVibGljX2tleS0+aXNQdWJsaWMoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udmVydFByaXZhdGVLZXlUb1B1YmxpYygpCiAgICB7CiAgICAgICAgJHByaXZhdGVfZWNfa2V5ID0gUlNBS2V5OjpjcmVhdGVGcm9tSldLKEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICdraWQnID0+ICdGb28nLAogICAgICAgICAgICAnbicgPT4gJzMzV1JERUc1ck43ZGFNZ0kyTjVIOGNQd1RlUVBPbnozNHVHMmZlMHlLeUhqSkRHRTJYb0VTUnB1NUxlbFNQZFlNX3I0QVdNRldvRFdQZC03eGFxN3VGRWtNOGM2emFRSWdqNHVFaXEtcEJNdkgtZTgwNVNGYllPS1lxZlFlNGVlWEFrNE9yUXdjVWtTcmxHc2tmNllVYXdfM0l3YlBnekVEVGdUWkZWdFFsRScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdwJyA9PiAnOVZvdmI4cHlTeU9aVW9Uck5NRDZKbVRzRGExMnU5eTRfSEltUXVLRDByZXJWbzJ5NXk3RF9yMDBpMU1oR0hrQnJJM1cyUHN1YklpWmdLcDFmMG9RZlEnLAogICAgICAgICAgICAnZCcgPT4gJ2pyRHJPM0ZvMkd2RDVKbl9sRVIwbW54dEliX2t2WXQ1V3lhWXV0YlJOMXVfU0toYVZla2xmV3prclNaYjVEa1YyTE9FMUpYZm9FZ3ZCbm1zMU85T1NKWHdxRHJGRjdORGVidzk1ZzZKekktU2JrSUh3MENiLV9FOUs5MkZqdlczQmk4ajlQS0lhOGNfZHB3SUFJaXJjX3E4dWhTVGY0V29JT0hTRmJTYVFQRScsCiAgICAgICAgICAgICdxJyA9PiAnNlNnbmE5Z1F3NGRYTjBqQlNqT1pTamw0UzJfSDN3SGF0Y2xydmxZZmJKVlU2R2xJbHFXR2FVa2RGdkN1RXI5aVhKQVk0enBFUTRQMzcwRVp0c3lWWlEnLAogICAgICAgICAgICAnZHAnID0+ICc1bTc5ZnBFMUp6MFlFMWlqVDdpdk9NQXdzLWZuVENuUjA4ZWlCOC1XMzZHQldwbGJIYVhlanJKRlYxV01ELUFXb21uVkQ1VloxTFcyOWhFaXFacDJRUScsCiAgICAgICAgICAgICdkcScgPT4gJ0pWMnBDN0NCNTBRZVp4N0MwMmgzalp5dU9iQzlZSEVFb3hPWHI5WlBqUEJWdmpWNVM2TlZhalFzZEV1NEtncl84WU9xYVdnaUhvdmN4VHd5cWNnWnZRJywKICAgICAgICAgICAgJ3FpJyA9PiAnVlp5a1BqLXVnS1F4dVdUU0UtaEEtbkpxa2w3RnpqZnpIdGU0UVlVU0hMSEZxNm9MbEhoZ1VvSl80b0ZMYUJtQ3ZnWkxBRlJEREQ2cG5kNUZnenQ5b3cnLAogICAgICAgICAgICAnZm9vJyA9PiAnYmFyJywKICAgICAgICBdKSk7CgogICAgICAgICRwdWJsaWNfZWNfa2V5ID0gUlNBS2V5Ojp0b1B1YmxpYygkcHJpdmF0ZV9lY19rZXkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAna2lkJyA9PiAnRm9vJywKICAgICAgICAgICAgJ24nID0+ICczM1dSREVHNXJON2RhTWdJMk41SDhjUHdUZVFQT256MzR1RzJmZTB5S3lIakpER0UyWG9FU1JwdTVMZWxTUGRZTV9yNEFXTUZXb0RXUGQtN3hhcTd1RkVrTThjNnphUUlnajR1RWlxLXBCTXZILWU4MDVTRmJZT0tZcWZRZTRlZVhBazRPclF3Y1VrU3JsR3NrZjZZVWF3XzNJd2JQZ3pFRFRnVFpGVnRRbEUnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAnZm9vJyA9PiAnYmFyJywKICAgICAgICBdLCAkcHVibGljX2VjX2tleS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVSU0FLZXk1MTJCaXRzKCkKICAgIHsKICAgICAgICAkandrID0gSldLRmFjdG9yeTo6Y3JlYXRlUlNBS2V5KDUxMik7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSU0EnLCAkandrLT5nZXQoJ2t0eScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCdwJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ24nKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd2stPmhhcygncScpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3ay0+aGFzKCdkJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ2RwJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ2RxJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandrLT5oYXMoJ3FpJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRQcml2YXRlUlNBS2V5RnJvbU1pbmltYWxWYWx1ZXMoKQogICAgewogICAgICAgICRyc2Ffa2V5ID0gUlNBS2V5OjpjcmVhdGVGcm9tSldLKEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnZ1ZmLWl5aHdMbjJKMlVwNEVLandkTFltazVuMjRnakdrNG9Ra0NIVmNFN2o4d2tTMWlTemN1MEFwVmNNUExrbEVwX1BXeWNaRTEydkw5MGdQZVZqRjJJUExfTUtGTDBiNld5N0ExZjRrQ0RrS3Y3VEREanQxSUl3YlMtSmRwLTJwRzdiUGIzdFdqSlV1NlFaQkxvWGZSdFczY01Ea1FqWGFWR2l4RU5PUkxBWnM2cWR1Mk1NS1Y5NGpldENpRmQwSllDanhHVkMwSFcyT0tuTTIxQl8yUjFOdWJPdk1sV0E3Z3lwZHB2bUJZREdwa3c0bWpWM3dhbFdsQ1pPYkc3SUg4NE92bDd3T1A4WEx6cWkydW40ZTZmTnp5M3JkcDRPVVNQWUl0RjRaWDVxVGhXWVkyUjQ3WjVzYnJaeEhqTmVERUNLVWVpbzBLUFFOcmdyNkZTS1N3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ2QnID0+ICdKU3F6Nmlqa2szZGZkU0VBXzBpTVRfMUhlSUoxZnQ0bXNaNnF3N18xSlNDR1FBQUxlWjF5TTBRSE8zdVgtSnI3SEM3djFyR1Zjd3NvbkFoZWkycXUzcmstd19pQ25STDZRa2tNTkJuRFF5Y3dhV3B3R3NNQkZGLVVxc3RPSk5nZ0U0QUhYLWFEbmJkNHdiS1Z2ZFg3aWVlaFBuZ2JQa0hjSkZkZ19pU1pDUU5vYWp6NlhmRXJ1eUlpN19JRlhZRUdtSF9VeUViUWtnTnRyaVp5c3V0Z1lkb2xVam85ZmxVbGgyMEhidVYzTndzUGpHeURHNGRVTXBOcGRCcFN1UkhZS0xYNmgzRmplTGhJdEJtaEJmdUw3ZC1HM0VYd0tsd2ZOWFhZaXZxWTVOUUFrRk5yUmJ2RmxjX0FSSXdzM3pBZnlrUERJV0dXRmlQaU4zSC1oWE1nQVEnLAogICAgICAgIF0pKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICdnVmYtaXlod0xuMkoyVXA0RUtqd2RMWW1rNW4yNGdqR2s0b1FrQ0hWY0U3ajh3a1MxaVN6Y3UwQXBWY01QTGtsRXBfUFd5Y1pFMTJ2TDkwZ1BlVmpGMklQTF9NS0ZMMGI2V3k3QTFmNGtDRGtLdjdURERqdDFJSXdiUy1KZHAtMnBHN2JQYjN0V2pKVXU2UVpCTG9YZlJ0VzNjTURrUWpYYVZHaXhFTk9STEFaczZxZHUyTU1LVjk0amV0Q2lGZDBKWUNqeEdWQzBIVzJPS25NMjFCXzJSMU51Yk92TWxXQTdneXBkcHZtQllER3BrdzRtalYzd2FsV2xDWk9iRzdJSDg0T3ZsN3dPUDhYTHpxaTJ1bjRlNmZOenkzcmRwNE9VU1BZSXRGNFpYNXFUaFdZWTJSNDdaNXNiclp4SGpOZURFQ0tVZWlvMEtQUU5yZ3I2RlNLU3cnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAnZCcgPT4gJ0pTcXo2aWprazNkZmRTRUFfMGlNVF8xSGVJSjFmdDRtc1o2cXc3XzFKU0NHUUFBTGVaMXlNMFFITzN1WC1KcjdIQzd2MXJHVmN3c29uQWhlaTJxdTNyay13X2lDblJMNlFra01OQm5EUXljd2FXcHdHc01CRkYtVXFzdE9KTmdnRTRBSFgtYURuYmQ0d2JLVnZkWDdpZWVoUG5nYlBrSGNKRmRnX2lTWkNRTm9hano2WGZFcnV5SWk3X0lGWFlFR21IX1V5RWJRa2dOdHJpWnlzdXRnWWRvbFVqbzlmbFVsaDIwSGJ1VjNOd3NQakd5REc0ZFVNcE5wZEJwU3VSSFlLTFg2aDNGamVMaEl0Qm1oQmZ1TDdkLUczRVh3S2x3Zk5YWFlpdnFZNU5RQWtGTnJSYnZGbGNfQVJJd3MzekFmeWtQRElXR1dGaVBpTjNILWhYTWdBUScsCiAgICAgICAgXSwgJHJzYV9rZXktPnRvQXJyYXkoKSk7CgogICAgICAgICRyc2Ffa2V5LT5vcHRpbWl6ZSgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJ2dWZi1peWh3TG4ySjJVcDRFS2p3ZExZbWs1bjI0Z2pHazRvUWtDSFZjRTdqOHdrUzFpU3pjdTBBcFZjTVBMa2xFcF9QV3ljWkUxMnZMOTBnUGVWakYySVBMX01LRkwwYjZXeTdBMWY0a0NEa0t2N1RERGp0MUlJd2JTLUpkcC0ycEc3YlBiM3RXakpVdTZRWkJMb1hmUnRXM2NNRGtRalhhVkdpeEVOT1JMQVpzNnFkdTJNTUtWOTRqZXRDaUZkMEpZQ2p4R1ZDMEhXMk9Lbk0yMUJfMlIxTnViT3ZNbFdBN2d5cGRwdm1CWURHcGt3NG1qVjN3YWxXbENaT2JHN0lIODRPdmw3d09QOFhMenFpMnVuNGU2Zk56eTNyZHA0T1VTUFlJdEY0Wlg1cVRoV1lZMlI0N1o1c2JyWnhIak5lREVDS1VlaW8wS1BRTnJncjZGU0tTdycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdwJyA9PiAncHh5Ri1BbzE3d2w0QURJMFlTc05ZbTlPelp6NkFaRDljVXhieHZYLXozeVJfdkgyR0V4ZGNPaHQ1VUQ5SWo5cjBaeUhLa21XR0tDdHJZenItUWkyaWEydnlpWlUwd0dteFJfZmFkSG5reGZJcVc3OE1FNUMteEdvV0xCdEhsVGFQQ1dTRW12M3A1dk0yZnFaZVVkcVR4emIwYlFBQnQwZkk2SFBqdkJsSTBzJywKICAgICAgICAgICAgJ2QnID0+ICdKU3F6Nmlqa2szZGZkU0VBXzBpTVRfMUhlSUoxZnQ0bXNaNnF3N18xSlNDR1FBQUxlWjF5TTBRSE8zdVgtSnI3SEM3djFyR1Zjd3NvbkFoZWkycXUzcmstd19pQ25STDZRa2tNTkJuRFF5Y3dhV3B3R3NNQkZGLVVxc3RPSk5nZ0U0QUhYLWFEbmJkNHdiS1Z2ZFg3aWVlaFBuZ2JQa0hjSkZkZ19pU1pDUU5vYWp6NlhmRXJ1eUlpN19JRlhZRUdtSF9VeUViUWtnTnRyaVp5c3V0Z1lkb2xVam85ZmxVbGgyMEhidVYzTndzUGpHeURHNGRVTXBOcGRCcFN1UkhZS0xYNmgzRmplTGhJdEJtaEJmdUw3ZC1HM0VYd0tsd2ZOWFhZaXZxWTVOUUFrRk5yUmJ2RmxjX0FSSXdzM3pBZnlrUERJV0dXRmlQaU4zSC1oWE1nQVEnLAogICAgICAgICAgICAncScgPT4gJ3hpU3A2ZGJkWUdJTnh0a2xUSmx6VnI5MXVfR0p6V3F5eUE0dDBqaHVXclFON2RMVzBzXzNJOXg2UGRrNVUxOWowaUxXQndjdXRZOWU1U3lXUG9GMGxZVklvd1plVzBqTmlPdHYwTnRoYXlKM0hKcFBrOGtqNnNWbEgweTRzS05fV1dIaFU1bGVUd09wcjhJRy15b2hLUnlWNlh3aHVfSkxrektLV29kMjFRRScsCiAgICAgICAgICAgICdkcCcgPT4gJ3BZVXlDTkdNUkR4N3VLNEJoYkVQNjh6V0lBQjRfSzR3NmxTNG51UXZSREpkcFVqaC1ZVkNGRUNVQVR3U3ZpWlZVLVFYV1VKVHdnYjhuLWJ5SDlPS2dlb2dNVGt3VVdQVVhISEtaMVQ2YTQ1bU9iUnRaQ2RRWHNCSm43YjREY183N1JGRmtxdVFQRnFzVjhmSTFnQnZndmJSbi04TEM4RmZRM3JWU180LUh1cycsCiAgICAgICAgICAgICdkcScgPT4gJ3JOVGNOUEZMaGpfaFBucTRVemxpWnQ5NFJhaXBCN216R2xkcjFudU1ucWVCb3RtT3NySGVJN1MwRl9DN1ZTTFdnandLcm5Td1pJUWJSUkdBT0NOWld2YTRaaU11LUxibk9UQU1CNFRrVTd2clk5S2g2UW5BdjQ3UTV0MVlHQk4xQ0xVZEEzdTZ6SGNvY3Z0dWRYVEpHZ0FxTDFBc2FMRXZCTVZIOHpGSUVRRScsCiAgICAgICAgICAgICdxaScgPT4gJ2JiRnAxelNmbm1tT1VZVXRiYUtobUZvZm4wbXVmMVBybk1HcTZ6ZXU4enJ1ZjNnSzlZMW9Ec1VrNTRGbFYwbU5CTzNfdDNaYncyNzUyQ0xrbHQ3M3plc1ZlRi1Oc2Mxa0RueF9XR2Y0WXJRcExoNVB2a0VmVF93UGJ2ZUtUVGNWWGlWeE1QSEhaLW4ya09lM295U2h5Y1NMUDVfSV9TWU4tbG9aSHU3UUNfSScsCiAgICAgICAgXSwgJHJzYV9rZXktPnRvQXJyYXkoKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJHJzYV9rZXktPmlzUHVibGljKCkpOwoKICAgICAgICAkcHVibGljX2tleSA9IFJTQUtleTo6dG9QdWJsaWMoJHJzYV9rZXkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAnZ1ZmLWl5aHdMbjJKMlVwNEVLandkTFltazVuMjRnakdrNG9Ra0NIVmNFN2o4d2tTMWlTemN1MEFwVmNNUExrbEVwX1BXeWNaRTEydkw5MGdQZVZqRjJJUExfTUtGTDBiNld5N0ExZjRrQ0RrS3Y3VEREanQxSUl3YlMtSmRwLTJwRzdiUGIzdFdqSlV1NlFaQkxvWGZSdFczY01Ea1FqWGFWR2l4RU5PUkxBWnM2cWR1Mk1NS1Y5NGpldENpRmQwSllDanhHVkMwSFcyT0tuTTIxQl8yUjFOdWJPdk1sV0E3Z3lwZHB2bUJZREdwa3c0bWpWM3dhbFdsQ1pPYkc3SUg4NE92bDd3T1A4WEx6cWkydW40ZTZmTnp5M3JkcDRPVVNQWUl0RjRaWDVxVGhXWVkyUjQ3WjVzYnJaeEhqTmVERUNLVWVpbzBLUFFOcmdyNkZTS1N3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICBdLCAkcHVibGljX2tleS0+dG9BcnJheSgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJHB1YmxpY19rZXktPmlzUHVibGljKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/MessageBagTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxLZXlBbmFseXplclxNZXNzYWdlOwp1c2UgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxLZXlBbmFseXplclxNZXNzYWdlQmFnOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIFVuaXQKICogQGdyb3VwIEpXS0FuYWx5emVyCiAqLwpjbGFzcyBNZXNzYWdlQmFnVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5HZXRBTWVzc2FnZVdpdGhMb3dTZXZlcml0eSgpCiAgICB7CiAgICAgICAgJG1lc3NhZ2UgPSBNZXNzYWdlOjpsb3coJ05vdCBpbXBvcnRhbnQnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoTWVzc2FnZTo6U0VWRVJJVFlfTE9XLCAkbWVzc2FnZS0+Z2V0U2V2ZXJpdHkoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ05vdCBpbXBvcnRhbnQnLCAkbWVzc2FnZS0+Z2V0TWVzc2FnZSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpQ2FuR2V0QU1lc3NhZ2VXaXRoTWVkaXVtU2V2ZXJpdHkoKQogICAgewogICAgICAgICRtZXNzYWdlID0gTWVzc2FnZTo6bWVkaXVtKCdRdWl0ZSBpbXBvcnRhbnQnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoTWVzc2FnZTo6U0VWRVJJVFlfTUVESVVNLCAkbWVzc2FnZS0+Z2V0U2V2ZXJpdHkoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1F1aXRlIGltcG9ydGFudCcsICRtZXNzYWdlLT5nZXRNZXNzYWdlKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5HZXRBTWVzc2FnZVdpdGhIaWdoU2V2ZXJpdHkoKQogICAgewogICAgICAgICRtZXNzYWdlID0gTWVzc2FnZTo6aGlnaCgnVmVyeSBpbXBvcnRhbnQnKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoTWVzc2FnZTo6U0VWRVJJVFlfSElHSCwgJG1lc3NhZ2UtPmdldFNldmVyaXR5KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdWZXJ5IGltcG9ydGFudCcsICRtZXNzYWdlLT5nZXRNZXNzYWdlKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5TZXJpYWxpemVBTWVzc2FnZUludG9Kc29uKCkKICAgIHsKICAgICAgICAkbWVzc2FnZSA9IE1lc3NhZ2U6OmhpZ2goJ1ZlcnkgaW1wb3J0YW50Jyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7Im1lc3NhZ2UiOiJWZXJ5IGltcG9ydGFudCIsInNldmVyaXR5IjoiaGlnaCJ9JywgXGpzb25fZW5jb2RlKCRtZXNzYWdlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYU1lc3NhZ2VCYWdDYW5IYXZlU2V2ZXJhbE1lc3NhZ2VzKCkKICAgIHsKICAgICAgICAkYmFnID0gbmV3IE1lc3NhZ2VCYWcoKTsKICAgICAgICAkYmFnLT5hZGQoTWVzc2FnZTo6aGlnaCgnVmVyeSBpbXBvcnRhbnQnKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsICRiYWctPmNvdW50KCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsIFxjb3VudCgkYmFnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgXGNvdW50KCRiYWctPmFsbCgpKSk7CiAgICAgICAgZm9yZWFjaCAoJGJhZyBhcyAkbWVzc2FnZSkgewogICAgICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoTWVzc2FnZTo6Y2xhc3MsICRtZXNzYWdlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhblNlcmlhbGl6ZUFNZXNzYWdlQmFnSW50b0pzb24oKQogICAgewogICAgICAgICRiYWcgPSBuZXcgTWVzc2FnZUJhZygpOwogICAgICAgICRiYWctPmFkZChNZXNzYWdlOjpoaWdoKCdWZXJ5IGltcG9ydGFudCcpKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1t7Im1lc3NhZ2UiOiJWZXJ5IGltcG9ydGFudCIsInNldmVyaXR5IjoiaGlnaCJ9XScsIFxqc29uX2VuY29kZSgkYmFnKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/MessageFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgR3V6emxlSHR0cFxQc3I3XFJlcXVlc3Q7CnVzZSBHdXp6bGVIdHRwXFBzcjdcUmVzcG9uc2U7CnVzZSBIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3Rvcnk7CnVzZSBIdHRwXE1lc3NhZ2VcUmVzcG9uc2VGYWN0b3J5OwoKY2xhc3MgTWVzc2FnZUZhY3RvcnkgaW1wbGVtZW50cyBSZXNwb25zZUZhY3RvcnksIFJlcXVlc3RGYWN0b3J5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KCRtZXRob2QsICR1cmksIGFycmF5ICRoZWFkZXIgPSBbXSwgJGJvZHkgPSBudWxsLCAkcHJvdG9jb2xWZXJzaW9uID0gJzEuMScpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXIsICRib2R5LCAkcHJvdG9jb2xWZXJzaW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoJHN0YXR1c0NvZGUgPSAyMDAsICRyZWFzb25QaHJhc2UgPSBudWxsLCBhcnJheSAkaGVhZGVyID0gW10sICRib2R5ID0gbnVsbCwgJHByb3RvY29sVmVyc2lvbiA9ICcxLjEnKQogICAgewogICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJHN0YXR1c0NvZGUsICRoZWFkZXIsICRib2R5LCAkcHJvdG9jb2xWZXJzaW9uLCAkcmVhc29uUGhyYXNlKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/P12/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/P12/CertRSA.p12</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIHeQIBAzCCBwcGCSqGSIb3DQEHAaCCBvgEggb0MIIG8DCCAwIGCSqGSIb3DQEHAaCCAvMEggLvMIIC6zCCAucGCyqGSIb3DQEMCgECoIICpTCCAqEwGwYKKoZIhvcNAQwBAzANBAjBJQmyxNVhQAIBQASCAoBHzBdqGc0cEd+DpkOKdk7UuQTFQiobrZg44e5VdRvj6IRAbKQC5heYtSYIfWEhR+GIGPRH0fi6uA3O1zg3BiGGF4q5cDT0Jfjb2B2VYeJsIaJpYN0uyNb3ymMhP0x+LJ4oUy1WAsEqSnPtnbz/GINDFaMzol/30A2q3JPBhg++si4/NHUMOaGMrOCSIDHhf1874odDld/flUQJoe0OSgbxlGFJzlyohfeQbn3lqri2EnXzUw8NkcbMRpOUHnUurItYN5AB+zXZMorXW3vgH6bP9VgojrufjNufuVShN/EJSFk01Iuzrlab48i2nyjCnVnEXt+ol4KrX9CTfe0WTggiIHLkCyYSqS+Tk+8bcdgA/QExcWJtGKirlkBLk9aHt3iUGdXDO0Ukop4/s/XegDP07BVezmrPOvCeE498bsXoGq6+ppwZ1qfJ+nJsAZr150G4/m9JC6bkgSQ8tjDnURdqHfn1W5ezBVpD91h+LMv5pbvWCSJfKFBwIEllvwmpCbeKOwSqk9RwfSxsawymy30m8zVi+5z/xxcVr8GTs+kNsD9JjfBuQtwzgC+jHRlFipvGVvkiWc3GhGh/m7lwyTVbuYxnite80Hm6wZMsgZIFekFL7ZvEmPbRDAOZ3yw5+/VjHxftUa5ziKjMsSMH9DUFiQP/fDn9l6KxjlvAu5zDLfhDFbCIf1COw/M2ctQfimHwVYIxjzYAwymaniNvbFHmB8i94MEWy3H2rfiOl39v12KJec0uFrAJXGti1lKDeaiYu6INBvIx9Ayh8CJvT/2pU0GWKQXYp/PuEMTEYcaINZ1NrCpiLdnYGu6Hax3HsW0pILsfndwMSYxLxk4hvl06MS8wLQYJKoZIhvcNAQkUMSAeHgBSAFMAQQAgAEMAZQByAHQAaQBmAGkAYwBhAHQAZTCCA+YGCSqGSIb3DQEHBqCCA9cwggPTAgEAMIIDzAYJKoZIhvcNAQcBMFMGCiqGSIb3DQEMAQYwRQRAn1oze+YORAKzCkkxH6EooWUg3qLiosBHK5eAW6PupIG1OQDW0CqfGil98sOHIRHVG7dhftl9l2nlyhAaoELqVwIBAYCCA2hfuKu3iCi0RJDdyITVsTOyZjULwfKzyAOvii36aygC51LzNc8sNbCl7jVZ74m8ffcywsgIOmYIcP2tawggN87vrTPANKRYPR8x526Dmo1WkZcOtNDT9wxF0IfMBtiQWGXIP7DmE8mIOhwyg/Q64ItuEqIeGcoL64ftWpvHBvNlXUrrEwrSNHrwY+4vwYNDQXKdMoci/wWNIHSxr4Gj3TKB4l5iFthyePdI1wnbvfNXXACAdDJhWaK3BR8saTPoDU2gAWL15Fp9UMbAcU5Z8TTY7IjyYOkHygQbjL3w8iDWlZ9sw1Aiyis3gFrdRNbuPVl9mr5ZtOmiC0Z/jDLQKeddQrjQEGzCirS6CzlmD41Snk5X661LOi7aZz5SKq3ev0zHVxpZuHF+cZeDvV+TTlGgU5rj+xJAv32tlENWBubY4wyEOmo2J9bFKbb2adMVU/51bqm8NmekQHT0R3OsS7FF80qSPiEyao5VOCe3Pxv5R+e9QBHcMNoGkQpDRRP5mYz+fykT6Wuz760gHB2aNlalK0uo3wim1V5warEdSo78xLZ/NG+aFGGoiVMZb7ra6arkV/P653VOcfwN2rP7C/1eNUBoK5uiCH9olhj3KSh7uD7AWCFkIcsAFrUOjwnDAcx5tRKsqIeTCjDku1hUyABA5ddywLKKP/dZlRXcngNDXyVZW0unoLxqJ9eE6okJ6KKvdd5NloYptmOuITrM3d/YcElQAp9twLYfBiwkk5UhbwF6JiPo7vNawWlyr1TaTyYtyd6Ye1oGI/xWolWLV/iZKP/fzOtEN/0AyF5bwTFBJOhNZF6lqN2/WXKESCH9tPmOgJ9aRBXQeCUUrm1J8GLsSw31SiqEuwIkdMIKx9ghq4BICrPPjyo3M30QicUQo68ylyPeDPSdzcAXLbxbzG1wh/MrHIK5JXudO5IAiKKYhjn8ogvbA8yEGHQtnveVWlV9mzPTGtntOT8yJVIPTJCcXhoXEvflpqismYR0rtfR5EBLjjMGqjqxZLAg4R3EVe5EFKXpfltSFWl1h6BRZlyZ9J5u3BiGupSyZ7BN+JDtooXHRqjFj7XqEEsS0g46GCxdnYK/EIUV+E66LFYdqgg9ZT6CiFbHCPp8Vsw2szV9opUsfHzpZ7i01WwJBF6eom8/Qa8R+Kud2jBpMCEwCQYFKw4DAhoFAAQUUpIDs4hFYH6Fqh2P5jMa9ZDeU9gEQKHq5DPHVOuTpmDKz+qAJPAoSCm5RwCOhcGSd+Aqw6yqyFKEWWvHKONd4ewu5+kSIeRCDQFqugwWU3tA24cProYCAgQA]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/16k-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIJ2jCCCUMCAg3/MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwODIyMDUyOTAyWhcNMTcwODIxMDUyOTAyWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wgggiMA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQC1Ldp5Zb/DOXJewM0V4E40U2rtbiU1YOM5Sx43HH5H0Cyo0kRZkXNpO0EjgJqb1Z//YCV8/qLdFGkrvqihk5srAmabVF4Zw/uB/smc4NC/Rb6b3Hzlr9/AeIjzoOF/LVg2HbODUM7WQv9D6yoow5niDq5R9cZeNLn3rywoK5rej4YSv7sYzq7DzOCkOZRG2m6kAWPdfWoKDpyNuU/MzNxd2MAI/j/Mmktz6xampjul0trbonl2AUalMpZLtez3oCUI8PPi5NFEUoNlqswW3OmOFaE1nIMa5gUXE0vhxrW2b6vgnIv5e4r0FNcLVY1emq63Mc06P6072cK1FfTZlLeGabUD3Gd1Nml9DuU+5ID+RkSiGSNwbLG1L6e6n2SHIwobC+GDQwlLjdU65hJXqayT/Ph1nf4wJdWUkxPEupY5IYfEcbS8MlAjn8hcLCRAutVAhu39fVnKVR2SacqbhW4IG3gAeorUXWNak1cthwVj5BbjdzYiWfu/W5AWb/zYIUdNqes0wFg1rHZ6BilJek9LSdoXo7Vjxsw+M8FTWNqgECV+JKMKYfHkw5OD49T2bU6edHhec50NHRbytRJL+JjPhRyK+i7/v9cJNWV+6J4BdPTr2JtekaRMTnwCAjqmJVVi1rHKgANvfOvRrXUGvSRLeApGrFOrka2BZOnPvlWsXFeTwBN/BkXg9w5Vf1+RRBK0Epj04ZGvKzAsltDSWfPllHxAADDUPZwChZijFSiXm6mOytiuwZzs6Xc2E8+2gTRWfGDj3FBJnSGGOGvIh3TtpndAGvc1DRcGgaFI2874ztnLMNM1JRC6xLlbJmxmm63D/XYTnLnn9tsw+kphufHRob3fCZydrj2NeijllQygn8FAtpq8YLS74lMtP+y5uTm0qHehWANF68fBh4rVTgvhx3Ok7MbwlWlwfJyWh8RKTbkOceJD3YF8HUNH7php19DxrgFesgWWS0OGjUSaFfBZ1P52E7gRE/B/YLHTiI/c51gJT9M2veBV0Hd9As+SFXUr+h3zNatfuioIYuRgI/8ZS+Xzh0mgx6q6XIg70ge1WlUfMaX4Tjwmg4c3TRQuegfNbPFR4a11ri3Cf01D6m0SPL27T/xH7LZSqcLrfbASYekfMWqs5JiLGngY7/MCH6CYiE8ke6gf3u91wNGMYYU87uSYwjS0GbGS3TdqFgiokps/KcdUuGxO5TtNViuBNfomQJH8hu51BOpV3Pyhg7q02pWtTz0kj3j/md0lfVaOZ/Us9rxzfUhCi8EHR74yVn6sGTJMS2024jzEL/87JywuGMAXH9ubRB/aN+DYgl0uYOMYUe/dGUR2VGYlLItj+WopXgYCGOIQgSZ24ApvKCDYmqFvo0rMevW/GFFxZqye6GBM66eUaze97O73HP/gK8QpExPq+JTe3OqYalPfMTt3TD3MzCfZ5SVfSPukoiLOetuRbYN97rd/1f1spgCw7mlypx8AepVoeXSIVfLlCgXDCNK5bDErKFpje19jau58tcI7ND8bsEOgxGezzHqcJH7rhe6+n4S8HDRLv3Qn+71nZb3yutbpzVx+fhxv0FHLdGPriRaqUBRNG7r6qtfZE3nLCGgp+IkMfebar8y2AOVHeR77kq7FpnB8zSGtwKmlTlMds7Ax7degNf5mMP7er6KQzy567i5OoOO1CtNCKgUjFr7emts1OzEERFAVnCUm3PYaY0cQCOBT47CQwM5tgAZz5kBmuK1d728a0YWl2jAxnmTQVNQpIix5w/Gf6dmUb7+owvxLrc1eVTRF1u1hovBC14W5eX9pwC+7E46cHedmmknIhK0/S448aFGjBdKVOGfTIUOG3rlMuXLXvUlWt/igUEM7hDoQgnskxtFcJoRYmZ5I17+TvVze7h6Vtn4LaLklo7pty1nM77Fn4I/utpDMdcyWkKFheqakNTlsrbJIBtwMkO+DlZ5GZCypHGwWcjUQrUmP8Eodmo4/P+rZJjK/r3M9Oynn/D3P1hYJs4o/UofJ/2L2fo/kbdCQLO+VMMBuNHqeuuue9rQ9nRKM7gzMM6wgBr1Lq/BGdbITbe9UjlEK/4iQtnTvktGRcpyPYRU+sMjcxvWlS18a7UfUzubpXRI5OdoLCKYjPcm7abCCdH7aUAAkox3e9Ro3U19sQO6Fmgxl8OtbOo6oDxnajK/qMeFvLcOSdtbimfy1xo8K9JyfXCi0540UO8B84jGKQYSNS5eP7+BXb91wVUgA2x5il2EBLW0mNVf0kHBZyNsedKHL/1jh/XPOtLC/hRsbvEMQZLVVoNSTlTBNN54pArMKR3qdhfFlhExgMP8Ny4aIIb1i9ab2GvLUOR93ILHk97yPwowZS4S0jAs4h+YkOIKYT19EBjzl/1MBfLGQz4/VL9NxJwp5JivEu5tfUNO44Y0MUoHjE1/S+L6UIWAubHy06v5Fjuq3OvCt9x/spumin4HkqkDY+GahFO1mXiQXtEN6H5mdSpx/JBwIi/8d7CIw6YnqJAMOM5Zuwzy4SGXdpv4XMNgYB5PlsmzgQkDASGyTbyxeqcbPAkNTHDiZ0sJiGK4jRnAY4FQjNdD4odofzw/Bi5AYvAz6z24IqonI7zgjpc97pueqwv01aY+Gm8XERnsy8UILZnue4azBAqkv3b9A5LQ2JtnDPEENRjtCbdawfEXNibvcl6dAkYrNk88u2OEhqvtp/apvwog2BYZ8i+vFHfyiwtPRWDb0zQO4xwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADg31Ah8wT/xjIhtUTAIcFGtgN2321aV8pIz8VSJu3CrbJJD09Ek6WUQgTbEq0pxwhQoubkr2+CJ2Gw/FTd0WFet7T57aFg7qh5xraEhH21icHmNBUG7ETUXNEf8TjbhREVYgF6l8RI6rrGv0zm5awmcj+4+2OXQ+OM88dV7chMnCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/32k-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIR2jCCEUMCAg4EMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIxMDEwMTIxNzQ5WhcNMTcxMDA5MTIxNzQ5WjBKMQswCQYDVQQGDAJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wghAiMA0GCSqGSIb3DQEBAQUAA4IQDwAwghAKAoIQAQCrM8WwUh/dxJ6zbkOWhXfLd3yAoxxlUT8RD/p78xmfKoNu44Q/f3JCzdq6fNtlGg7xfDyUugk126Ioqxyjuh0jvneQG/PV4vKR76xYFVm21udjLP0ATdld8Bv2sdbYDGAioc2xA6wslL92i4ZnDFrA10T3RYzhAbzRsOmTHEd85u2Zkhtmg4VJ6iQMcDmOiRAbMnrm3oBG1A4iG3zikiUCvxE7S8JSInRHhN0B99t0i6QxxV9KhkGVkn+r7IG0+ioHU2avXHUWoK1HzU2sS12nsJQfLjIsiyQzMdPAkvbh3HzM9L1EEgC5Hoc7qyhDBCApjk1ibJpka5YOvPDQuiv3+ONzHfHs2VcRR98bJR1P9tnqjCyB35Km+dupc9ch/67kkftp9JS5qPK0ecZWKVA6kSDToHQX4C6ZQTHy90s9zMLHQIQPXWaFGFPV5FA8mXPGCoDbZI3VjPQ/nlHxBt8Vhx+WkS1lseZ2/AxKKkSgRTIjxoD3Pbryg1WecAaEbdw6qTz7gc6+2pn0shzyNRxAu1Zf48lq/0R4+da5XqkXDO8pzCXT2bTzEh8iH0O8VUnPcWSz5fpzW1WjZVqV+2WPx+eXO71aCjCeTCEzgo3ZSlwdx9/gb6/3NySFylE5LNnVrHmY85QwXoHY5VrAyF/eWL0D0kSkEPFW7b6BlTo1uG98fV/g9009SeVqw/KUefirPhLr9XV+7GGj7Y79XvbDdXkUMGL6bYP28NVC8m26iInFQTI5ZrGx6e7OgWWreM0fCbRKJpvBWNozKt7iqS2Yeiku4tfaLEwTettO1pcsBqXL63ZfqhLicXKHA/1/9ZslvhiH9EPGSw+PWFH/icfjc1NiNkGUsMzRhFvjFHMWYBNA5SE+i7otJRuXxOXbPtZgXOVwqAfCRZFpMZRXxLP+H78h+BkO8K3LIuHO9Y6Z8kGGxXWdNsOuvwOK9kYfmG4E0fzy/+BsJXDfpoCMfwGeZwdDQiZRTBeiIHWJZJYHfHXF1icDJB/lFXY8rzrBVzgQFHFbox4kdZmv6QWAe1zCTbKzwx7AvzGUqzVLrgA8Ba0P5awsYSdRUx8zkS5aOhL2QHgEjgMLozS7IONoK4W7zTAyZZ/H0Lf5jbHuXkvDQbiBFxST4Xc420p+zEyoCZXppRWReZ2RfkstrXTkKkhWp+UzjQI+XmaVUYQWVN/27TNyXJDT/6pa3vxnOSmiU+P1coeKR1gD8Mpu+1+C2A0LTsYjAFy2hCw6soY7GKB5bOsDB9L1Lla3uG9yzZHRjTiteh5JM9sdYu6awlgvELYc+1qbcjFAnMKWMg4UHlKqL1Ys7mX/KOZQZLYXPLkOS7IW4Lejv2sH5W7TOkdDmwd1vJiR++LdBnHiMu6PaSL7f/VCPtF9V13XJZ652cVTLlAZ9aHf5Whor1QhnUR5frajBdMY04mi+f3Ix3BtebLvmquQ9dp0VAbeWe6qr9Rx3xkBgm/B9Bvq6FNK/WRIUKnHLJpIFiMtTjhAMXoVGH9AcswEzYNVqw5PSGwXZRawhdSd6gkeT+pVlJGaPkQNoitYBQRl8v+B6LBxbf8vdj2JocyQH3d8c2xUSkuZM768sdkdg3Rz6Qo1UHD/jTEZnlmA8mVPgllW8Eq4HaRrY6xItxFdm/NlllOetEdv/12eAaQWkjSBzqAW7Z3WY8ggWnolLsAnj+xgoTjLG4YbsiwDgSuc0EQr1KvVdK7T8p9wi/rd2b8DJsODW+aowsKXkSI/04gWxZ0gzjb3vQ8f2HxGLspSfQPndFJFWRXfw1bfXYDYlgId8R9sjHKJsQiuy6yJv3zHoF52H7cGmxbKKHZeUNPoAXAl0PRxz9R/npWq/3BpS2xLH7XEHCWJnfkwqr4h9XqFwucWAuHGypqRXxoUsATMjxSWd53rONEALbxpoM5lwV0oQwPTAc9Rbz71RNDECC6Dyi0QhNZKQq5vJdt2h+lVr1fCOrX6Mtvh7KWp7LRGiQqsc7oHsXcq1QXxmybSYYSDue9SGMQEUvcCqQuR7k1v/vy6pve3NkXeI7qCEQ1qv2zUNQhio2RsxJ6HuyaARH88FQHQwYypGfHypyvm3nIES6tnuqrv4tigk6hzpTBo+tA38AVGi7i6CJGvEiu87CsM+vjLbOiL1cqcEG5gye3YCQZUI0gDRY4qCZ7HjH/Y2uLYmVGJ4A/A099bk8uTI9VF/DR03OGDtywyXVZy13DUmkcmGAyzC6FiFFYbLNhYThlTyW9BaoDjYw4p9SLEBXguYTMbPZ5FBI8ZaMsLzn6ZzF/++yyYP6Zu4kCPOUsPPPCWWtMMJCu3XwN+2kAAeEPmEbYeZAf1EPNxLeyeIjHinbPKoEdVCxYzvgGVCNs4OOAdEd6tODFho2aHgpEDfyWZv2iatSEjZDQuPkIXah/8Cl3t+jy7oukGl0S2KuSf/v7288+IZ6sKVXqVKOg2L8j+EcKd4Cr7cpmruEzleWIk+9SvCz+bRfmfr99rN2T6A6iES4XQCr/UjnrfexL4MasXJqfYruh6gEZA333j6TB5NHSUuSjXicLnCe+LNuy/uwNQ0lOMzssxgiuEoQgtOOMZDpa4KRiFC4zhECfHviMUhyFbylLW0SdRwg7IFaAUH0zbN1s2YmDu8fjeaZfjTyMxhUqz0JDPZjtW7fdLR1Kn2xbEzUpREQVXLXFNtWAo3EvE7NeIs6Ob9vgSJ8AdmH8pN/Q86blERJT5NKs7b3Lmm5Mcv48u44TfSOvFdoqFblTOZAtQyEEYjuB5g/p8TpDHJSLSAP+0t0ybPFOVmI5eQToecFD7cCvni4D5EVSGfNT5dPfCb754g2y+rKscLItCWYzvVoFecyUfmDQ0mN2bjZdJ5xOilZ8UJ9w17X65+lS4wYaDQLcvFU3l+ROYHb/qBqLQAeHh02F58aQoJnk5xI20D9RQjWcqv/CA9MjhfVxq031ET2YxiE634jmA5VEKKHENxRwGXZqlRoUr6Mc+zmsAGqHKRuL905L7PLjYjzpVy7gH7/QY2VEg9EtlYUiE1HL+R8I6riRvhIr0ONO8exqrphYygv0mTcmKq8fjKsxnpP5cQV0nwMZJzjWWjVgnCEVS7R4ZsYUrHJQGse/WX0HI+upZqJ6mcEGx1rjLwbdKiIJ+d3CRu8t4TnKRiC6s+mRhf9tq7Y+qygCSIn8aZuK0qlcPvULk+bO/Mu+nGSALqFCr6/gvhYt6UAO8Gl6KRf2TbeqFHkfeaTM14xmAfKgWKzLXrVwOA6VyDriDoLZTMkqVvkLW06VDAzd92btyMElc6O7GCLwTDHqi/3R55qogR8W+dS7X8gL+0W970/9SzbUCTne/BK2Ue55ge150mweDzgLk+m3/PUsVHceHybWk6eVveQnDl4am+xfB5msgg3Ry/DP41n+isjGM/Et/bfDL7L6WE5srXsF9fWD6nvn1e1FJobhGP9B51q5ccAD5IqC/AA5jeQG5aj07HHvclsLWSi/nlOR5wePaVc7+jj07ksI5r+HScchVvckgZai3XWwX/rPA3MUzZa0cU27si72GWW6YLyu/PccRvKW9I9BjMFArLw1LILpP3BsfpwBhj6+Xn2rUngPAEfcMcqgwB5zwieWcE796QlrxIx1AxnGi/QFrElzRb//b3DZLNrRwGwyyV+lEhZFYxviM2nK8LIRXGsZ/sBqQ6XT/0/ckJDajxy5/4EaD/P+JDdpMxhVaL+la7GeGHk1yGNBTwLd3G+cR3RN72aYOW9mH430ZQujS2XMfPdZmeJSnubFVDeeR5LfUzQsggXdJ61IyNesYn/hvMCdvcSMfjh4W6+A6InwKFcsKYcu0ikVrRZILphWkHGp8+vGR74PIHYu/P/joxJDiIq8IWF1hbEG3BcJkM3kO3hcWkyScv9We5VTxrn+tGqkR5u/9UXWkFmy99MrpRcVYACkW8vh5sCm4uwUicbe6Tz03ZJt6dNOIEZZlZmOwQWy9/eJIVl1DZuApIuYkiy5dXWZQ+TMYSvxKw8sMqEY1kF6+2Rr4J+e6QQ+ftrcr87mxhxxwS1jDHRU2ILp1a7sH/6l+V99rWbiluF2Dop/KQM73+NT8sTr3Z2FZTNu/3vvMZSU6eawQx6qZJOj1Xke/RSwQMYSOh72mIqJ2hnwl0CrVYilIF9b0zbC2RkduLaeVoGcom5Npo2z+daNsbjLveESoSpGVAwqsuwlTuuybLeHrHr4n+1d+Qqla79n8+FH5xrZFXiV3BQ16MGEGiaD7ptxKrWUdcZOnBzTBIOYhR8TZbplnKxoWmYalMMWNMOp954DDBvNKErtRz46clU2JDnDUoAsk2NdRFJ8jrW/JZEEy0UdoLu3qLHAN+/qmoRrTF4N7jF/hnWp1fVl+zjGl0DLNlaayVSxchgO2JNero1gaOcIQ9iqd5UY5aE/qt7RR/N6qoHqnr8vjZSioWuuNTuOcRZGXPqDF1T2o4mAtfe7oIhi03pvji2myoDbd80GK5/hKqhiKZt3ZhWNcVEUU1nZeon7AGphwPnEh+50w3pblwAPinlxNDXX/4SoinysPGJY6z483xJBMgTtlhDqdr6VIhOlyE3Jut4T1KqHOW6hjvUM3yhC5QkeiesBbkeH9WugYHGls71d02HDResL5L2If0MMRR51qczYPOc9Rmwce60bwfQr0ATJZFLTWwDCsXvdkbnurLkhyJgwdm4VuRjSXPBsX693XmOA18/glOZkPaxVbBWAjtCn1PaF3S65kv+G4eXZtpELIL8NIj1zqner1R3+0E3/IJw1xRXHStLoQZ/MzxVg4bDKIFUECBUOMFeIoGxRVYDeWN861iEsoEMeSqG+hBpzNIjZ8pfsvtzCBd4F1ySho2GejqYKlkFqa7IFnUjLpOeC5CLn0wIIp2JzMil966ZtIMSi/LYhtCY+qV38kjpY65+CV2IhO7eFdHko1rNqfaZzc2sq7VIRdml3NvjAllnbpT/XETYYswmu7TnJmhU0SQ3vYOFqAzVHmiofA/NFyfdqF1i9TMOg/pQcSlrvoDbeWpp9jsX3yXrqGYCddeUQrMRXC2FijFYA1i1WzGz02S00l00wHc4IycKj0FaR5+aOWvMwlKQE//WZ/E3ajdbW0w1emTk5A87bT95Y8XeJiGhtKjx9zHNe3D1uDUFevRMAOPSGX/PiPD3fBUYYuWwDepiy1rLQj3ImAcFmaHFztXUnM1Z3DEgOZGADl4KbUQtUHGki6n1YZmVSzWvPCpfMj7fuLuXd3AV8J/+LaDyb6A1CO4zpiqRLP5cpyf6wkSDVdIyGgHXmyBgT1T7Y5778QYsrR05TbPIc7jQXyCG+Epam4BwhNf9CcQyt6bCyIKXQ8ScZn3wFfOVG93UwU1zRlTDM37BNXGziM2S141unQyMgoDljoWIIRfqSg1Zj1wtdI2DhcbgixZFCt8ifZZYXP+eHOVpk2b81QzWSYpFEQ+ay9AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEATPINk/17H+RLz459iCVQAGes8kc5sxYj3CkMlWrGMiCxvsgu2kak6dCa0f3DfiVt54Fry7s0OklHiZmipoiF4RCtyJwUSAzRrZFAbkpDg8oIu4Ui/Bt13kY7xON+u4m0IgkLZSE+8BSjMrfjVvVxe+qH5i7X/ibUTDjgyfdA8XIK]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/512b-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0Hn+GmxZACg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/1024b-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIICVjCCAb8CAg37MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwODIyMDUyNzIzWhcNMTcwODIxMDUyNzIzWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYBBrx5PlP0WNI/ZdzD+6Pktmurn+F2kQYbtc7XQh8/LTBvCo+P6iZoLEmUA9e7EXLRxgU1CVqeAi7QcAn9MwBlc8ksFJHB0rtf9pmf8Oza9E0Bynlq/4/Kb1x+d+AyhL7oK9tQwB24uHOueHi1C/iVv8CSWKiYe6hzN1txYe8rAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAASPdjigJkXCqKWpnZ/Oc75EUcMi6HztaW8abUMlYXPIgkV2F7YanHOB7K4f7OOLjiz8DTPFfjC9UeuErhaA/zzWi8ewMTFZW/WshOrm3fNvcMrMLKtH534JKvcdMg6qIdjTFINIrevnAhf0cwULaebn+lMs8Pdl7y37+sfluVokK]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/2048b-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIC2jCCAkMCAg38MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwODIyMDUyNzQxWhcNMTcwODIxMDUyNzQxWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0z9FeMynsC8+udvX+LciZxnh5uRj4C9S6tNeeAlIGCfQYk0zUcNFCoCkTknNQd/YEiawDLNbxBqutbMDZ1aarys1a0lYmUeVLCIqvzBkPJTSQsCopQQ9V8WuT252zzNzs68dVGNdCJd5JNRQykpwexmnjPPv0mvj7i8XgG379TyW6P+WWV5okeUkXJ9eJS2ouDYdR2SM9BoVW+FgxDu6BmXhozW5EfsnajFp7HL8kQClI0QOc79yuKl3492rH6bzFsFn2lfwWy9ic7cP8EpCTeFp1tFaD+vxBhPZkeTQ1HKx6hQ5zeHIB5ySJJZ7af2W8r4eTGYzbdRW24DDHCPhZAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAQMv+BFvGdMVzkQaQ3/+2noVz/uAKbzpEL8xTcxYyP3lkOeh4FoxiSWqy5pGFALdPONoDuYFpLhjJSZaEwuvjI/TrrGhLV1pRG9frwDFshqD2Vaj4ENBCBh6UpeBop5+285zQ4SI7q4U9oSebUDJiuOx6+tZ9KynmrbJpTSi0+BMK]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/4096b-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIID2jCCA0MCAg39MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwODIyMDUyODAwWhcNMTcwODIxMDUyODAwWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwvWITOLeyTbS1Q/UacqeILIK16UHLvSymIlbbiT7mpD4SMwB343xpIlXN64fC0Y1ylT6LLeX4St7AcJrGIV3AMmJcsDsNzgo577LqtNvnOkLH0GojisFEKQiREX6gOgq9tWSqwaENccTEsAXuV6AQ1ST+G16s00iN92hjX9V/V66snRwTsJ/p4WRpLSdAj4272hiM19qIg9zrh92e2rQy7E/UShW4gpOrhg2f6fcCBm+aXIga+qxaSLchcDUvPXrpIxTd/OWQ23QhvIEzkGbPlBA8J7Nw9KCyaxbYMBFb1i0lBjwKLjmcoihiI7PVthAOu/B71D2hKcFjKpfv4D1Uam/0VumKwhwuhZVNjLq1BR1FKRJ1CioLG4wCTr0LVgtvvUyhFrS+3PdUR0T5HlAQWPMyQDHgCpbOHW0wc0hbuNeO/lS82LjieGNFxKmMBFF9lsN2zsA6Qw32Xkb2/EFltXCtpuOwVztdk4MDrnaDXy9zMZuqFHpv5lWTbDVwDdyEQNclYlbAEbDevEQo/rAOZFl94Mu63rAgLiPeZN4IdS/48or5KaQaCOe0DuAb4GWNIQ42cYQ5TsEHWt+FIOAMSpf9hNPjDeu1uff40DOtsiyGeX9NViqKtttaHpvd7rb2zsasbcAGUl+fNQJj4qImPSB9ThqZqPTukEcM/NtbeQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAIAigU3My8kYYniDuKEXSJmbVB+K1upHxWDA8R6KMZGXfbe5BRd8s40cY6JBYL52Tgqdl8z5Ek8dC4NNpfpcZc/teT1WqiO2wnpGHjgMDuDL1mxCZNL422jHpiPWkWp3AuDIc7tL1QjbfAUHAQYwmHkWgPP+T2wAv0pOt36GgMCMCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/DER/8192b-rsa-example-cert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIF2jCCBUMCAg3+MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIwOTI3MDYwNzQ5WhcNMTcwOTI2MDYwNzQ5WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20wggQiMA0GCSqGSIb3DQEBAQUAA4IEDwAwggQKAoIEAQCrmVwTAbytR+UjVovqiYBoXlHUMWQIyWUVpDcdTCXAJZg03IrEXUbZ74/djpIVbKnSwV+YNy+55s5j8PDcqULvnptBQwRcfpNq5tgNxdooPKt0qAJKi5+OHAeQ2lHPdXGmQsAMlAgd2KN6zYk3d1oYBHFIktyOhJpm+r8sEIgdNMMYRIFck/pG1uMCMaO4tSCZy+SXTb1eXzKWStyJuNPNeY6h3e+KhOdflpk1PVzt6+ayS+LFYbU2Uc6FnUd1eI8cuMrGeviUeX2XG1OOQ1KwX43PRtgcKlZn273yeSC8UDE1SaLBfmcciqjf0ArxhW5WYMZjNj50+0PVS0IFeCP5HKrVw9TrofuQR+9ufWRlEXRdzGohRUOWlr+HgCruvwqdDqdUXn2gzwDCytG7eWW+VHM0JpFSFp9nphQdHX2P/oakAm05bDBXmbaoqz0SF8v0q/P0OpaHcMG3QK4YgNLQ24EC3b9GY1AE/W7svylhn/2RX5jtgz2hxu5ilRtPLi+Kjfc+XbAbyKjOA8iA5xud7hWHhMal7SFtdov5r/zgJU5ZfgnIvHIERYYHo8t8fvg3JfK+HntfoKfc/RevatKA8SAQSi/DmL2oN6qrN474a9Si6FCNmBRE/lRKN3XbQg+NWhk/xE9EIA9QFBJSaLZ3IcA1EjfJ0iFMo4R1kJW8iVU27ffB83nmQR4sJcGIO9++jNRsIa646RuzljPu8Twr3GVT9ejaJym1j+7dcw9bpgpE/qW8a2i+f3b3m8Q0c4kMUJWRwnzX28dWomeiIYB/9BfQnvg0ubp+dZugfr7kFwgOXXy4HeoQUCWd5F+UisLZcFmO751O5NofLXha9Uk2NMxQGBVDiBpLVfbCYDO3C/5GTyjqT4om5JkNZURnIfc1p12RhJU404zMi64KVuDhwSAs/ZzHGrPwl2fJPY018x0Z/E/g139G8+1MP2RNV7CW6vNhWOiLwILpWFXZOByn5S9PpnRid77rl1eLfVVGpBYbxp1ZDeBz00/Whd8mpW3bqV1cX0BV/s9wVybvHOvabBkpj4MyTWbWEG9QZ6Dshpvfg4AE5jongDFeJeorHclXbhIXJ1pJJ6+y6VKuZQlTeDxNH5bBOHTpinwNmmUJT0wS9/JRJKG0cQPvZqdVGBV7yPDjuT1Nq8n6E+ICrQdSaYoZR4q+upY3hsylKIwKYdORypL93gOfhkAjxbQMiW5z2xcFqJRRIi3q3uAY05kZTJn5k3gY3FWUxrMHoKJ4ZGGg99GZfDvCrSTZHkFTVDw9KPyOtnzwOB18Q2dYIbLoCrjnQ7B+58ZodkPABQPWRShEYGTMjG+RYtV1C2Y/iJlc4tJqfLRG09ksaNIf7HS9AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAiXbxR0T+C6MT7Jh/SbDJ/1GdvbqskiKmmKnzOcX1x0uUHY4zHIhx3M0neYRr//XOh+FeSwM1JqAPztHy3SMRXzfPxzm/nwbRwdK8C/fPy7H+uMV1mKumem8WSoOMOoxFJ+o2nJgyViwnEOu9EejlH1scuKPIoTCLUCInRRhrI84K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/frank4dd-cacert.der</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MIIDvDCCAyWgAwIBAgIJAMbHBAm8IlugMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMDcxMjA3MTAyMTQ2WhcNMTcxMjA0MTAyMTQ2WjCBmzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRAwDgYDVQQHEwdDaHVvLWt1MREwDwYDVQQKEwhGcmFuazRERDEYMBYGA1UECxMPV2ViQ2VydCBTdXBwb3J0MRgwFgYDVQQDEw9GcmFuazRERCBXZWIgQ0ExIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAZnJhbms0ZGQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7r7yPJdXmDL2/+L2iogxQrLML+10EwAY9lJRCHGPqSJ8if7teqnXgFr6MAEiCwTcLvk4h1UxLrDXmxooegNg1zx/OODbcc++SfFCGmflwj/wjLpYRwPgux7/QIgrUqzsj2HtdRFd+WPVD4AOtY9gnxjNXFpVe1zmgAm/UFLdMewIDAQABo4IBBDCCAQAwHQYDVR0OBBYEFGLze+0G1LHVnH9I5e/FyRVh/dkRMIHQBgNVHSMEgcgwgcWAFGLze+0G1LHVnH9I5e/FyRVh/dkRoYGhpIGeMIGbMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNEREMRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdlYiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb22CCQDGxwQJvCJboDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBALosLpHduFOY30wKS2WQ32RzRgh0ZWNlLXWHkQYmzTHNokwYLy0wGfIqzD1ovLMjDuPMC3MBmQPg8zhd+BY2sgRhgdEBmYWTiw71eZLLmI/edQbu1z6rOXJb8EegubJNkYTcuxsKLijIfJDnK2noqPt03puJEsBxosN14XPEhIEOCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/frank4dd-cacert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXlXZ0F3SUJBZ0lKQU1iSEJBbThJbHVnTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdiTVFzd0NRWUQKVlFRR0V3SktVREVPTUF3R0ExVUVDQk1GVkc5cmVXOHhFREFPQmdOVkJBY1RCME5vZFc4dGEzVXhFVEFQQmdOVgpCQW9UQ0VaeVlXNXJORVJFTVJnd0ZnWURWUVFMRXc5WFpXSkRaWEowSUZOMWNIQnZjblF4R0RBV0JnTlZCQU1UCkQwWnlZVzVyTkVSRUlGZGxZaUJEUVRFak1DRUdDU3FHU0liM0RRRUpBUllVYzNWd2NHOXlkRUJtY21GdWF6UmsKWkM1amIyMHdIaGNOTURjeE1qQTNNVEF5TVRRMldoY05NVGN4TWpBME1UQXlNVFEyV2pDQm16RUxNQWtHQTFVRQpCaE1DU2xBeERqQU1CZ05WQkFnVEJWUnZhM2x2TVJBd0RnWURWUVFIRXdkRGFIVnZMV3QxTVJFd0R3WURWUVFLCkV3aEdjbUZ1YXpSRVJERVlNQllHQTFVRUN4TVBWMlZpUTJWeWRDQlRkWEJ3YjNKME1SZ3dGZ1lEVlFRREV3OUcKY21GdWF6UkVSQ0JYWldJZ1EwRXhJekFoQmdrcWhraUc5dzBCQ1FFV0ZITjFjSEJ2Y25SQVpuSmhibXMwWkdRdQpZMjl0TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDN3I3eVBKZFhtREwyLytMMmlvZ3hRCnJMTUwrMTBFd0FZOWxKUkNIR1BxU0o4aWY3dGVxblhnRnI2TUFFaUN3VGNMdms0aDFVeExyRFhteG9vZWdOZzEKengvT09EYmNjKytTZkZDR21mbHdqL3dqTHBZUndQZ3V4Ny9RSWdyVXF6c2oySHRkUkZkK1dQVkQ0QU90WTlnbgp4ak5YRnBWZTF6bWdBbS9VRkxkTWV3SURBUUFCbzRJQkJEQ0NBUUF3SFFZRFZSME9CQllFRkdMemUrMEcxTEhWCm5IOUk1ZS9GeVJWaC9ka1JNSUhRQmdOVkhTTUVnY2d3Z2NXQUZHTHplKzBHMUxIVm5IOUk1ZS9GeVJWaC9ka1IKb1lHaHBJR2VNSUdiTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVApCME5vZFc4dGEzVXhFVEFQQmdOVkJBb1RDRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xCmNIQnZjblF4R0RBV0JnTlZCQU1URDBaeVlXNXJORVJFSUZkbFlpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVUKYzNWd2NHOXlkRUJtY21GdWF6UmtaQzVqYjIyQ0NRREd4d1FKdkNKYm9EQU1CZ05WSFJNRUJUQURBUUgvTUEwRwpDU3FHU0liM0RRRUJCUVVBQTRHQkFMb3NMcEhkdUZPWTMwd0tTMldRMzJSelJnaDBaV05sTFhXSGtRWW16VEhOCm9rd1lMeTB3R2ZJcXpEMW92TE1qRHVQTUMzTUJtUVBnOHpoZCtCWTJzZ1JoZ2RFQm1ZV1RpdzcxZVpMTG1JL2UKZFFidTF6NnJPWEpiOEVlZ3ViSk5rWVRjdXhzS0xpaklmSkRuSzJub3FQdDAzcHVKRXNCeG9zTjE0WFBFaElFTwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/16k-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUoyakNDQ1VNQ0FnMy9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlPVEF5V2hjTk1UY3dPREl4TURVeU9UQXlXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2dnaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJSUR3QXdnZ2dLQW9JSUFRQzFMZHA1WmIvRE9YSmUKd00wVjRFNDBVMnJ0YmlVMVlPTTVTeDQzSEg1SDBDeW8wa1Jaa1hOcE8wRWpnSnFiMVovL1lDVjgvcUxkRkdrcgp2cWloazVzckFtYWJWRjRady91Qi9zbWM0TkMvUmI2YjNIemxyOS9BZUlqem9PRi9MVmcySGJPRFVNN1dRdjlECjZ5b293NW5pRHE1UjljWmVOTG4zcnl3b0s1cmVqNFlTdjdzWXpxN0R6T0NrT1pSRzJtNmtBV1BkZldvS0RweU4KdVUvTXpOeGQyTUFJL2ovTW1rdHo2eGFtcGp1bDB0cmJvbmwyQVVhbE1wWkx0ZXozb0NVSThQUGk1TkZFVW9ObApxc3dXM09tT0ZhRTFuSU1hNWdVWEUwdmh4clcyYjZ2Z25JdjVlNHIwRk5jTFZZMWVtcTYzTWMwNlA2MDcyY0sxCkZmVFpsTGVHYWJVRDNHZDFObWw5RHVVKzVJRCtSa1NpR1NOd2JMRzFMNmU2bjJTSEl3b2JDK0dEUXdsTGpkVTYKNWhKWHFheVQvUGgxbmY0d0pkV1VreFBFdXBZNUlZZkVjYlM4TWxBam44aGNMQ1JBdXRWQWh1MzlmVm5LVlIyUwphY3FiaFc0SUczZ0Flb3JVWFdOYWsxY3Rod1ZqNUJiamR6WWlXZnUvVzVBV2IvellJVWROcWVzMHdGZzFySFo2CkJpbEplazlMU2RvWG83Vmp4c3crTThGVFdOcWdFQ1YrSktNS1lmSGt3NU9ENDlUMmJVNmVkSGhlYzUwTkhSYnkKdFJKTCtKalBoUnlLK2k3L3Y5Y0pOV1YrNko0QmRQVHIySnRla2FSTVRud0NBanFtSlZWaTFySEtnQU52Zk92UgpyWFVHdlNSTGVBcEdyRk9ya2EyQlpPblB2bFdzWEZlVHdCTi9Ca1hnOXc1VmYxK1JSQkswRXBqMDRaR3ZLekFzCmx0RFNXZlBsbEh4QUFERFVQWndDaFppakZTaVhtNm1PeXRpdXdaenM2WGMyRTgrMmdUUldmR0RqM0ZCSm5TR0cKT0d2SWgzVHRwbmRBR3ZjMURSY0dnYUZJMjg3NHp0bkxNTk0xSlJDNnhMbGJKbXhtbTYzRC9YWVRuTG5uOXRzdwora3BodWZIUm9iM2ZDWnlkcmoyTmVpamxsUXlnbjhGQXRwcThZTFM3NGxNdFAreTV1VG0wcUhlaFdBTkY2OGZCCmg0clZUZ3ZoeDNPazdNYndsV2x3Zkp5V2g4UktUYmtPY2VKRDNZRjhIVU5IN3BocDE5RHhyZ0Zlc2dXV1MwT0cKalVTYUZmQloxUDUyRTdnUkUvQi9ZTEhUaUkvYzUxZ0pUOU0ydmVCVjBIZDlBcytTRlhVcitoM3pOYXRmdWlvSQpZdVJnSS84WlMrWHpoMG1neDZxNlhJZzcwZ2UxV2xVZk1hWDRUandtZzRjM1RSUXVlZ2ZOYlBGUjRhMTFyaTNDCmYwMUQ2bTBTUEwyN1QveEg3TFpTcWNMcmZiQVNZZWtmTVdxczVKaUxHbmdZNy9NQ0g2Q1lpRThrZTZnZjN1OTEKd05HTVlZVTg3dVNZd2pTMEdiR1MzVGRxRmdpb2twcy9LY2RVdUd4TzVUdE5WaXVCTmZvbVFKSDhodTUxQk9wVgozUHloZzdxMDJwV3RUejBrajNqL21kMGxmVmFPWi9VczlyeHpmVWhDaThFSFI3NHlWbjZzR1RKTVMyMDI0anpFCkwvODdKeXd1R01BWEg5dWJSQi9hTitEWWdsMHVZT01ZVWUvZEdVUjJWR1lsTEl0aitXb3BYZ1lDR09JUWdTWjIKNEFwdktDRFltcUZ2bzByTWV2Vy9HRkZ4WnF5ZTZHQk02NmVVYXplOTdPNzNIUC9nSzhRcEV4UHErSlRlM09xWQphbFBmTVR0M1REM016Q2ZaNVNWZlNQdWtvaUxPZXR1UmJZTjk3cmQvMWYxc3BnQ3c3bWx5cHg4QWVwVm9lWFNJClZmTGxDZ1hEQ05LNWJERXJLRnBqZTE5amF1NTh0Y0k3TkQ4YnNFT2d4R2V6ekhxY0pIN3JoZTYrbjRTOEhEUkwKdjNRbis3MW5aYjN5dXRicHpWeCtmaHh2MEZITGRHUHJpUmFxVUJSTkc3cjZxdGZaRTNuTENHZ3ArSWtNZmViYQpyOHkyQU9WSGVSNzdrcTdGcG5COHpTR3R3S21sVGxNZHM3QXg3ZGVnTmY1bU1QN2VyNktRenk1NjdpNU9vT08xCkN0TkNLZ1VqRnI3ZW10czFPekVFUkZBVm5DVW0zUFlhWTBjUUNPQlQ0N0NRd001dGdBWno1a0JtdUsxZDcyOGEKMFlXbDJqQXhubVRRVk5RcElpeDV3L0dmNmRtVWI3K293dnhMcmMxZVZUUkYxdTFob3ZCQzE0VzVlWDlwd0MrNwpFNDZjSGVkbW1rbkloSzAvUzQ0OGFGR2pCZEtWT0dmVElVT0czcmxNdVhMWHZVbFd0L2lnVUVNN2hEb1FnbnNrCnh0RmNKb1JZbVo1STE3K1R2VnplN2g2VnRuNExhTGtsbzdwdHkxbk03N0ZuNEkvdXRwRE1kY3lXa0tGaGVxYWsKTlRsc3JiSklCdHdNa08rRGxaNUdaQ3lwSEd3V2NqVVFyVW1QOEVvZG1vNC9QK3JaSmpLL3IzTTlPeW5uL0QzUAoxaFlKczRvL1VvZkovMkwyZm8va2JkQ1FMTytWTU1CdU5IcWV1dXVlOXJROW5SS003Z3pNTTZ3Z0JyMUxxL0JHCmRiSVRiZTlVamxFSy80aVF0blR2a3RHUmNweVBZUlUrc01qY3h2V2xTMThhN1VmVXp1YnBYUkk1T2RvTENLWWoKUGNtN2FiQ0NkSDdhVUFBa294M2U5Um8zVTE5c1FPNkZtZ3hsOE90Yk9vNm9EeG5haksvcU1lRnZMY09TZHRiaQptZnkxeG84SzlKeWZYQ2kwNTQwVU84Qjg0akdLUVlTTlM1ZVA3K0JYYjkxd1ZVZ0EyeDVpbDJFQkxXMG1OVmYwCmtIQlp5TnNlZEtITC8xamgvWFBPdExDL2hSc2J2RU1RWkxWVm9OU1RsVEJOTjU0cEFyTUtSM3FkaGZGbGhFeGcKTVA4Tnk0YUlJYjFpOWFiMkd2TFVPUjkzSUxIazk3eVB3b3daUzRTMGpBczRoK1lrT0lLWVQxOUVCanpsLzFNQgpmTEdRejQvVkw5TnhKd3A1Sml2RXU1dGZVTk80NFkwTVVvSGpFMS9TK0w2VUlXQXViSHkwNnY1Rmp1cTNPdkN0Cjl4L3NwdW1pbjRIa3FrRFkrR2FoRk8xbVhpUVh0RU42SDVtZFNweC9KQndJaS84ZDdDSXc2WW5xSkFNT001WnUKd3p5NFNHWGRwdjRYTU5nWUI1UGxzbXpnUWtEQVNHeVRieXhlcWNiUEFrTlRIRGlaMHNKaUdLNGpSbkFZNEZRagpOZEQ0b2RvZnp3L0JpNUFZdkF6NnoyNElxb25JN3pnanBjOTdwdWVxd3YwMWFZK0dtOFhFUm5zeThVSUxabnVlCjRhekJBcWt2M2I5QTVMUTJKdG5EUEVFTlJqdENiZGF3ZkVYTmlidmNsNmRBa1lyTms4OHUyT0VocXZ0cC9hcHYKd29nMkJZWjhpK3ZGSGZ5aXd0UFJXRGIwelFPNHh3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQURnMwoxQWg4d1QveGpJaHRVVEFJY0ZHdGdOMjMyMWFWOHBJejhWU0p1M0NyYkpKRDA5RWs2V1VRZ1RiRXEwcHh3aFFvCnVia3IyK0NKMkd3L0ZUZDBXRmV0N1Q1N2FGZzdxaDV4cmFFaEgyMWljSG1OQlVHN0VUVVhORWY4VGpiaFJFVlkKZ0Y2bDhSSTZyckd2MHptNWF3bWNqKzQrMk9YUStPTTg4ZFY3Y2hNbgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/32k-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSVIyakNDRVVNQ0FnNEVNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXgKTURFd01USXhOelE1V2hjTk1UY3hNREE1TVRJeE56UTVXakJLTVFzd0NRWURWUVFHREFKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2hBaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJUUR3QXdnaEFLQW9JUUFRQ3JNOFd3VWgvZHhKNnoKYmtPV2hYZkxkM3lBb3h4bFVUOFJEL3A3OHhtZktvTnU0NFEvZjNKQ3pkcTZmTnRsR2c3eGZEeVV1Z2sxMjZJbwpxeHlqdWgwanZuZVFHL1BWNHZLUjc2eFlGVm0yMXVkakxQMEFUZGxkOEJ2MnNkYllER0Fpb2MyeEE2d3NsTDkyCmk0Wm5ERnJBMTBUM1JZemhBYnpSc09tVEhFZDg1dTJaa2h0bWc0Vko2aVFNY0RtT2lSQWJNbnJtM29CRzFBNGkKRzN6aWtpVUN2eEU3UzhKU0luUkhoTjBCOTl0MGk2UXh4VjlLaGtHVmtuK3I3SUcwK2lvSFUyYXZYSFVXb0sxSAp6VTJzUzEybnNKUWZMaklzaXlRek1kUEFrdmJoM0h6TTlMMUVFZ0M1SG9jN3F5aERCQ0FwamsxaWJKcGthNVlPCnZQRFF1aXYzK09OekhmSHMyVmNSUjk4YkpSMVA5dG5xakN5QjM1S20rZHVwYzljaC82N2trZnRwOUpTNXFQSzAKZWNaV0tWQTZrU0RUb0hRWDRDNlpRVEh5OTBzOXpNTEhRSVFQWFdhRkdGUFY1RkE4bVhQR0NvRGJaSTNWalBRLwpubEh4QnQ4Vmh4K1drUzFsc2VaMi9BeEtLa1NnUlRJanhvRDNQYnJ5ZzFXZWNBYUViZHc2cVR6N2djNisycG4wCnNoenlOUnhBdTFaZjQ4bHEvMFI0K2RhNVhxa1hETzhwekNYVDJiVHpFaDhpSDBPOFZVblBjV1N6NWZwelcxV2oKWlZxVisyV1B4K2VYTzcxYUNqQ2VUQ0V6Z28zWlNsd2R4OS9nYjYvM055U0Z5bEU1TE5uVnJIbVk4NVF3WG9IWQo1VnJBeUYvZVdMMEQwa1NrRVBGVzdiNkJsVG8xdUc5OGZWL2c5MDA5U2VWcXcvS1VlZmlyUGhMcjlYVis3R0dqCjdZNzlYdmJEZFhrVU1HTDZiWVAyOE5WQzhtMjZpSW5GUVRJNVpyR3g2ZTdPZ1dXcmVNMGZDYlJLSnB2QldOb3oKS3Q3aXFTMlllaWt1NHRmYUxFd1RldHRPMXBjc0JxWEw2M1pmcWhMaWNYS0hBLzEvOVpzbHZoaUg5RVBHU3crUApXRkgvaWNmamMxTmlOa0dVc016UmhGdmpGSE1XWUJOQTVTRStpN290SlJ1WHhPWGJQdFpnWE9Wd3FBZkNSWkZwCk1aUlh4TFArSDc4aCtCa084SzNMSXVITzlZNlo4a0dHeFhXZE5zT3V2d09LOWtZZm1HNEUwZnp5LytCc0pYRGYKcG9DTWZ3R2Vad2REUWlaUlRCZWlJSFdKWkpZSGZIWEYxaWNESkIvbEZYWThyenJCVnpnUUZIRmJveDRrZFptdgo2UVdBZTF6Q1RiS3p3eDdBdnpHVXF6VkxyZ0E4QmEwUDVhd3NZU2RSVXg4emtTNWFPaEwyUUhnRWpnTUxvelM3CklPTm9LNFc3elRBeVpaL0gwTGY1amJIdVhrdkRRYmlCRnhTVDRYYzQyMHArekV5b0NaWHBwUldSZVoyUmZrc3QKclhUa0traFdwK1V6alFJK1htYVZVWVFXVk4vMjdUTnlYSkRULzZwYTN2eG5PU21pVStQMWNvZUtSMWdEOE1wdQorMStDMkEwTFRzWWpBRnkyaEN3NnNvWTdHS0I1Yk9zREI5TDFMbGEzdUc5eXpaSFJqVGl0ZWg1Sk05c2RZdTZhCndsZ3ZFTFljKzFxYmNqRkFuTUtXTWc0VUhsS3FMMVlzN21YL0tPWlFaTFlYUExrT1M3SVc0TGVqdjJzSDVXN1QKT2tkRG13ZDF2SmlSKytMZEJuSGlNdTZQYVNMN2YvVkNQdEY5VjEzWEpaNjUyY1ZUTGxBWjlhSGY1V2hvcjFRaApuVVI1ZnJhakJkTVkwNG1pK2YzSXgzQnRlYkx2bXF1UTlkcDBWQWJlV2U2cXI5UngzeGtCZ20vQjlCdnE2Rk5LCi9XUklVS25ITEpwSUZpTXRUamhBTVhvVkdIOUFjc3dFellOVnF3NVBTR3dYWlJhd2hkU2Q2Z2tlVCtwVmxKR2EKUGtRTm9pdFlCUVJsOHYrQjZMQnhiZjh2ZGoySm9jeVFIM2Q4YzJ4VVNrdVpNNzY4c2RrZGczUno2UW8xVUhELwpqVEVabmxtQThtVlBnbGxXOEVxNEhhUnJZNnhJdHhGZG0vTmxsbE9ldEVkdi8xMmVBYVFXa2pTQnpxQVc3WjNXClk4Z2dXbm9sTHNBbmoreGdvVGpMRzRZYnNpd0RnU3VjMEVRcjFLdlZkSzdUOHA5d2kvcmQyYjhESnNPRFcrYW8Kd3NLWGtTSS8wNGdXeFowZ3pqYjN2UThmMkh4R0xzcFNmUVBuZEZKRldSWGZ3MWJmWFlEWWxnSWQ4UjlzakhLSgpzUWl1eTZ5SnYzekhvRjUySDdjR214YktLSFplVU5Qb0FYQWwwUFJ4ejlSL25wV3EvM0JwUzJ4TEg3WEVIQ1dKCm5ma3dxcjRoOVhxRnd1Y1dBdUhHeXBxUlh4b1VzQVRNanhTV2Q1M3JPTkVBTGJ4cG9NNWx3VjBvUXdQVEFjOVIKYno3MVJOREVDQzZEeWkwUWhOWktRcTV2SmR0MmgrbFZyMWZDT3JYNk10dmg3S1dwN0xSR2lRcXNjN29Ic1hjcQoxUVh4bXliU1lZU0R1ZTlTR01RRVV2Y0NxUXVSN2sxdi92eTZwdmUzTmtYZUk3cUNFUTFxdjJ6VU5RaGlvMlJzCnhKNkh1eWFBUkg4OEZRSFF3WXlwR2ZIeXB5dm0zbklFUzZ0bnVxcnY0dGlnazZoenBUQm8rdEEzOEFWR2k3aTYKQ0pHdkVpdTg3Q3NNK3ZqTGJPaUwxY3FjRUc1Z3llM1lDUVpVSTBnRFJZNHFDWjdIakgvWTJ1TFltVkdKNEEvQQowOTliazh1VEk5VkYvRFIwM09HRHR5d3lYVlp5MTNEVW1rY21HQXl6QzZGaUZGWWJMTmhZVGhsVHlXOUJhb0RqCll3NHA5U0xFQlhndVlUTWJQWjVGQkk4WmFNc0x6bjZaekYvKyt5eVlQNlp1NGtDUE9Vc1BQUENXV3RNTUpDdTMKWHdOKzJrQUFlRVBtRWJZZVpBZjFFUE54TGV5ZUlqSGluYlBLb0VkVkN4WXp2Z0dWQ05zNE9PQWRFZDZ0T0RGaApvMmFIZ3BFRGZ5V1p2MmlhdFNFalpEUXVQa0lYYWgvOENsM3Qrank3b3VrR2wwUzJLdVNmL3Y3Mjg4K0laNnNLClZYcVZLT2cyTDhqK0VjS2Q0Q3I3Y3BtcnVFemxlV0lrKzlTdkN6K2JSZm1mcjk5ck4yVDZBNmlFUzRYUUNyL1UKam5yZmV4TDRNYXNYSnFmWXJ1aDZnRVpBMzMzajZUQjVOSFNVdVNqWGljTG5DZStMTnV5L3V3TlEwbE9NenNzeApnaXVFb1FndE9PTVpEcGE0S1JpRkM0emhFQ2ZIdmlNVWh5RmJ5bExXMFNkUndnN0lGYUFVSDB6Yk4xczJZbUR1CjhmamVhWmZqVHlNeGhVcXowSkRQWmp0VzdmZExSMUtuMnhiRXpVcFJFUVZYTFhGTnRXQW8zRXZFN05lSXM2T2IKOXZnU0o4QWRtSDhwTi9RODZibEVSSlQ1TktzN2IzTG1tNU1jdjQ4dTQ0VGZTT3ZGZG9xRmJsVE9aQXRReUVFWQpqdUI1Zy9wOFRwREhKU0xTQVArMHQweWJQRk9WbUk1ZVFUb2VjRkQ3Y0N2bmk0RDVFVlNHZk5UNWRQZkNiNzU0CmcyeStyS3NjTEl0Q1dZenZWb0ZlY3lVZm1EUTBtTjJialpkSjV4T2lsWjhVSjl3MTdYNjUrbFM0d1lhRFFMY3YKRlUzbCtST1lIYi9xQnFMUUFlSGgwMkY1OGFRb0puazV4STIwRDlSUWpXY3F2L0NBOU1qaGZWeHEwMzFFVDJZeAppRTYzNGptQTVWRUtLSEVOeFJ3R1hacWxSb1VyNk1jK3ptc0FHcUhLUnVMOTA1TDdQTGpZanpwVnk3Z0g3L1FZCjJWRWc5RXRsWVVpRTFITCtSOEk2cmlSdmhJcjBPTk84ZXhxcnBoWXlndjBtVGNtS3E4ZmpLc3hucFA1Y1FWMG4Kd01aSnpqV1dqVmduQ0VWUzdSNFpzWVVySEpRR3NlL1dYMEhJK3VwWnFKNm1jRUd4MXJqTHdiZEtpSUorZDNDUgp1OHQ0VG5LUmlDNnMrbVJoZjl0cTdZK3F5Z0NTSW44YVp1SzBxbGNQdlVMaytiTy9NdStuR1NBTHFGQ3I2L2d2CmhZdDZVQU84R2w2S1JmMlRiZXFGSGtmZWFUTTE0eG1BZktnV0t6TFhyVndPQTZWeURyaURvTFpUTWtxVnZrTFcKMDZWREF6ZDkyYnR5TUVsYzZPN0dDTHdUREhxaS8zUjU1cW9nUjhXK2RTN1g4Z0wrMFc5NzAvOVN6YlVDVG5lLwpCSzJVZTU1Z2UxNTBtd2VEemdMayttMy9QVXNWSGNlSHliV2s2ZVZ2ZVFuRGw0YW0reGZCNW1zZ2czUnkvRFA0CjFuK2lzakdNL0V0L2JmREw3TDZXRTVzclhzRjlmV0Q2bnZuMWUxRkpvYmhHUDlCNTFxNWNjQUQ1SXFDL0FBNWoKZVFHNWFqMDdISHZjbHNMV1NpL25sT1I1d2VQYVZjNytqajA3a3NJNXIrSFNjY2hWdmNrZ1phaTNYV3dYL3JQQQozTVV6WmEwY1UyN3NpNzJHV1c2WUx5dS9QY2NSdktXOUk5QmpNRkFyTHcxTElMcFAzQnNmcHdCaGo2K1huMnJVCm5nUEFFZmNNY3Fnd0I1endpZVdjRTc5NlFscnhJeDFBeG5HaS9RRnJFbHpSYi8vYjNEWkxOclJ3R3d5eVYrbEUKaFpGWXh2aU0ybks4TElSWEdzWi9zQnFRNlhULzAvY2tKRGFqeHk1LzRFYUQvUCtKRGRwTXhoVmFMK2xhN0dlRwpIazF5R05CVHdMZDNHK2NSM1JONzJhWU9XOW1INDMwWlF1alMyWE1mUGRabWVKU251YkZWRGVlUjVMZlV6UXNnCmdYZEo2MUl5TmVzWW4vaHZNQ2R2Y1NNZmpoNFc2K0E2SW53S0Zjc0tZY3UwaWtWclJaSUxwaFdrSEdwOCt2R1IKNzRQSUhZdS9QL2pveEpEaUlxOElXRjFoYkVHM0JjSmtNM2tPM2hjV2t5U2N2OVdlNVZUeHJuK3RHcWtSNXUvOQpVWFdrRm15OTlNcnBSY1ZZQUNrVzh2aDVzQ200dXdVaWNiZTZUejAzWkp0NmROT0lFWlpsWm1Pd1FXeTkvZUpJClZsMURadUFwSXVZa2l5NWRYV1pRK1RNWVN2eEt3OHNNcUVZMWtGNisyUnI0SitlNlFRK2Z0cmNyODdteGh4eHcKUzFqREhSVTJJTHAxYTdzSC82bCtWOTlyV2JpbHVGMkRvcC9LUU03MytOVDhzVHIzWjJGWlROdS8zdnZNWlNVNgplYXdReDZxWkpPajFYa2UvUlN3UU1ZU09oNzJtSXFKMmhud2wwQ3JWWWlsSUY5YjB6YkMyUmtkdUxhZVZvR2NvCm01TnBvMnorZGFOc2JqTHZlRVNvU3BHVkF3cXN1d2xUdXV5YkxlSHJIcjRuKzFkK1FxbGE3OW44K0ZINXhyWkYKWGlWM0JRMTZNR0VHaWFEN3B0eEtyV1VkY1pPbkJ6VEJJT1loUjhUWmJwbG5LeG9XbVlhbE1NV05NT3A5NTRERApCdk5LRXJ0Uno0NmNsVTJKRG5EVW9Bc2syTmRSRko4anJXL0paRUV5MFVkb0x1M3FMSEFOKy9xbW9SclRGNE43CmpGL2huV3AxZlZsK3pqR2wwRExObGFheVZTeGNoZ08ySk5lcm8xZ2FPY0lROWlxZDVVWTVhRS9xdDdSUi9ONnEKb0hxbnI4dmpaU2lvV3V1TlR1T2NSWkdYUHFERjFUMm80bUF0ZmU3b0loaTAzcHZqaTJteW9EYmQ4MEdLNS9oSwpxaGlLWnQzWmhXTmNWRVVVMW5aZW9uN0FHcGh3UG5FaCs1MHczcGJsd0FQaW5seE5EWFgvNFNvaW55c1BHSlk2Cno0ODN4SkJNZ1R0bGhEcWRyNlZJaE9seUUzSnV0NFQxS3FIT1c2aGp2VU0zeWhDNVFrZWllc0Jia2VIOVd1Z1kKSEdsczcxZDAySERSZXNMNUwySWYwTU1SUjUxcWN6WVBPYzlSbXdjZTYwYndmUXIwQVRKWkZMVFd3RENzWHZkawpibnVyTGtoeUpnd2RtNFZ1UmpTWFBCc1g2OTNYbU9BMTgvZ2xPWmtQYXhWYkJXQWp0Q24xUGFGM1M2NWt2K0c0CmVYWnRwRUxJTDhOSWoxenFuZXIxUjMrMEUzL0lKdzF4UlhIU3RMb1FaL016eFZnNGJES0lGVUVDQlVPTUZlSW8KR3hSVllEZVdOODYxaUVzb0VNZVNxRytoQnB6TklqWjhwZnN2dHpDQmQ0RjF5U2hvMkdlanFZS2xrRnFhN0lGbgpVakxwT2VDNUNMbjB3SUlwMkp6TWlsOTY2WnRJTVNpL0xZaHRDWStxVjM4a2pwWTY1K0NWMkloTzdlRmRIa28xCnJOcWZhWnpjMnNxN1ZJUmRtbDNOdmpBbGxuYnBUL1hFVFlZc3dtdTdUbkptaFUwU1EzdllPRnFBelZIbWlvZkEKL05GeWZkcUYxaTlUTU9nL3BRY1NscnZvRGJlV3BwOWpzWDN5WHJxR1lDZGRlVVFyTVJYQzJGaWpGWUExaTFXegpHejAyUzAwbDAwd0hjNEl5Y0tqMEZhUjUrYU9Xdk13bEtRRS8vV1ovRTNhamRiVzB3MWVtVGs1QTg3YlQ5NVk4ClhlSmlHaHRLang5ekhOZTNEMXVEVUZldlJNQU9QU0dYL1BpUEQzZkJVWVl1V3dEZXBpeTFyTFFqM0ltQWNGbWEKSEZ6dFhVbk0xWjNERWdPWkdBRGw0S2JVUXRVSEdraTZuMVlabVZTeld2UENwZk1qN2Z1THVYZDNBVjhKLytMYQpEeWI2QTFDTzR6cGlxUkxQNWNweWY2d2tTRFZkSXlHZ0hYbXlCZ1QxVDdZNTc3OFFZc3JSMDVUYlBJYzdqUVh5CkNHK0VwYW00QndoTmY5Q2NReXQ2YkN5SUtYUThTY1puM3dGZk9WRzkzVXdVMXpSbFRETTM3Qk5YR3ppTTJTMTQKMXVuUXlNZ29EbGpvV0lJUmZxU2cxWmoxd3RkSTJEaGNiZ2l4WkZDdDhpZlpaWVhQK2VIT1ZwazJiODFReldTWQpwRkVRK2F5OUFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBVFBJTmsvMTdIK1JMejQ1OWlDVlFBR2VzCjhrYzVzeFlqM0NrTWxXckdNaUN4dnNndTJrYWs2ZENhMGYzRGZpVnQ1NEZyeTdzME9rbEhpWm1pcG9pRjRSQ3QKeUp3VVNBelJyWkZBYmtwRGc4b0l1NFVpL0J0MTNrWTd4T04rdTRtMElna0xaU0UrOEJTak1yZmpWdlZ4ZStxSAo1aTdYL2liVVREamd5ZmRBOFhJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/512b-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOalUwV2hjTk1UY3dPREl4TURVeU5qVTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZSTGwKOFpQakJvcDd1TEhobmlhN2xRRy81ekR0WklVQzNSVnBxRFN3QnV3L05Ud2VHeXVQK284QUc5OEh4cXhUQndJRApBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTMlRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14CjhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnkKMlZndUt2NFNXalJGb1JrSWZJbEhYMHFWdmlNaFNsTnkyaW9GTHk3SmNQWmIrdjNmdERHeXdVcWNCaVZEb2VhMApIbitHbXhaQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/1024b-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNWakNDQWI4Q0FnMzdNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOekl6V2hjTk1UY3dPREl4TURVeU56SXpXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1ZQkJyeDVQbFAwV05JL1pkekQKKzZQa3RtdXJuK0Yya1FZYnRjN1hRaDgvTFRCdkNvK1A2aVpvTEVtVUE5ZTdFWExSeGdVMUNWcWVBaTdRY0FuOQpNd0JsYzhrc0ZKSEIwcnRmOXBtZjhPemE5RTBCeW5scS80L0tiMXgrZCtBeWhMN29LOXRRd0IyNHVIT3VlSGkxCkMvaVZ2OENTV0tpWWU2aHpOMXR4WWU4ckFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBQVNQZGppZ0oKa1hDcUtXcG5aL09jNzVFVWNNaTZIenRhVzhhYlVNbFlYUElna1YyRjdZYW5IT0I3SzRmN09PTGppejhEVFBGZgpqQzlVZXVFcmhhQS96eldpOGV3TVRGWlcvV3NoT3JtM2ZOdmNNck1MS3RINTM0Skt2Y2RNZzZxSWRqVEZJTklyCmV2bkFoZjBjd1VMYWVibitsTXM4UGRsN3kzNytzZmx1Vm9rPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/2048b-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMyakNDQWtNQ0FnMzhNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOelF4V2hjTk1UY3dPREl4TURVeU56UXhXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzB6OUZlTXluc0M4K3UKZHZYK0xjaVp4bmg1dVJqNEM5UzZ0TmVlQWxJR0NmUVlrMHpVY05GQ29Da1Rrbk5RZC9ZRWlhd0RMTmJ4QnF1dApiTURaMWFhcnlzMWEwbFltVWVWTENJcXZ6QmtQSlRTUXNDb3BRUTlWOFd1VDI1Mnp6TnpzNjhkVkdOZENKZDVKCk5SUXlrcHdleG1ualBQdjBtdmo3aThYZ0czNzlUeVc2UCtXV1Y1b2tlVWtYSjllSlMyb3VEWWRSMlNNOUJvVlcKK0ZneER1NkJtWGhvelc1RWZzbmFqRnA3SEw4a1FDbEkwUU9jNzl5dUtsMzQ5MnJINmJ6RnNGbjJsZndXeTlpYwo3Y1A4RXBDVGVGcDF0RmFEK3Z4QmhQWmtlVFExSEt4NmhRNXplSElCNXlTSkpaN2FmMlc4cjRlVEdZemJkUlcyCjREREhDUGhaQWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFRTXYrQkZ2R2RNVnprUWFRMy8rMm5vVnoKL3VBS2J6cEVMOHhUY3hZeVAzbGtPZWg0Rm94aVNXcXk1cEdGQUxkUE9Ob0R1WUZwTGhqSlNaYUV3dXZqSS9UcgpyR2hMVjFwUkc5ZnJ3REZzaHFEMlZhajRFTkJDQmg2VXBlQm9wNSsyODV6UTRTSTdxNFU5b1NlYlVESml1T3g2Cit0WjlLeW5tcmJKcFRTaTArQk09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/4096b-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQyakNDQTBNQ0FnMzlNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlPREF3V2hjTk1UY3dPREl4TURVeU9EQXdXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3d2V0lUT0xleVRiUzEKUS9VYWNxZUlMSUsxNlVITHZTeW1JbGJiaVQ3bXBENFNNd0IzNDN4cElsWE42NGZDMFkxeWxUNkxMZVg0U3Q3QQpjSnJHSVYzQU1tSmNzRHNOemdvNTc3THF0TnZuT2tMSDBHb2ppc0ZFS1FpUkVYNmdPZ3E5dFdTcXdhRU5jY1RFCnNBWHVWNkFRMVNUK0cxNnMwMGlOOTJoalg5Vi9WNjZzblJ3VHNKL3A0V1JwTFNkQWo0MjcyaGlNMTlxSWc5enIKaDkyZTJyUXk3RS9VU2hXNGdwT3JoZzJmNmZjQ0JtK2FYSWdhK3F4YVNMY2hjRFV2UFhycEl4VGQvT1dRMjNRaAp2SUV6a0diUGxCQThKN053OUtDeWF4YllNQkZiMWkwbEJqd0tMam1jb2loaUk3UFZ0aEFPdS9CNzFEMmhLY0ZqCktwZnY0RDFVYW0vMFZ1bUt3aHd1aFpWTmpMcTFCUjFGS1JKMUNpb0xHNHdDVHIwTFZndHZ2VXloRnJTKzNQZFUKUjBUNUhsQVFXUE15UURIZ0NwYk9IVzB3YzBoYnVOZU8vbFM4MkxqaWVHTkZ4S21NQkZGOWxzTjJ6c0E2UXczMgpYa2IyL0VGbHRYQ3RwdU93Vnp0ZGs0TURybmFEWHk5ek1adXFGSHB2NWxXVGJEVndEZHlFUU5jbFlsYkFFYkRlCnZFUW8vckFPWkZsOTRNdTYzckFnTGlQZVpONElkUy80OG9yNUthUWFDT2UwRHVBYjRHV05JUTQyY1lRNVRzRUgKV3QrRklPQU1TcGY5aE5QakRldTF1ZmY0MERPdHNpeUdlWDlOVmlxS3R0dGFIcHZkN3JiMnpzYXNiY0FHVWwrZgpOUUpqNHFJbVBTQjlUaHFacVBUdWtFY00vTnRiZVFJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUFpCmdVM015OGtZWW5pRHVLRVhTSm1iVkIrSzF1cEh4V0RBOFI2S01aR1hmYmU1QlJkOHM0MGNZNkpCWUw1MlRncWQKbDh6NUVrOGRDNE5OcGZwY1pjL3RlVDFXcWlPMnducEdIamdNRHVETDFteENaTkw0MjJqSHBpUFdrV3AzQXVESQpjN3RMMVFqYmZBVUhBUVl3bUhrV2dQUCtUMndBdjBwT3QzNkdnTUNNCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/RSA/PEM/8192b-rsa-example-cert.pem</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYyakNDQlVNQ0FnMytNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT1RJM01EWXdOelE1V2hjTk1UY3dPVEkyTURZd056UTVXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3Z2dRaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJRUR3QXdnZ1FLQW9JRUFRQ3JtVndUQWJ5dFIrVWoKVm92cWlZQm9YbEhVTVdRSXlXVVZwRGNkVENYQUpaZzAzSXJFWFViWjc0L2RqcElWYktuU3dWK1lOeSs1NXM1ago4UERjcVVMdm5wdEJRd1JjZnBOcTV0Z054ZG9vUEt0MHFBSktpNStPSEFlUTJsSFBkWEdtUXNBTWxBZ2QyS042CnpZazNkMW9ZQkhGSWt0eU9oSnBtK3I4c0VJZ2ROTU1ZUklGY2svcEcxdU1DTWFPNHRTQ1p5K1NYVGIxZVh6S1cKU3R5SnVOUE5lWTZoM2UrS2hPZGZscGsxUFZ6dDYrYXlTK0xGWWJVMlVjNkZuVWQxZUk4Y3VNckdldmlVZVgyWApHMU9PUTFLd1g0M1BSdGdjS2xabjI3M3llU0M4VURFMVNhTEJmbWNjaXFqZjBBcnhoVzVXWU1aak5qNTArMFBWClMwSUZlQ1A1SEtyVnc5VHJvZnVRUis5dWZXUmxFWFJkekdvaFJVT1dscitIZ0NydXZ3cWREcWRVWG4yZ3p3REMKeXRHN2VXVytWSE0wSnBGU0ZwOW5waFFkSFgyUC9vYWtBbTA1YkRCWG1iYW9xejBTRjh2MHEvUDBPcGFIY01HMwpRSzRZZ05MUTI0RUMzYjlHWTFBRS9XN3N2eWxobi8yUlg1anRnejJoeHU1aWxSdFBMaStLamZjK1hiQWJ5S2pPCkE4aUE1eHVkN2hXSGhNYWw3U0Z0ZG92NXIvemdKVTVaZmduSXZISUVSWVlIbzh0OGZ2ZzNKZksrSG50Zm9LZmMKL1JldmF0S0E4U0FRU2kvRG1MMm9ONnFyTjQ3NGE5U2k2RkNObUJSRS9sUktOM1hiUWcrTldoay94RTlFSUE5UQpGQkpTYUxaM0ljQTFFamZKMGlGTW80UjFrSlc4aVZVMjdmZkI4M25tUVI0c0pjR0lPOSsrak5Sc0lhNjQ2UnV6CmxqUHU4VHdyM0dWVDllamFKeW0xais3ZGN3OWJwZ3BFL3FXOGEyaStmM2IzbThRMGM0a01VSldSd256WDI4ZFcKb21laUlZQi85QmZRbnZnMHVicCtkWnVnZnI3a0Z3Z09YWHk0SGVvUVVDV2Q1RitVaXNMWmNGbU83NTFPNU5vZgpMWGhhOVVrMk5NeFFHQlZEaUJwTFZmYkNZRE8zQy81R1R5anFUNG9tNUprTlpVUm5JZmMxcDEyUmhKVTQwNHpNCmk2NEtWdURod1NBcy9aekhHclB3bDJmSlBZMDE4eDBaL0UvZzEzOUc4KzFNUDJSTlY3Q1c2dk5oV09pTHdJTHAKV0ZYWk9CeW41UzlQcG5SaWQ3N3JsMWVMZlZWR3BCWWJ4cDFaRGVCejAwL1doZDhtcFczYnFWMWNYMEJWL3M5dwpWeWJ2SE92YWJCa3BqNE15VFdiV0VHOVFaNkRzaHB2Zmc0QUU1am9uZ0RGZUplb3JIY2xYYmhJWEoxcEpKNit5CjZWS3VaUWxUZUR4Tkg1YkJPSFRwaW53Tm1tVUpUMHdTOS9KUkpLRzBjUVB2WnFkVkdCVjd5UERqdVQxTnE4bjYKRStJQ3JRZFNhWW9aUjRxK3VwWTNoc3lsS0l3S1lkT1J5cEw5M2dPZmhrQWp4YlFNaVc1ejJ4Y0ZxSlJSSWkzcQozdUFZMDVrWlRKbjVrM2dZM0ZXVXhyTUhvS0o0WkdHZzk5R1pmRHZDclNUWkhrRlRWRHc5S1B5T3RuendPQjE4ClEyZFlJYkxvQ3JqblE3Qis1OFpvZGtQQUJRUFdSU2hFWUdUTWpHK1JZdFYxQzJZL2lKbGM0dEpxZkxSRzA5a3MKYU5JZjdIUzlBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQWlYYnhSMFQrQzZNVDdKaC9TYkRKLzFHZAp2YnFza2lLbW1LbnpPY1gxeDB1VUhZNHpISWh4M00wbmVZUnIvL1hPaCtGZVN3TTFKcUFQenRIeTNTTVJYemZQCnh6bS9ud2JSd2RLOEMvZlB5N0grdU1WMW1LdW1lbThXU29PTU9veEZKK28ybkpneVZpd25FT3U5RWVqbEgxc2MKdUtQSW9UQ0xVQ0luUlJockk4ND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/Tests/UrlKeySetFactoryTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnRcVGVzdHM7Cgp1c2UgSHR0cFxNb2NrXENsaWVudDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXFN0YW5kYXJkQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0tTZXQ7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XEpLVUZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxLZXlNYW5hZ2VtZW50XFg1VUZhY3Rvcnk7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgVW5pdAogKiBAZ3JvdXAgVXJsS2V5U2V0RmFjdG9yeQogKi8KY2xhc3MgVXJsS2V5U2V0RmFjdG9yeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB2YXIgTWVzc2FnZUZhY3RvcnkKICAgICAqLwogICAgcHJpdmF0ZSAkbWVzc2FnZUZhY3Rvcnk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lID0gbnVsbCwgYXJyYXkgJGRhdGEgPSBbXSwgJGRhdGFOYW1lID0gJycpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkbmFtZSwgJGRhdGEsICRkYXRhTmFtZSk7CiAgICAgICAgJHRoaXMtPm1lc3NhZ2VGYWN0b3J5ID0gbmV3IE1lc3NhZ2VGYWN0b3J5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaUNhbkdldEFLZXlTZXRGcm9tQUpXS1VybCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmdldEh0dHBDbGllbnQoKS0+YWRkUmVzcG9uc2UoJHRoaXMtPm1lc3NhZ2VGYWN0b3J5LT5jcmVhdGVSZXNwb25zZSgyMDAsIG51bGwsIFtdLCAneyJrZXlzIjogW3sia3R5IjogIlJTQSIsImFsZyI6ICJSUzI1NiIsInVzZSI6ICJzaWciLCJraWQiOiAiYWNkZThkN2MxOTk3ZDgyZGNmNWQ1ZWQyODU4YWM4ZDA2MGNkM2NhOSIsIm4iOiAia2ZRUDU4RVFweEFxWlVDaUdvbGt5Q2lvOFMzaEc5SFRNZlFwQjdWVkRCNjltSzNBTjY4Wm1XZUdUSXZEbmJjc2xRMVRFaGpaOGJLSndXSEZseW9KT3hlR2FFc24wRzN4QW1QZVVXOFdqUzJ0TFRLeDhEVVlPQWd0bzlWT1dpcDVkbmdaVk1yQ0w4NWZQay1qaUtFTDNPRHN5ZGRaaU9PaEJFamFwY29fUlREUFZ1clZyZURuRzZtYlNjQ3NsSGRhNVQ2S3VkeUZPUUxENzdCdWxJRU5scEU1THhoM0tGR3JHZ3VfUmlWT2YtWHRIRERFeGlXT3NhVWhPU1pGa2VjcUY1NnVwUk9CUVJJdU5xSHY5OGljYlZLUnpZY0R0ZVJja0pHZmsxMmZhYVFoWDI0UUNEc0lyVDhOSGJiQjllS1g3cmNuRE1wOEd4U0FyY3Q3S3lPeHl3IiwiZSI6ICJBUUFCIn0seyJrdHkiOiAiUlNBIiwiYWxnIjogIlJTMjU2IiwidXNlIjogInNpZyIsImtpZCI6ICJjZTc2MGRmZjQ4MWVlOWJjYTQ1Y2NhYjY0ZWFkYTMyODAyOWJjMGFhIiwibiI6ICI0N1FRMlJ1MWgzV1d4Y1RVYndRdmhEX25jRXc3YXZYdFhEbWNZXzh6eEM5RmNQd3Y2R2NBdmpvV3VGMGFmQk5LNFVvTnFXOWdHX2VxOTZGbk1VRjBpSVZrUGlvLWgzY3BPSHpBaEtOLUxIQjlVTXgzV0RDVll4ZVJqR09nS1U4b0x6N2lvcUdoeVpjLW94V2swdjY5MVlicDgzT1BoV2EwYlZBbVRnU2FBdVBweXctWkxnLU5iNGVGLS0tdmpiMU4wcHRZbHRTT1FORVozQks5akViV0tOSEFTVGNUcEZraWdjV3lMcF9zRnY3OVdfRExaRUtJYjRUeGFvR0dXQS1BTWlFckZzQW56Y1U3SWE0RVR5cDV1Y0k2bzRTaWZLekkxU0tSa1VUaW5sVm52ZWR3WGh1MjFIQnZpRWVfYS1mZzN1WWM3SlRNZ0ZORzNrUWxma3M4QVEiLCJlIjogIkFRQUIifSx7Imt0eSI6ICJSU0EiLCJhbGciOiAiUlMyNTYiLCJ1c2UiOiAic2lnIiwia2lkIjogIjNjZTRhOTdkNTAyYWYwNThlYjY2YWM4ZDczMGE1OTJhYjdjZWE3ZjEiLCJuIjogIjVKallTRXQ3bHhwSUJ0blpTQXRhNnVQWnBpQUZTd3pSaGhXZEJiUnIxUXVFTVBoQnZmV3N5MFBBckE4eHg1VThBSVdmdFRtaHNUZFh2a0xSTHJHX3ZUNGZ4alUyMksyWUJvZVRZMnYyUUl2Sk9VeWhMV09yNXdWdEc5aVd0Zzg2RnNHdjB1a0VnRXB4Mm1xSWxwejBLV2tFWndJaHRZUlR0RlFoX0c0UUZqdnlBZzcwaUZpN0J2U2l6ZlpsRURyZzUtNWtzaWEwR3lfZ21qR3ZnVExIR0JMY2lLbzVkNUF3LURCUEpxdW5uSmFjVnU2clRrQkZfUWdzT1dwTzVZOFh1S2JqRUtOelVIU3Y2VHh1bWFLN3VlVTFja3VjZHRrQUhxVVJ6RUluYmIzQnhXWW1lXzNKQ3pURE1SeTQtcEVvV1ItTnlMWndFWnh4T3RHRlFSWGhadyIsImUiOiAiQVFBQiJ9XX0nKSk7CiAgICAgICAgJGtleXNldCA9ICR0aGlzLT5nZXRKS1VGYWN0b3J5KCktPmxvYWRGcm9tVXJsKCdodHRwczovL2Zvby5iYXIva2V5cycpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLU2V0OjpjbGFzcywgJGtleXNldCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMywgJGtleXNldC0+Y291bnQoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIEludmFsaWQgY29udGVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZUpXS1VybElzVmFsaWRCdXREb2VzTm90Q29udGFpbkFLZXlTZXQoKQogICAgewogICAgICAgICR0aGlzLT5nZXRIdHRwQ2xpZW50KCktPmFkZFJlc3BvbnNlKCR0aGlzLT5tZXNzYWdlRmFjdG9yeS0+Y3JlYXRlUmVzcG9uc2UoMjAwLCBudWxsLCBbXSwgJ0hlbGxvIFdvcmxkIScpKTsKICAgICAgICAkdGhpcy0+Z2V0SktVRmFjdG9yeSgpLT5sb2FkRnJvbVVybCgnaHR0cHM6Ly9mb28uYmFyL2JhZC91cmwnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVW5hYmxlIHRvIGdldCB0aGUga2V5IHNldC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZVVybElzTm90VmFsaWRBbmRKV0tTZXRDYW5ub3RCZUxvYWRlZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmdldEh0dHBDbGllbnQoKS0+YWRkUmVzcG9uc2UoJHRoaXMtPm1lc3NhZ2VGYWN0b3J5LT5jcmVhdGVSZXNwb25zZSg0MDQsIG51bGwsIFtdLCAnTm90IGZvdW5kJykpOwogICAgICAgICR0aGlzLT5nZXRKS1VGYWN0b3J5KCktPmxvYWRGcm9tVXJsKCdodHRwczovL2Zvby5iYXIvYmFkL3VybCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlDYW5HZXRBS2V5U2V0RnJvbUFYNTA5VXJsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Z2V0SHR0cENsaWVudCgpLT5hZGRSZXNwb25zZSgkdGhpcy0+bWVzc2FnZUZhY3RvcnktPmNyZWF0ZVJlc3BvbnNlKDIwMCwgbnVsbCwgW10sICdbIk1JSUUzakNDQThhZ0F3SUJBZ0lDQXdFd0RRWUpLb1pJaHZjTkFRRUZCUUF3WXpFTE1Ba0dBMVVFQmhNQ1ZWTVxueElUQWZCZ05WQkFvVEdGUm9aU0JIYnlCRVlXUmtlU0JIY205MWNDd2dTVzVqTGpFeE1DOEdBMVVFQ3hNb1IyXG44Z1JHRmtaSGtnUTJ4aGMzTWdNaUJEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQWVGdzB3TmpFeE1cblRZd01UVTBNemRhRncweU5qRXhNVFl3TVRVME16ZGFNSUhLTVFzd0NRWURWUVFHRXdKVlV6RVFNQTRHQTFVRVxuQ0JNSFFYSnBlbTl1WVRFVE1CRUdBMVVFQnhNS1UyTnZkSFJ6WkdGc1pURWFNQmdHQTFVRUNoTVJSMjlFWVdSXG5rZVM1amIyMHNJRWx1WXk0eE16QXhCZ05WQkFzVEttaDBkSEE2THk5alpYSjBhV1pwWTJGMFpYTXVaMjlrWVdcblJrZVM1amIyMHZjbVZ3YjNOcGRHOXllVEV3TUM0R0ExVUVBeE1uUjI4Z1JHRmtaSGtnVTJWamRYSmxJRU5sY1xublJwWm1sallYUnBiMjRnUVhWMGFHOXlhWFI1TVJFd0R3WURWUVFGRXdnd056azJPVEk0TnpDQ0FTSXdEUVlKXG5Lb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNUXQxUldNbkNaTTdESTE2MSs0V1FGYXBtR0JXVHRcbndZNnZqM0QzSEtyakpNOU41NURydFBEQWpoSTZ6TUJTMnNvZkRQWlZVQko3Zm1kMExKUjRoM21VcGZqV29xVlxuVHI5dmN5T2RRbVZaV3Q3L3YrV0liWG52UUFqWXdxREwxQ0JNNm5Qd1QyN29EeXF1OVNvV2xtMnI0YXJWM2FMXG5HYnFHbXU3NVJwUlNnQXZTTWVZZGRpNUtjanUrR1p0Q3B5ejgveDRmS0w0by9LMXcvTzVlcEhCcCtZbExweW9cbjdSSmxibXIyRWtSVGNEQ1Z3NXdyV0NzOUNIUks4cjVSc0wrSDBFd25XR3UxTmNXZHJ4Y3grQXVQN3EyQk5nV1xuSkNKalBPcThsaDhCSjZxZjlaL2RGanBmTUZEbmlOb1cxZmhvMy9SYjJjUkdhZERBVy9oT1VveitFRFU4Q0F3XG5FQUFhT0NBVEl3Z2dFdU1CMEdBMVVkRGdRV0JCVDlyR0V5azJ4RjF1THVoVithdXVkMm1Xak01ekFmQmdOVkhcblNNRUdEQVdnQlRTeExEU2tkUk1FWEd6WWNzOW9mN2RxR3JVNHpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQVxuTURNR0NDc0dBUVVGQndFQkJDY3dKVEFqQmdnckJnRUZCUWN3QVlZWGFIUjBjRG92TDI5amMzQXVaMjlrWVdSXG5rZVM1amIyMHdSZ1lEVlIwZkJEOHdQVEE3b0RtZ040WTFhSFIwY0RvdkwyTmxjblJwWm1sallYUmxjeTVuYjJcblJoWkdSNUxtTnZiUzl5WlhCdmMybDBiM0o1TDJka2NtOXZkQzVqY213d1N3WURWUjBnQkVRd1FqQkFCZ1JWSFxuU0FBTURnd05nWUlLd1lCQlFVSEFnRVdLbWgwZEhBNkx5OWpaWEowYVdacFkyRjBaWE11WjI5a1lXUmtlUzVqXG5iMjB2Y21Wd2IzTnBkRzl5ZVRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RFFZSktvWklodmNOQVFFRkJRQURnZ0VcbkJBTktHd095OSthRzJaKzVtQzZJR09nUlFqaFZ5ckVwMGxWUExOOHRFU2U4SGtHc3oyWmJ3bEZhbEV6QUZQSVxuVXlJWHZKeHdxb0pLU1Eza2JUSlNNVUEyZkNFTlp2RDExN2VzeWZ4Vmdxd2NTZUlhaGE4NnlrUnZPZTVHUExMXG41Q2tLU2tCMlhJc0tkODNBU2U4VCs1bzB5R1B3TFBrOVFudDBoQ3FVN1MrOE14WkM5WTdsaHlWSkVuZnp1ejlcbnAwaVJGRVVPT2padjJrV3pSYUpCeWRUWFJFNCt1WFIyMWFJVFZTekdoNk8xbWF3R2hJZC9kUWI4dnhSTURzeFxudXhOODl0eEp4OU9qeFVVQWlLRW5nSFV1SHFEVE1CcUxkRWxyUmhqWmtBelZ2YjNkdTYvS0ZVSmhlcXdOVHJaXG5Fall4OFduTTI1c2dWak91SDBhQnNYQlRXVlUrND0iLCJNSUlFK3pDQ0JHU2dBd0lCQWdJQ0FRMHdEUVlKS29aSWh2Y05BUUVGQlFBd2dic3hKREFpQmdOVkJBY1RHMVpcbmhiR2xEWlhKMElGWmhiR2xrWVhScGIyNGdUbVYwZDI5eWF6RVhNQlVHQTFVRUNoTU9WbUZzYVVObGNuUXNJRVxubHVZeTR4TlRBekJnTlZCQXNUTEZaaGJHbERaWEowSUVOc1lYTnpJRElnVUc5c2FXTjVJRlpoYkdsa1lYUnBiXG4yNGdRWFYwYUc5eWFYUjVNU0V3SHdZRFZRUURFeGhvZEhSd09pOHZkM2QzTG5aaGJHbGpaWEowTG1OdmJTOHhcbklEQWVCZ2txaGtpRzl3MEJDUUVXRVdsdVptOUFkbUZzYVdObGNuUXVZMjl0TUI0WERUQTBNRFl5T1RFM01EWVxueU1Gb1hEVEkwTURZeU9URTNNRFl5TUZvd1l6RUxNQWtHQTFVRUJoTUNWVk14SVRBZkJnTlZCQW9UR0ZSb1pTXG5CSGJ5QkVZV1JrZVNCSGNtOTFjQ3dnU1c1akxqRXhNQzhHQTFVRUN4TW9SMjhnUkdGa1pIa2dRMnhoYzNNZ01cbmlCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVENDQVNBd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFTlxuQURDQ0FRZ0NnZ0VCQU42ZDErcFhHRW1oVyt2WFgwaUc2cjdkLytUdlp4ejBaV2l6VjNHZ1huZTc3WnRKNlhDXG5BUFZZWVl3aHYydkxNMEQ5L0FsUWlWQkRZc29IVXdIVTlTMy9IZDhNK2VLc2FBN1VnYXk5cUs3SEZpSDdFdXhcbjZ3d2RoRkoyK3FOMWozaHliWDJDMzJxUmUzSDNJMlRxWVhQMldZa3RzcWJsMmkvb2pnQzk1LzVZMFY0ZXZMT1xudFhpRXFJVExkaU9yMThTUGFBSUJRaTJYS1ZsT0FSRm1SNmpZR0IweFVHbGNtSWJZc1VmYjE4YVFyNENVV1dvXG5yaU1ZYXZ4NEE2bE5mNEREK3F0YS9LRkFwTW9aRnY2eXlPOWVjdzN1ZDcyYTlubVl2TEVIWjZJVkRkMmdXTVpcbkVld28rWWloZnVrRUhVMWpQRVg0NGRNWDQvN1Zwa0krRWRPcVhHNjhDQVFPamdnSGhNSUlCM1RBZEJnTlZIUVxuNEVGZ1FVMHNTdzBwSFVUQkZ4czJITFBhSCszYWhxMU9Nd2dkSUdBMVVkSXdTQnlqQ0J4NkdCd2FTQnZqQ0J1XG56RWtNQ0lHQTFVRUJ4TWJWbUZzYVVObGNuUWdWbUZzYVdSaGRHbHZiaUJPWlhSM2IzSnJNUmN3RlFZRFZRUUtcbkV3NVdZV3hwUTJWeWRDd2dTVzVqTGpFMU1ETUdBMVVFQ3hNc1ZtRnNhVU5sY25RZ1EyeGhjM01nTWlCUWIyeFxucFkza2dWbUZzYVdSaGRHbHZiaUJCZFhSb2IzSnBkSGt4SVRBZkJnTlZCQU1UR0doMGRIQTZMeTkzZDNjdWRtXG5Gc2FXTmxjblF1WTI5dEx6RWdNQjRHQ1NxR1NJYjNEUUVKQVJZUmFXNW1iMEIyWVd4cFkyVnlkQzVqYjIyQ0FcblFFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBekJnZ3JCZ0VGQlFjQkFRUW5NQ1V3SXdZSUt3WUJCUVVITUFHR1xuRjJoMGRIQTZMeTl2WTNOd0xtZHZaR0ZrWkhrdVkyOXRNRVFHQTFVZEh3UTlNRHN3T2FBM29EV0dNMmgwZEhBXG42THk5alpYSjBhV1pwWTJGMFpYTXVaMjlrWVdSa2VTNWpiMjB2Y21Wd2IzTnBkRzl5ZVM5eWIyOTBMbU55YkRcbkJMQmdOVkhTQUVSREJDTUVBR0JGVWRJQUF3T0RBMkJnZ3JCZ0VGQlFjQ0FSWXFhSFIwY0RvdkwyTmxjblJwWlxubWxqWVhSbGN5NW5iMlJoWkdSNUxtTnZiUzl5WlhCdmMybDBiM0o1TUE0R0ExVWREd0VCL3dRRUF3SUJCakFOXG5CZ2txaGtpRzl3MEJBUVVGQUFPQmdRQzFRUG1uSGZicS9xUWFRbHBFOXhYVWhVYUp3TDZlNCtQcnhlTllpWStcblNuMWVvY1N4STBZR3llUitzQmpVWnNFNE9XQnNVczVpQjBRUWV5QWZKZzU5NFJBb1lDNWpjZG5wbERRMXRnTVxuUUxBUnpMclVjK2NiNTNTOHdHZDlEMFZtc2ZTeE9hRklxSUk2aFI4SU5NcXpXL1JuNDUzSFdrcnVncCsrODVqXG4wOVZadz09IiwiTUlJQzV6Q0NBbEFDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUF3Z2JzeEpEQWlCZ05WQkFjVEcxWmhiR2xEWlhKXG4wSUZaaGJHbGtZWFJwYjI0Z1RtVjBkMjl5YXpFWE1CVUdBMVVFQ2hNT1ZtRnNhVU5sY25Rc0lFbHVZeTR4TlRcbkF6QmdOVkJBc1RMRlpoYkdsRFpYSjBJRU5zWVhOeklESWdVRzlzYVdONUlGWmhiR2xrWVhScGIyNGdRWFYwYVxuRzl5YVhSNU1TRXdId1lEVlFRREV4aG9kSFJ3T2k4dmQzZDNMblpoYkdsalpYSjBMbU52YlM4eElEQWVCZ2txXG5oa2lHOXcwQkNRRVdFV2x1Wm05QWRtRnNhV05sY25RdVkyOXRNQjRYRFRrNU1EWXlOakF3TVRrMU5Gb1hEVEVcbjVNRFl5TmpBd01UazFORm93Z2JzeEpEQWlCZ05WQkFjVEcxWmhiR2xEWlhKMElGWmhiR2xrWVhScGIyNGdUbVxuVjBkMjl5YXpFWE1CVUdBMVVFQ2hNT1ZtRnNhVU5sY25Rc0lFbHVZeTR4TlRBekJnTlZCQXNUTEZaaGJHbERaXG5YSjBJRU5zWVhOeklESWdVRzlzYVdONUlGWmhiR2xrWVhScGIyNGdRWFYwYUc5eWFYUjVNU0V3SHdZRFZRUURcbkV4aG9kSFJ3T2k4dmQzZDNMblpoYkdsalpYSjBMbU52YlM4eElEQWVCZ2txaGtpRzl3MEJDUUVXRVdsdVptOVxuQWRtRnNhV05sY25RdVkyOXRNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUURPT25ISzVhXG52SVdaSlYxNnZZZEE3NTd0bjJWVWRaWlVjT0JWWGM2NWcyUEZ4VFhkTXd6empzdlVHSjdTVkNDU1JyQ2w2emZcbk4xU0xVem0xTlo5V2xtcFpkUkpFeTBrVFJ4UWI3WEJoVlE3L25IazAxeEMrWURna1JvS1d6azJaL00vVlh3YlxuUDdSZlpITTA0N1FTdjRkaytOb1MvemNud2JORHUrOTdiaTVwOXdJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQlFVXG5BQTRHQkFEdC9VRzl2VUpTWlNXSTRPQjlMK0tYSVBxZUNnZllyeCtqRnp1ZzZFSUxMR0FDT1RiMm9XSCtoZVFcbkMxdSttTnIwSFpEelR1SVlFWm9ESkpLUFRFamxiVlVqUDlVTlYrbVd3RDVNbE0vTXRzcTJhelNpR001YlVNTVxuajRRc3N4c29keWFtRXdDVy9QT3VaNmxjZzVLdHo4ODVoWm8rTDd0ZEV5OFc5VmlIMFBkIl0nKSk7CiAgICAgICAgJGtleXNldCA9ICR0aGlzLT5nZXRYNVVGYWN0b3J5KCktPmxvYWRGcm9tVXJsKCdodHRwczovL2Zvby5iYXIva2V5cycpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldLU2V0OjpjbGFzcywgJGtleXNldCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMywgJGtleXNldC0+Y291bnQoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIEludmFsaWQgY29udGVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZVg1MDlVcmxJc1ZhbGlkQnV0RG9lc05vdENvbnRhaW5BS2V5U2V0KCkKICAgIHsKICAgICAgICAkdGhpcy0+Z2V0SHR0cENsaWVudCgpLT5hZGRSZXNwb25zZSgkdGhpcy0+bWVzc2FnZUZhY3RvcnktPmNyZWF0ZVJlc3BvbnNlKDIwMCwgbnVsbCwgW10sICdIZWxsbyBXb3JsZCEnKSk7CiAgICAgICAgJHRoaXMtPmdldFg1VUZhY3RvcnkoKS0+bG9hZEZyb21VcmwoJ2h0dHBzOi8vZm9vLmJhci9iYWQvdXJsJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuYWJsZSB0byBnZXQgdGhlIGtleSBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVVcmxJc05vdFZhbGlkQW5kWDUwOUNlcnRpZmljYXRlc0Nhbm5vdEJlTG9hZGVkKCkKICAgIHsKICAgICAgICAkdGhpcy0+Z2V0SHR0cENsaWVudCgpLT5hZGRSZXNwb25zZSgkdGhpcy0+bWVzc2FnZUZhY3RvcnktPmNyZWF0ZVJlc3BvbnNlKDQwNCwgbnVsbCwgW10sICdOb3QgZm91bmQnKSk7CiAgICAgICAgJHRoaXMtPmdldFg1VUZhY3RvcnkoKS0+bG9hZEZyb21VcmwoJ2h0dHBzOi8vZm9vLmJhci9iYWQvdXJsJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdmFyIEpLVUZhY3Rvcnl8bnVsbAogICAgICovCiAgICBwcml2YXRlICRqa3VGYWN0b3J5OwoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0SktVRmFjdG9yeSgpOiBKS1VGYWN0b3J5CiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5qa3VGYWN0b3J5KSB7CiAgICAgICAgICAgICR0aGlzLT5qa3VGYWN0b3J5ID0gbmV3IEpLVUZhY3RvcnkoCiAgICAgICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRIdHRwQ2xpZW50KCksCiAgICAgICAgICAgICAgICBuZXcgSHR0cE1lc3NhZ2VGYWN0b3J5KCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+amt1RmFjdG9yeTsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgWDVVRmFjdG9yeXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHg1dUZhY3Rvcnk7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRYNVVGYWN0b3J5KCk6IFg1VUZhY3RvcnkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPng1dUZhY3RvcnkpIHsKICAgICAgICAgICAgJHRoaXMtPng1dUZhY3RvcnkgPSBuZXcgWDVVRmFjdG9yeSgKICAgICAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICAgICAgJHRoaXMtPmdldEh0dHBDbGllbnQoKSwKICAgICAgICAgICAgICAgIG5ldyBIdHRwTWVzc2FnZUZhY3RvcnkoKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT54NXVGYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogQHZhciBDbGllbnR8bnVsbAogICAgICovCiAgICBwcml2YXRlICRodHRwQ2xpZW50OwoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0SHR0cENsaWVudCgpOiBDbGllbnQKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmh0dHBDbGllbnQpIHsKICAgICAgICAgICAgJHRoaXMtPmh0dHBDbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmh0dHBDbGllbnQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/UrlKeySetFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnQ7Cgp1c2UgSHR0cFxDbGllbnRcSHR0cENsaWVudDsKdXNlIEh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeTsKCmFic3RyYWN0IGNsYXNzIFVybEtleVNldEZhY3RvcnkKewogICAgLyoqCiAgICAgKiBAdmFyIEh0dHBDbGllbnQKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50OwoKICAgIC8qKgogICAgICogQHZhciBSZXF1ZXN0RmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRyZXF1ZXN0RmFjdG9yeTsKCiAgICAvKioKICAgICAqIFVybEtleVNldEZhY3RvcnkgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChIdHRwQ2xpZW50ICRjbGllbnQsIFJlcXVlc3RGYWN0b3J5ICRyZXF1ZXN0RmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xpZW50ID0gJGNsaWVudDsKICAgICAgICAkdGhpcy0+cmVxdWVzdEZhY3RvcnkgPSAkcmVxdWVzdEZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDb250ZW50KHN0cmluZyAkdXJsLCBhcnJheSAkaGVhZGVyID0gW10pOiBzdHJpbmcKICAgIHsKICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5yZXF1ZXN0RmFjdG9yeS0+Y3JlYXRlUmVxdWVzdCgnR0VUJywgJHVybCwgJGhlYWRlcik7CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPmNsaWVudC0+c2VuZFJlcXVlc3QoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgPj0gNDAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGdldCB0aGUga2V5IHNldC4nLCAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3BvbnNlLT5nZXRCb2R5KCktPmdldENvbnRlbnRzKCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-key-mgmt/X5UFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XEtleU1hbmFnZW1lbnQ7Cgp1c2UgSHR0cFxDbGllbnRcSHR0cENsaWVudDsKdXNlIEh0dHBcTWVzc2FnZVxSZXF1ZXN0RmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXEpzb25Db252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLU2V0Owp1c2UgSm9zZVxDb21wb25lbnRcS2V5TWFuYWdlbWVudFxLZXlDb252ZXJ0ZXJcS2V5Q29udmVydGVyOwoKY2xhc3MgWDVVRmFjdG9yeSBleHRlbmRzIFVybEtleVNldEZhY3RvcnkKewogICAgcHJpdmF0ZSAkanNvbkNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIFg1VUZhY3RvcnkgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChKc29uQ29udmVydGVyICRqc29uQ29udmVydGVyLCBIdHRwQ2xpZW50ICRjbGllbnQsIFJlcXVlc3RGYWN0b3J5ICRyZXF1ZXN0RmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+anNvbkNvbnZlcnRlciA9ICRqc29uQ29udmVydGVyOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGNsaWVudCwgJHJlcXVlc3RGYWN0b3J5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGZldGNoIHRoZSB1cmwgYSByZXRyaWV2ZSB0aGUga2V5IHNldC4KICAgICAqIFRocm93cyBhbiBleGNlcHRpb24gaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEZyb21Vcmwoc3RyaW5nICR1cmwsIGFycmF5ICRoZWFkZXIgPSBbXSk6IEpXS1NldAogICAgewogICAgICAgICRjb250ZW50ID0gJHRoaXMtPmdldENvbnRlbnQoJHVybCwgJGhlYWRlcik7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+anNvbkNvbnZlcnRlci0+ZGVjb2RlKCRjb250ZW50KTsKICAgICAgICBpZiAoIVxpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGNvbnRlbnQuJyk7CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRraWQgPT4gJGNlcnQpIHsKICAgICAgICAgICAgaWYgKGZhbHNlID09PSBcbWJfc3RycG9zKCRjZXJ0LCAnLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tJykpIHsKICAgICAgICAgICAgICAgICRjZXJ0ID0gJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLScuUEhQX0VPTC4kY2VydC5QSFBfRU9MLictLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkandrID0gS2V5Q29udmVydGVyOjpsb2FkS2V5RnJvbUNlcnRpZmljYXRlKCRjZXJ0KTsKICAgICAgICAgICAgaWYgKFxpc19zdHJpbmcoJGtpZCkpIHsKICAgICAgICAgICAgICAgICRqd2tbJ2tpZCddID0gJGtpZDsKICAgICAgICAgICAgICAgICRrZXlzWyRraWRdID0gSldLOjpjcmVhdGUoJGp3ayk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAka2V5c1tdID0gSldLOjpjcmVhdGUoJGp3ayk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBKV0tTZXQ6OmNyZWF0ZUZyb21LZXlzKCRrZXlzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVjZHNhIiwKICAgICJkZXNjcmlwdGlvbiI6ICJFQ0RTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyB0aGUgSldUIEZyYW1ld29yay4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJKV1MiLCAiSldUIiwgIkpXRSIsICJKV0EiLCAiSldLIiwgIkpXS1NldCIsICJKb3QiLCAiSm9zZSIsICJSRkM3NTE1IiwgIlJGQzc1MTYiLCAiUkZDNzUxNyIsICJSRkM3NTE4IiwgIlJGQzc1MTkiLCAiUkZDNzUyMCIsICJCdW5kbGUiLCAiU3ltZm9ueSJdLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSx7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAgIiIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlIjogIl4xLjMiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMHxeNy4wIgogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/ECDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcRUNLZXk7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcRUNTaWduYXR1cmU7CgphYnN0cmFjdCBjbGFzcyBFQ0RTQSBpbXBsZW1lbnRzIFNpZ25hdHVyZUFsZ29yaXRobQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIGlmICghXGRlZmluZWQoJ09QRU5TU0xfS0VZVFlQRV9FQycpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRWxsaXB0aWMgQ3VydmUga2V5IHR5cGUgbm90IHN1cHBvcnRlZCBieSB5b3VyIGVudmlyb25tZW50LicpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb3dlZEtleVR5cGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsnRUMnXTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihKV0sgJGtleSwgc3RyaW5nICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgICR0aGlzLT5jaGVja0tleSgka2V5KTsKICAgICAgICBpZiAoISRrZXktPmhhcygnZCcpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgRUMga2V5IGlzIG5vdCBwcml2YXRlJyk7CiAgICAgICAgfQoKICAgICAgICAkcGVtID0gRUNLZXk6OmNvbnZlcnRQcml2YXRlS2V5VG9QRU0oJGtleSk7CiAgICAgICAgJHJlc3VsdCA9IFxvcGVuc3NsX3NpZ24oJGlucHV0LCAkc2lnbmF0dXJlLCAkcGVtLCAkdGhpcy0+Z2V0SGFzaEFsZ29yaXRobSgpKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRyZXN1bHQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTaWduYXR1cmUgZmFpbGVkLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEVDU2lnbmF0dXJlOjpmcm9tREVSKCRzaWduYXR1cmUsICR0aGlzLT5nZXRTaWduYXR1cmVQYXJ0TGVuZ3RoKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoSldLICRrZXksIHN0cmluZyAkaW5wdXQsIHN0cmluZyAkc2lnbmF0dXJlKTogYm9vbAogICAgewogICAgICAgICR0aGlzLT5jaGVja0tleSgka2V5KTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJGRlciA9IEVDU2lnbmF0dXJlOjp0b0RFUigkc2lnbmF0dXJlLCAkdGhpcy0+Z2V0U2lnbmF0dXJlUGFydExlbmd0aCgpKTsKICAgICAgICAgICAgJHBlbSA9IEVDS2V5Ojpjb252ZXJ0UHVibGljS2V5VG9QRU0oJGtleSk7CgogICAgICAgICAgICByZXR1cm4gMSA9PT0gXG9wZW5zc2xfdmVyaWZ5KCRpbnB1dCwgJGRlciwgJHBlbSwgJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IHN0cmluZzsKCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlUGFydExlbmd0aCgpOiBpbnQ7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0tleShKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgka2V5LT5nZXQoJ2t0eScpLCAkdGhpcy0+YWxsb3dlZEtleVR5cGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdXcm9uZyBrZXkgdHlwZS4nKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoWyd4JywgJ3knLCAnY3J2J10gYXMgJGspIHsKICAgICAgICAgICAgaWYgKCEka2V5LT5oYXMoJGspKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGtleSBwYXJhbWV0ZXIgIiVzIiBpcyBtaXNzaW5nLicsICRrKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/ES256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBFUzI1NiBleHRlbmRzIEVDRFNBCnsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMjU2JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlUGFydExlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gNjQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdFUzI1Nic7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/ES384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBFUzM4NCBleHRlbmRzIEVDRFNBCnsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMzg0JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlUGFydExlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gOTY7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdFUzM4NCc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/ES512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBFUzUxMiBleHRlbmRzIEVDRFNBCnsKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhNTEyJzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlUGFydExlbmd0aCgpOiBpbnQKICAgIHsKICAgICAgICByZXR1cm4gMTMyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnRVM1MTInOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[RUNEU0EgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgRm9yIEpXVC1GcmFtZXdvcmsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBpcyBhIHN1YiByZXBvc2l0b3J5IG9mIFt0aGUgSldUIEZyYW1ld29ya10oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBwcm9qZWN0IGFuZCBpcyBSRUFEIE9OTFkuCgoqKlBsZWFzZSBkbyBub3Qgc3VibWl0IGFueSBQdWxsIFJlcXVlc3QgaGVyZS4qKgpZb3Ugc2hvdWxkIGdvIHRvIFt0aGUgbWFpbiByZXBvc2l0b3J5XShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIGluc3RlYWQuCgojIERvY3VtZW50YXRpb24KClRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBodHRwczovL3dlYi10b2tlbi5zcG9ta3ktbGFicy5jb20vCgojIFN1cHBvcnQKCkkgYnJpbmcgc29sdXRpb25zIHRvIHlvdXIgcHJvYmxlbXMgYW5kIGFuc3dlciB5b3VyIHF1ZXN0aW9ucy4KCklmIHlvdSByZWFsbHkgbG92ZSB0aGF0IHByb2plY3QgYW5kIHRoZSB3b3JrIEkgaGF2ZSBkb25lIG9yIGlmIHlvdSB3YW50IEkgcHJpb3JpdGl6ZSB5b3VyIGlzc3VlcywgdGhlbiB5b3UgY2FuIGhlbHAgbWUgb3V0IGZvciBhIGNvdXBsZSBvZiA6YmVlcnM6IG9yIG1vcmUhCgpbIVtCZWNvbWUgYSBQYXRyZW9uXShodHRwczovL2M1LnBhdHJlb24uY29tL2V4dGVybmFsL2xvZ28vYmVjb21lX2FfcGF0cm9uX2J1dHRvbi5wbmcpXShodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkpCgojIENvbnRyaWJ1dGluZwoKUmVxdWVzdHMgZm9yIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVkIGFuZCBhbGwgb3RoZXIgaWRlYXMgdG8gbWFrZSB0aGlzIGZyYW1ld29yayB1c2VmdWwgYXJlIHdlbGNvbWUuCklmIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHdyaXRpbmcgY29kZSwgeW91IGNvdWxkIHRyeSB0byBmaXggW29wZW5lZCBpc3N1ZXMgd2hlcmUgaGVscCBpcyB3YW50ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvaGVscCt3YW50ZWQpIG9yIFt0aG9zZSB0aGF0IGFyZSBlYXN5IHRvIGZpeF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9lYXN5LXBpY2spLgoKRG8gbm90IGZvcmdldCB0byBbZm9sbG93IHRoZXNlIGJlc3QgcHJhY3RpY2VzXSguZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuCgoqKklmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIHNlY3VyaXR5IGlzc3VlLCBETyBOT1Qgb3BlbiBhbiBpc3N1ZSoqLiBbWW91IE1VU1Qgc3VibWl0IHlvdXIgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXR0ZXIuaW0vU3BvbWt5LykuCgojIExpY2VuY2UKClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZSB1bmRlciBbTUlUIGxpY2VuY2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC6979Test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEFsZ29yaXRobVxFUzI1NjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVMzODQ7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEVTNTEyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEFsZ29yaXRobVxTaWduYXR1cmVBbGdvcml0aG07CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTc5I2FwcGVuZGl4LUEuMi41CiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5NzkjYXBwZW5kaXgtQS4yLjYKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjk3OSNhcHBlbmRpeC1BLjIuNwogKgogKiBOb3RlIHRoYXQgd2Ugb25seSB0ZXN0CiAqICogUC0yNTYga2V5IHdpdGggU0hBLTI1NgogKiAqIFAtMzg0IGtleSB3aXRoIFNIQS0zODQKICogKiBQLTUyMSBrZXkgd2l0aCBTSEEtNTEyCiAqCiAqIE90aGVyIGN1cnZlcyBvciBoYXNoIG1ldGhvZCBjb21iaW5haXNvbnMgYXJlIG5vdCB1c2VkIGJ5IHRoZSBKb3Qgc3BlY2lmaWNhdGlvbgogKgogKiBAZ3JvdXAgUkZDNjk3OQogKi8KY2xhc3MgRUNEU0FGcm9tUkZDNjk3OVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZQogICAgICoKICAgICAqIEBkYXRhUHJvdmlkZXIgZGF0YVdpdGhWZWN0b3JzCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhWZWN0b3JzKFNpZ25hdHVyZUFsZ29yaXRobSAkYWxnb3JpdGhtLCAkbWVzc2FnZSwgSldLICRrZXksICRzaWduYXR1cmUpCiAgICB7CiAgICAgICAgJGlzX3ZhbGlkID0gJGFsZ29yaXRobS0+dmVyaWZ5KCRrZXksICRtZXNzYWdlLCAkc2lnbmF0dXJlKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRpc192YWxpZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRhV2l0aFZlY3RvcnMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIG5ldyBFUzI1NigpLAogICAgICAgICAgICAgICAgJ3NhbXBsZScsCiAgICAgICAgICAgICAgICBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCdDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxJykpLAogICAgICAgICAgICAgICAgICAgICd4JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc2MEZFRDRCQTI1NUE5RDMxQzk2MUVCNzRDNjM1NkQ2OEMwNDlCODkyM0I2MUZBNkNFNjY5NjIyRTYwRjI5RkI2JykpLAogICAgICAgICAgICAgICAgICAgICd5JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc3OTAzRkUxMDA4QjhCQzk5QTQxQUU5RTk1NjI4QkM2NEYyRjFCMjBDMkQ3RTlGNTE3N0EzQzI5NEQ0NDYyMjk5JykpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnJXMlcycsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignRUZENDhCMkFBQ0I2QThGRDExNDBERDlDRDQ1RTgxRDY5RDJDODc3QjU2QUFGOTkxQzM0RDBFQTg0RUFGMzcxNicpLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJ0Y3Q0IxQzk0MkQ2NTdDNDFENDM2QzdBMUI2RTI5RjY1RjNFOTAwREJCOUFGRjQwNjREQzRBQjJGODQzQUNEQTgnKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbmV3IEVTMjU2KCksCiAgICAgICAgICAgICAgICAndGVzdCcsCiAgICAgICAgICAgICAgICBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCdDOUFGQTlEODQ1QkE3NTE2NkI1QzIxNTc2N0IxRDY5MzRFNTBDM0RCMzZFODlCMTI3QjhBNjIyQjEyMEY2NzIxJykpLAogICAgICAgICAgICAgICAgICAgICd4JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc2MEZFRDRCQTI1NUE5RDMxQzk2MUVCNzRDNjM1NkQ2OEMwNDlCODkyM0I2MUZBNkNFNjY5NjIyRTYwRjI5RkI2JykpLAogICAgICAgICAgICAgICAgICAgICd5JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc3OTAzRkUxMDA4QjhCQzk5QTQxQUU5RTk1NjI4QkM2NEYyRjFCMjBDMkQ3RTlGNTE3N0EzQzI5NEQ0NDYyMjk5JykpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnJXMlcycsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignRjFBQkIwMjM1MTgzNTFDRDcxRDg4MTU2N0IxRUE2NjNFRDNFRkNGNkM1MTMyQjM1NEYyOEQzQjBCN0QzODM2NycpLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJzAxOUY0MTEzNzQyQTJCMTRCRDI1OTI2QjQ5QzY0OTE1NUYyNjdFNjBEMzgxNEI0QzBDQzg0MjUwRTQ2RjAwODMnKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbmV3IEVTMzg0KCksCiAgICAgICAgICAgICAgICAnc2FtcGxlJywKICAgICAgICAgICAgICAgIEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTM4NCcsCiAgICAgICAgICAgICAgICAgICAgJ2QnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJzZCOUQzREFEMkUxQjhDMUMwNUIxOTg3NUI2NjU5RjRERTIzQzNCNjY3QkYyOTdCQTlBQTQ3NzQwNzg3MTM3RDg5NkQ1NzI0RTRDNzBBODI1Rjg3MkM5RUE2MEQyRURGNScpKSwKICAgICAgICAgICAgICAgICAgICAneCcgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignRUMzQTRFNDE1QjRFMTlBNDU2ODYxODAyOUY0MjdGQTVEQTlBOEJDNEFFOTJFMDJFMDZBQUU1Mjg2QjMwMEM2NERFRjhGMEVBOTA1NTg2NjA2NEEyNTQ1MTU0ODBCQzEzJykpLAogICAgICAgICAgICAgICAgICAgICd5JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc4MDE1RDlCNzJEN0Q1NzI0NEVBOEVGOUFDMEM2MjE4OTY3MDhBNTkzNjdGOURGQjlGNTRDQTg0QjNGMUM5REIxMjg4QjIzMUMzQUUwRDRGRTczNDRGRDI1MzMyNjQ3MjAnKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIFxzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclcyVzJywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29udmVydEhleFRvQmluKCc5NEVEQkI5MkE1RUNCOEFBRDQ3MzZFNTZDNjkxOTE2QjNGODgxNDA2NjZDRTlGQTczRDY0QzRFQTk1QUQxMzNDODFBNjQ4MTUyRTQ0QUNGOTZFMzZERDFFODBGQUJFNDYnKSwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29udmVydEhleFRvQmluKCc5OUVGNEFFQjE1RjE3OENFQTFGRTQwREIyNjAzMTM4RjEzMEU3NDBBMTk2MjQ1MjYyMDNCNjM1MUQwQTNBOTRGQTMyOUMxNDU3ODZFNjc5RTdCODJDNzFBMzg2MjhBQzgnKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbmV3IEVTMzg0KCksCiAgICAgICAgICAgICAgICAndGVzdCcsCiAgICAgICAgICAgICAgICBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICAgICAnY3J2JyA9PiAnUC0zODQnLAogICAgICAgICAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCc2QjlEM0RBRDJFMUI4QzFDMDVCMTk4NzVCNjY1OUY0REUyM0MzQjY2N0JGMjk3QkE5QUE0Nzc0MDc4NzEzN0Q4OTZENTcyNEU0QzcwQTgyNUY4NzJDOUVBNjBEMkVERjUnKSksCiAgICAgICAgICAgICAgICAgICAgJ3gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJ0VDM0E0RTQxNUI0RTE5QTQ1Njg2MTgwMjlGNDI3RkE1REE5QThCQzRBRTkyRTAyRTA2QUFFNTI4NkIzMDBDNjRERUY4RjBFQTkwNTU4NjYwNjRBMjU0NTE1NDgwQkMxMycpKSwKICAgICAgICAgICAgICAgICAgICAneScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignODAxNUQ5QjcyRDdENTcyNDRFQThFRjlBQzBDNjIxODk2NzA4QTU5MzY3RjlERkI5RjU0Q0E4NEIzRjFDOURCMTI4OEIyMzFDM0FFMEQ0RkU3MzQ0RkQyNTMzMjY0NzIwJykpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnJXMlcycsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignODIwM0I2M0QzQzg1M0U4RDc3MjI3RkIzNzdCQ0Y3QjdCNzcyRTk3ODkyQTgwRjM2QUI3NzVENTA5RDdBNUZFQjA1NDJBN0YwODEyOTk4REE4RjFERDNDQTNDRjAyM0RCJyksCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignREREMDc2MDQ0OEQ0MkQ4QTQzQUY0NUFGODM2RkNFNERFOEJFMDZCNDg1RTlCNjFCODI3QzJGMTMxNzM5MjNFMDZBNzM5RjA0MDY0OUE2NjdCRjNCODI4MjQ2QkFBNUE1JykKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIC8vIEEgemVybyBoYXMgYmVlbiBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggdmFsdWUgZnJvbSB0aGUgUkZDIChjYW5ub3QgY29udmVydCB0byBiaW5hcnkgb2Ygbm90IGFuIGV2ZW4gbGVuZ3RoKS4KICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbmV3IEVTNTEyKCksCiAgICAgICAgICAgICAgICAnc2FtcGxlJywKICAgICAgICAgICAgICAgIEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICAgICAgICAgJ2QnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJzAwRkFEMDZEQUE2MkJBM0IyNUQyRkI0MDEzM0RBNzU3MjA1REU2N0Y1QkIwMDE4RkVFOEM4NkUxQjY4QzdFNzVDQUE4OTZFQjMyRjFGNDdDNzA4NTU4MzZBNkQxNkZDQzE0NjZGNkQ4RkJFQzY3REI4OUVDMEMwOEIwRTk5NkI4MzUzOCcpKSwKICAgICAgICAgICAgICAgICAgICAneCcgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignMDE4OTQ1NTBEMDc4NTkzMkUwMEVBQTIzQjY5NEYyMTNGOEMzMTIxRjg2REM5N0EwNEU1QTcxNjdEQjRFNUJDRDM3MTEyM0Q0NkU0NURCNkI1RDUzNzBBN0YyMEZCNjMzMTU1RDM4RkZBMTZEMkJENzYxRENBQzQ3NEI5QTJGNTAyM0E0JykpLAogICAgICAgICAgICAgICAgICAgICd5JyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCcwMDQ5MzEwMUM5NjJDRDREMkZEREY3ODIyODVFNjQ1ODQxMzlDMkY5MUI0N0Y4N0ZGODIzNTRENjYzMEY3NDZBMjhBMERCMjU3NDFCNUIzNEE4MjgwMDhCMjJBQ0MyM0Y5MjRGQUFGQkQ0RDMzRjgxRUE2Njk1NkRGRUFBMkJGREZDRjUnKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIFxzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICclcyVzJywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29udmVydEhleFRvQmluKCcwMEMzMjhGQUZDQkQ3OURENzc4NTAzNzBDNDYzMjVEOTg3Q0I1MjU1NjlGQjYzQzVEM0JDNTM5NTBFNkQ0QzVGMTc0RTI1QTFFRTkwMTdCNUQ0NTA2MDZBREQxNTJCNTM0OTMxRDdENEU4NDU1Q0M5MUY5QjE1QkYwNUVDMzZFMzc3RkEnKSwKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29udmVydEhleFRvQmluKCcwMDYxN0NDRTdDRjUwNjQ4MDZDNDY3RjY3OEQzQjQwODBENkYxQ0M1MEFGMjZDQTIwOTQxNzMwODI4MUI2OEFGMjgyNjIzRUFBNjNFNUI1QzA3MjNEOEI4QzM3RkYwNzc3QjFBMjBGOENDQjFEQ0NDNDM5OTdGMUVFMEU0NERBNEE2N0EnKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgbmV3IEVTNTEyKCksCiAgICAgICAgICAgICAgICAndGVzdCcsCiAgICAgICAgICAgICAgICBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICAgICAnY3J2JyA9PiAnUC01MjEnLAogICAgICAgICAgICAgICAgICAgICdkJyA9PiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+Y29udmVydEhleFRvQmluKCcwMEZBRDA2REFBNjJCQTNCMjVEMkZCNDAxMzNEQTc1NzIwNURFNjdGNUJCMDAxOEZFRThDODZFMUI2OEM3RTc1Q0FBODk2RUIzMkYxRjQ3QzcwODU1ODM2QTZEMTZGQ0MxNDY2RjZEOEZCRUM2N0RCODlFQzBDMDhCMEU5OTZCODM1MzgnKSksCiAgICAgICAgICAgICAgICAgICAgJ3gnID0+IEJhc2U2NFVybDo6ZW5jb2RlKCR0aGlzLT5jb252ZXJ0SGV4VG9CaW4oJzAxODk0NTUwRDA3ODU5MzJFMDBFQUEyM0I2OTRGMjEzRjhDMzEyMUY4NkRDOTdBMDRFNUE3MTY3REI0RTVCQ0QzNzExMjNENDZFNDVEQjZCNUQ1MzcwQTdGMjBGQjYzMzE1NUQzOEZGQTE2RDJCRDc2MURDQUM0NzRCOUEyRjUwMjNBNCcpKSwKICAgICAgICAgICAgICAgICAgICAneScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignMDA0OTMxMDFDOTYyQ0Q0RDJGRERGNzgyMjg1RTY0NTg0MTM5QzJGOTFCNDdGODdGRjgyMzU0RDY2MzBGNzQ2QTI4QTBEQjI1NzQxQjVCMzRBODI4MDA4QjIyQUNDMjNGOTI0RkFBRkJENEQzM0Y4MUVBNjY5NTZERkVBQTJCRkRGQ0Y1JykpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAnJXMlcycsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignMDEzRTk5MDIwQUJGNUNFRTc1MjVEMTZCNjlCMjI5NjUyQUI2QkRGMkFGRkNBRUYzODc3M0I0QjdEMDg3MjVGMTBDREI5MzQ4MkZEQ0M1NEVEQ0VFOTFFQ0E0MTY2QjJBN0M2MjY1RUYwQ0UyQkQ3MDUxQjdDRUY5NDVCQUJENDdFRTZEJyksCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnZlcnRIZXhUb0JpbignMDFGQkQwMDEzQzY3NEFBNzlDQjM5ODQ5NTI3OTE2Q0UzMDFDNjZFQTdDRThCODA2ODI3ODZBRDYwRjk4RjdFNzhBMTlDQTY5RUZGNUM1NzQwMEUzQjNBMEFENjZDRTA5NzgyMTREMTNCQUY0RTlBQzYwNzUyRjdCMTU1RTJERTREQ0UzJykKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0sCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbnZlcnRIZXhUb0JpbigkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gXGhleDJiaW4oJGRhdGEpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSAFromRFC7520Test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVM1MTI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1NWZXJpZmllcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuMwogKgogKiBAZ3JvdXAgUkZDNzUyMAogKi8KY2xhc3MgRUNEU0FGcm9tUkZDNzUyMFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIFBsZWFzZSBub3RlIHRoYXQgd2UgY2Fubm90IGNyZWF0ZSB0aGUgc2lnbmF0dXJlIGFuZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBleGFtcGxlIChFQ0RTQSBzaWduYXR1cmVzIGFyZSBhbHdheXMgZGlmZmVyZW50KS4KICAgICAqIFRoaXMgdGVzdCBjYXNlIGNyZWF0ZSBhIHNpZ25hdHVyZSBhbmQgdmVyaWZpZXMgaXQuCiAgICAgKiBUaGVuIHRoZSBvdXRwdXQgZ2l2ZW4gaW4gdGhlIFJGQyBpcyB1c2VkIGFuZCB2ZXJpZmllZC4KICAgICAqIFRoaXMgd2F5LCB3ZSBjYW4gc2F5IHRoYXQgdGhlIGxpYnJhcnkgaXMgYWJsZSB0byBjcmVhdGUvdmVyaWZ5IEVDRFNBIHNpZ25hdHVyZXMgYW5kIHZlcmlmeSBzaWduYXR1cmUgZnJvbSB0ZXN0IHZlY3RvcnMuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVTNTEyKCkKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFBheWxvYWQKICAgICAgICAgKiBFQyBwdWJsaWMga2V5CiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTMuMgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjMuMQogICAgICAgICAqLwogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAkcHJpdmF0ZV9rZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdraWQnID0+ICdiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtNTIxJywKICAgICAgICAgICAgJ3gnID0+ICdBSEtaTExPc0NPeno1Y1k5N2V3TlVhakI5NTd5LUMtVTg4YzN2MTNubUdaeDZzWWxfb0pYdTlBNVJrVEtxanF2anlla1dGLTd5dER5UlhZZ0NGNWNqMEt0JywKICAgICAgICAgICAgJ3knID0+ICdBZHltbEh2T2lMeFhrRWhheVhRbk5DdkRYNGg5aHRaYUNKTjM0a2ZtQzZwVjVPaFFIaXJhVnlTc1VkYVFrQWdEUHJ3UXJKbWJuWDljd2xHZlAtSHFIWlIxJywKICAgICAgICAgICAgJ2QnID0+ICdBQWhST04ycjljcVhYMWhnLVJvSTZSMXRYNXAyclVBWWRtcEhab0MxWE5NNTZLdHNjclg2emJLaXBRckNXOUNHWkgzVDR1YnBub1RLTERZSl9mRjNfckp0JywKICAgICAgICBdKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC4zLjIKICAgICAgICAgKi8KICAgICAgICAkaGVhZGVyID0gWwogICAgICAgICAgICAnYWxnJyA9PiAnRVM1MTInLAogICAgICAgICAgICAna2lkJyA9PiAnYmlsYm8uYmFnZ2luc0Bob2JiaXRvbi5leGFtcGxlJywKICAgICAgICBdOwoKICAgICAgICAkandzQnVpbGRlciA9IG5ldyBKV1NCdWlsZGVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSwKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgRVM1MTIoKV0pCiAgICAgICAgKTsKICAgICAgICAkandzVmVyaWZpZXIgPSBuZXcgSldTVmVyaWZpZXIoCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEVTNTEyKCldKQogICAgICAgICk7CiAgICAgICAgJGNvbXBhY3RTZXJpYWxpemVyID0gbmV3IFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09ORmxhdHRlbmVkU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uR2VuZXJhbFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09OR2VuZXJhbFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRwcml2YXRlX2tleSwgJGhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRqd3MsICRwcml2YXRlX2tleSwgMCkpOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjMuMwogICAgICAgICAqLwogICAgICAgICRleHBlY3RlZF9jb21wYWN0X2pzb24gPSAnZXlKaGJHY2lPaUpGVXpVeE1pSXNJbXRwWkNJNkltSnBiR0p2TG1KaFoyZHBibk5BYUc5aVltbDBiMjR1WlhoaGJYQnNaU0o5LlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQuQUVfUl9ZWkNDaGpuNDc5MWpTUUNyZFBaQ05ZcUhYQ1RaSDAtSlpHWU5sYUFqUDJrcWFsdVVJSVVuQzlxdmJ1OVBsb243S1JUem9ORXVUNFZhMmNtTDFlSkFReTNtdFBCdV91X3NERHlZam5BTUR4WFBuN1hyVDBsdy1rdkFEODkwamw4ZTJwdVFlbnNfSUVLQnBIQUJsc2JFUFg2c0ZZOE9jR0Rxb1J1Qm9tdTl4UTInOwogICAgICAgICRleHBlY3RlZF9mbGF0dGVuZWRfanNvbiA9ICd7InBheWxvYWQiOiJTWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0IiwicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpGVXpVeE1pSXNJbXRwWkNJNkltSnBiR0p2TG1KaFoyZHBibk5BYUc5aVltbDBiMjR1WlhoaGJYQnNaU0o5Iiwic2lnbmF0dXJlIjoiQUVfUl9ZWkNDaGpuNDc5MWpTUUNyZFBaQ05ZcUhYQ1RaSDAtSlpHWU5sYUFqUDJrcWFsdVVJSVVuQzlxdmJ1OVBsb243S1JUem9ORXVUNFZhMmNtTDFlSkFReTNtdFBCdV91X3NERHlZam5BTUR4WFBuN1hyVDBsdy1rdkFEODkwamw4ZTJwdVFlbnNfSUVLQnBIQUJsc2JFUFg2c0ZZOE9jR0Rxb1J1Qm9tdTl4UTIifSc7CiAgICAgICAgJGV4cGVjdGVkX2pzb24gPSAneyJwYXlsb2FkIjoiU1hUaWdKbHpJR0VnWkdGdVoyVnliM1Z6SUdKMWMybHVaWE56TENCR2NtOWtieXdnWjI5cGJtY2diM1YwSUhsdmRYSWdaRzl2Y2k0Z1dXOTFJSE4wWlhBZ2IyNTBieUIwYUdVZ2NtOWhaQ3dnWVc1a0lHbG1JSGx2ZFNCa2IyNG5kQ0JyWldWd0lIbHZkWElnWm1WbGRDd2dkR2hsY21YaWdKbHpJRzV2SUd0dWIzZHBibWNnZDJobGNtVWdlVzkxSUcxcFoyaDBJR0psSUhOM1pYQjBJRzltWmlCMGJ5NCIsInNpZ25hdHVyZXMiOlt7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKRlV6VXhNaUlzSW10cFpDSTZJbUpwYkdKdkxtSmhaMmRwYm5OQWFHOWlZbWwwYjI0dVpYaGhiWEJzWlNKOSIsInNpZ25hdHVyZSI6IkFFX1JfWVpDQ2hqbjQ3OTFqU1FDcmRQWkNOWXFIWENUWkgwLUpaR1lObGFBalAya3FhbHVVSUlVbkM5cXZidTlQbG9uN0tSVHpvTkV1VDRWYTJjbUwxZUpBUXkzbXRQQnVfdV9zRER5WWpuQU1EeFhQbjdYclQwbHcta3ZBRDg5MGpsOGUycHVRZW5zX0lFS0JwSEFCbHNiRVBYNnNGWThPY0dEcW9SdUJvbXU5eFEyIn1dfSc7CgogICAgICAgICRsb2FkZWRfY29tcGFjdF9qc29uID0gJGNvbXBhY3RTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfY29tcGFjdF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfY29tcGFjdF9qc29uLCAkcHJpdmF0ZV9rZXksIDApKTsKCiAgICAgICAgJGxvYWRlZF9mbGF0dGVuZWRfanNvbiA9ICRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfZmxhdHRlbmVkX2pzb24sICRwcml2YXRlX2tleSwgMCkpOwoKICAgICAgICAkbG9hZGVkX2pzb24gPSAkanNvbkdlbmVyYWxTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2pzb24sICRwcml2YXRlX2tleSwgMCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-ecdsa/Tests/ECDSASignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEFsZ29yaXRobVxFUzI1NjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cRVMzODQ7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEVTNTEyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIEVDRFNBCiAqIEBncm91cCBVbml0CiAqLwpjbGFzcyBFQ0RTQVNpZ25hdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFdyb25nIGtleSB0eXBlLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnZhbGlkS2V5KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICBdKTsKCiAgICAgICAgJGVjZHNhID0gbmV3IEVTMjU2KCk7CiAgICAgICAgJGRhdGEgPSAnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLic7CgogICAgICAgICRlY2RzYS0+c2lnbigka2V5LCAkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZVMyNTZWZXJpZnkoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICd4JyA9PiAnZjgzT0ozRDJ4RjFCZzh2dWI5dExlMWdITXpWNzZlOFR1czl1UEh2UlZFVScsCiAgICAgICAgICAgICd5JyA9PiAneF9GRXpSdTltMzZITE5fdHVlNjU5TE5wWFc2cEN5U3Rpa1lqS0lXSTVhMCcsCiAgICAgICAgICAgICdkJyA9PiAnanBzUW5uR1FtTC1ZQklmZkgxMTM2Y3NwWUc2LTBpWTdYMWZDRTktRTlMSScsCiAgICAgICAgXSk7CgogICAgICAgICRlY2RzYSA9IG5ldyBFUzI1NigpOwogICAgICAgICRkYXRhID0gJ2V5SmhiR2NpT2lKRlV6STFOaUo5LmV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEnOwogICAgICAgICRzaWduYXR1cmUgPSAnRHRFaFUzbGpiRWc4TDM4VldBZlVBcU95S0FNNi1YeC1GNEdhd3hhZXBtWEZDZ2ZUakR4dzVkanhMYThJU2xTQXBtV1F4ZktUVUpxUFAzLUtnNk5VMVEnOwoKICAgICAgICAkc2lnbiA9ICRlY2RzYS0+c2lnbigka2V5LCAkZGF0YSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkZWNkc2EtPnZlcmlmeSgka2V5LCAkZGF0YSwgJHNpZ24pKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGVjZHNhLT52ZXJpZnkoJGtleSwgJGRhdGEsIEJhc2U2NFVybDo6ZGVjb2RlKCRzaWduYXR1cmUpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZVMyNTZTaWduVmVyaWZ5KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAnZCcgPT4gJ2pwc1FubkdRbUwtWUJJZmZIMTEzNmNzcFlHNi0waVk3WDFmQ0U5LUU5TEknLAogICAgICAgIF0pOwoKICAgICAgICAkZWNkc2EgPSBuZXcgRVMyNTYoKTsKCiAgICAgICAgJGRhdGEgPSAnZXlKaGJHY2lPaUpGVXpJMU5pSjkuZXlKcGMzTWlPaUpxYjJVaUxBMEtJQ0psZUhBaU9qRXpNREE0TVRrek9EQXNEUW9nSW1oMGRIQTZMeTlsZUdGdGNHeGxMbU52YlM5cGMxOXliMjkwSWpwMGNuVmxmUSc7CiAgICAgICAgJHNpZ25hdHVyZSA9ICRlY2RzYS0+c2lnbigka2V5LCAkZGF0YSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkZWNkc2EtPnZlcmlmeSgka2V5LCAkZGF0YSwgJHNpZ25hdHVyZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVGhlIEVDIGtleSBpcyBub3QgcHJpdmF0ZQogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlOb3RQcml2YXRlKCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgIF0pOwoKICAgICAgICAkZWNkc2EgPSBuZXcgRVMyNTYoKTsKCiAgICAgICAgJGRhdGEgPSAnZXlKaGJHY2lPaUpGVXpJMU5pSjkuZXlKcGMzTWlPaUpxYjJVaUxBMEtJQ0psZUhBaU9qRXpNREE0TVRrek9EQXNEUW9nSW1oMGRIQTZMeTlsZUdGdGNHeGxMbU52YlM5cGMxOXliMjkwSWpwMGNuVmxmUSc7CiAgICAgICAgJGVjZHNhLT5zaWduKCRrZXksICRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoUzM4NFNpZ25WZXJpZnkoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTM4NCcsCiAgICAgICAgICAgICdkJyA9PiAncGNTU1hyYmVaRU9hQklzN0l3cWNVOU1fT09NODFYaFp1T0hvR2dtU18yUGRFQ3djZFFjWHp2N1c4LWxZTDBjcicsCiAgICAgICAgICAgICd4JyA9PiAnNmYtWFpzZzJUdm4wRW9FYXBRLXlsTVlOdHNtOENQZjBjYjhISTJFa2ZZOUJxcHQzUU16d2xNN21Wc0ZSbWFNWicsCiAgICAgICAgICAgICd5JyA9PiAnYjhuT25Sd21wbUVudkEyVTh5ZFMtZGJuUHY3YndZbC1xMXFOZWg4V3Bqb3IzVk8tUlR0NGNlMFBuMjVvR0dXVScsCiAgICAgICAgXSk7CgogICAgICAgICRlY2RzYSA9IG5ldyBFUzM4NCgpOwoKICAgICAgICAkZGF0YSA9ICdleUpoYkdjaU9pSkZVelV4TWlKOS5VR0Y1Ykc5aFpBJzsKICAgICAgICAkc2lnbmF0dXJlID0gJGVjZHNhLT5zaWduKCRrZXksICRkYXRhKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRlY2RzYS0+dmVyaWZ5KCRrZXksICRkYXRhLCAkc2lnbmF0dXJlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFM1MTJWZXJpZnkoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICd4JyA9PiAnQWVrcEJROFNUOGE4VmNmVk9UTmwzNTN2U3JEQ0xMSlhtUGswNndUanhycmpjQnBYcDVFT25ZR19OakZaNk92TEZWMWpTZlM5dHN6NHFVeGNXY2Vxd1FHaycsCiAgICAgICAgICAgICd5JyA9PiAnQURTbVJBNDNaMURTTnhfUnZjTEk4N2NkTDA3bDZqUXl5QlhNb3hWZ19sMlRoLXgzUzFXRGhqRGx5Nzlhakw0S2tkMEFaTWFabWg5dWJtZjYzZTNreU1qMicsCiAgICAgICAgICAgICdkJyA9PiAnQVk1cGI3QTBVRmlCM1JFTFNENjRmVExPU1ZfamF6ZEY3ZkxZeXVUdzhsT2ZSaFdnNlk2clVyUEF4ZXJFemdkUmhham51MGZlckIwZDUzdk05bUUxNWoyQycsCiAgICAgICAgXSk7CgogICAgICAgICRlY2RzYSA9IG5ldyBFUzUxMigpOwogICAgICAgICRkYXRhID0gJ2V5SmhiR2NpT2lKRlV6VXhNaUo5LlVHRjViRzloWkEnOwogICAgICAgICRzaWduYXR1cmUgPSAnQWR3TWdlZXJ3dEhvaC1sMTkybDYwaHA5d0FIWkZWSmJMZkRfVXhNaTcwY3duWk9ZYVJJMWJLUFdST2MtbVpacXdxVDJTSS1LR0RLQjM0WE8wYXdfN1hkdEFHOEdhU3dGS2RDQVBaZ29YRDJZQkpaQ1BFWDN4S3BSd2NkT084S3BFSHdKanlxT2d6RE83aUt2VTh2Y253TnJteFliU1c5RVJCWHVrT1hvbEx6ZU9fSm4nOwoKICAgICAgICAkc2lnbiA9ICRlY2RzYS0+c2lnbigka2V5LCAkZGF0YSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkZWNkc2EtPnZlcmlmeSgka2V5LCAkZGF0YSwgJHNpZ24pKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGVjZHNhLT52ZXJpZnkoJGtleSwgJGRhdGEsIEJhc2U2NFVybDo6ZGVjb2RlKCRzaWduYXR1cmUpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFM1MTJTaWduVmVyaWZ5KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC01MjEnLAogICAgICAgICAgICAneCcgPT4gJ0Fla3BCUThTVDhhOFZjZlZPVE5sMzUzdlNyRENMTEpYbVBrMDZ3VGp4cnJqY0JwWHA1RU9uWUdfTmpGWjZPdkxGVjFqU2ZTOXRzejRxVXhjV2NlcXdRR2snLAogICAgICAgICAgICAneScgPT4gJ0FEU21SQTQzWjFEU054X1J2Y0xJODdjZEwwN2w2alF5eUJYTW94VmdfbDJUaC14M1MxV0RoakRseTc5YWpMNEtrZDBBWk1hWm1oOXVibWY2M2Uza3lNajInLAogICAgICAgICAgICAnZCcgPT4gJ0FZNXBiN0EwVUZpQjNSRUxTRDY0ZlRMT1NWX2phemRGN2ZMWXl1VHc4bE9mUmhXZzZZNnJVclBBeGVyRXpnZFJoYWpudTBmZXJCMGQ1M3ZNOW1FMTVqMkMnLAogICAgICAgIF0pOwoKICAgICAgICAkZWNkc2EgPSBuZXcgRVM1MTIoKTsKCiAgICAgICAgJGRhdGEgPSAnZXlKaGJHY2lPaUpGVXpVeE1pSjkuVUdGNWJHOWhaQSc7CiAgICAgICAgJHNpZ25hdHVyZSA9ICRlY2RzYS0+c2lnbigka2V5LCAkZGF0YSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkZWNkc2EtPnZlcmlmeSgka2V5LCAkZGF0YSwgJHNpZ25hdHVyZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJhZFNpZ25hdHVyZSgpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2NydicgPT4gJ1AtMjU2JywKICAgICAgICAgICAgJ3gnID0+ICdmODNPSjNEMnhGMUJnOHZ1Yjl0TGUxZ0hNelY3NmU4VHVzOXVQSHZSVkVVJywKICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICBdKTsKCiAgICAgICAgJGVjZHNhID0gbmV3IEVTMjU2KCk7CgogICAgICAgICRkYXRhID0gJ2V5SmhiR2NpT2lKRlV6STFOaUo5LmV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEnOwogICAgICAgICRzaWduYXR1cmUgPSAnRHRFaFUzbGpiRWc4TDM4VldBZlVBcU95S0FNNi1YeC1GNEdhd3hhZXBtWEZDZ2ZUakR4dzVkanhMYThJU2xTQXBtV1F4ZktUVUpxUFAzJzsKCiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkZWNkc2EtPnZlcmlmeSgka2V5LCAkZGF0YSwgQmFzZTY0VXJsOjpkZWNvZGUoJHNpZ25hdHVyZSkpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIiwKICAgICJkZXNjcmlwdGlvbiI6ICJFZERTQSBTaWduYXR1cmUgQWxnb3JpdGhtIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAia2V5d29yZHMiOiBbIkpXUyIsICJKV1QiLCAiSldFIiwgIkpXQSIsICJKV0siLCAiSldLU2V0IiwgIkpvdCIsICJKb3NlIiwgIlJGQzc1MTUiLCAiUkZDNzUxNiIsICJSRkM3NTE3IiwgIlJGQzc1MTgiLCAiUkZDNzUxOSIsICJSRkM3NTIwIiwgIkJ1bmRsZSIsICJTeW1mb255Il0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICB9LHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICAiIgogICAgICAgIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwoKZmluYWwgY2xhc3MgRWREU0EgaW1wbGVtZW50cyBTaWduYXR1cmVBbGdvcml0aG0KewogICAgcHVibGljIGZ1bmN0aW9uIGFsbG93ZWRLZXlUeXBlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbJ09LUCddOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKEpXSyAka2V5LCBzdHJpbmcgJGlucHV0KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrS2V5KCRrZXkpOwogICAgICAgIGlmICghJGtleS0+aGFzKCdkJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBrZXkgaXMgbm90IHByaXZhdGUuJyk7CiAgICAgICAgfQogICAgICAgICR4ID0gQmFzZTY0VXJsOjpkZWNvZGUoJGtleS0+Z2V0KCd4JykpOwogICAgICAgICRkID0gQmFzZTY0VXJsOjpkZWNvZGUoJGtleS0+Z2V0KCdkJykpOwogICAgICAgICRzZWNyZXQgPSAkZC4keDsKCiAgICAgICAgc3dpdGNoICgka2V5LT5nZXQoJ2NydicpKSB7CiAgICAgICAgICAgIGNhc2UgJ0VkMjU1MTknOgogICAgICAgICAgICAgICAgcmV0dXJuIFxzb2RpdW1fY3J5cHRvX3NpZ25fZGV0YWNoZWQoJGlucHV0LCAkc2VjcmV0KTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBjdXJ2ZScpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KEpXSyAka2V5LCBzdHJpbmcgJGlucHV0LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tLZXkoJGtleSk7CgogICAgICAgICRwdWJsaWMgPSBCYXNlNjRVcmw6OmRlY29kZSgka2V5LT5nZXQoJ3gnKSk7CiAgICAgICAgc3dpdGNoICgka2V5LT5nZXQoJ2NydicpKSB7CiAgICAgICAgICAgIGNhc2UgJ0VkMjU1MTknOgogICAgICAgICAgICAgICAgcmV0dXJuIFxzb2RpdW1fY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKCRzaWduYXR1cmUsICRpbnB1dCwgJHB1YmxpYyk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgY3VydmUnKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0tleShKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgka2V5LT5nZXQoJ2t0eScpLCAkdGhpcy0+YWxsb3dlZEtleVR5cGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdXcm9uZyBrZXkgdHlwZS4nKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoWyd4JywgJ2NydiddIGFzICRrKSB7CiAgICAgICAgICAgIGlmICghJGtleS0+aGFzKCRrKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBrZXkgcGFyYW1ldGVyICIlcyIgaXMgbWlzc2luZy4nLCAkaykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghXGluX2FycmF5KCRrZXktPmdldCgnY3J2JyksIFsnRWQyNTUxOSddLCB0cnVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgY3VydmUuJyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnRWREU0EnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[RWREU0EgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgRm9yIEpXVC1GcmFtZXdvcmsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBpcyBhIHN1YiByZXBvc2l0b3J5IG9mIFt0aGUgSldUIEZyYW1ld29ya10oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBwcm9qZWN0IGFuZCBpcyBSRUFEIE9OTFkuCgoqKlBsZWFzZSBkbyBub3Qgc3VibWl0IGFueSBQdWxsIFJlcXVlc3QgaGVyZS4qKgpZb3Ugc2hvdWxkIGdvIHRvIFt0aGUgbWFpbiByZXBvc2l0b3J5XShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIGluc3RlYWQuCgojIERvY3VtZW50YXRpb24KClRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBodHRwczovL3dlYi10b2tlbi5zcG9ta3ktbGFicy5jb20vCgojIFN1cHBvcnQKCkkgYnJpbmcgc29sdXRpb25zIHRvIHlvdXIgcHJvYmxlbXMgYW5kIGFuc3dlciB5b3VyIHF1ZXN0aW9ucy4KCklmIHlvdSByZWFsbHkgbG92ZSB0aGF0IHByb2plY3QgYW5kIHRoZSB3b3JrIEkgaGF2ZSBkb25lIG9yIGlmIHlvdSB3YW50IEkgcHJpb3JpdGl6ZSB5b3VyIGlzc3VlcywgdGhlbiB5b3UgY2FuIGhlbHAgbWUgb3V0IGZvciBhIGNvdXBsZSBvZiA6YmVlcnM6IG9yIG1vcmUhCgpbIVtCZWNvbWUgYSBQYXRyZW9uXShodHRwczovL2M1LnBhdHJlb24uY29tL2V4dGVybmFsL2xvZ28vYmVjb21lX2FfcGF0cm9uX2J1dHRvbi5wbmcpXShodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkpCgojIENvbnRyaWJ1dGluZwoKUmVxdWVzdHMgZm9yIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVkIGFuZCBhbGwgb3RoZXIgaWRlYXMgdG8gbWFrZSB0aGlzIGZyYW1ld29yayB1c2VmdWwgYXJlIHdlbGNvbWUuCklmIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHdyaXRpbmcgY29kZSwgeW91IGNvdWxkIHRyeSB0byBmaXggW29wZW5lZCBpc3N1ZXMgd2hlcmUgaGVscCBpcyB3YW50ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvaGVscCt3YW50ZWQpIG9yIFt0aG9zZSB0aGF0IGFyZSBlYXN5IHRvIGZpeF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9lYXN5LXBpY2spLgoKRG8gbm90IGZvcmdldCB0byBbZm9sbG93IHRoZXNlIGJlc3QgcHJhY3RpY2VzXSguZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuCgoqKklmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIHNlY3VyaXR5IGlzc3VlLCBETyBOT1Qgb3BlbiBhbiBpc3N1ZSoqLiBbWW91IE1VU1Qgc3VibWl0IHlvdXIgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXR0ZXIuaW0vU3BvbWt5LykuCgojIExpY2VuY2UKClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZSB1bmRlciBbTUlUIGxpY2VuY2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-eddsa/Tests/EdDSASignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQWxnb3JpdGhtTWFuYWdlcjsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXFN0YW5kYXJkQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEVkRFNBOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU0J1aWxkZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTVmVyaWZpZXI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgRWREU0EKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIEVkRFNBU2lnbmF0dXJlVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODAzNyNhcHBlbmRpeC1BLjUKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWREU0FWZXJpZnlBbGdvcml0aG0oKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdPS1AnLAogICAgICAgICAgICAnY3J2JyA9PiAnRWQyNTUxOScsCiAgICAgICAgICAgICdkJyA9PiAnbldHeG5lXzlXbUM2aEVyMGt1d3N4RVJKeFdsN01ta1pjRHVzQXh5dWYyQScsCiAgICAgICAgICAgICd4JyA9PiAnMTFxWUFZS3hDcmZWU183VHlXUUhPZzdoY3ZQYXBpTWxyd0lhYVBjSFVSbycsCiAgICAgICAgXSk7CgogICAgICAgICRlZGRzYSA9IG5ldyBFZERTQSgpOwogICAgICAgICRpbnB1dCA9ICdleUpoYkdjaU9pSkZaRVJUUVNKOS5SWGhoYlhCc1pTQnZaaUJGWkRJMU5URTVJSE5wWjI1cGJtYyc7CiAgICAgICAgJHNpZ25hdHVyZSA9IEJhc2U2NFVybDo6ZGVjb2RlKCdoZ3lZMGlsX01HQ2pQMEp6bG5MV0cxUFBPdDctMDlQR2N2TWczQUliUVI2ZFdiaGlqY05SNGtpNGl5bEdqZzVCaFZzUHQ5ZzdzVnZwQXJfTXVNMEtBZycpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGVkZHNhLT52ZXJpZnkoJGtleSwgJGlucHV0LCAkc2lnbmF0dXJlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MDM3I2FwcGVuZGl4LUEuNQogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlZERTQVNpZ25BbmRWZXJpZnlBbGdvcml0aG0oKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdPS1AnLAogICAgICAgICAgICAnY3J2JyA9PiAnRWQyNTUxOScsCiAgICAgICAgICAgICdkJyA9PiAnbldHeG5lXzlXbUM2aEVyMGt1d3N4RVJKeFdsN01ta1pjRHVzQXh5dWYyQScsCiAgICAgICAgICAgICd4JyA9PiAnMTFxWUFZS3hDcmZWU183VHlXUUhPZzdoY3ZQYXBpTWxyd0lhYVBjSFVSbycsCiAgICAgICAgXSk7CgogICAgICAgICRoZWFkZXIgPSBbJ2FsZycgPT4gJ0VkRFNBJ107CiAgICAgICAgJGlucHV0ID0gJ0V4YW1wbGUgb2YgRWQyNTUxOSBzaWduaW5nJzsgLy8gQ29ycmVzcG9uZHMgdG8gIlJYaGhiWEJzWlNCdlppQkZaREkxTlRFNUlITnBaMjVwYm1jIgoKICAgICAgICAkandzQnVpbGRlciA9IG5ldyBKV1NCdWlsZGVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSwKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgRWREU0EoKV0pCiAgICAgICAgKTsKICAgICAgICAkandzVmVyaWZpZXIgPSBuZXcgSldTVmVyaWZpZXIoCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEVkRFNBKCldKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCRpbnB1dCkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJGhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRqd3MsICRrZXksIDApKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWhtYWMiLAogICAgImRlc2NyaXB0aW9uIjogIkhNQUMgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsiSldTIiwgIkpXVCIsICJKV0UiLCAiSldBIiwgIkpXSyIsICJKV0tTZXQiLCAiSm90IiwgIkpvc2UiLCAiUkZDNzUxNSIsICJSRkM3NTE2IiwgIlJGQzc1MTciLCAiUkZDNzUxOCIsICJSRkM3NTE5IiwgIlJGQzc1MjAiLCAiQnVuZGxlIiwgIlN5bWZvbnkiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWNvcmUvY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiSm9zZVxcQ29tcG9uZW50XFxTaWduYXR1cmVcXEFsZ29yaXRobVxcIjogICIiCiAgICAgICAgfQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZSI6ICJeMS4zIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgIH0KICAgIH0sCiAgICAiY29uZmlnIjogewogICAgICAgICJzb3J0LXBhY2thZ2VzIjogdHJ1ZQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/HMAC.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwoKYWJzdHJhY3QgY2xhc3MgSE1BQyBpbXBsZW1lbnRzIFNpZ25hdHVyZUFsZ29yaXRobQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb3dlZEtleVR5cGVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFsnb2N0J107CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmlmeShKV0sgJGtleSwgc3RyaW5nICRpbnB1dCwgc3RyaW5nICRzaWduYXR1cmUpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIFxoYXNoX2VxdWFscygkdGhpcy0+c2lnbigka2V5LCAkaW5wdXQpLCAkc2lnbmF0dXJlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbihKV0sgJGtleSwgc3RyaW5nICRpbnB1dCk6IHN0cmluZwogICAgewogICAgICAgICR0aGlzLT5jaGVja0tleSgka2V5KTsKCiAgICAgICAgcmV0dXJuIFxoYXNoX2htYWMoJHRoaXMtPmdldEhhc2hBbGdvcml0aG0oKSwgJGlucHV0LCBCYXNlNjRVcmw6OmRlY29kZSgka2V5LT5nZXQoJ2snKSksIHRydWUpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0tleShKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgka2V5LT5nZXQoJ2t0eScpLCAkdGhpcy0+YWxsb3dlZEtleVR5cGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdXcm9uZyBrZXkgdHlwZS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEka2V5LT5oYXMoJ2snKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIGtleSBwYXJhbWV0ZXIgImsiIGlzIG1pc3NpbmcuJyk7CiAgICAgICAgfQogICAgfQoKICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRIYXNoQWxnb3JpdGhtKCk6IHN0cmluZzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/HS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBIUzI1NiBleHRlbmRzIEhNQUMKewogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEyNTYnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnSFMyNTYnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/HS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBIUzM4NCBleHRlbmRzIEhNQUMKewogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGEzODQnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnSFMzODQnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/HS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CgpmaW5hbCBjbGFzcyBIUzUxMiBleHRlbmRzIEhNQUMKewogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEhhc2hBbGdvcml0aG0oKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdzaGE1MTInOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnSFM1MTInOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SE1BQyBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyBGb3IgSldULUZyYW1ld29yawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaXMgYSBzdWIgcmVwb3NpdG9yeSBvZiBbdGhlIEpXVCBGcmFtZXdvcmtdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yaykgcHJvamVjdCBhbmQgaXMgUkVBRCBPTkxZLgoKKipQbGVhc2UgZG8gbm90IHN1Ym1pdCBhbnkgUHVsbCBSZXF1ZXN0IGhlcmUuKioKWW91IHNob3VsZCBnbyB0byBbdGhlIG1haW4gcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBpbnN0ZWFkLgoKIyBEb2N1bWVudGF0aW9uCgpUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXMgaHR0cHM6Ly93ZWItdG9rZW4uc3BvbWt5LWxhYnMuY29tLwoKIyBTdXBwb3J0CgpJIGJyaW5nIHNvbHV0aW9ucyB0byB5b3VyIHByb2JsZW1zIGFuZCBhbnN3ZXIgeW91ciBxdWVzdGlvbnMuCgpJZiB5b3UgcmVhbGx5IGxvdmUgdGhhdCBwcm9qZWN0IGFuZCB0aGUgd29yayBJIGhhdmUgZG9uZSBvciBpZiB5b3Ugd2FudCBJIHByaW9yaXRpemUgeW91ciBpc3N1ZXMsIHRoZW4geW91IGNhbiBoZWxwIG1lIG91dCBmb3IgYSBjb3VwbGUgb2YgOmJlZXJzOiBvciBtb3JlIQoKWyFbQmVjb21lIGEgUGF0cmVvbl0oaHR0cHM6Ly9jNS5wYXRyZW9uLmNvbS9leHRlcm5hbC9sb2dvL2JlY29tZV9hX3BhdHJvbl9idXR0b24ucG5nKV0oaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vRmxvcmVudE1vcnNlbGxpKQoKIyBDb250cmlidXRpbmcKClJlcXVlc3RzIGZvciBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlZCBhbmQgYWxsIG90aGVyIGlkZWFzIHRvIG1ha2UgdGhpcyBmcmFtZXdvcmsgdXNlZnVsIGFyZSB3ZWxjb21lLgpJZiB5b3UgZmVlbCBjb21mb3J0YWJsZSB3cml0aW5nIGNvZGUsIHlvdSBjb3VsZCB0cnkgdG8gZml4IFtvcGVuZWQgaXNzdWVzIHdoZXJlIGhlbHAgaXMgd2FudGVkXShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmsvbGFiZWxzL2hlbHArd2FudGVkKSBvciBbdGhvc2UgdGhhdCBhcmUgZWFzeSB0byBmaXhdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvZWFzeS1waWNrKS4KCkRvIG5vdCBmb3JnZXQgdG8gW2ZvbGxvdyB0aGVzZSBiZXN0IHByYWN0aWNlc10oLmdpdGh1Yi9DT05UUklCVVRJTkcubWQpLgoKKipJZiB5b3UgdGhpbmsgeW91IGhhdmUgZm91bmQgYSBzZWN1cml0eSBpc3N1ZSwgRE8gTk9UIG9wZW4gYW4gaXNzdWUqKi4gW1lvdSBNVVNUIHN1Ym1pdCB5b3VyIGlzc3VlIGhlcmVdKGh0dHBzOi8vZ2l0dGVyLmltL1Nwb21reS8pLgoKIyBMaWNlbmNlCgpUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2UgdW5kZXIgW01JVCBsaWNlbmNlXShMSUNFTlNFKS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/Tests/HMACFromRFC7520Test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cSFMyNTY7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1NWZXJpZmllcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuNAogKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC41CiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjYKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuNwogKgogKiBAZ3JvdXAgSE1BQwogKiBAZ3JvdXAgUkZDNzUyMAogKi8KY2xhc3MgSE1BQ0Zyb21SRkM3NTIwVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuNAogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoUzI1NigpCiAgICB7CiAgICAgICAgLyoKICAgICAgICAgKiBQYXlsb2FkCiAgICAgICAgICogU3ltbWV0cmljIEtleQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi0zLjUKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC40LjEKICAgICAgICAgKi8KICAgICAgICAkcGF5bG9hZCA9ICJJdFx4ZTJceDgwXHg5OXMgYSBkYW5nZXJvdXMgYnVzaW5lc3MsIEZyb2RvLCBnb2luZyBvdXQgeW91ciBkb29yLiBZb3Ugc3RlcCBvbnRvIHRoZSByb2FkLCBhbmQgaWYgeW91IGRvbid0IGtlZXAgeW91ciBmZWV0LCB0aGVyZVx4ZTJceDgwXHg5OXMgbm8ga25vd2luZyB3aGVyZSB5b3UgbWlnaHQgYmUgc3dlcHQgb2ZmIHRvLiI7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2snID0+ICdoSnRYSVoydVNONWtiUWZidFROV2JwZG1oa1Y4RkpHLU9uYmM2bXhDY1lnJywKICAgICAgICBdKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC40LjIKICAgICAgICAgKi8KICAgICAgICAkaGVhZGVyID0gWwogICAgICAgICAgICAnYWxnJyA9PiAnSFMyNTYnLAogICAgICAgICAgICAna2lkJyA9PiAnMDE4YzBhZTUtNGQ5Yi00NzFiLWJmZDYtZWVmMzE0YmM3MDM3JywKICAgICAgICBdOwoKICAgICAgICAkandzQnVpbGRlciA9IG5ldyBKV1NCdWlsZGVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSwKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgSFMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkandzVmVyaWZpZXIgPSBuZXcgSldTVmVyaWZpZXIoCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEhTMjU2KCldKQogICAgICAgICk7CiAgICAgICAgJGNvbXBhY3RTZXJpYWxpemVyID0gbmV3IFNlcmlhbGl6ZXJcQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09ORmxhdHRlbmVkU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uR2VuZXJhbFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09OR2VuZXJhbFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRrZXksICRoZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC40LjMKICAgICAgICAgKi8KICAgICAgICAkZXhwZWN0ZWRfY29tcGFjdF9qc29uID0gJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5LlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQuczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCc7CiAgICAgICAgJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVekkxTmlJc0ltdHBaQ0k2SWpBeE9HTXdZV1UxTFRSa09XSXRORGN4WWkxaVptUTJMV1ZsWmpNeE5HSmpOekF6TnlKOSIsInNpZ25hdHVyZSI6InMwaDZLVGh6a2ZCQkJrTHNwVzFoODRWc0paRlRzUFBxTURBN2cxTWQ3cDAifSc7CiAgICAgICAgJGV4cGVjdGVkX2pzb24gPSAneyJwYXlsb2FkIjoiU1hUaWdKbHpJR0VnWkdGdVoyVnliM1Z6SUdKMWMybHVaWE56TENCR2NtOWtieXdnWjI5cGJtY2diM1YwSUhsdmRYSWdaRzl2Y2k0Z1dXOTFJSE4wWlhBZ2IyNTBieUIwYUdVZ2NtOWhaQ3dnWVc1a0lHbG1JSGx2ZFNCa2IyNG5kQ0JyWldWd0lIbHZkWElnWm1WbGRDd2dkR2hsY21YaWdKbHpJRzV2SUd0dWIzZHBibWNnZDJobGNtVWdlVzkxSUcxcFoyaDBJR0psSUhOM1pYQjBJRzltWmlCMGJ5NCIsInNpZ25hdHVyZXMiOlt7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5Iiwic2lnbmF0dXJlIjoiczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCJ9XX0nOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZXhwZWN0ZWRfY29tcGFjdF9qc29uLCAkY29tcGFjdFNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSk7CgogICAgICAgIC8vIFdlIGRlY29kZSB0aGUganNvbiB0byBjb21wYXJlIHRoZSAyIGFycmF5cyBvdGhlcndpc2UgdGhlIHRlc3QgbWF5IGZhaWwgYXMgdGhlIG9yZGVyIG1heSBiZSBkaWZmZXJlbnQKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhcanNvbl9kZWNvZGUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uLCB0cnVlKSwgXGpzb25fZGVjb2RlKCRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApLCB0cnVlKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoXGpzb25fZGVjb2RlKCRleHBlY3RlZF9qc29uLCB0cnVlKSwgXGpzb25fZGVjb2RlKCRqc29uR2VuZXJhbFNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSwgdHJ1ZSkpOwoKICAgICAgICAkbG9hZGVkX2NvbXBhY3RfanNvbiA9ICRjb21wYWN0U2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2NvbXBhY3RfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2NvbXBhY3RfanNvbiwgJGtleSwgMCkpOwoKICAgICAgICAkbG9hZGVkX2ZsYXR0ZW5lZF9qc29uID0gJGpzb25GbGF0dGVuZWRTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfZmxhdHRlbmVkX2pzb24pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9mbGF0dGVuZWRfanNvbiwgJGtleSwgMCkpOwoKICAgICAgICAkbG9hZGVkX2pzb24gPSAkanNvbkdlbmVyYWxTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2pzb24sICRrZXksIDApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjUKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFMyNTZXaXRoRGV0YWNoZWRQYXlsb2FkKCkKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFBheWxvYWQKICAgICAgICAgKiBTeW1tZXRyaWMgS2V5CiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTMuNQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjUuMQogICAgICAgICAqLwogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNycsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnYWxnJyA9PiAnSFMyNTYnLAogICAgICAgICAgICAnaycgPT4gJ2hKdFhJWjJ1U041a2JRZmJ0VE5XYnBkbWhrVjhGSkctT25iYzZteENjWWcnLAogICAgICAgIF0pOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjUuMgogICAgICAgICAqLwogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdIUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBIUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRqd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgSFMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkY29tcGFjdFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uRmxhdHRlbmVkU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05GbGF0dGVuZWRTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGpzb25HZW5lcmFsU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05HZW5lcmFsU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgkcGF5bG9hZCwgdHJ1ZSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJGhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjUuMwogICAgICAgICAqLwogICAgICAgICRleHBlY3RlZF9jb21wYWN0X2pzb24gPSAnZXlKaGJHY2lPaUpJVXpJMU5pSXNJbXRwWkNJNklqQXhPR013WVdVMUxUUmtPV0l0TkRjeFlpMWlabVEyTFdWbFpqTXhOR0pqTnpBek55SjkuLnMwaDZLVGh6a2ZCQkJrTHNwVzFoODRWc0paRlRzUFBxTURBN2cxTWQ3cDAnOwogICAgICAgICRleHBlY3RlZF9mbGF0dGVuZWRfanNvbiA9ICd7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5Iiwic2lnbmF0dXJlIjoiczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCJ9JzsKICAgICAgICAkZXhwZWN0ZWRfanNvbiA9ICd7InNpZ25hdHVyZXMiOlt7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5Iiwic2lnbmF0dXJlIjoiczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCJ9XX0nOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZXhwZWN0ZWRfY29tcGFjdF9qc29uLCAkY29tcGFjdFNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSk7CgogICAgICAgIC8vIFdlIGRlY29kZSB0aGUganNvbiB0byBjb21wYXJlIHRoZSAyIGFycmF5cyBvdGhlcndpc2UgdGhlIHRlc3QgbWF5IGZhaWwgYXMgdGhlIG9yZGVyIG1heSBiZSBkaWZmZXJlbnQKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhcanNvbl9kZWNvZGUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uLCB0cnVlKSwgXGpzb25fZGVjb2RlKCRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApLCB0cnVlKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2RlY29kZSgkZXhwZWN0ZWRfanNvbiwgdHJ1ZSksIFxqc29uX2RlY29kZSgkanNvbkdlbmVyYWxTZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCksIHRydWUpKTsKCiAgICAgICAgJGxvYWRlZF9jb21wYWN0X2pzb24gPSAkY29tcGFjdFNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCRleHBlY3RlZF9jb21wYWN0X2pzb24pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9jb21wYWN0X2pzb24sICRrZXksIDAsICRwYXlsb2FkKSk7CgogICAgICAgICRsb2FkZWRfZmxhdHRlbmVkX2pzb24gPSAkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCRleHBlY3RlZF9mbGF0dGVuZWRfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2ZsYXR0ZW5lZF9qc29uLCAka2V5LCAwLCAkcGF5bG9hZCkpOwoKICAgICAgICAkbG9hZGVkX2pzb24gPSAkanNvbkdlbmVyYWxTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2pzb24sICRrZXksIDAsICRwYXlsb2FkKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC42CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhTMjU2V2l0aFVucHJvdGVjdGVkSGVhZGVyKCkKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFBheWxvYWQKICAgICAgICAgKiBTeW1tZXRyaWMgS2V5CiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTMuNQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjYuMQogICAgICAgICAqLwogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgJ2tpZCcgPT4gJzAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNycsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnYWxnJyA9PiAnSFMyNTYnLAogICAgICAgICAgICAnaycgPT4gJ2hKdFhJWjJ1U041a2JRZmJ0VE5XYnBkbWhrVjhGSkctT25iYzZteENjWWcnLAogICAgICAgIF0pOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjYuMgogICAgICAgICAqLwogICAgICAgICRwcm90ZWN0ZWRIZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdIUzI1NicsCiAgICAgICAgXTsKICAgICAgICAkdW5wcm90ZWN0ZWRIZWFkZXIgPSBbCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBIUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRqd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgSFMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkY29tcGFjdFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uRmxhdHRlbmVkU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05GbGF0dGVuZWRTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGpzb25HZW5lcmFsU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05HZW5lcmFsU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgkcGF5bG9hZCkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJHByb3RlY3RlZEhlYWRlciwgJHVucHJvdGVjdGVkSGVhZGVyKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgIC8qCiAgICAgICAgICogSGVhZGVyCiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuNi4zCiAgICAgICAgICovCiAgICAgICAgJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uID0gJ3sicGF5bG9hZCI6ICJTWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0IiwicHJvdGVjdGVkIjogImV5SmhiR2NpT2lKSVV6STFOaUo5IiwiaGVhZGVyIjogeyJraWQiOiAiMDE4YzBhZTUtNGQ5Yi00NzFiLWJmZDYtZWVmMzE0YmM3MDM3In0sInNpZ25hdHVyZSI6ICJiV1VTVmF4b3JuN2JFRjFkanl0QmQwa0h2NzBMeTVwdmJvbXpNV1NPcjIwIn0nOwogICAgICAgICRleHBlY3RlZF9qc29uID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJzaWduYXR1cmVzIjpbeyJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiIwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcifSwic2lnbmF0dXJlIjoiYldVU1ZheG9ybjdiRUYxZGp5dEJkMGtIdjcwTHk1cHZib216TVdTT3IyMCJ9XX0nOwoKICAgICAgICAvLyBXZSBkZWNvZGUgdGhlIGpzb24gdG8gY29tcGFyZSB0aGUgMiBhcnJheXMgb3RoZXJ3aXNlIHRoZSB0ZXN0IG1heSBmYWlsIGFzIHRoZSBvcmRlciBtYXkgYmUgZGlmZmVyZW50CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoXGpzb25fZGVjb2RlKCRleHBlY3RlZF9mbGF0dGVuZWRfanNvbiwgdHJ1ZSksIFxqc29uX2RlY29kZSgkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSwgdHJ1ZSkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2RlY29kZSgkZXhwZWN0ZWRfanNvbiwgdHJ1ZSksIFxqc29uX2RlY29kZSgkanNvbkdlbmVyYWxTZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCksIHRydWUpKTsKCiAgICAgICAgJGxvYWRlZF9mbGF0dGVuZWRfanNvbiA9ICRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfZmxhdHRlbmVkX2pzb24sICRrZXksIDApKTsKCiAgICAgICAgJGxvYWRlZF9qc29uID0gJGpzb25HZW5lcmFsU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2pzb24pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9qc29uLCAka2V5LCAwKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC43CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhTMjU2V2l0aG91dFByb3RlY3RlZEhlYWRlcigpCiAgICB7CiAgICAgICAgLyoKICAgICAgICAgKiBQYXlsb2FkCiAgICAgICAgICogU3ltbWV0cmljIEtleQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi0zLjUKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC43LjEKICAgICAgICAgKi8KICAgICAgICAkcGF5bG9hZCA9ICJJdFx4ZTJceDgwXHg5OXMgYSBkYW5nZXJvdXMgYnVzaW5lc3MsIEZyb2RvLCBnb2luZyBvdXQgeW91ciBkb29yLiBZb3Ugc3RlcCBvbnRvIHRoZSByb2FkLCBhbmQgaWYgeW91IGRvbid0IGtlZXAgeW91ciBmZWV0LCB0aGVyZVx4ZTJceDgwXHg5OXMgbm8ga25vd2luZyB3aGVyZSB5b3UgbWlnaHQgYmUgc3dlcHQgb2ZmIHRvLiI7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2snID0+ICdoSnRYSVoydVNONWtiUWZidFROV2JwZG1oa1Y4RkpHLU9uYmM2bXhDY1lnJywKICAgICAgICBdKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC43LjIKICAgICAgICAgKi8KICAgICAgICAkdW5wcm90ZWN0ZWRIZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdIUzI1NicsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBIUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRqd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgSFMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09ORmxhdHRlbmVkU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uR2VuZXJhbFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxKU09OR2VuZXJhbFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRrZXksIFtdLCAkdW5wcm90ZWN0ZWRIZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC43LjMKICAgICAgICAgKi8KICAgICAgICAkZXhwZWN0ZWRfZmxhdHRlbmVkX2pzb24gPSAneyJwYXlsb2FkIjoiU1hUaWdKbHpJR0VnWkdGdVoyVnliM1Z6SUdKMWMybHVaWE56TENCR2NtOWtieXdnWjI5cGJtY2diM1YwSUhsdmRYSWdaRzl2Y2k0Z1dXOTFJSE4wWlhBZ2IyNTBieUIwYUdVZ2NtOWhaQ3dnWVc1a0lHbG1JSGx2ZFNCa2IyNG5kQ0JyWldWd0lIbHZkWElnWm1WbGRDd2dkR2hsY21YaWdKbHpJRzV2SUd0dWIzZHBibWNnZDJobGNtVWdlVzkxSUcxcFoyaDBJR0psSUhOM1pYQjBJRzltWmlCMGJ5NCIsImhlYWRlciI6eyJhbGciOiJIUzI1NiIsImtpZCI6IjAxOGMwYWU1LTRkOWItNDcxYi1iZmQ2LWVlZjMxNGJjNzAzNyJ9LCJzaWduYXR1cmUiOiJ4dUxpZnFMR2libHB2OXpCcHVaY3pXaE5qMWdBUmFMVjNVeHZ4aEp4WnVrIn0nOwogICAgICAgICRleHBlY3RlZF9qc29uID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJzaWduYXR1cmVzIjpbeyJoZWFkZXIiOnsiYWxnIjoiSFMyNTYiLCJraWQiOiIwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcifSwic2lnbmF0dXJlIjoieHVMaWZxTEdpYmxwdjl6QnB1WmN6V2hOajFnQVJhTFYzVXh2eGhKeFp1ayJ9XX0nOwoKICAgICAgICAvLyBXZSBkZWNvZGUgdGhlIGpzb24gdG8gY29tcGFyZSB0aGUgMiBhcnJheXMgb3RoZXJ3aXNlIHRoZSB0ZXN0IG1heSBmYWlsIGFzIHRoZSBvcmRlciBtYXkgYmUgZGlmZmVyZW50CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoXGpzb25fZGVjb2RlKCRleHBlY3RlZF9mbGF0dGVuZWRfanNvbiwgdHJ1ZSksIFxqc29uX2RlY29kZSgkanNvbkZsYXR0ZW5lZFNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSwgdHJ1ZSkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2RlY29kZSgkZXhwZWN0ZWRfanNvbiwgdHJ1ZSksIFxqc29uX2RlY29kZSgkanNvbkdlbmVyYWxTZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCksIHRydWUpKTsKCiAgICAgICAgJGxvYWRlZF9mbGF0dGVuZWRfanNvbiA9ICRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfZmxhdHRlbmVkX2pzb24sICRrZXksIDApKTsKCiAgICAgICAgJGxvYWRlZF9qc29uID0gJGpzb25HZW5lcmFsU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2pzb24pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9qc29uLCAka2V5LCAwKSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-hmac/Tests/HMACSignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXEhTMjU2Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEFsZ29yaXRobVxIUzM4NDsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cSFM1MTI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCi8qKgogKiBAZ3JvdXAgSE1BQwogKiBAZ3JvdXAgVW5pdAogKi8KY2xhc3MgSE1BQ1NpZ25hdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFdyb25nIGtleSB0eXBlLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnZhbGlkS2V5KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgIF0pOwoKICAgICAgICAkaG1hYyA9IG5ldyBIUzI1NigpOwogICAgICAgICRkYXRhID0gJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nOwoKICAgICAgICAkaG1hYy0+c2lnbigka2V5LCAkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbmF0dXJlSGFzQmFkQmFkTGVuZ3RoKCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgJ2snID0+ICdmb28nLAogICAgICAgIF0pOwogICAgICAgICRobWFjID0gbmV3IEhTMjU2KCk7CiAgICAgICAgJGRhdGEgPSAnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLic7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RmFsc2UoJGhtYWMtPnZlcmlmeSgka2V5LCAkZGF0YSwgXGhleDJiaW4oJzMyNmViMzM4YzQ2NWQzNTg3ZjMzNDlkZjBiOTZiYTgxJykpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoUzI1NlNpZ25BbmRWZXJpZnkoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ2ZvbycsCiAgICAgICAgXSk7CiAgICAgICAgJGhtYWMgPSBuZXcgSFMyNTYoKTsKICAgICAgICAkZGF0YSA9ICdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJzsKCiAgICAgICAgJHNpZ25hdHVyZSA9ICRobWFjLT5zaWduKCRrZXksICRkYXRhKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoXGhleDJiaW4oJzg5Zjc1MDc1OWNiOGFkOTMxNWQ3ZWM2YmQ4ZDVkYzU4OTllMGE5N2JjMTJmOWUzNTVmMzgzNzc2ZjUzZjAyNWMnKSwgJHNpZ25hdHVyZSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRobWFjLT52ZXJpZnkoJGtleSwgJGRhdGEsICRzaWduYXR1cmUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoUzM4NFNpZ25BbmRWZXJpZnkoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ2ZvbycsCiAgICAgICAgXSk7CiAgICAgICAgJGhtYWMgPSBuZXcgSFMzODQoKTsKICAgICAgICAkZGF0YSA9ICdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJzsKCiAgICAgICAgJHNpZ25hdHVyZSA9ICRobWFjLT5zaWduKCRrZXksICRkYXRhKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoXGhleDJiaW4oJzg5ODVmMmM2ZWZlZjFjMWI5YmFmN2Q3YjBiMTdjZTZkYjY1MTg0MDQ0YmRlYWEwMTI5NmZlNmQ2MTkwMDIyNGZjNzgzZjRiYjdiN2FhZGZkZmI0ZDA2NjNiMTI4NGU2NicpLCAkc2lnbmF0dXJlKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGhtYWMtPnZlcmlmeSgka2V5LCAkZGF0YSwgJHNpZ25hdHVyZSkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhTNTEyU2lnbkFuZFZlcmlmeSgpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdrJyA9PiAnZm9vJywKICAgICAgICBdKTsKICAgICAgICAkaG1hYyA9IG5ldyBIUzUxMigpOwogICAgICAgICRkYXRhID0gJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nOwoKICAgICAgICAkc2lnbmF0dXJlID0gJGhtYWMtPnNpZ24oJGtleSwgJGRhdGEpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhcaGV4MmJpbignNmY5MWNhMDlkYzJlNjU1ZDA4OWYxMDE4ZmI0NDdmMTZjNjhkNjVmMzJmNTRlYTg0NTQyZWRiMWRiNWRmYmJkYTE0MWNiYjQxNzQxYjczODNhN2RmZjZhZjU2YmU1NjRmZDc0YTg4NTdlYWI2YTY4MDA5NGJiY2I0MWIyZjI5ZTEnKSwgJHNpZ25hdHVyZSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRobWFjLT52ZXJpZnkoJGtleSwgJGRhdGEsICRzaWduYXR1cmUpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLW5vbmUiLAogICAgImRlc2NyaXB0aW9uIjogIk5vbmUgU2lnbmF0dXJlIEFsZ29yaXRobSB0aGUgSldUIEZyYW1ld29yay4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJKV1MiLCAiSldUIiwgIkpXRSIsICJKV0EiLCAiSldLIiwgIkpXS1NldCIsICJKb3QiLCAiSm9zZSIsICJSRkM3NTE1IiwgIlJGQzc1MTYiLCAiUkZDNzUxNyIsICJSRkM3NTE4IiwgIlJGQzc1MTkiLCAiUkZDNzUyMCIsICJCdW5kbGUiLCAiU3ltZm9ueSJdLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSx7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcQWxnb3JpdGhtXFwiOiAgIiIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlIjogIl4xLjMiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMHxeNy4wIgogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/None.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CgpmaW5hbCBjbGFzcyBOb25lIGltcGxlbWVudHMgU2lnbmF0dXJlQWxnb3JpdGhtCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBhbGxvd2VkS2V5VHlwZXMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gWydub25lJ107CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNpZ24oSldLICRrZXksIHN0cmluZyAkaW5wdXQpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tLZXkoJGtleSk7CgogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KEpXSyAka2V5LCBzdHJpbmcgJGlucHV0LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJycgPT09ICRzaWduYXR1cmU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0tleShKV0sgJGtleSkKICAgIHsKICAgICAgICBpZiAoIVxpbl9hcnJheSgka2V5LT5nZXQoJ2t0eScpLCAkdGhpcy0+YWxsb3dlZEtleVR5cGVzKCksIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdXcm9uZyBrZXkgdHlwZS4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdub25lJzsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Tm9uZSBTaWduYXR1cmUgQWxnb3JpdGhtIEZvciBKV1QtRnJhbWV3b3JrCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZXBvc2l0b3J5IGlzIGEgc3ViIHJlcG9zaXRvcnkgb2YgW3RoZSBKV1QgRnJhbWV3b3JrXShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIHByb2plY3QgYW5kIGlzIFJFQUQgT05MWS4KCioqUGxlYXNlIGRvIG5vdCBzdWJtaXQgYW55IFB1bGwgUmVxdWVzdCBoZXJlLioqCllvdSBzaG91bGQgZ28gdG8gW3RoZSBtYWluIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yaykgaW5zdGVhZC4KCiMgRG9jdW1lbnRhdGlvbgoKVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGFzIGh0dHBzOi8vd2ViLXRva2VuLnNwb21reS1sYWJzLmNvbS8KCiMgU3VwcG9ydAoKSSBicmluZyBzb2x1dGlvbnMgdG8geW91ciBwcm9ibGVtcyBhbmQgYW5zd2VyIHlvdXIgcXVlc3Rpb25zLgoKSWYgeW91IHJlYWxseSBsb3ZlIHRoYXQgcHJvamVjdCBhbmQgdGhlIHdvcmsgSSBoYXZlIGRvbmUgb3IgaWYgeW91IHdhbnQgSSBwcmlvcml0aXplIHlvdXIgaXNzdWVzLCB0aGVuIHlvdSBjYW4gaGVscCBtZSBvdXQgZm9yIGEgY291cGxlIG9mIDpiZWVyczogb3IgbW9yZSEKClshW0JlY29tZSBhIFBhdHJlb25dKGh0dHBzOi8vYzUucGF0cmVvbi5jb20vZXh0ZXJuYWwvbG9nby9iZWNvbWVfYV9wYXRyb25fYnV0dG9uLnBuZyldKGh0dHBzOi8vd3d3LnBhdHJlb24uY29tL0Zsb3JlbnRNb3JzZWxsaSkKCiMgQ29udHJpYnV0aW5nCgpSZXF1ZXN0cyBmb3IgbmV3IGZlYXR1cmVzLCBidWcgZml4ZWQgYW5kIGFsbCBvdGhlciBpZGVhcyB0byBtYWtlIHRoaXMgZnJhbWV3b3JrIHVzZWZ1bCBhcmUgd2VsY29tZS4KSWYgeW91IGZlZWwgY29tZm9ydGFibGUgd3JpdGluZyBjb2RlLCB5b3UgY291bGQgdHJ5IHRvIGZpeCBbb3BlbmVkIGlzc3VlcyB3aGVyZSBoZWxwIGlzIHdhbnRlZF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9oZWxwK3dhbnRlZCkgb3IgW3Rob3NlIHRoYXQgYXJlIGVhc3kgdG8gZml4XShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmsvbGFiZWxzL2Vhc3ktcGljaykuCgpEbyBub3QgZm9yZ2V0IHRvIFtmb2xsb3cgdGhlc2UgYmVzdCBwcmFjdGljZXNdKC5naXRodWIvQ09OVFJJQlVUSU5HLm1kKS4KCioqSWYgeW91IHRoaW5rIHlvdSBoYXZlIGZvdW5kIGEgc2VjdXJpdHkgaXNzdWUsIERPIE5PVCBvcGVuIGFuIGlzc3VlKiouIFtZb3UgTVVTVCBzdWJtaXQgeW91ciBpc3N1ZSBoZXJlXShodHRwczovL2dpdHRlci5pbS9TcG9ta3kvKS4KCiMgTGljZW5jZQoKVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlIHVuZGVyIFtNSVQgbGljZW5jZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-none/Tests/NoneSignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cTm9uZTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyXENvbXBhY3RTZXJpYWxpemVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQGdyb3VwIE5vbmUKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIE5vbmVTaWduYXR1cmVUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9uZVNpZ25BbmRWZXJpZnlBbGdvcml0aG0oKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdub25lJywKICAgICAgICBdKTsKCiAgICAgICAgJG5vbmUgPSBuZXcgTm9uZSgpOwogICAgICAgICRkYXRhID0gJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nOwoKICAgICAgICAkc2lnbmF0dXJlID0gJG5vbmUtPnNpZ24oJGtleSwgJGRhdGEpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkc2lnbmF0dXJlLCAnJyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRub25lLT52ZXJpZnkoJGtleSwgJGRhdGEsICRzaWduYXR1cmUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFdyb25nIGtleSB0eXBlLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnZhbGlkS2V5KCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgIF0pOwoKICAgICAgICAkbm9uZSA9IG5ldyBOb25lKCk7CiAgICAgICAgJGRhdGEgPSAnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLic7CgogICAgICAgICRub25lLT5zaWduKCRrZXksICRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub25lU2lnbkFuZFZlcmlmeUNvbXBsZXRlKCkKICAgIHsKICAgICAgICAkandrID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnbm9uZScsCiAgICAgICAgXSk7CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBOb25lKCldKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkandrLCBbJ2FsZycgPT4gJ25vbmUnXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSk7CgogICAgICAgICRjb21wYWN0ID0gJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoXGlzX3N0cmluZygkY29tcGFjdCkpOwoKICAgICAgICAkcmVzdWx0ID0gJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCRjb21wYWN0KTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsICRyZXN1bHQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkcmVzdWx0LT5nZXRTaWduYXR1cmUoMCktPmhhc1Byb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdub25lJywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLXJzYSIsCiAgICAiZGVzY3JpcHRpb24iOiAiUlNBIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIHRoZSBKV1QgRnJhbWV3b3JrLiIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAia2V5d29yZHMiOiBbIkpXUyIsICJKV1QiLCAiSldFIiwgIkpXQSIsICJKV0siLCAiSldLU2V0IiwgIkpvdCIsICJKb3NlIiwgIlJGQzc1MTUiLCAiUkZDNzUxNiIsICJSRkM3NTE3IiwgIlJGQzc1MTgiLCAiUkZDNzUxOSIsICJSRkM3NTIwIiwgIkJ1bmRsZSIsICJTeW1mb255Il0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbiIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIkZsb3JlbnQgTW9yc2VsbGkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1Nwb21reSIKICAgICAgICB9LHsKICAgICAgICAgICAgIm5hbWUiOiAiQWxsIGNvbnRyaWJ1dG9ycyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1jb3JlL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgIkpvc2VcXENvbXBvbmVudFxcU2lnbmF0dXJlXFxBbGdvcml0aG1cXCI6ICAiIgogICAgICAgIH0KICAgIH0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiOiAiXjEuMyIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMy54LWRldiIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAic29ydC1wYWNrYWdlcyI6IHRydWUKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/PS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBQUzI1NiBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMjU2JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUFNTOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnUFMyNTYnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/PS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBQUzM4NCBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMzg0JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUFNTOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnUFMzODQnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/PS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBQUzUxMiBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhNTEyJzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUFNTOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnUFM1MTInOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UlNBIEJhc2VkIFNpZ25hdHVyZSBBbGdvcml0aG1zIEZvciBKV1QtRnJhbWV3b3JrCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZXBvc2l0b3J5IGlzIGEgc3ViIHJlcG9zaXRvcnkgb2YgW3RoZSBKV1QgRnJhbWV3b3JrXShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIHByb2plY3QgYW5kIGlzIFJFQUQgT05MWS4KCioqUGxlYXNlIGRvIG5vdCBzdWJtaXQgYW55IFB1bGwgUmVxdWVzdCBoZXJlLioqCllvdSBzaG91bGQgZ28gdG8gW3RoZSBtYWluIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yaykgaW5zdGVhZC4KCiMgRG9jdW1lbnRhdGlvbgoKVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGFzIGh0dHBzOi8vd2ViLXRva2VuLnNwb21reS1sYWJzLmNvbS8KCiMgTGljZW5jZQoKVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlIHVuZGVyIFtNSVQgbGljZW5jZV0oTElDRU5TRSkuCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/RS256.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBSUzI1NiBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMjU2JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUEtDUzE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdSUzI1Nic7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/RS384.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBSUzM4NCBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhMzg0JzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUEtDUzE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdSUzM4NCc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/RS512.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgpmaW5hbCBjbGFzcyBSUzUxMiBleHRlbmRzIFJTQQp7CiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAnc2hhNTEyJzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWV0aG9kKCk6IGludAogICAgewogICAgICAgIHJldHVybiBKb3NlUlNBOjpTSUdOQVRVUkVfUEtDUzE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdSUzUxMic7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/RSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcUlNBS2V5Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFV0aWxcUlNBIGFzIEpvc2VSU0E7CgphYnN0cmFjdCBjbGFzcyBSU0EgaW1wbGVtZW50cyBTaWduYXR1cmVBbGdvcml0aG0KewogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFsZ29yaXRobSgpOiBzdHJpbmc7CgogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNpZ25hdHVyZU1ldGhvZCgpOiBpbnQ7CgogICAgcHVibGljIGZ1bmN0aW9uIGFsbG93ZWRLZXlUeXBlcygpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBbJ1JTQSddOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnkoSldLICRrZXksIHN0cmluZyAkaW5wdXQsIHN0cmluZyAkc2lnbmF0dXJlKTogYm9vbAogICAgewogICAgICAgICR0aGlzLT5jaGVja0tleSgka2V5KTsKICAgICAgICAkcHViID0gUlNBS2V5OjpjcmVhdGVGcm9tSldLKCRrZXktPnRvUHVibGljKCkpOwoKICAgICAgICByZXR1cm4gSm9zZVJTQTo6dmVyaWZ5KCRwdWIsICRpbnB1dCwgJHNpZ25hdHVyZSwgJHRoaXMtPmdldEFsZ29yaXRobSgpLCAkdGhpcy0+Z2V0U2lnbmF0dXJlTWV0aG9kKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKEpXSyAka2V5LCBzdHJpbmcgJGlucHV0KTogc3RyaW5nCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrS2V5KCRrZXkpOwogICAgICAgIGlmICghJGtleS0+aGFzKCdkJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBrZXkgaXMgbm90IGEgcHJpdmF0ZSBrZXkuJyk7CiAgICAgICAgfQoKICAgICAgICAkcHJpdiA9IFJTQUtleTo6Y3JlYXRlRnJvbUpXSygka2V5KTsKCiAgICAgICAgcmV0dXJuIEpvc2VSU0E6OnNpZ24oJHByaXYsICRpbnB1dCwgJHRoaXMtPmdldEFsZ29yaXRobSgpLCAkdGhpcy0+Z2V0U2lnbmF0dXJlTWV0aG9kKCkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tLZXkoSldLICRrZXkpCiAgICB7CiAgICAgICAgaWYgKCFcaW5fYXJyYXkoJGtleS0+Z2V0KCdrdHknKSwgJHRoaXMtPmFsbG93ZWRLZXlUeXBlcygpLCB0cnVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignV3Jvbmcga2V5IHR5cGUuJyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKFsnbicsICdlJ10gYXMgJGspIHsKICAgICAgICAgICAgaWYgKCEka2V5LT5oYXMoJGspKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGtleSBwYXJhbWV0ZXIgIiVzIiBpcyBtaXNzaW5nLicsICRrKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/Tests/RSA15SignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cUlMyNTY7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1NWZXJpZmllcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuMQogKgogKiBAZ3JvdXAgUkZDNzUyMAogKi8KY2xhc3MgUlNBMTVTaWduYXR1cmVUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gclMyNTYoKQogICAgewogICAgICAgIC8qCiAgICAgICAgICogUGF5bG9hZCwKICAgICAgICAgKiBSU0EgcHJpdmF0ZSBrZXkKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tMy40CiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuMS4xCiAgICAgICAgICovCiAgICAgICAgJHBheWxvYWQgPSAiSXRceGUyXHg4MFx4OTlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmVceGUyXHg4MFx4OTlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4iOwogICAgICAgICRwcml2YXRlS2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ2JpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnbicgPT4gJ240RVB0QU9DYzlBbGtlUUhQekhTdGdBYmdzN2JUWkx3VUJaZFI4X0t1S1BFSExkNHJIVlRlVC1PLVhWMmpSb2pkTmh4SldURHZOZDducVEwVkVpWlFIel9BSm1TQ3BNYUpNUkJTRktyS2Iyd3FWd0dVX05zWU9ZTC1RdGlXTjJsYnpjRWU2WEMwZEFwcjV5ZFFMckhxa0hIaWczUkJvcmRhWjZBai1vQkhxRkVIWXBQZTdUcGUtT2ZWZkhkMUU2Y1M2TTFGWmNEMU5OTFlENWxGSHBQSTliVHdKbHNkZTN1aEdxQzBaQ3VFSGc4bGh6d09IcnRJUWJTMEZWYmI5azMtdFZUVTRmZ18zTF92bmlVRkFLd3VDTHFLblMyQll3ZHFfbXpTbmJMWTdoX3FpeG9SN2ppZzNfX2tSaHVheHdVa1J6NWlhaVFrcWdjNWdIZHJOUDV6dycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdkJyA9PiAnYldVQzlCLUVGUklvOGtwR2ZoMFp1eUdQdk1OS3ZZV050Ql9pa2lIOWsyMGVULU8xcV9JNzhlaVprcFh4WFEwVVRFczJMc05SUy04dUpidlEtQTFpcmt3TVNNa0sxSjNYVEdnZHJoQ2t1OWdSbGRZN3NOQV9BS1pHaC1RNjYxXzQycklOTFJDZThXLW5aMzR1aV9xT2ZrTG5LOVFXRERxcGFJc0EtYk13V1dTREZ1Mk1VQll3a0hUTUV6TFlHcU9lMDRub3FlcTFoRXhCVEhCT0Jka01YaXVGaFVxMUJVNmwtRHFFaVd4cWc4MnNYdDJoLUxNblQzMDQ2QU9ZSm9SaW96NzV0U1VRZkdDc2hXVEJuUDV1RGpkMThrS2h5djA3bGhmU0pkclBkTTVQbHlsMjFoc0ZmNExfbUhDdW9GYXU3Z2RzUGZIUHh4alZPY09wQnJRendRJywKICAgICAgICAgICAgJ3AnID0+ICczU2x4Z19Ed1RYSmNiNjA5NVJvWHlnUUNBWjVSbkF2WmxubzF5aEh0blVleF9mcDdBWl85blJhTzdIWF8tU0ZmR1FldXRhbzJURGpEQVdVNFZ1cGs4cnc5SlIwQXpaME4yZnZ1SUFtcl9XQ3NtR3BlTnFRbmV2MVQ3SXlFc25oOFVNdC1uNUNhZmhraWt6aEVzcm1uZEg2THhPcnZSSmxzUHA2WnY4YlVxMGsnLAogICAgICAgICAgICAncScgPT4gJ3VLRTJkaC1jVGY2RVJGNGs0ZV9qeTc4R2ZQWVVJYVV5b1NTSnVCenAzQ3ViazNPQ3FzNmdyVDhiUl9jdTBEbTFNWndXbXRkcUR5STk1SHJVZXEzTVAxNXZNTU9OOGxIVGVadTJsbUt2d3FXN2FuVjVVemhNMWlaN3o0eU1rdVV3RldvQnZ5WTg5OEVYdlJELWhkcVJ4SGxTcUFaMTkyekIzcFZGSjBzN3BGYycsCiAgICAgICAgICAgICdkcCcgPT4gJ0I4UFZ2WGt2SnJqMkwtR1lRN3YzeTlyNkt3NWc5U2FoWEJ3c1dVenAxOVRWbGdJLVlWODVxMU5JYjFyeFF0RC1Jc1hYUjMtVGFuZXZ1UlBSdDVPQk9kaU1HUXA4cGJ0MjZnbGpZZktVX0U5eG4tUlVMSHowLWVkOUU5Z1hMS0Q0VkduZ3B6LVBmUV9xMjlwazV4V0hvSnAwMDlRZjFIdkNoaXhSWDU5ZWhpaycsCiAgICAgICAgICAgICdkcScgPT4gJ0NMRG1ER2R1aHlsYzlvN3I4NHJFVVZuN3B6UTZQRjgzWS1pQlp4NU5ULVRwbk9aS0YxcEVyQU1WZUt6RkVsNDFEbEhIcXFCTFNNMFcxc09GYndUeFlXWkRtNnNJNm9nNWlUYndRR0lDM2duSktiaV83a192SmdHSHdIeGdQYVgyUG52UC16eUVrREVSdWYtcnk0Y19aMTFDcTlBcUMyeWVMNmtkS1QxY1lGOCcsCiAgICAgICAgICAgICdxaScgPT4gJzNQaXF2WFFOMHp3TWVFLXNCdlpnaTI4OVhQOVhDUUYzVldxUHpNS25JZ1FwN19UdWdvNi1OWkJLQ1FzTWYzSGFFR0JqVFZKc19qY0s4LVRSWHZhS2UtN1pNYVFqOFZmQmRZa3NzYnUwTktERGhqSi1HdGlzZWFEVld0N2RjSDBjZnd4Z0ZVSHBRaDdGb0NyakZKNmg2WkVwTUY2eG11anM0cU1wUHo4YWFJNCcsCiAgICAgICAgXSk7CgogICAgICAgIC8qCiAgICAgICAgICogSGVhZGVyCiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuMS4yCiAgICAgICAgICovCiAgICAgICAgJGhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ1JTMjU2JywKICAgICAgICAgICAgJ2tpZCcgPT4gJ2JpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgXTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IFJTMjU2KCldKQogICAgICAgICk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gbmV3IEpXU1ZlcmlmaWVyKAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBSUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRjb21wYWN0U2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGpzb25GbGF0dGVuZWRTZXJpYWxpemVyID0gbmV3IFNlcmlhbGl6ZXJcSlNPTkZsYXR0ZW5lZFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkanNvbkdlbmVyYWxTZXJpYWxpemVyID0gbmV3IFNlcmlhbGl6ZXJcSlNPTkdlbmVyYWxTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCRwYXlsb2FkKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkcHJpdmF0ZUtleSwgJGhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjEuMwogICAgICAgICAqLwogICAgICAgICRleHBlY3RlZF9jb21wYWN0X2pzb24gPSAnZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltSnBiR0p2TG1KaFoyZHBibk5BYUc5aVltbDBiMjR1WlhoaGJYQnNaU0o5LlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQuTVJqZGtseTdfLW9UUFRTM0FYUDQxaVFJR0thODBBMFptVHVWNU1FYUhveG5XMmU1Q1o1TmxLdGFpbm9GbUtab3BkSE0xTzJVNG13ekpkUXg5OTZpdnA4M3h1Z2xJSTdQTkRpODR3bkItQkRrb0J3QTc4MTg1aFgtRXM0Skl3bURMSkszbGZXUmEtWHRMMFJubHR1WXY3NDZpWVRoX3FIUkQ2OEJOdDF1U05DclVDVEpEdDVhQUU2eDh3VzFLdDllUm80UVBvY1NhZG5IWEZ4bnQ4SXM5VXpwRVJWMGVQUFFkTHVXM0lTX2RlM3h5SXJEYUxHZGpsdVB4VUFoYjZMMmFYaWMxVTEycG9kR1UwS0xVUVNFX29JLVpubUtKM0Y0dU9aRG5kNlFaV0p1c2haNDFBeGZfZmNJZTh1OWlwSDg0b2dvcmVlN3ZqYlU1eTE4a0RxdURnJzsKICAgICAgICAkZXhwZWN0ZWRfZmxhdHRlbmVkX2pzb24gPSAneyJwYXlsb2FkIjoiU1hUaWdKbHpJR0VnWkdGdVoyVnliM1Z6SUdKMWMybHVaWE56TENCR2NtOWtieXdnWjI5cGJtY2diM1YwSUhsdmRYSWdaRzl2Y2k0Z1dXOTFJSE4wWlhBZ2IyNTBieUIwYUdVZ2NtOWhaQ3dnWVc1a0lHbG1JSGx2ZFNCa2IyNG5kQ0JyWldWd0lIbHZkWElnWm1WbGRDd2dkR2hsY21YaWdKbHpJRzV2SUd0dWIzZHBibWNnZDJobGNtVWdlVzkxSUcxcFoyaDBJR0psSUhOM1pYQjBJRzltWmlCMGJ5NCIsInByb3RlY3RlZCI6ImV5SmhiR2NpT2lKU1V6STFOaUlzSW10cFpDSTZJbUpwYkdKdkxtSmhaMmRwYm5OQWFHOWlZbWwwYjI0dVpYaGhiWEJzWlNKOSIsInNpZ25hdHVyZSI6Ik1SamRrbHk3Xy1vVFBUUzNBWFA0MWlRSUdLYTgwQTBabVR1VjVNRWFIb3huVzJlNUNaNU5sS3RhaW5vRm1LWm9wZEhNMU8yVTRtd3pKZFF4OTk2aXZwODN4dWdsSUk3UE5EaTg0d25CLUJEa29Cd0E3ODE4NWhYLUVzNEpJd21ETEpLM2xmV1JhLVh0TDBSbmx0dVl2NzQ2aVlUaF9xSFJENjhCTnQxdVNOQ3JVQ1RKRHQ1YUFFNng4d1cxS3Q5ZVJvNFFQb2NTYWRuSFhGeG50OElzOVV6cEVSVjBlUFBRZEx1VzNJU19kZTN4eUlyRGFMR2RqbHVQeFVBaGI2TDJhWGljMVUxMnBvZEdVMEtMVVFTRV9vSS1abm1LSjNGNHVPWkRuZDZRWldKdXNoWjQxQXhmX2ZjSWU4dTlpcEg4NG9nb3JlZTd2amJVNXkxOGtEcXVEZyJ9JzsKICAgICAgICAkZXhwZWN0ZWRfanNvbiA9ICd7InBheWxvYWQiOiJTWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0Iiwic2lnbmF0dXJlcyI6W3sicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltSnBiR0p2TG1KaFoyZHBibk5BYUc5aVltbDBiMjR1WlhoaGJYQnNaU0o5Iiwic2lnbmF0dXJlIjoiTVJqZGtseTdfLW9UUFRTM0FYUDQxaVFJR0thODBBMFptVHVWNU1FYUhveG5XMmU1Q1o1TmxLdGFpbm9GbUtab3BkSE0xTzJVNG13ekpkUXg5OTZpdnA4M3h1Z2xJSTdQTkRpODR3bkItQkRrb0J3QTc4MTg1aFgtRXM0Skl3bURMSkszbGZXUmEtWHRMMFJubHR1WXY3NDZpWVRoX3FIUkQ2OEJOdDF1U05DclVDVEpEdDVhQUU2eDh3VzFLdDllUm80UVBvY1NhZG5IWEZ4bnQ4SXM5VXpwRVJWMGVQUFFkTHVXM0lTX2RlM3h5SXJEYUxHZGpsdVB4VUFoYjZMMmFYaWMxVTEycG9kR1UwS0xVUVNFX29JLVpubUtKM0Y0dU9aRG5kNlFaV0p1c2haNDFBeGZfZmNJZTh1OWlwSDg0b2dvcmVlN3ZqYlU1eTE4a0RxdURnIn1dfSc7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRleHBlY3RlZF9jb21wYWN0X2pzb24sICRjb21wYWN0U2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApKTsKCiAgICAgICAgLy8gV2UgZGVjb2RlIHRoZSBqc29uIHRvIGNvbXBhcmUgdGhlIDIgYXJyYXlzIG90aGVyd2lzZSB0aGUgdGVzdCBtYXkgZmFpbCBhcyB0aGUgb3JkZXIgbWF5IGJlIGRpZmZlcmVudAogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2RlY29kZSgkZXhwZWN0ZWRfZmxhdHRlbmVkX2pzb24sIHRydWUpLCBcanNvbl9kZWNvZGUoJGpzb25GbGF0dGVuZWRTZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCksIHRydWUpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhcanNvbl9kZWNvZGUoJGV4cGVjdGVkX2pzb24sIHRydWUpLCBcanNvbl9kZWNvZGUoJGpzb25HZW5lcmFsU2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApLCB0cnVlKSk7CgogICAgICAgICRsb2FkZWRfY29tcGFjdF9qc29uID0gJGNvbXBhY3RTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfY29tcGFjdF9qc29uKTsKICAgICAgICAkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9jb21wYWN0X2pzb24sICRwcml2YXRlS2V5LCAwKTsKCiAgICAgICAgJGxvYWRlZF9mbGF0dGVuZWRfanNvbiA9ICRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uKTsKICAgICAgICAkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9mbGF0dGVuZWRfanNvbiwgJHByaXZhdGVLZXksIDApOwoKICAgICAgICAkbG9hZGVkX2pzb24gPSAkanNvbkdlbmVyYWxTZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkZXhwZWN0ZWRfanNvbik7CiAgICAgICAgJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfanNvbiwgJHByaXZhdGVLZXksIDApOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/Tests/RSAKeyWithoutAllPrimesTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU0J1aWxkZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTVmVyaWZpZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcjsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBSU0EyCiAqIEBncm91cCBVbml0CiAqLwpjbGFzcyBSU0FLZXlXaXRob3V0QWxsUHJpbWVzVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBkYXRhU2lnbmF0dXJlQWxnb3JpdGhtcwogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduYXR1cmVBbGdvcml0aG1zKHN0cmluZyAkc2lnbmF0dXJlX2FsZ29yaXRobSkKICAgIHsKICAgICAgICAkYWxnb3JpdGhtID0gbmV3ICRzaWduYXR1cmVfYWxnb3JpdGhtKCk7CiAgICAgICAgJGtleSA9ICR0aGlzLT5nZXRQcml2YXRlS2V5KCk7CgogICAgICAgICRjbGFpbXMgPSBcanNvbl9lbmNvZGUoWydmb28nID0+ICdiYXInXSk7CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoWyRhbGdvcml0aG1dKQogICAgICAgICk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gbmV3IEpXU1ZlcmlmaWVyKAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoWyRhbGdvcml0aG1dKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJGNsYWltcykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgWydhbGcnID0+ICRhbGdvcml0aG0tPm5hbWUoKV0pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkandzID0gJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKTsKCiAgICAgICAgJGxvYWRlZCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkandzKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGxvYWRlZCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZCwgJGtleSwgMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0YVNpZ25hdHVyZUFsZ29yaXRobXMoKQogICAgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIFtBbGdvcml0aG1cUlMyNTY6OmNsYXNzXSwKICAgICAgICAgICAgW0FsZ29yaXRobVxSUzM4NDo6Y2xhc3NdLAogICAgICAgICAgICBbQWxnb3JpdGhtXFJTNTEyOjpjbGFzc10sCiAgICAgICAgICAgIFtBbGdvcml0aG1cUFMyNTY6OmNsYXNzXSwKICAgICAgICAgICAgW0FsZ29yaXRobVxQUzM4NDo6Y2xhc3NdLAogICAgICAgICAgICBbQWxnb3JpdGhtXFBTNTEyOjpjbGFzc10sCiAgICAgICAgXTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRhdGFTaWduYXR1cmVBbGdvcml0aG1zV2l0aFNpbXBsZUtleSgpCiAgICB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgW0FsZ29yaXRobVxQUzI1Njo6Y2xhc3NdLAogICAgICAgICAgICBbQWxnb3JpdGhtXFBTMzg0OjpjbGFzc10sCiAgICAgICAgICAgIFtBbGdvcml0aG1cUFM1MTI6OmNsYXNzXSwKICAgICAgICBdOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0UHJpdmF0ZUtleSgpOiBKV0sKICAgIHsKICAgICAgICByZXR1cm4gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ3ByaXZhdGUnLAogICAgICAgICAgICAnbicgPT4gJzJOUlBPUkhYZDd3UFU2YXRIcW1TZldnRVB2c1A4SFZVa1kyQXdRUUFjOHgxSjUwOVg1SEZ4ZVNYblF5bTllQW5aSGwwSkNQYnZIb1BINFFIbHZJVFlvaDBNU2dGbTJhT1B5cU9ELVhjTmRLV3RuTlgySkl1clVDeVZsd1N3dGxteTJaYkN6OFl1VW1GTzBpYWNhaGZLMXdiV1Q1UW9ZLXBVM1V4bk16RGhsQnNsWk41dUw3blJFOFNoXzhCdGhzck1kWWVHSU1ZNTVraC1QN3hUczNNSHpwT0toRlNyT2hkTjZhTzNIV1lVdU1BZG9NTkItaEp2Y2tiMlBiQ3kwX0sxV20zU0JIdFhuLWN1TUlVRjAwVzlBUjNhbXAzdTNoTGEycmN6MjlqRUZYVHIyRnhLeUxINFNkbG5GRk1KbDJ2YVh1eE00UFhnTE4zM0tqMzRQZktnYzhsakRKN29hU0k5Ykt0N2d1blhPTHZfbzRYV1lEcTkxY3ZVa09JREFzdnF4enpIUFpCdDBIcnU3cm9XM2J0a1VPaXFSNlJXeS1DdzI3MnlpU0VDNVFBOTNtX3ZrbEQxS2Fqb0ZlV04wQlcybFdHbGZHaWVabGR2S1gwc3VtazFUWnVMaGxIUEhTS1ljcGVDZmFoVC1qTHIxeUFlSHFsNnFSTl9hMEJpSHUtU1NTanRzNklubUYxcEFFTHpuWjNKbjktUVhYNzhMc1kzeGFxT2xZcUhiQ29oeFhvcmxZUmk0c282ZU1HSUx0WGpxSE9vSVNiMTNFejRZTk9RbVY0eWdteUFCUmtFMEFRRzVLTHk1Y1pCN0xabjd6cXc4NjlValh4V3JtaU9hQmVEcU9reHd3NnFpV0lFRHdQSW91Ukx3T2ZQRnRDNExHbGI5TG1HOUhsaHA4JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ2QnID0+ICdQc01sczJWQXN6M1NTZXBqRGc4VGdnMUx2VmM2dy1XU2R4YzRmNlpDNDBINVgyQWFWY0dDTjhmMVF0Wll0YThPZF96WDYyWWR3cTZxRmZ0SG54LXZFTVJpclpfaUQ1dGQ3VmJLRER3Q3ctbVRDbmpVb3JHZHBUU202bXg0V2NKSUNQUTF3a21mUkhMTmg5MTZKeEFQakNON0h4ZjBpdTlrbWUzQVVKek1zLUl2ckJRbUZaM2NuMThzQkFXQ1gwMzU4TkVEb1NEQllyaG1wd1pVbnZUZTh1TVRvUVdtb3JvWDBYWDZ3RUdodDh4UllfeUhGeFRiMDMyVS1fWmhhQ3hPal91cnU4YkVxS2ZUbTM5Q0JZU2c4ajBndThMWnFZQW1oSTlJSHhzazE2T2dSSkcyQ2tCbER2MHlZazc5OWRVRVkwb1VmczdZNEQ0U29lS2U3WldNSGdLTUVxYTdPTnoxOE9Sem54cUtTUWhpNGhmTlZnd016YU0wSW9ZUDRLT2ZIdWFLMjYzemhKVTBoTXpVUko4S2lmRUNlT3NESEJSNkJoTEo5VFl6VWU0YzlVVTU1bkZOZ1JCd2tuS0hGRnJSQXNnVkVURXptWldIeld3R1FJRnRLSUFWWjFjamtkTUVMM0JsYnp6WFZvZlhmYmJDclBRcWNBQll4MkJaLUpfUDgtVUZqZU1vODNWTHJSNUlIajBfOEloUVpVbXhaWUpjcFRJd3JmLTFBNEpHbE4yX2VMcVJ5bUY4dFpJNnpJUEp5bzFDME0xQ0lCM0VlSHppLTcwU2JGOHhGdEdVQjdoUjIzNHlvX1NNLUtxVmRJazJTamp0YTJiUTFLWGpTRWN2clNfMzU4QU1pUDAtOUpUX2ZIeFRDeXpyYS1TTllvWmhkbnJFRnpvVndRRScsCiAgICAgICAgICAgICdwJyA9PiAnNmZXdm5qMzRrSnRmTW5PMWotcWJQakZuYVRldlJFQkdBeXBNdlVCVTNGeDFYeDBuRTd6ZGM3bGxuMlFxNS15VFF0T1EybHBpRTY5SGtRTFI0cE1VNlY0NFNqRmdWemNUemJGQ25OZ2tuRVY1NFM1ZHlwNEtvalNXeEJpNmJ0NUd3YUFDa2lFbERFdzl3Z2MtOEpnYUVrdjRGN2UtdzQ0SEJ3UERFQ1RqRV9OMHZJYXdwYkRfeTZ6cGlmQjh6aWFBSTN4VEc0c3NBMWR0OFdadXlRVzhTUjRGUnNZbmZrcXkwdHd3SG4wMmdzN1hTbDROZXBraFNPN0NZNS1ZQzNVNkxhekFFWmkyTlRpVXVaU3c3RjZLYVJoc0E4Q25YVERFNUpxRmtzX2ZYZkxOQ2J0Q2xPTjJKdHJCMXpZLWwtMmJIeWgyYTZ1bkR0R245Wk4tRWM3Qlh3JywKICAgICAgICAgICAgJ3EnID0+ICc3VUZfTmJsQXlUeG1qN1oySnoxc1ptei1RM1lIT2N0YTAwRGptSEJoUjlJdFlSTVFGTWotU1VHUEF0d3ZOLXNrM19UaHVnYVF0NDZTTFRfSTNHeTg0MzNjSGRXN28zU282SGlNWVZ1bnlmaHFuV3puU1dzNlN2SW9FaDhySk9Ya2tJWi1EbFJQOFh5VzVPT3ZpMGNiV0VRMWYxamJGeWlzdE1tbkJDbFB2ZjJUS0tQdlNoVWw5cW12THh1VTg3ai1fYmdRbWpWbXR3WmFkblBPeVBBeFE0X3FxU2ZJaVRPdk1TeFN5Y3I1OHJUeXUza2hIUWFwR0hrUzUtMllfdzQwR1VTZlZKM1hQNDhkZWxZcEstUFpQNzFobjg5TUpUbm5mUE90dkpBazF3YkVldjV3UUZUSmQtUEdPdWRrR2t1RUlYcnlGNFRHeFJQbHRsNVVlRjBDd1EnLAogICAgICAgIF0pOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/Tests/RSAPSSSignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cUFMzODQ7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTQnVpbGRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1NWZXJpZmllcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuMgogKgogKiBAZ3JvdXAgUkZDNzUyMAogKi8KY2xhc3MgUlNBUFNTU2lnbmF0dXJlVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIC8qKgogICAgICogUGxlYXNlIG5vdGUgdGhhdCB3ZSBjYW5ub3QgY3JlYXRlIHRoZSBzaWduYXR1cmUgYW5kIGdldCB0aGUgc2FtZSByZXN1bHQgYXMgdGhlIGV4YW1wbGUgKFJTQS1QU1Mgc2lnbmF0dXJlcyBhcmUgYWx3YXlzIGRpZmZlcmVudCkuCiAgICAgKiBUaGlzIHRlc3QgY2FzZSBjcmVhdGUgYSBzaWduYXR1cmUgYW5kIHZlcmlmaWVzIGl0LgogICAgICogVGhlbiB0aGUgb3V0cHV0IGdpdmVuIGluIHRoZSBSRkMgaXMgdXNlZCBhbmQgdmVyaWZpZWQuCiAgICAgKiBUaGlzIHdheSwgd2UgY2FuIHNheSB0aGF0IHRoZSBsaWJyYXJ5IGlzIGFibGUgdG8gY3JlYXRlL3ZlcmlmeSBSU0EtUFNTIHNpZ25hdHVyZXMgYW5kIHZlcmlmeSBzaWduYXR1cmUgZnJvbSB0ZXN0IHZlY3RvcnMuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBTMzg0KCkKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFBheWxvYWQsCiAgICAgICAgICogUlNBIHByaXZhdGUga2V5CiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTMuNAogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjIuMQogICAgICAgICAqLwogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAkcHJpdmF0ZUtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICdraWQnID0+ICdiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ24nID0+ICduNEVQdEFPQ2M5QWxrZVFIUHpIU3RnQWJnczdiVFpMd1VCWmRSOF9LdUtQRUhMZDRySFZUZVQtTy1YVjJqUm9qZE5oeEpXVER2TmQ3bnFRMFZFaVpRSHpfQUptU0NwTWFKTVJCU0ZLcktiMndxVndHVV9Oc1lPWUwtUXRpV04ybGJ6Y0VlNlhDMGRBcHI1eWRRTHJIcWtISGlnM1JCb3JkYVo2QWotb0JIcUZFSFlwUGU3VHBlLU9mVmZIZDFFNmNTNk0xRlpjRDFOTkxZRDVsRkhwUEk5YlR3SmxzZGUzdWhHcUMwWkN1RUhnOGxoendPSHJ0SVFiUzBGVmJiOWszLXRWVFU0ZmdfM0xfdm5pVUZBS3d1Q0xxS25TMkJZd2RxX216U25iTFk3aF9xaXhvUjdqaWczX19rUmh1YXh3VWtSejVpYWlRa3FnYzVnSGRyTlA1encnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAnZCcgPT4gJ2JXVUM5Qi1FRlJJbzhrcEdmaDBadXlHUHZNTkt2WVdOdEJfaWtpSDlrMjBlVC1PMXFfSTc4ZWlaa3BYeFhRMFVURXMyTHNOUlMtOHVKYnZRLUExaXJrd01TTWtLMUozWFRHZ2RyaENrdTlnUmxkWTdzTkFfQUtaR2gtUTY2MV80MnJJTkxSQ2U4Vy1uWjM0dWlfcU9ma0xuSzlRV0REcXBhSXNBLWJNd1dXU0RGdTJNVUJZd2tIVE1FekxZR3FPZTA0bm9xZXExaEV4QlRIQk9CZGtNWGl1RmhVcTFCVTZsLURxRWlXeHFnODJzWHQyaC1MTW5UMzA0NkFPWUpvUmlvejc1dFNVUWZHQ3NoV1RCblA1dURqZDE4a0toeXYwN2xoZlNKZHJQZE01UGx5bDIxaHNGZjRMX21IQ3VvRmF1N2dkc1BmSFB4eGpWT2NPcEJyUXp3UScsCiAgICAgICAgICAgICdwJyA9PiAnM1NseGdfRHdUWEpjYjYwOTVSb1h5Z1FDQVo1Um5Bdlpsbm8xeWhIdG5VZXhfZnA3QVpfOW5SYU83SFhfLVNGZkdRZXV0YW8yVERqREFXVTRWdXBrOHJ3OUpSMEF6WjBOMmZ2dUlBbXJfV0NzbUdwZU5xUW5ldjFUN0l5RXNuaDhVTXQtbjVDYWZoa2lremhFc3JtbmRINkx4T3J2Ukpsc1BwNlp2OGJVcTBrJywKICAgICAgICAgICAgJ3EnID0+ICd1S0UyZGgtY1RmNkVSRjRrNGVfank3OEdmUFlVSWFVeW9TU0p1QnpwM0N1YmszT0NxczZnclQ4YlJfY3UwRG0xTVp3V210ZHFEeUk5NUhyVWVxM01QMTV2TU1PTjhsSFRlWnUybG1LdndxVzdhblY1VXpoTTFpWjd6NHlNa3VVd0ZXb0J2eVk4OThFWHZSRC1oZHFSeEhsU3FBWjE5MnpCM3BWRkowczdwRmMnLAogICAgICAgICAgICAnZHAnID0+ICdCOFBWdlhrdkpyajJMLUdZUTd2M3k5cjZLdzVnOVNhaFhCd3NXVXpwMTlUVmxnSS1ZVjg1cTFOSWIxcnhRdEQtSXNYWFIzLVRhbmV2dVJQUnQ1T0JPZGlNR1FwOHBidDI2Z2xqWWZLVV9FOXhuLVJVTEh6MC1lZDlFOWdYTEtENFZHbmdwei1QZlFfcTI5cGs1eFdIb0pwMDA5UWYxSHZDaGl4Ulg1OWVoaWsnLAogICAgICAgICAgICAnZHEnID0+ICdDTERtREdkdWh5bGM5bzdyODRyRVVWbjdwelE2UEY4M1ktaUJaeDVOVC1UcG5PWktGMXBFckFNVmVLekZFbDQxRGxISHFxQkxTTTBXMXNPRmJ3VHhZV1pEbTZzSTZvZzVpVGJ3UUdJQzNnbkpLYmlfN2tfdkpnR0h3SHhnUGFYMlBudlAtenlFa0RFUnVmLXJ5NGNfWjExQ3E5QXFDMnllTDZrZEtUMWNZRjgnLAogICAgICAgICAgICAncWknID0+ICczUGlxdlhRTjB6d01lRS1zQnZaZ2kyODlYUDlYQ1FGM1ZXcVB6TUtuSWdRcDdfVHVnbzYtTlpCS0NRc01mM0hhRUdCalRWSnNfamNLOC1UUlh2YUtlLTdaTWFRajhWZkJkWWtzc2J1ME5LRERoakotR3Rpc2VhRFZXdDdkY0gwY2Z3eGdGVUhwUWg3Rm9DcmpGSjZoNlpFcE1GNnhtdWpzNHFNcFB6OGFhSTQnLAogICAgICAgIF0pOwoKICAgICAgICAvKgogICAgICAgICAqIEhlYWRlcgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjIuMgogICAgICAgICAqLwogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdQUzM4NCcsCiAgICAgICAgICAgICdraWQnID0+ICdiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUnLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBQUzM4NCgpXSkKICAgICAgICApOwogICAgICAgICRqd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgUFMzODQoKV0pCiAgICAgICAgKTsKICAgICAgICAkY29tcGFjdFNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqc29uRmxhdHRlbmVkU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05GbGF0dGVuZWRTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGpzb25HZW5lcmFsU2VyaWFsaXplciA9IG5ldyBTZXJpYWxpemVyXEpTT05HZW5lcmFsU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgkcGF5bG9hZCkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHByaXZhdGVLZXksICRoZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRqd3MsICRwcml2YXRlS2V5LCAwKTsKCiAgICAgICAgLyoKICAgICAgICAgKiBIZWFkZXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC4yLjMKICAgICAgICAgKi8KICAgICAgICAkZXhwZWN0ZWRfY29tcGFjdF9qc29uID0gJ2V5SmhiR2NpT2lKUVV6TTROQ0lzSW10cFpDSTZJbUpwYkdKdkxtSmhaMmRwYm5OQWFHOWlZbWwwYjI0dVpYaGhiWEJzWlNKOS5TWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0LmN1MjJlQnFrWURLZ0lsVHB6RFhHdmFGZno2V0dvejdmVURjZlQwa2tPeTQybWlBaDJxeUJ6azF4RXNuazJJcE42LXRQaWQ2VnJrbEhrcXNHcURxSENkUDZPOFRUQjVkRERJdGxsVm82XzFPTFBwY2JVcmhpVVNNeGJiWFV2ZHZXWHpnLVVEOGJpaVJlUUZsZnoyOHpHV1ZzZGlOQVVmOFpueVBFZ1ZGbjQ0MlpkTnFpVkpSbUJxcllSWGU4UF9palE3cDhWZHowVFRyeFVlVDNsbThkOXNobnIybGZKVDhJbVVqdkFBMlhlejJNbHA4Y0JFNWF3RHpUMHFJMG42dWlQMWFDTl8yX2pMQWVRVGxxUkh0ZmE2NFFRU1VtRkFBalZLUGJCeWk3eGhvMHVUT2NiSDUxMGE2R1ltSlVBZm1XandaNm9ENGlmS284RFlNLVg3MkVhdyc7CiAgICAgICAgJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlFVek00TkNJc0ltdHBaQ0k2SW1KcGJHSnZMbUpoWjJkcGJuTkFhRzlpWW1sMGIyNHVaWGhoYlhCc1pTSjkiLCJzaWduYXR1cmUiOiJjdTIyZUJxa1lES2dJbFRwekRYR3ZhRmZ6NldHb3o3ZlVEY2ZUMGtrT3k0Mm1pQWgycXlCemsxeEVzbmsySXBONi10UGlkNlZya2xIa3FzR3FEcUhDZFA2TzhUVEI1ZERESXRsbFZvNl8xT0xQcGNiVXJoaVVTTXhiYlhVdmR2V1h6Zy1VRDhiaWlSZVFGbGZ6Mjh6R1dWc2RpTkFVZjhabnlQRWdWRm40NDJaZE5xaVZKUm1CcXJZUlhlOFBfaWpRN3A4VmR6MFRUcnhVZVQzbG04ZDlzaG5yMmxmSlQ4SW1VanZBQTJYZXoyTWxwOGNCRTVhd0R6VDBxSTBuNnVpUDFhQ05fMl9qTEFlUVRscVJIdGZhNjRRUVNVbUZBQWpWS1BiQnlpN3hobzB1VE9jYkg1MTBhNkdZbUpVQWZtV2p3WjZvRDRpZktvOERZTS1YNzJFYXcifSc7CiAgICAgICAgJGV4cGVjdGVkX2pzb24gPSAneyJwYXlsb2FkIjoiU1hUaWdKbHpJR0VnWkdGdVoyVnliM1Z6SUdKMWMybHVaWE56TENCR2NtOWtieXdnWjI5cGJtY2diM1YwSUhsdmRYSWdaRzl2Y2k0Z1dXOTFJSE4wWlhBZ2IyNTBieUIwYUdVZ2NtOWhaQ3dnWVc1a0lHbG1JSGx2ZFNCa2IyNG5kQ0JyWldWd0lIbHZkWElnWm1WbGRDd2dkR2hsY21YaWdKbHpJRzV2SUd0dWIzZHBibWNnZDJobGNtVWdlVzkxSUcxcFoyaDBJR0psSUhOM1pYQjBJRzltWmlCMGJ5NCIsInNpZ25hdHVyZXMiOlt7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKUVV6TTROQ0lzSW10cFpDSTZJbUpwYkdKdkxtSmhaMmRwYm5OQWFHOWlZbWwwYjI0dVpYaGhiWEJzWlNKOSIsInNpZ25hdHVyZSI6ImN1MjJlQnFrWURLZ0lsVHB6RFhHdmFGZno2V0dvejdmVURjZlQwa2tPeTQybWlBaDJxeUJ6azF4RXNuazJJcE42LXRQaWQ2VnJrbEhrcXNHcURxSENkUDZPOFRUQjVkRERJdGxsVm82XzFPTFBwY2JVcmhpVVNNeGJiWFV2ZHZXWHpnLVVEOGJpaVJlUUZsZnoyOHpHV1ZzZGlOQVVmOFpueVBFZ1ZGbjQ0MlpkTnFpVkpSbUJxcllSWGU4UF9palE3cDhWZHowVFRyeFVlVDNsbThkOXNobnIybGZKVDhJbVVqdkFBMlhlejJNbHA4Y0JFNWF3RHpUMHFJMG42dWlQMWFDTl8yX2pMQWVRVGxxUkh0ZmE2NFFRU1VtRkFBalZLUGJCeWk3eGhvMHVUT2NiSDUxMGE2R1ltSlVBZm1XandaNm9ENGlmS284RFlNLVg3MkVhdyJ9XX0nOwoKICAgICAgICAkbG9hZGVkX2NvbXBhY3RfanNvbiA9ICRjb21wYWN0U2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2NvbXBhY3RfanNvbik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2NvbXBhY3RfanNvbiwgJHByaXZhdGVLZXksIDApKTsKCiAgICAgICAgJGxvYWRlZF9mbGF0dGVuZWRfanNvbiA9ICRqc29uRmxhdHRlbmVkU2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2ZsYXR0ZW5lZF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfZmxhdHRlbmVkX2pzb24sICRwcml2YXRlS2V5LCAwKSk7CgogICAgICAgICRsb2FkZWRfanNvbiA9ICRqc29uR2VuZXJhbFNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCRleHBlY3RlZF9qc29uKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfanNvbiwgJHByaXZhdGVLZXksIDApKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature-algorithm-rsa/Tests/RSASignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG1cVGVzdHM7Cgp1c2UgQmFzZTY0VXJsXEJhc2U2NFVybDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQWxnb3JpdGhtTWFuYWdlcjsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcQ29udmVydGVyXFN0YW5kYXJkQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU0J1aWxkZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTVmVyaWZpZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyXEpTT05HZW5lcmFsU2VyaWFsaXplcjsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwoKLyoqCiAqIEBncm91cCBSU0EKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIFJTQVNpZ25hdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wbGV0ZVJTMjU2U2lnbigpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEFsZ29yaXRobVxSUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkandzQnVpbGRlci0+Y3JlYXRlKFsnUlMyNTYnXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICAgICAgICAgJ2p3aycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSlNVekkxTmlJc0ltcDNheUk2ZXlKcmRIa2lPaUpTVTBFaUxDSnVJam9pZEhCVE1WcHRabFpMVmxBMVMyOW1TV2hOUWxBd2RGTlhZelJ4YkdnMlptMHliSEphVTJ0MVMzaFZha1ZoVjJwNldsTjZjemN5WjBWSlIzaHlZVmQxYzAxa2IxSjFWalUwZUhOWFVubG1OVXRsV2xRd1V5MUpOVkJ5YkdVelNXUnBNMmRKUTJsUE5FNTNkazFyTmtwM1UwSmpTbGQzYlZOTVJrVkxlVlZUYmtJeVEzUm1hVWRqTUY4MWNsRkRjR05GZEY5RWJqVnBUUzFDVG00M1puRndiMHhKWW10ek9ISllTMVZKYWpndGNVMVdjV3RVV0hORlMyVkxhVzVGTWpOME1YbHJUV3hrYzA1aFlVOUlMV2gyUjNScE5VcDBNa1JOYmtneFNtcHZXR1JFV0daNGRsTlFYekJuYWxWWllqQmxhM1IxWkZsR1dHOUJObmRsYTIxUmVVcGxTVzEyWjNnMFRYbDZNVWswYVVoMGExbGZRM0EzU2pSTmJqRmxhbG8yU0U1dGVYWnZWRVZmTkU5MVdURjFRMlZaZGpSVmVWaEdZekZ6TVhWVmVWbDBhalI2TlRkeGMwaEhjMU0wWkZFelFUSk5Tbk4zSWl3aVpTSTZJa0ZSUVVJaWZYMC5UR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGcuUXlSbE9DY05CTXZDRWtKUkNRQTcxeTJiVlg2OTBnMEE2d3NDMllYZjlfVnhPWUstZzkteHktMUtqZ2hWWGtEUGUxZ0R2WVNZbkw5b1dzMVBhRktWMF8taWp2dkpRRTZfNXBoZUtUZklWTjNRYmt6anhzbTRxWFRlQ2hCSTVNS2VCUjh6OGlXTEZUNHhQTzhOa2Vsd2JTMnRTVUNIcmVqaW82bEREbFdoc3FTVVA4TmpISmhxQ1NadUNER3UzZk1NQTI0Y1pyWWV2M3RRUmM3SEhqeWkzcV8xN05acmk3ZmVCZDd3M05FRGtKcDd3VF9aY2xKcllvdWNISW8xeXBhRFBKdE0tVzEtVy1sQVZSRWthNlhxNEJnNjB6ZFNaODNPRFJRVFBfSXdRcnY3aHJJY2JyUnduMVphX09SWlBSUFFEUDBDTWdrYjdUa1dEWm5iUHNBemxRJywgJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSk7CiAgICAgICAgJGp3cyA9ICRzZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCk7CiAgICAgICAgJHJlc3VsdCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkandzKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJywgJHJlc3VsdC0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1JTMjU2JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wbGV0ZVJTMjU2U2lnbldpdGhEZXRhY2hlZFBheWxvYWQoKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAnbicgPT4gJ3RwUzFabWZWS1ZQNUtvZkloTUJQMHRTV2M0cWxoNmZtMmxyWlNrdUt4VWpFYVdqelpTenM3MmdFSUd4cmFXdXNNZG9SdVY1NHhzV1J5ZjVLZVpUMFMtSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzBfNXJRQ3BjRXRfRG41aU0tQk5uN2ZxcG9MSWJrczhyWEtVSWo4LXFNVnFrVFhzRUtlS2luRTIzdDF5a01sZHNOYWFPSC1odkd0aTVKdDJETW5IMUpqb1hkRFhmeHZTUF8wZ2pVWWIwZWt0dWRZRlhvQTZ3ZWttUXlKZUltdmd4NE15ejFJNGlIdGtZX0NwN0o0TW4xZWpaNkhObXl2b1RFXzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUpzdycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdwJyA9PiAnNUJHVTFjN2FmXzVzRnlmc2Etb25JSmdvNUJadTh1SHZ6M1V5YjhPQTBhLUc5VVBPMVNoTFlqWDB3VWZoWmNGQjdmd1B0Z21tWUFONndLR1ZjZTllTUFiWDRQbGlQazNyLUJjcFp1UEtrdUxrX3dGdmdXQVE1SHF3MmlFdXdYTFYwX2U4YzJnYVV0X2h5TUM1LW5GYzR2MEJtdjZOVDZQZnJ5LVVySzNCS1djJywKICAgICAgICAgICAgJ2QnID0+ICdLcDBLdVp3Q1pHTDFCTGdzVk0tTjBlZE1OaXRsOXdONUhmMldPWURvSXFPWk5BRUt6ZEp1ZW5JTWhJVEpqUkZVWDA1R1ZMMTM4dXlwMmpzX3BxRGRZOWlwQTdyQUtUaHdHdURkTnBoWkhlY2g5aWgzREdFUFhzLVlwbUhxdkliQ2QzR29HbTM4TUt3eFlrZGRFcEZuam84cktuYTFfQnBKdGhyRnhqRFJodzlEeEpCeWNPZEgyeVdUeXA2MlpFTlB2bmVLNDBIMmE1N1c0UVNjVGdmZWNacUQ1OW0yZkdVYVdhWDV1VW1JeGFFbXRHb0puZDlSRTRveXdLaGdON19USzd3WFJscUE0VW9SUGlIMkFDcmRVLV9jTFFMOUpjMHUwR3FaSkszMUxEYk9lTjk1UWd0U0NjNzJrM1Z0enkzQ3JWcHA1VEFBNjdzMUdqOVNrbi1DQVEnLAogICAgICAgICAgICAncScgPT4gJ3pQRC1CLW5ybmd3Ri1POTlCSHZiNDdYR0tSN09OOEpDSTZKeGF2eklrdXNNWENCOHJNeVlXOHpMczY4TDhKTEF6V1ozNG9NcTBGUFVueXNCeGM1blRGOE5iNEJaeFRaNS05Y0hmb0tyWVRJM1lXc21WVzJGcENKRkVqTXM0TlhaMjhQQmtTOWI0empmUzJLaE5ka21DZU9ZVTB0SnBOZndtT1RJOTBxZVVkVScsCiAgICAgICAgICAgICdkcCcgPT4gJ2FKcnp3X2tqV0s5dURsVGVhRVMyZTRtdXY2Yldib3BZZnJQSFZXRzdOUEdvR2RobkJuZDcwLWpoZ01FaVRaU05VOFZYdzJ1N3ByQVIza1ota0FwMURkd2xxZWRZT3pGc09KY1BBMFVaaGJPUnlyQnkzMGtibGxfN3U2Q2FuRm02WDRWeUp4Q3BlamQ3aktOdzZjQ1RGUDFzZmhXZzVOVko1RVVUa1B3RTY2TScsCiAgICAgICAgICAgICdkcScgPT4gJ1N3ejEtbV92bVRGTl9wdTFiSzd2RjdTNW5OVnJMNEEwT0ZpRXNHbGlDbXVKV3pPS2RMMTREaVl4Y3R2bnczSDZxVDJkS1paZlYydGJzZTVOOS1KZWNkbGRVamZ1cUFvTEllN2REN2RLaTQyWU9sVEM5UVhtcXZUaDFvaG5KdThwbVJGWEVaUUdVbV9CVmhvSWIyX1dQa2phdjZZU2tndUNVSHQ0SFJkMll3RScsCiAgICAgICAgICAgICdxaScgPT4gJ0JvY3VDT0VPcS1veUxEQUx3ek1YVThnT2YzSUwxUTFfQld3c2RvQU5vaDZpMTc5cHN4Z0U0SlhUb1djcFhaUVFxdWI4bmd3RTZ1UjlmcGQzbTZOX1BMNFQ1NXZiRER5alBLbXJMMnR0QzJnT3R4OUtycFBoLVo3TFFSbzRCRTQ4bkhKSnJ5c3RLSGZGbGFIMkc3SnhITmdNQllWQUR5dHROMDlxRW9hdjhPcycsCiAgICAgICAgXSk7CgogICAgICAgICRqd3NCdWlsZGVyID0gbmV3IEpXU0J1aWxkZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpLAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBBbGdvcml0aG1cUlMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkc2VyaWFsaXplciA9IG5ldyBDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsIHRydWUpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKAogICAgICAgICAgICAgICAgJGtleSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAnYWxnJyA9PiAnUlMyNTYnLAogICAgICAgICAgICAgICAgICAgICdqd2snID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXAzYXlJNmV5SnJkSGtpT2lKU1UwRWlMQ0p1SWpvaWRIQlRNVnB0WmxaTFZsQTFTMjltU1doTlFsQXdkRk5YWXpSeGJHZzJabTB5YkhKYVUydDFTM2hWYWtWaFYycDZXbE42Y3pjeVowVkpSM2h5WVZkMWMwMWtiMUoxVmpVMGVITlhVbmxtTlV0bFdsUXdVeTFKTlZCeWJHVXpTV1JwTTJkSlEybFBORTUzZGsxck5rcDNVMEpqU2xkM2JWTk1Sa1ZMZVZWVGJrSXlRM1JtYVVkak1GODFjbEZEY0dORmRGOUVialZwVFMxQ1RtNDNabkZ3YjB4SlltdHpPSEpZUzFWSmFqZ3RjVTFXY1d0VVdITkZTMlZMYVc1Rk1qTjBNWGxyVFd4a2MwNWhZVTlJTFdoMlIzUnBOVXAwTWtSTmJrZ3hTbXB2V0dSRVdHWjRkbE5RWHpCbmFsVlpZakJsYTNSMVpGbEdXRzlCTm5kbGEyMVJlVXBsU1cxMlozZzBUWGw2TVVrMGFVaDBhMWxmUTNBM1NqUk5iakZsYWxvMlNFNXRlWFp2VkVWZk5FOTFXVEYxUTJWWmRqUlZlVmhHWXpGek1YVlZlVmwwYWpSNk5UZHhjMGhIYzFNMFpGRXpRVEpOU25OM0lpd2laU0k2SWtGUlFVSWlmWDAuLlF5UmxPQ2NOQk12Q0VrSlJDUUE3MXkyYlZYNjkwZzBBNndzQzJZWGY5X1Z4T1lLLWc5LXh5LTFLamdoVlhrRFBlMWdEdllTWW5MOW9XczFQYUZLVjBfLWlqdnZKUUU2XzVwaGVLVGZJVk4zUWJremp4c200cVhUZUNoQkk1TUtlQlI4ejhpV0xGVDR4UE84TmtlbHdiUzJ0U1VDSHJlamlvNmxERGxXaHNxU1VQOE5qSEpocUNTWnVDREd1M2ZNTUEyNGNacllldjN0UVJjN0hIanlpM3FfMTdOWnJpN2ZlQmQ3dzNORURrSnA3d1RfWmNsSnJZb3VjSElvMXlwYURQSnRNLVcxLVctbEFWUkVrYTZYcTRCZzYwemRTWjgzT0RSUVRQX0l3UXJ2N2hySWNiclJ3bjFaYV9PUlpQUlBRRFAwQ01na2I3VGtXRFpuYlBzQXpsUScsICRzZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCkpOwogICAgICAgICRqd3MgPSAkc2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGp3cyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydE51bGwoJHJlc3VsdC0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1JTMjU2JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wbGV0ZVJTMzg0U2lnbigpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEFsZ29yaXRobVxSUzM4NCgpXSkKICAgICAgICApOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdhbGcnID0+ICdSUzM4NCcsCiAgICAgICAgICAgICAgICAgICAgJ2p3aycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSlNVek00TkNJc0ltcDNheUk2ZXlKcmRIa2lPaUpTVTBFaUxDSnVJam9pZEhCVE1WcHRabFpMVmxBMVMyOW1TV2hOUWxBd2RGTlhZelJ4YkdnMlptMHliSEphVTJ0MVMzaFZha1ZoVjJwNldsTjZjemN5WjBWSlIzaHlZVmQxYzAxa2IxSjFWalUwZUhOWFVubG1OVXRsV2xRd1V5MUpOVkJ5YkdVelNXUnBNMmRKUTJsUE5FNTNkazFyTmtwM1UwSmpTbGQzYlZOTVJrVkxlVlZUYmtJeVEzUm1hVWRqTUY4MWNsRkRjR05GZEY5RWJqVnBUUzFDVG00M1puRndiMHhKWW10ek9ISllTMVZKYWpndGNVMVdjV3RVV0hORlMyVkxhVzVGTWpOME1YbHJUV3hrYzA1aFlVOUlMV2gyUjNScE5VcDBNa1JOYmtneFNtcHZXR1JFV0daNGRsTlFYekJuYWxWWllqQmxhM1IxWkZsR1dHOUJObmRsYTIxUmVVcGxTVzEyWjNnMFRYbDZNVWswYVVoMGExbGZRM0EzU2pSTmJqRmxhbG8yU0U1dGVYWnZWRVZmTkU5MVdURjFRMlZaZGpSVmVWaEdZekZ6TVhWVmVWbDBhalI2TlRkeGMwaEhjMU0wWkZFelFUSk5Tbk4zSWl3aVpTSTZJa0ZSUVVJaWZYMC5UR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGcuZ3NCaHlCT0VEUHBIQlI4T00yWGI1dHliS0dlaWpSRVpOLXNtRWt2STIxODhweXR1akZldmJEUUoxMGFmYmNkamg1TE5LTzdVX1ZEM2hHUHJDN01Ja2R0Snc0YzJkMEpuVnloaVpUNXNGbm5jbkNGamxsLVk5R2tLN2E3aldKSlRnRl81TG1WRWVKU0ZFRWd3VDFTdHhiLVR0WkNHcWM1RXhZaXpMaXVRMklHQjZTcS1oVGtwV0FYSmZtSGNoRV9UeFY5QTRpTFdDTVRWTTZMc0xWNk56RHRmMmEwaXU5WHZOMU1FZHpxTTdGTmRxTkNHTjQzRnZlVEEwaFg4T29GZkIyWmpZQWpiaXhVQ1Q0VlZJMlB1dVJ5dV9McjhjQTczZWlzb2xCUUxRZW1QeXJDbzFzNTYwdjJ0S0Q3SUNTOFRlbzFQQ0o0SG5DdU84YnZ1ZkkyZEtBJywgJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSk7CiAgICAgICAgJGp3cyA9ICRzZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCk7CiAgICAgICAgJHJlc3VsdCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkandzKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJywgJHJlc3VsdC0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1JTMzg0JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wbGV0ZVJTNTEyU2lnbigpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEFsZ29yaXRobVxSUzUxMigpXSkKICAgICAgICApOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdhbGcnID0+ICdSUzUxMicsCiAgICAgICAgICAgICAgICAgICAgJ2p3aycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSlNVelV4TWlJc0ltcDNheUk2ZXlKcmRIa2lPaUpTVTBFaUxDSnVJam9pZEhCVE1WcHRabFpMVmxBMVMyOW1TV2hOUWxBd2RGTlhZelJ4YkdnMlptMHliSEphVTJ0MVMzaFZha1ZoVjJwNldsTjZjemN5WjBWSlIzaHlZVmQxYzAxa2IxSjFWalUwZUhOWFVubG1OVXRsV2xRd1V5MUpOVkJ5YkdVelNXUnBNMmRKUTJsUE5FNTNkazFyTmtwM1UwSmpTbGQzYlZOTVJrVkxlVlZUYmtJeVEzUm1hVWRqTUY4MWNsRkRjR05GZEY5RWJqVnBUUzFDVG00M1puRndiMHhKWW10ek9ISllTMVZKYWpndGNVMVdjV3RVV0hORlMyVkxhVzVGTWpOME1YbHJUV3hrYzA1aFlVOUlMV2gyUjNScE5VcDBNa1JOYmtneFNtcHZXR1JFV0daNGRsTlFYekJuYWxWWllqQmxhM1IxWkZsR1dHOUJObmRsYTIxUmVVcGxTVzEyWjNnMFRYbDZNVWswYVVoMGExbGZRM0EzU2pSTmJqRmxhbG8yU0U1dGVYWnZWRVZmTkU5MVdURjFRMlZaZGpSVmVWaEdZekZ6TVhWVmVWbDBhalI2TlRkeGMwaEhjMU0wWkZFelFUSk5Tbk4zSWl3aVpTSTZJa0ZSUVVJaWZYMC5UR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGcuT010dEVieDlmV29KbDRnSndwOG0yNDlQODduTkVOaHk1UnpIODRTMWlSOGItdXBRTnk4ZHFIb0lWc1E2cUlORGpETDVZVGw0VVd2Q2hJcjVBTzQzM0xqTlVpbUllRXAyY2ZpcXJzelRUd2h2LUVGM0xwM0Z0OU5tVGItM1pXdkRvMVd3d1VyRDBxcm83YnluYXo1TzA2RHhRZlRST2NyQzZoTlgwNXk2bldfLTIxZXhzMl93Mk9vT1dBMEVieDlldjFheVpKaDFBUTZxMThBamIwR2sxUlNUMVBGanowU2tfWWlVSVlSU1ZKemd2MkxmN1JfTHlpNUE1T2tJZkxPeUptS0JpNm0wRk9Mb3lucV9mVDk2d0NiZjVOa2h4LVJpdUZFY2VmR2hnRGF2N1dmaW0zekEzWkFIZU5XZTU4QlpPZi04djFrWHNWLXlkNnpRbFZhOGl3JywgJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKSk7CgogICAgICAgICRqd3MgPSAkc2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGp3cyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsICRyZXN1bHQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSUzUxMicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGxldGVQUzI1NlNpZ24oKQogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAna2V5X29wcycgPT4gWydzaWduJ10sCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEFsZ29yaXRobVxQUzI1NigpXSkKICAgICAgICApOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdhbGcnID0+ICdQUzI1NicsCiAgICAgICAgICAgICAgICAgICAgJ2p3aycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsndmVyaWZ5J10sCiAgICAgICAgICAgICAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAkandzID0gJHNlcmlhbGl6ZXItPnNlcmlhbGl6ZSgkandzLCAwKTsKICAgICAgICAkcmVzdWx0ID0gJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCRqd3MpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nLCAkcmVzdWx0LT5nZXRQYXlsb2FkKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsICRyZXN1bHQtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnUFMyNTYnLCAkcmVzdWx0LT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBsZXRlUFMzODRTaWduKCkKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAncCcgPT4gJzVCR1UxYzdhZl81c0Z5ZnNhLW9uSUpnbzVCWnU4dUh2ejNVeWI4T0EwYS1HOVVQTzFTaExZalgwd1VmaFpjRkI3ZndQdGdtbVlBTjZ3S0dWY2U5ZU1BYlg0UGxpUGszci1CY3BadVBLa3VMa193RnZnV0FRNUhxdzJpRXV3WExWMF9lOGMyZ2FVdF9oeU1DNS1uRmM0djBCbXY2TlQ2UGZyeS1VckszQktXYycsCiAgICAgICAgICAgICdkJyA9PiAnS3AwS3Vad0NaR0wxQkxnc1ZNLU4wZWRNTml0bDl3TjVIZjJXT1lEb0lxT1pOQUVLemRKdWVuSU1oSVRKalJGVVgwNUdWTDEzOHV5cDJqc19wcURkWTlpcEE3ckFLVGh3R3VEZE5waFpIZWNoOWloM0RHRVBYcy1ZcG1IcXZJYkNkM0dvR20zOE1Ld3hZa2RkRXBGbmpvOHJLbmExX0JwSnRockZ4akRSaHc5RHhKQnljT2RIMnlXVHlwNjJaRU5Qdm5lSzQwSDJhNTdXNFFTY1RnZmVjWnFENTltMmZHVWFXYVg1dVVtSXhhRW10R29KbmQ5UkU0b3l3S2hnTjdfVEs3d1hSbHFBNFVvUlBpSDJBQ3JkVS1fY0xRTDlKYzB1MEdxWkpLMzFMRGJPZU45NVFndFNDYzcyazNWdHp5M0NyVnBwNVRBQTY3czFHajlTa24tQ0FRJywKICAgICAgICAgICAgJ3EnID0+ICd6UEQtQi1ucm5nd0YtTzk5Qkh2YjQ3WEdLUjdPTjhKQ0k2SnhhdnpJa3VzTVhDQjhyTXlZVzh6THM2OEw4SkxBeldaMzRvTXEwRlBVbnlzQnhjNW5URjhOYjRCWnhUWjUtOWNIZm9LcllUSTNZV3NtVlcyRnBDSkZFak1zNE5YWjI4UEJrUzliNHpqZlMyS2hOZGttQ2VPWVUwdEpwTmZ3bU9USTkwcWVVZFUnLAogICAgICAgICAgICAnZHAnID0+ICdhSnJ6d19raldLOXVEbFRlYUVTMmU0bXV2NmJXYm9wWWZyUEhWV0c3TlBHb0dkaG5CbmQ3MC1qaGdNRWlUWlNOVThWWHcydTdwckFSM2taLWtBcDFEZHdscWVkWU96RnNPSmNQQTBVWmhiT1J5ckJ5MzBrYmxsXzd1NkNhbkZtNlg0VnlKeENwZWpkN2pLTnc2Y0NURlAxc2ZoV2c1TlZKNUVVVGtQd0U2Nk0nLAogICAgICAgICAgICAnZHEnID0+ICdTd3oxLW1fdm1URk5fcHUxYks3dkY3UzVuTlZyTDRBME9GaUVzR2xpQ211Sld6T0tkTDE0RGlZeGN0dm53M0g2cVQyZEtaWmZWMnRic2U1TjktSmVjZGxkVWpmdXFBb0xJZTdkRDdkS2k0MllPbFRDOVFYbXF2VGgxb2huSnU4cG1SRlhFWlFHVW1fQlZob0liMl9XUGtqYXY2WVNrZ3VDVUh0NEhSZDJZd0UnLAogICAgICAgICAgICAncWknID0+ICdCb2N1Q09FT3Etb3lMREFMd3pNWFU4Z09mM0lMMVExX0JXd3Nkb0FOb2g2aTE3OXBzeGdFNEpYVG9XY3BYWlFRcXViOG5nd0U2dVI5ZnBkM202Tl9QTDRUNTV2YkREeWpQS21yTDJ0dEMyZ090eDlLcnBQaC1aN0xRUm80QkU0OG5ISkpyeXN0S0hmRmxhSDJHN0p4SE5nTUJZVkFEeXR0TjA5cUVvYXY4T3MnLAogICAgICAgIF0pOwoKICAgICAgICAkandzQnVpbGRlciA9IG5ldyBKV1NCdWlsZGVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSwKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgQWxnb3JpdGhtXFBTMzg0KCldKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgKICAgICAgICAgICAgICAgICRrZXksCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgJ2FsZycgPT4gJ1BTMzg0JywKICAgICAgICAgICAgICAgICAgICAnandrJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgICAgICAgICAnbicgPT4gJ3RwUzFabWZWS1ZQNUtvZkloTUJQMHRTV2M0cWxoNmZtMmxyWlNrdUt4VWpFYVdqelpTenM3MmdFSUd4cmFXdXNNZG9SdVY1NHhzV1J5ZjVLZVpUMFMtSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzBfNXJRQ3BjRXRfRG41aU0tQk5uN2ZxcG9MSWJrczhyWEtVSWo4LXFNVnFrVFhzRUtlS2luRTIzdDF5a01sZHNOYWFPSC1odkd0aTVKdDJETW5IMUpqb1hkRFhmeHZTUF8wZ2pVWWIwZWt0dWRZRlhvQTZ3ZWttUXlKZUltdmd4NE15ejFJNGlIdGtZX0NwN0o0TW4xZWpaNkhObXl2b1RFXzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUpzdycsCiAgICAgICAgICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGp3cyA9ICRzZXJpYWxpemVyLT5zZXJpYWxpemUoJGp3cywgMCk7CiAgICAgICAgJHJlc3VsdCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkandzKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJywgJHJlc3VsdC0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1BTMzg0JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wbGV0ZVBTNTEyU2lnbigpCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICduJyA9PiAndHBTMVptZlZLVlA1S29mSWhNQlAwdFNXYzRxbGg2Zm0ybHJaU2t1S3hVakVhV2p6WlN6czcyZ0VJR3hyYVd1c01kb1J1VjU0eHNXUnlmNUtlWlQwUy1JNVBybGUzSWRpM2dJQ2lPNE53dk1rNkp3U0JjSld3bVNMRkVLeVVTbkIyQ3RmaUdjMF81clFDcGNFdF9EbjVpTS1CTm43ZnFwb0xJYmtzOHJYS1VJajgtcU1WcWtUWHNFS2VLaW5FMjN0MXlrTWxkc05hYU9ILWh2R3RpNUp0MkRNbkgxSmpvWGREWGZ4dlNQXzBnalVZYjBla3R1ZFlGWG9BNndla21ReUplSW12Z3g0TXl6MUk0aUh0a1lfQ3A3SjRNbjFlalo2SE5teXZvVEVfNE91WTF1Q2VZdjRVeVhGYzFzMXVVeVl0ajR6NTdxc0hHc1M0ZFEzQTJNSnN3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAnZCcgPT4gJ0twMEt1WndDWkdMMUJMZ3NWTS1OMGVkTU5pdGw5d041SGYyV09ZRG9JcU9aTkFFS3pkSnVlbklNaElUSmpSRlVYMDVHVkwxMzh1eXAyanNfcHFEZFk5aXBBN3JBS1Rod0d1RGROcGhaSGVjaDlpaDNER0VQWHMtWXBtSHF2SWJDZDNHb0dtMzhNS3d4WWtkZEVwRm5qbzhyS25hMV9CcEp0aHJGeGpEUmh3OUR4SkJ5Y09kSDJ5V1R5cDYyWkVOUHZuZUs0MEgyYTU3VzRRU2NUZ2ZlY1pxRDU5bTJmR1VhV2FYNXVVbUl4YUVtdEdvSm5kOVJFNG95d0toZ043X1RLN3dYUmxxQTRVb1JQaUgyQUNyZFUtX2NMUUw5SmMwdTBHcVpKSzMxTERiT2VOOTVRZ3RTQ2M3MmszVnR6eTNDclZwcDVUQUE2N3MxR2o5U2tuLUNBUScsCiAgICAgICAgICAgICdxJyA9PiAnelBELUItbnJuZ3dGLU85OUJIdmI0N1hHS1I3T044SkNJNkp4YXZ6SWt1c01YQ0I4ck15WVc4ekxzNjhMOEpMQXpXWjM0b01xMEZQVW55c0J4YzVuVEY4TmI0Qlp4VFo1LTljSGZvS3JZVEkzWVdzbVZXMkZwQ0pGRWpNczROWFoyOFBCa1M5YjR6amZTMktoTmRrbUNlT1lVMHRKcE5md21PVEk5MHFlVWRVJywKICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgJ2RxJyA9PiAnU3d6MS1tX3ZtVEZOX3B1MWJLN3ZGN1M1bk5Wckw0QTBPRmlFc0dsaUNtdUpXek9LZEwxNERpWXhjdHZudzNINnFUMmRLWlpmVjJ0YnNlNU45LUplY2RsZFVqZnVxQW9MSWU3ZEQ3ZEtpNDJZT2xUQzlRWG1xdlRoMW9obkp1OHBtUkZYRVpRR1VtX0JWaG9JYjJfV1BramF2NllTa2d1Q1VIdDRIUmQyWXdFJywKICAgICAgICAgICAgJ3FpJyA9PiAnQm9jdUNPRU9xLW95TERBTHd6TVhVOGdPZjNJTDFRMV9CV3dzZG9BTm9oNmkxNzlwc3hnRTRKWFRvV2NwWFpRUXF1YjhuZ3dFNnVSOWZwZDNtNk5fUEw0VDU1dmJERHlqUEttckwydHRDMmdPdHg5S3JwUGgtWjdMUVJvNEJFNDhuSEpKcnlzdEtIZkZsYUgyRzdKeEhOZ01CWVZBRHl0dE4wOXFFb2F2OE9zJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSBuZXcgSldTQnVpbGRlcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgIEFsZ29yaXRobU1hbmFnZXI6OmNyZWF0ZShbbmV3IEFsZ29yaXRobVxQUzUxMigpXSkKICAgICAgICApOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAka2V5LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICdhbGcnID0+ICdQUzUxMicsCiAgICAgICAgICAgICAgICAgICAgJ2p3aycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICAgICAgICAgJ24nID0+ICd0cFMxWm1mVktWUDVLb2ZJaE1CUDB0U1djNHFsaDZmbTJsclpTa3VLeFVqRWFXanpaU3pzNzJnRUlHeHJhV3VzTWRvUnVWNTR4c1dSeWY1S2VaVDBTLUk1UHJsZTNJZGkzZ0lDaU80Tnd2TWs2SndTQmNKV3dtU0xGRUt5VVNuQjJDdGZpR2MwXzVyUUNwY0V0X0RuNWlNLUJObjdmcXBvTElia3M4clhLVUlqOC1xTVZxa1RYc0VLZUtpbkUyM3QxeWtNbGRzTmFhT0gtaHZHdGk1SnQyRE1uSDFKam9YZERYZnh2U1BfMGdqVVliMGVrdHVkWUZYb0E2d2VrbVF5SmVJbXZneDRNeXoxSTRpSHRrWV9DcDdKNE1uMWVqWjZITm15dm9URV80T3VZMXVDZVl2NFV5WEZjMXMxdVV5WXRqNHo1N3FzSEdzUzRkUTNBMk1Kc3cnLAogICAgICAgICAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgICRqd3MgPSAkc2VyaWFsaXplci0+c2VyaWFsaXplKCRqd3MsIDApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGp3cyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsICRyZXN1bHQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdQUzUxMicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE2I2FwcGVuZGl4LUEuNAogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkSldTSlNPTlNlcmlhbGl6YXRpb24oKQogICAgewogICAgICAgICRzZXJpYWxpemVyID0gbmV3IEpTT05HZW5lcmFsU2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJ3sicGF5bG9hZCI6ImV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEiLCJzaWduYXR1cmVzIjpbeyJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlNVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiIyMDEwLTEyLTI5In0sInNpZ25hdHVyZSI6ImNDNGhpVVBvajlFZXRkZ3R2M2hGODBFR3JodUJfX2R6RVJhdDBYRjlnMlZ0UWdyOVBKYnUzWE9pWmo1UlptaDdBQXVISW00QmgtMFFjX2xGNVlLdF9POFcyRnA1anVqR2Jkczl1SmRiRjlDVUFyN3QxZG5aY0FjUWpiS0JZTlg0QkF5blJGZGl1Qi0tZl9uWkxncm5ieVR5V3pPNzV2Uks1aDZ4QkFyTElBUk5QdmtTanRRQk1IbGIxTDA3UWU3SzBHYXJaUm1CX2VTTjkzODNMY09MbjZfZE8tLXhpMTJqekR3dXNDLWVPa0hXRXNxdEZaRVNjNkJmSTdub09QcXZoSjFwaENudldoNkllWUkydzlRT1lFVWlwVVRJOG5wNkxiZ0dZOUZzOThycVZ0NUFYTEloV2tXeXdsVm10VnJCcDBpZ2NOX0lveXBHbFVQUUdlNzdSdyJ9LHsicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpGVXpJMU5pSjkiLCJoZWFkZXIiOnsia2lkIjoiZTliYzA5N2EtY2U1MS00MDM2LTk1NjItZDJhZGU4ODJkYjBkIn0sInNpZ25hdHVyZSI6IkR0RWhVM2xqYkVnOEwzOFZXQWZVQXFPeUtBTTYtWHgtRjRHYXd4YWVwbVhGQ2dmVGpEeHc1ZGp4TGE4SVNsU0FwbVdReGZLVFVKcVBQMy1LZzZOVTFRIn1dfScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgJGNsYWltcyA9IFxqc29uX2RlY29kZSgkcmVzdWx0LT5nZXRQYXlsb2FkKCksIHRydWUpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFsnaXNzJyA9PiAnam9lJywgJ2V4cCcgPT4gMTMwMDgxOTM4MCwgJ2h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290JyA9PiB0cnVlXSwgJGNsYWltcyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSUzI1NicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VTMjU2JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDEpLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTYjYXBwZW5kaXgtQS40CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRKV1NKU09OU2VyaWFsaXphdGlvbldpdGhEZXRhY2hlZFBheWxvYWQoKQogICAgewogICAgICAgICRqd3NWZXJpZmllciA9IG5ldyBKV1NWZXJpZmllcigKICAgICAgICAgICAgQWxnb3JpdGhtTWFuYWdlcjo6Y3JlYXRlKFtuZXcgQWxnb3JpdGhtXFJTMjU2KCldKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXIgPSBuZXcgSlNPTkdlbmVyYWxTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJHJlc3VsdCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgneyJzaWduYXR1cmVzIjpbeyJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlNVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiIyMDEwLTEyLTI5In0sInNpZ25hdHVyZSI6ImNDNGhpVVBvajlFZXRkZ3R2M2hGODBFR3JodUJfX2R6RVJhdDBYRjlnMlZ0UWdyOVBKYnUzWE9pWmo1UlptaDdBQXVISW00QmgtMFFjX2xGNVlLdF9POFcyRnA1anVqR2Jkczl1SmRiRjlDVUFyN3QxZG5aY0FjUWpiS0JZTlg0QkF5blJGZGl1Qi0tZl9uWkxncm5ieVR5V3pPNzV2Uks1aDZ4QkFyTElBUk5QdmtTanRRQk1IbGIxTDA3UWU3SzBHYXJaUm1CX2VTTjkzODNMY09MbjZfZE8tLXhpMTJqekR3dXNDLWVPa0hXRXNxdEZaRVNjNkJmSTdub09QcXZoSjFwaENudldoNkllWUkydzlRT1lFVWlwVVRJOG5wNkxiZ0dZOUZzOThycVZ0NUFYTEloV2tXeXdsVm10VnJCcDBpZ2NOX0lveXBHbFVQUUdlNzdSdyJ9LHsicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpGVXpJMU5pSjkiLCJoZWFkZXIiOnsia2lkIjoiZTliYzA5N2EtY2U1MS00MDM2LTk1NjItZDJhZGU4ODJkYjBkIn0sInNpZ25hdHVyZSI6IkR0RWhVM2xqYkVnOEwzOFZXQWZVQXFPeUtBTTYtWHgtRjRHYXd4YWVwbVhGQ2dmVGpEeHc1ZGp4TGE4SVNsU0FwbVdReGZLVFVKcVBQMy1LZzZOVTFRIn1dfScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSUzI1NicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VTMjU2JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDEpLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgICAgICAkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXlTZXQoJHJlc3VsdCwgJHRoaXMtPmdldFByaXZhdGVLZXlTZXQoKSwgMCwgQmFzZTY0VXJsOjpkZWNvZGUoJ2V5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBBIGRldGFjaGVkIHBheWxvYWQgaXMgc2V0LCBidXQgdGhlIEpXUyBhbHJlYWR5IGhhcyBhIHBheWxvYWQKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEpXU0pTT05TZXJpYWxpemF0aW9uV2l0aERldGFjaGVkUGF5bG9hZEFuZFBheWxvYWRJbkpXUygpCiAgICB7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gbmV3IEpXU1ZlcmlmaWVyKAogICAgICAgICAgICBBbGdvcml0aG1NYW5hZ2VyOjpjcmVhdGUoW25ldyBBbGdvcml0aG1cUlMyNTYoKV0pCiAgICAgICAgKTsKICAgICAgICAkc2VyaWFsaXplciA9IG5ldyBKU09OR2VuZXJhbFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkcmVzdWx0ID0gJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCd7InBheWxvYWQiOiJleUpwYzNNaU9pSnFiMlVpTEEwS0lDSmxlSEFpT2pFek1EQTRNVGt6T0RBc0RRb2dJbWgwZEhBNkx5OWxlR0Z0Y0d4bExtTnZiUzlwYzE5eWIyOTBJanAwY25WbGZRIiwic2lnbmF0dXJlcyI6W3sicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpTVXpJMU5pSjkiLCJoZWFkZXIiOnsia2lkIjoiMjAxMC0xMi0yOSJ9LCJzaWduYXR1cmUiOiJjQzRoaVVQb2o5RWV0ZGd0djNoRjgwRUdyaHVCX19kekVSYXQwWEY5ZzJWdFFncjlQSmJ1M1hPaVpqNVJabWg3QUF1SEltNEJoLTBRY19sRjVZS3RfTzhXMkZwNWp1akdiZHM5dUpkYkY5Q1VBcjd0MWRuWmNBY1FqYktCWU5YNEJBeW5SRmRpdUItLWZfblpMZ3JuYnlUeVd6Tzc1dlJLNWg2eEJBckxJQVJOUHZrU2p0UUJNSGxiMUwwN1FlN0swR2FyWlJtQl9lU045MzgzTGNPTG42X2RPLS14aTEyanpEd3VzQy1lT2tIV0VzcXRGWkVTYzZCZkk3bm9PUHF2aEoxcGhDbnZXaDZJZVlJMnc5UU9ZRVVpcFVUSThucDZMYmdHWTlGczk4cnFWdDVBWExJaFdrV3l3bFZtdFZyQnAwaWdjTl9Jb3lwR2xVUFFHZTc3UncifSx7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKRlV6STFOaUo5IiwiaGVhZGVyIjp7ImtpZCI6ImU5YmMwOTdhLWNlNTEtNDAzNi05NTYyLWQyYWRlODgyZGIwZCJ9LCJzaWduYXR1cmUiOiJEdEVoVTNsamJFZzhMMzhWV0FmVUFxT3lLQU02LVh4LUY0R2F3eGFlcG1YRkNnZlRqRHh3NWRqeExhOElTbFNBcG1XUXhmS1RVSnFQUDMtS2c2TlUxUSJ9XX0nKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDIsICRyZXN1bHQtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnUlMyNTYnLCAkcmVzdWx0LT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwoKICAgICAgICAkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXlTZXQoJHJlc3VsdCwgJHRoaXMtPmdldFByaXZhdGVLZXlTZXQoKSwgMCwgJ2V5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuc3VwcG9ydGVkIGlucHV0CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRJbnZhbGlkSW5wdXQoKQogICAgewogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCdEdEVoVTNsamJFZzhMMzhWV0FmVUFxT3lLQU02LVh4LUY0R2F3eGFlcG1YRkNnZlRqRHh3NWRqeExhOElTbFNBcG1XUXhmS1RVSnFQUDMtS2c2TlUxUScpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVW5zdXBwb3J0ZWQgaW5wdXQKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEludmFsaWRJbnB1dDIoKQogICAgewogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCdEdEVoVTNsamIuRWc4TC4zOFZXQWYuVUFxT3lLQU02LVh4LUY0R2F3eGFlcG1YRkNnZlRqRHh3NWRqeExhOElTbFNBcG1XUXhmS1RVSnFQUDMtS2c2TlUxUScpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUxNSNhcHBlbmRpeC1BLjEKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZElFVEZFeGFtcGxlMSgpCiAgICB7CiAgICAgICAgJHNlcmlhbGl6ZXIgPSBuZXcgQ29tcGFjdFNlcmlhbGl6ZXIoCiAgICAgICAgICAgIG5ldyBTdGFuZGFyZENvbnZlcnRlcigpCiAgICAgICAgKTsKICAgICAgICAkcmVzdWx0ID0gJHNlcmlhbGl6ZXItPnVuc2VyaWFsaXplKCdleUowZVhBaU9pSktWMVFpTEEwS0lDSmhiR2NpT2lKSVV6STFOaUo5LmV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEuZEJqZnRKZVo0Q1ZQLW1COTJLMjd1aGJVSlUxcDFyX3dXMWdGV0ZPRWpYaycpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydpc3MnID0+ICdqb2UnLCAnZXhwJyA9PiAxMzAwODE5MzgwLCAnaHR0cDovL2V4YW1wbGUuY29tL2lzX3Jvb3QnID0+IHRydWVdLCBcanNvbl9kZWNvZGUoJHJlc3VsdC0+Z2V0UGF5bG9hZCgpLCB0cnVlKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdIUzI1NicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE1I2FwcGVuZGl4LUEuMgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkSUVURkV4YW1wbGUyKCkKICAgIHsKICAgICAgICAkc2VyaWFsaXplciA9IG5ldyBDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJ2V5SmhiR2NpT2lKU1V6STFOaUo5LmV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEuY0M0aGlVUG9qOUVldGRndHYzaEY4MEVHcmh1Ql9fZHpFUmF0MFhGOWcyVnRRZ3I5UEpidTNYT2laajVSWm1oN0FBdUhJbTRCaC0wUWNfbEY1WUt0X084VzJGcDVqdWpHYmRzOXVKZGJGOUNVQXI3dDFkblpjQWNRamJLQllOWDRCQXluUkZkaXVCLS1mX25aTGdybmJ5VHlXek83NXZSSzVoNnhCQXJMSUFSTlB2a1NqdFFCTUhsYjFMMDdRZTdLMEdhclpSbUJfZVNOOTM4M0xjT0xuNl9kTy0teGkxMmp6RHd1c0MtZU9rSFdFc3F0RlpFU2M2QmZJN25vT1BxdmhKMXBoQ252V2g2SWVZSTJ3OVFPWUVVaXBVVEk4bnA2TGJnR1k5RnM5OHJxVnQ1QVhMSWhXa1d5d2xWbXRWckJwMGlnY05fSW95cEdsVVBRR2U3N1J3Jyk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkcmVzdWx0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbJ2lzcycgPT4gJ2pvZScsICdleHAnID0+IDEzMDA4MTkzODAsICdodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCcgPT4gdHJ1ZV0sIFxqc29uX2RlY29kZSgkcmVzdWx0LT5nZXRQYXlsb2FkKCksIHRydWUpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1JTMjU2JywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTUjYXBwZW5kaXgtQS4zCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRJRVRGRXhhbXBsZTMoKQogICAgewogICAgICAgICRzZXJpYWxpemVyID0gbmV3IENvbXBhY3RTZXJpYWxpemVyKAogICAgICAgICAgICBuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKQogICAgICAgICk7CiAgICAgICAgJHJlc3VsdCA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgnZXlKaGJHY2lPaUpGVXpJMU5pSjkuZXlKcGMzTWlPaUpxYjJVaUxBMEtJQ0psZUhBaU9qRXpNREE0TVRrek9EQXNEUW9nSW1oMGRIQTZMeTlsZUdGdGNHeGxMbU52YlM5cGMxOXliMjkwSWpwMGNuVmxmUS5EdEVoVTNsamJFZzhMMzhWV0FmVUFxT3lLQU02LVh4LUY0R2F3eGFlcG1YRkNnZlRqRHh3NWRqeExhOElTbFNBcG1XUXhmS1RVSnFQUDMtS2c2TlUxUScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJHJlc3VsdCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoWydpc3MnID0+ICdqb2UnLCAnZXhwJyA9PiAxMzAwODE5MzgwLCAnaHR0cDovL2V4YW1wbGUuY29tL2lzX3Jvb3QnID0+IHRydWVdLCBcanNvbl9kZWNvZGUoJHJlc3VsdC0+Z2V0UGF5bG9hZCgpLCB0cnVlKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHJlc3VsdC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdFUzI1NicsICRyZXN1bHQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTE1I2FwcGVuZGl4LUEuNAogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkSUVURkV4YW1wbGU0KCkKICAgIHsKICAgICAgICAkc2VyaWFsaXplciA9IG5ldyBDb21wYWN0U2VyaWFsaXplcigKICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCkKICAgICAgICApOwogICAgICAgICRyZXN1bHQgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJ2V5SmhiR2NpT2lKRlV6VXhNaUo5LlVHRjViRzloWkEuQWR3TWdlZXJ3dEhvaC1sMTkybDYwaHA5d0FIWkZWSmJMZkRfVXhNaTcwY3duWk9ZYVJJMWJLUFdST2MtbVpacXdxVDJTSS1LR0RLQjM0WE8wYXdfN1hkdEFHOEdhU3dGS2RDQVBaZ29YRDJZQkpaQ1BFWDN4S3BSd2NkT084S3BFSHdKanlxT2d6RE83aUt2VTh2Y253TnJteFliU1c5RVJCWHVrT1hvbEx6ZU9fSm4nKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRyZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdQYXlsb2FkJywgJHJlc3VsdC0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkcmVzdWx0LT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VTNTEyJywgJHJlc3VsdC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFByaXZhdGVLZXlTZXQoKTogSldLU2V0CiAgICB7CiAgICAgICAgJGtleXMgPSBbJ2tleXMnID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAneCcgPT4gJ3dlTkp5MkhzY0NTTTZBRURURGcwNGJpT3ZoRmh5eVd2T0hRZmVGX1B4TVEnLAogICAgICAgICAgICAgICAgJ3knID0+ICdlOGxuQ08tQWxTdFQtTkpWWC1jcmhCN1FSWWhpaXgwM2lsbEpPVkFPeWNrJywKICAgICAgICAgICAgICAgICdkJyA9PiAnVkVtRFpwRFhYSzhwOE4wQ25kc3hzOTI0cTZuUzFSWEZBU1JsNkJmVXFkdycsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdFQycsCiAgICAgICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAgICAgJ3gnID0+ICdnSTBHQUlMQmR1N1Q1M2FrckZtTXlHY3NGM241ZE83TW13TkJIS1c1U1YwJywKICAgICAgICAgICAgICAgICd5JyA9PiAnU0xXX3hTZmZ6bFBXckhFVkkzMERITV80ZWdWd3QzTlFxZVVEN25NRnBwcycsCiAgICAgICAgICAgICAgICAnZCcgPT4gJzBfTnhhUlBVTVFvQUp0NTBHejhZaVRyOGdSVHd5RWFDdW1kLU1Ub1RtSW8nLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna2lkJyA9PiAnMjAxMC0xMi0yOScsCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICduJyA9PiAnb2ZnV0N1TGp5YlJsem8wdFpXSmpOaXVTZmI0cDRmQWtkX3dXSmN5UW9UYmppOWswbDhXMjZtUGRkeEhtZkhRcC1WYXctNHFQQ0pyY1MybUpQTUV6UDFQdDBCbTRkNFFsTC15UlQtU0ZkMmxaUy1wQ2dOTXNEMVdfWXBSUEV3T1d2RzZiMzI2OTByMmpaNDdzb01abzl3R3pqYl83T01nMExPTC1iU2Y2M2twYVNIU1huZFM1ejVyZXhNZGJCWVVzTEE5ZS1LWEJkUU9TLVVUbzdXVEJFTWEyUjJDYXBIZzY2NXhzbXRkVk1UQlFZNHVEWmx4dmIzcUNvNVp3S2g5a0c0TFQ2X0k1SWhsSkg3YUdoeXhYRnZVSy1EV05tb3VkRjhOQWNvOV9oOWlhR05qOHEyZXRoRmtNTHM5MWt6azJQQWNEVFc5Z2I1NGg0RlJXeXVYcG9RJywKICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAnZCcgPT4gJ0VxNXhwR25OQ2l2RGZsSnNSUUJYSHgxaGRSMWs2VWx3ZTJKWkQ1MExwWHlXUEVBZVA4OHZMTk85N0lqbEE3X0dRNXNMS01ndmZUZVhaeDlTRS03WXdWb2wyTlhPb0FKZTQ2c3VpMzk1SVdfR08tcFdKMU8wQmtUR29WRW4yYktWUlVDZ3UtR2pCVmFZTFU2ZjNsOWtKZkZOUzNFMFFiVmR4enViU3UzTWtxemprbjQzOVgwTV9WNTFnZnBSTEk5SllhbnJDNEQ0cUFkR2NvcFZfMFpISHpRbEJqdWRVMlF2WHQ0ZWhOWVRDQnI2WENMUVVTaGIxanVVTzFaZGlZb0ZhRlFUNVR3OGJHVWxfeF9qVGozY2NQRFZaRkQ5cEl1aExoQk9uZXVmdUJpQjRjUzk4bDJTUl9SUXlHV1NlV2puY3pUMFFVOTFwMURoT1ZSdU9vcHpuUScsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdraWQnID0+ICdlOWJjMDk3YS1jZTUxLTQwMzYtOTU2Mi1kMmFkZTg4MmRiMGQnLAogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgICAgICdkJyA9PiAnanBzUW5uR1FtTC1ZQklmZkgxMTM2Y3NwWUc2LTBpWTdYMWZDRTktRTlMSScsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdraWQnID0+ICcxMjM0NTY3ODknLAogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnbicgPT4gJ3RwUzFabWZWS1ZQNUtvZkloTUJQMHRTV2M0cWxoNmZtMmxyWlNrdUt4VWpFYVdqelpTenM3MmdFSUd4cmFXdXNNZG9SdVY1NHhzV1J5ZjVLZVpUMFMtSTVQcmxlM0lkaTNnSUNpTzROd3ZNazZKd1NCY0pXd21TTEZFS3lVU25CMkN0ZmlHYzBfNXJRQ3BjRXRfRG41aU0tQk5uN2ZxcG9MSWJrczhyWEtVSWo4LXFNVnFrVFhzRUtlS2luRTIzdDF5a01sZHNOYWFPSC1odkd0aTVKdDJETW5IMUpqb1hkRFhmeHZTUF8wZ2pVWWIwZWt0dWRZRlhvQTZ3ZWttUXlKZUltdmd4NE15ejFJNGlIdGtZX0NwN0o0TW4xZWpaNkhObXl2b1RFXzRPdVkxdUNlWXY0VXlYRmMxczF1VXlZdGo0ejU3cXNIR3NTNGRRM0EyTUpzdycsCiAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgJ3AnID0+ICc1QkdVMWM3YWZfNXNGeWZzYS1vbklKZ281Qlp1OHVIdnozVXliOE9BMGEtRzlVUE8xU2hMWWpYMHdVZmhaY0ZCN2Z3UHRnbW1ZQU42d0tHVmNlOWVNQWJYNFBsaVBrM3ItQmNwWnVQS2t1TGtfd0Z2Z1dBUTVIcXcyaUV1d1hMVjBfZThjMmdhVXRfaHlNQzUtbkZjNHYwQm12Nk5UNlBmcnktVXJLM0JLV2MnLAogICAgICAgICAgICAgICAgJ2QnID0+ICdLcDBLdVp3Q1pHTDFCTGdzVk0tTjBlZE1OaXRsOXdONUhmMldPWURvSXFPWk5BRUt6ZEp1ZW5JTWhJVEpqUkZVWDA1R1ZMMTM4dXlwMmpzX3BxRGRZOWlwQTdyQUtUaHdHdURkTnBoWkhlY2g5aWgzREdFUFhzLVlwbUhxdkliQ2QzR29HbTM4TUt3eFlrZGRFcEZuam84cktuYTFfQnBKdGhyRnhqRFJodzlEeEpCeWNPZEgyeVdUeXA2MlpFTlB2bmVLNDBIMmE1N1c0UVNjVGdmZWNacUQ1OW0yZkdVYVdhWDV1VW1JeGFFbXRHb0puZDlSRTRveXdLaGdON19USzd3WFJscUE0VW9SUGlIMkFDcmRVLV9jTFFMOUpjMHUwR3FaSkszMUxEYk9lTjk1UWd0U0NjNzJrM1Z0enkzQ3JWcHA1VEFBNjdzMUdqOVNrbi1DQVEnLAogICAgICAgICAgICAgICAgJ3EnID0+ICd6UEQtQi1ucm5nd0YtTzk5Qkh2YjQ3WEdLUjdPTjhKQ0k2SnhhdnpJa3VzTVhDQjhyTXlZVzh6THM2OEw4SkxBeldaMzRvTXEwRlBVbnlzQnhjNW5URjhOYjRCWnhUWjUtOWNIZm9LcllUSTNZV3NtVlcyRnBDSkZFak1zNE5YWjI4UEJrUzliNHpqZlMyS2hOZGttQ2VPWVUwdEpwTmZ3bU9USTkwcWVVZFUnLAogICAgICAgICAgICAgICAgJ2RwJyA9PiAnYUpyendfa2pXSzl1RGxUZWFFUzJlNG11djZiV2JvcFlmclBIVldHN05QR29HZGhuQm5kNzAtamhnTUVpVFpTTlU4Vlh3MnU3cHJBUjNrWi1rQXAxRGR3bHFlZFlPekZzT0pjUEEwVVpoYk9SeXJCeTMwa2JsbF83dTZDYW5GbTZYNFZ5SnhDcGVqZDdqS053NmNDVEZQMXNmaFdnNU5WSjVFVVRrUHdFNjZNJywKICAgICAgICAgICAgICAgICdkcScgPT4gJ1N3ejEtbV92bVRGTl9wdTFiSzd2RjdTNW5OVnJMNEEwT0ZpRXNHbGlDbXVKV3pPS2RMMTREaVl4Y3R2bnczSDZxVDJkS1paZlYydGJzZTVOOS1KZWNkbGRVamZ1cUFvTEllN2REN2RLaTQyWU9sVEM5UVhtcXZUaDFvaG5KdThwbVJGWEVaUUdVbV9CVmhvSWIyX1dQa2phdjZZU2tndUNVSHQ0SFJkMll3RScsCiAgICAgICAgICAgICAgICAncWknID0+ICdCb2N1Q09FT3Etb3lMREFMd3pNWFU4Z09mM0lMMVExX0JXd3Nkb0FOb2g2aTE3OXBzeGdFNEpYVG9XY3BYWlFRcXViOG5nd0U2dVI5ZnBkM202Tl9QTDRUNTV2YkREeWpQS21yTDJ0dEMyZ090eDlLcnBQaC1aN0xRUm80QkU0OG5ISkpyeXN0S0hmRmxhSDJHN0p4SE5nTUJZVkFEeXR0TjA5cUVvYXY4T3MnLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICduJyA9PiAnb2FoVUlvV3cwSzB1c0tOdU9SNkg0d2tmNG9CVVhIVHhSdmdiNDhFLUJWdnhrZUROamJDNGhlOHJVV2NKb1ptZHMyaDdNNzBpbUVWaFJVNWRqSU5YdHFsbFhJNERGcWNJMURnalQ5TGV3TkQ4TVcyS3JmM1Nwc2tfWmtvRm5pbGFrR3lnVHdwWjN1ZXNILVBGQUJOSVVZcE9pTjE1ZHNRUmtncjB2RWh4TjkyaTJhc2JPZW5TWmV5YXh6aUs3MlV3eHJyS29FeHY2a2M1dHdYVHE0aC1RQ2hMT2xuMF9tdFVad2ZzUmFNU3RQczZtUzZYcmd4bnhiV2hvamY2NjN0dUVRdWVHQy1GQ01mcmEzNkM5a25ERkd6S3NOYTdMWksyZGpZZ3lEM0pSX01CXzROVUpXX1RxT1F0d0hZYnhldm9KQXJtLUw1U3Rvd2p6R3ktX2JxNkd3JywKICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICAgICAnZCcgPT4gJ2tMZHRJajZHYkRrc19BcENTVFlRdGVsY050dGxLaU95UHpNclhIZUkteWsxRjcta3BEeFk0LVdZNU5XVjVLbnRhRWVYUzFqODJFMzc1eHhoV01IWHl2alllY1BUOWZwd1JfTTlnVjhuOUhyaDJhblRwVEQ5M0R0NjJ5cFczeURzSnpCblRucll1MWl3V1JnQktyRVlZNDZxQVpJckEyeEF3bm0yWDd1R1IxaGdoa3FEcDBWcWoza2JTQ3oxWHlmQ3M2X0xlaEJ3dHhISXloOFJpcHk0MHAyNG1vT0FiZ3hWdzNyeFRfdmx0M1VWZTRXTzNKa0pPemxwVWYtS1RWSTJQdGdtLWRBUnhURXRFLWlkLTRPSnIwaC1LLVZGczNWU25kVlRJem5TeGZ5cmo4SUxMNk1HX1V2OFlBdTdWSUxTQjNsT1cwODUtNHFFM0R6Z3JUamd5UScsCiAgICAgICAgICAgICAgICAncCcgPT4gJzFyNTJYazQ2Yy1Mc2ZCNVA0NDJwN2F0ZFBVcnhRU3k0bXRpX3RaSTNNZ2YyRXVGVmJVb0RCdmFSUS1TV3hrYmttb0V6TDdKWHJvU0JqU3JLM1lJUWdZZE1neUFFUFRQalh2X2hJMl8xZVRTUFZaZnpMMGxmZk5uMDNJWHFXRjVNREZ1b1VZRTBoemIydmhybE5fcktyYmZESXdVYlRyampnaWVSYndDNkNsMCcsCiAgICAgICAgICAgICAgICAncScgPT4gJ3dMYjM1eDdobVFXWnNXSm1CX3ZsZTg3aWhnWjE5UzhsQkVST0xJc1pHNGF5WlZlOUhpOWdEVkNPQm1VRGRhRFlWVFNOeF84Rnl3MVlZYTlYR3JHbkRldzAwSjI4Y1JVb2VCQl9qS0kxb21hME9ydjFUOWFYSVd4S3dkNGd2eEZJbU9XcjNRUkw5S0VCUnprMlJhdFVCbm1EWkpUSUFmd1RzMGc2OFVaSHZ0YycsCiAgICAgICAgICAgICAgICAnZHAnID0+ICdaSy1Zd0U3ZGlVaDBxUjF0Ujd3OFdIdG9sRHgzTVpfT1Rvd2lGdmdmZVEzU2lyZXNYam05Z1o1S0xoTVh2by11ei1LVUpXRHhTNXBGUV9NMGV2ZG8xZEtpUlRqVndfeDROeXF5WFBNNW5VTFBrY3BVODI3cm5wWnpBSktwZGhXQWdxclhHS0FFQ1FIMFh0NHRhem5qbmRfelZwQW1aWnE2MFdQTUJNZktjdUUnLAogICAgICAgICAgICAgICAgJ2RxJyA9PiAnRHEwZ2ZnSjFEZEZHWGlMdlFFWm51S0VOMFVVbXNKQnhranlkYzNqNFpZZEJpTVJBeTg2eDB2SENqeXdjTWxZWWc0eW9DNFlaYTloTlZjc2pxQTNGZWlMMTlyazhnNlFuMjlUdDBjajhxcXlGcHo5dk5EQlVmQ0FpSlZlRVNPakpEWlBZSGRIWTh2MWItby1aMlg1dHZMeC1UQ2VrZjdveHllS0RVcUtXamlzJywKICAgICAgICAgICAgICAgICdxaScgPT4gJ1ZJTXBNWWJQZjQ3ZFQxd196RFVYZlBpbXNTZWduTU9BMXpUYVg3YUdrXzh1clk2UjgtWlcxRnhVN0FsV0F5TFd5YnFxNnQxNlZGZDdoUWQweTZmbFVLNFNsT3lkQjYxZ3dhbk9zWEdPQU92ODJjSHEwRTNlTDRIcnRaa1V1S3ZuUHJNbnNVVUZsZlVkeWJWenh5ano5SkZfWHlhWTE0YXJkTFNqZjRMX0ZOWScsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgJ24nID0+ICdzWGNoRGFRZWJIblBpR3Z5RE9BVDRzYUdFVWV0U3lvOU1LTE9vV0ZzdWVyaTIzYk9kZ1dwNER5MVdsVXpld2JnQkhvZDVwY005SDk1R1FSVjNKRFhib0lSUk9TQmlnZUM1eWpVMWhHekhIeVhzczhVRHByZWNiQVl4a25UY1FraHNsQU5HUlVabWRUT1E1cVRSc0xBdDZCVFl1eXZWUmRoUzhleFNaRXlfYzRnc183c3ZsSkpRNEg5X054c2lJb0x3QUVrNy1RM1VYRVJHWXdfNzVJRHJHQTg0LWxBXy1DdDRlVGxYSEJJWTJFYVY3dDdMakpheW5WSkNwa3Y0TEtqVFRBdW1pR1VJdVFock5oWkx1Rl9SSkxxSHBNMmtnV0ZMVTctVlRkTDFWYkMydGVqdmNJMkJsTWtFcGsxQnpCWkkwS1FCMEdhRFdGTE4tYUVBdzN2UncnLAogICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgICAgICdkJyA9PiAnVkZDV09xWHI4bnZaTnlhYUpMWGRuTlBYWktSYVdDamtVNVEyZWdRUXBUQk13aHByTXpXenBSOFN4cTFPUFRoaF9KNk1VRDhaMzV3a3k5YjhlRU8wcHdOUzh4bGgxbE9GUlJCb05xRElLVk9rdTBhWmItcnlucThjeGpEVExaUTZGejdqU2pSMUtsb3AtWUthVUhjOUdzRW9mUXFZcnVQaHpTQS1RZ2FqWkdQYkVfMFphVkRKSGZ5ZDdVVUJVS3VuRk1TY2JmbFlBQU9ZSnFWSVZ3YVlSNXpXRUVjZVVqTm5UTm9fQ1ZTai1WdlhMTzVWWmZDVUFWTGdXNGRwZjFTcnRaalN0MzRZTHNSYXJTYjEyN3JlR19EVXdnOUNoLUt5dmpUMVNrSGdVV1JWR2N5bHk3dXZWR1JTRHdzWHlwZHJOaW5QQTRqbGhvTmRpeksyekYyQ1dRJywKICAgICAgICAgICAgICAgICdwJyA9PiAnOWdZMnc2STZTNkwwanVFS3NiZURBd3BkOVdNZmdxRm9lQTl2RXlFVXVrNGtMd0JLY29lMXg0SEc2OGlrOTE4aGREU0U5dkRRU2NjQTN4WEhPQUZPUEo4UjlFZUlBYlRpMVZ3QlluYlRwODdYLXhjUFdsRVBrcmRvVUtXNjB0Z3MxYU5kX05uYzlMRVZWUE1TMzkwemJGeHQ4VE5fYmlhQmdlbE5nYkM5NXNNJywKICAgICAgICAgICAgICAgICdxJyA9PiAndUtsQ0t2S3ZfWkpNVmNkSXM1dlZTVV82Y1B0WUkxbGpXeXRFeFZfc2tzdHZSU05pOXI2NmpkZDkteUJoVmZ1RzRzaHNwMmo3ckduSWlvOTAxUkJlSG82VFBLV1ZWeWtQdTFpWWhRWHcxaklBQmZ3LU1Wc04tM2JRNzZXTGR0MlNEeHNIczdxN3pQeVV5SFhtcHM3eWNaNWM3MndHa1V3Tk9qWWVsbWtpTlMwJywKICAgICAgICAgICAgICAgICdkcCcgPT4gJ3cwa1piVjYzY1ZSdlZYNnlrM0M4Y014bzJxQ000WThuc3ExbG1NU1loRzRFY0w2RldiWDVoOXl1dm5nczRpTEVGazZlQUxvVVM0dklXRXdjTDR0eHc5THNXSF96S0ktaHdvUmVvUDc3Y09kU0w0QVZjcmFIYXdsa3B5ZDJUV2pFNWV2Z2JoV3RPeG5aZWUzY1hKQmtBaTY0SWs2alp4YnZrLVJSM3BFaG5DcycsCiAgICAgICAgICAgICAgICAnZHEnID0+ICdvXzhWMTRTZXpja082Q05MS3NfYnRQZEZpTzlfa0MxRHN1VVRkMkxBZklJVmVNWjdqbjFHdXNfRmY3QjdJVngzcDVLdUJHT1ZGOEwtcWlmTGI2blFuTHlzZ0hEaDEzMk5EaW9aa2hIN21JN2hQRy1QWUVfb2RBcEtkbnFFQ0hXdzBKLUYwSlduVWQ2RDJCXzFUdkY5bVhBMlF4LWlHWW44T1ZWMUJzbXA2cVUnLAogICAgICAgICAgICAgICAgJ3FpJyA9PiAnZU5obzV5UkJFQnhoR0J0UVJ3dzlRaXJac0I2NlRyZkZSZUdfQ2N0ZUkxYUNuZVQwRUxHaFlsUmxDdFVrVFJjbElmdUVQbU5zTkRQYkxvTHFxQ1Z6bkZidmRCN3gtVGwtbTBsX2VGVGoyS2lxd0dxRTlQWkI5bk5Ud01WdkgzVlJSU0xXQUN2UG5TaXdQOE41VXN5LVdSWFMtVjdUYnB4SWh2ZXBUZkUwTk5vJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnbicgPT4gJ29mZ1dDdUxqeWJSbHpvMHRaV0pqTml1U2ZiNHA0ZkFrZF93V0pjeVFvVGJqaTlrMGw4VzI2bVBkZHhIbWZIUXAtVmF3LTRxUENKcmNTMm1KUE1FelAxUHQwQm00ZDRRbEwteVJULVNGZDJsWlMtcENnTk1zRDFXX1lwUlBFd09Xdkc2YjMyNjkwcjJqWjQ3c29NWm85d0d6amJfN09NZzBMT0wtYlNmNjNrcGFTSFNYbmRTNXo1cmV4TWRiQllVc0xBOWUtS1hCZFFPUy1VVG83V1RCRU1hMlIyQ2FwSGc2NjV4c210ZFZNVEJRWTR1RFpseHZiM3FDbzVad0toOWtHNExUNl9JNUlobEpIN2FHaHl4WEZ2VUstRFdObW91ZEY4TkFjbzlfaDlpYUdOajhxMmV0aEZrTUxzOTFremsyUEFjRFRXOWdiNTRoNEZSV3l1WHBvUScsCiAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICAgICAgJ2QnID0+ICdFcTV4cEduTkNpdkRmbEpzUlFCWEh4MWhkUjFrNlVsd2UySlpENTBMcFh5V1BFQWVQODh2TE5POTdJamxBN19HUTVzTEtNZ3ZmVGVYWng5U0UtN1l3Vm9sMk5YT29BSmU0NnN1aTM5NUlXX0dPLXBXSjFPMEJrVEdvVkVuMmJLVlJVQ2d1LUdqQlZhWUxVNmYzbDlrSmZGTlMzRTBRYlZkeHp1YlN1M01rcXpqa240MzlYME1fVjUxZ2ZwUkxJOUpZYW5yQzRENHFBZEdjb3BWXzBaSEh6UWxCanVkVTJRdlh0NGVoTllUQ0JyNlhDTFFVU2hiMWp1VU8xWmRpWW9GYUZRVDVUdzhiR1VsX3hfalRqM2NjUERWWkZEOXBJdWhMaEJPbmV1ZnVCaUI0Y1M5OGwyU1JfUlF5R1dTZVdqbmN6VDBRVTkxcDFEaE9WUnVPb3B6blEnLAogICAgICAgICAgICAgICAgJ3AnID0+ICc0QnpFRU90SXBtVmRWRVpOQ3FTN2JhQzRjcmQwcHFuUkhfNUlCM2p3M2JjeEduNlFMdm5FdGZkVWRpWXJxQmRzczFsNThCUTNLaG9vS2VRVGE5QUIwSHdfUHk1UEpkVEpOUFk4Y1FuN291WjJLS0RjbW5QR0JZNXQ3eUxjMVFsUTV4SGR3VzFWaHZLbi1uWHFoSlRCZ0lQZ3RsZEMtS0RWNXoteTJYRHdHVWMnLAogICAgICAgICAgICAgICAgJ3EnID0+ICd1UVBFZmdtVnRqTDBVeXl4ODhHWkZGMWZPdW5IMy03Y2VwS210SDRweGh0Q29IcXBXbVQ4WUFtWnhhZXdIZ0hBakxZc3AxWlNlN3pGWUhqN0M2dWw3VGplTFFlWkRfWXdENjZ0NjJ3RG1wZV9IbEItVG5CQS1uamJnbGZJc1JMdFhsbkR6UWt2NWRUbHRSSjExQktCQnlwZWVGNjY4OXJqY0pJREV6OVJXZGMnLAogICAgICAgICAgICAgICAgJ2RwJyA9PiAnQndLZlYzQWtxNV9NRlpERlpDblctd3psLUNDbzgzV29adm5MUXdDVGVEdjh1emx1UlNubTcxSTNRQ0xkaHJxRTJlOVlreHZ1eGRCZnBUX1BJN1l6LUZPS251MVI2SHNKZURDam4xMlNrM3ZtQWt0VjJ6YjM0TUNkeTdjcGRUaF9ZVnI3dHNzMnU2dm5lVHdyQTg2clp0dTVNYnIxQzFYc212a3hIUUFkWW8wJywKICAgICAgICAgICAgICAgICdkcScgPT4gJ2hfOTYtbUsxUl83Z2xoc3VtODFkWnhqVG5ZeW5QYlpwSHppWmplZUhjWFlzWGFhTXdrT2xPRHNXYTdJOXhYRG9Sd2JLZ0I3MTlycm1JMm9LcjZOM0RvOVUwYWphSEYtTktKbndnak1kMnc5Y2p6M18ta3lObHhBcjJ2NElLaEdOcG1NNWlJZ09TMVZabk9aNjhtNl9wYkxCU3AzbnNzVGRscXZkMHRJaVRIVScsCiAgICAgICAgICAgICAgICAncWknID0+ICdJWWQ3REhPaHJXdnhrd1BRc1JNMnRPZ3JqYmNyZnZ0UUppcGQtRGxjeHlWdXVNOXNRTGRnalZrMm95MjZGMEVtcFNjR0xxMk1vd1g3ZmhkX1FKUTN5ZHk1Y1k3WUlCaTg3dzkzSUtMRWRmbmJKdG9PUExVVzBJVHJKUmVPZ28xY3E5U2JzeFlhd0JnZnBfZ2g2QTU2MDNrMi1aUXdWSzBKS1NIdUxGa3VRM1UnLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAgICAgJ2NydicgPT4gJ1AtNTIxJywKICAgICAgICAgICAgICAgICd4JyA9PiAnQWVrcEJROFNUOGE4VmNmVk9UTmwzNTN2U3JEQ0xMSlhtUGswNndUanhycmpjQnBYcDVFT25ZR19OakZaNk92TEZWMWpTZlM5dHN6NHFVeGNXY2Vxd1FHaycsCiAgICAgICAgICAgICAgICAneScgPT4gJ0FEU21SQTQzWjFEU054X1J2Y0xJODdjZEwwN2w2alF5eUJYTW94VmdfbDJUaC14M1MxV0RoakRseTc5YWpMNEtrZDBBWk1hWm1oOXVibWY2M2Uza3lNajInLAogICAgICAgICAgICAgICAgJ2QnID0+ICdBWTVwYjdBMFVGaUIzUkVMU0Q2NGZUTE9TVl9qYXpkRjdmTFl5dVR3OGxPZlJoV2c2WTZyVXJQQXhlckV6Z2RSaGFqbnUwZmVyQjBkNTN2TTltRTE1ajJDJywKICAgICAgICAgICAgXSwKICAgICAgICBdXTsKCiAgICAgICAgcmV0dXJuIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoJGtleXMpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Algorithm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Algorithm/SignatureAlgorithm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxBbGdvcml0aG07Cgp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG07CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKCmludGVyZmFjZSBTaWduYXR1cmVBbGdvcml0aG0gZXh0ZW5kcyBBbGdvcml0aG0KewogICAgLyoqCiAgICAgKiBTaWduIHRoZSBpbnB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gSldLICAgICRrZXkgICBUaGUgcHJpdmF0ZSBrZXkgdXNlZCB0byBzaWduIHRoZSBkYXRhCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBUaGUgaW5wdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24gSWYga2V5IGRvZXMgbm90IHN1cHBvcnQgdGhlIGFsZ29yaXRobSBvciBpZiB0aGUga2V5IHVzYWdlIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgb3BlcmF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduKEpXSyAka2V5LCBzdHJpbmcgJGlucHV0KTogc3RyaW5nOwoKICAgIC8qKgogICAgICogVmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gSldLICAgICRrZXkgICAgICAgVGhlIHByaXZhdGUga2V5IHVzZWQgdG8gc2lnbiB0aGUgZGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXQgICAgIFRoZSBpbnB1dAogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5CiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uIElmIGtleSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhbGdvcml0aG0gb3IgaWYgdGhlIGtleSB1c2FnZSBkb2VzIG5vdCBhdXRob3JpemUgdGhlIG9wZXJhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KEpXSyAka2V5LCBzdHJpbmcgJGlucHV0LCBzdHJpbmcgJHNpZ25hdHVyZSk6IGJvb2w7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUiLAogICAgImRlc2NyaXB0aW9uIjogIlNpZ25hdHVyZSBjb21wb25lbnQgb2YgdGhlIEpXVCBGcmFtZXdvcmsuIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJrZXl3b3JkcyI6IFsiSldTIiwgIkpXVCIsICJKV0UiLCAiSldBIiwgIkpXSyIsICJKV0tTZXQiLCAiSm90IiwgIkpvc2UiLCAiUkZDNzUxNSIsICJSRkM3NTE2IiwgIlJGQzc1MTciLCAiUkZDNzUxOCIsICJSRkM3NTE5IiwgIlJGQzc1MjAiLCAiQnVuZGxlIiwgIlN5bWZvbnkiXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiRmxvcmVudCBNb3JzZWxsaSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vU3BvbWt5IgogICAgICAgIH0sewogICAgICAgICAgICAibmFtZSI6ICJBbGwgY29udHJpYnV0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LXNpZ25hdHVyZS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXFNpZ25hdHVyZVxcIjogICIiCiAgICAgICAgfQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJ3ZWItdG9rZW4vand0LWNvcmUiOiAiXjEuMyIsCiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lY2RzYSI6ICJeMS4zIiwKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLWVkZHNhIjogIl4xLjMiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0taG1hYyI6ICJeMS4zIiwKICAgICAgICAid2ViLXRva2VuL2p3dC1zaWduYXR1cmUtYWxnb3JpdGhtLW5vbmUiOiAiXjEuMyIsCiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1yc2EiOiAiXjEuMyIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wfF43LjAiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lY2RzYSI6ICJFQ0RTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1lZGRzYSI6ICJFZERTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1obWFjIjogIkhNQUMgQmFzZWQgU2lnbmF0dXJlIEFsZ29yaXRobXMiLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tbm9uZSI6ICJOb25lIFNpZ25hdHVyZSBBbGdvcml0aG0iLAogICAgICAgICJ3ZWItdG9rZW4vand0LXNpZ25hdHVyZS1hbGdvcml0aG0tcnNhIjogIlJTQSBCYXNlZCBTaWduYXR1cmUgQWxnb3JpdGhtcyIsCiAgICAgICAgIndlYi10b2tlbi9qd3Qtc2lnbmF0dXJlLWFsZ29yaXRobS1leHBlcmltZW50YWwiOiAiRXhwZXJpbWVudGFsIFNpZ25hdHVyZSBBbGdvcml0aG1zIgogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjMueC1kZXYiCiAgICAgICAgfQogICAgfSwKICAgICJjb25maWciOiB7CiAgICAgICAgInNvcnQtcGFja2FnZXMiOiB0cnVlCiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXVDsKCmNsYXNzIEpXUyBpbXBsZW1lbnRzIEpXVAp7CiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRpc1BheWxvYWREZXRhY2hlZCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICovCiAgICBwcml2YXRlICRlbmNvZGVkUGF5bG9hZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIFNpZ25hdHVyZVtdCiAgICAgKi8KICAgIHByaXZhdGUgJHNpZ25hdHVyZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGF5bG9hZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBKV1MgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkcGF5bG9hZCwgP3N0cmluZyAkZW5jb2RlZFBheWxvYWQgPSBudWxsLCBib29sICRpc1BheWxvYWREZXRhY2hlZCA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5wYXlsb2FkID0gJHBheWxvYWQ7CiAgICAgICAgJHRoaXMtPmVuY29kZWRQYXlsb2FkID0gJGVuY29kZWRQYXlsb2FkOwogICAgICAgICR0aGlzLT5pc1BheWxvYWREZXRhY2hlZCA9ICRpc1BheWxvYWREZXRhY2hlZDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBKV1Mgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gSldTCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKD9zdHJpbmcgJHBheWxvYWQsID9zdHJpbmcgJGVuY29kZWRQYXlsb2FkID0gbnVsbCwgYm9vbCAkaXNQYXlsb2FkRGV0YWNoZWQgPSBmYWxzZSk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHBheWxvYWQsICRlbmNvZGVkUGF5bG9hZCwgJGlzUGF5bG9hZERldGFjaGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF5bG9hZCgpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYXlsb2FkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXlsb2FkIGlzIGRldGFjaGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQYXlsb2FkRGV0YWNoZWQoKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXNQYXlsb2FkRGV0YWNoZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBCYXNlNjRVcmwgZW5jb2RlZCBwYXlsb2FkLgogICAgICogSWYgdGhlIHBheWxvYWQgaXMgZGV0YWNoZWQsIHRoaXMgbWV0aG9kIHJldHVybnMgbnVsbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVuY29kZWRQYXlsb2FkKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICBpZiAodHJ1ZSA9PT0gJHRoaXMtPmlzUGF5bG9hZERldGFjaGVkKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZWRQYXlsb2FkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2lnbmF0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIEpXUy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFNpZ25hdHVyZVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaWduYXR1cmVzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2lnbmF0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ25hdHVyZShpbnQgJGlkKTogU2lnbmF0dXJlCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5zaWduYXR1cmVzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlc1skaWRdOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBzaWduYXR1cmUgZG9lcyBub3QgZXhpc3QuJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgc2lnbmF0dXJlIHRvIHRoZSBKV1Mgb2JqZWN0LgogICAgICogSXRzIHJldHVybnMgYSBuZXcgSldTIG9iamVjdC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqCiAgICAgKiBAcmV0dXJuIEpXUwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU2lnbmF0dXJlKHN0cmluZyAkc2lnbmF0dXJlLCBhcnJheSAkcHJvdGVjdGVkSGVhZGVyLCA/c3RyaW5nICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyLCBhcnJheSAkaGVhZGVyID0gW10pOiBzZWxmCiAgICB7CiAgICAgICAgJGp3cyA9IGNsb25lICR0aGlzOwogICAgICAgICRqd3MtPnNpZ25hdHVyZXNbXSA9IFNpZ25hdHVyZTo6Y3JlYXRlKCRzaWduYXR1cmUsICRwcm90ZWN0ZWRIZWFkZXIsICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyLCAkaGVhZGVyKTsKCiAgICAgICAgcmV0dXJuICRqd3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgSldTLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnRTaWduYXR1cmVzKCk6IGludAogICAgewogICAgICAgIHJldHVybiBcY291bnQoJHRoaXMtPnNpZ25hdHVyZXMpOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgc3BsaXRzIHRoZSBKV1MgaW50byBhIGxpc3Qgb2YgSldTcy4KICAgICAqIEl0IGlzIG9ubHkgdXNlZnVsIHdoZW4gdGhlIEpXUyBjb250YWlucyBtb3JlIHRoYW4gb25lIHNpZ25hdHVyZSAoSlNPTiBHZW5lcmFsIFNlcmlhbGl6YXRpb24pLgogICAgICoKICAgICAqIEByZXR1cm4gSldTW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNwbGl0KCk6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFtdOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zaWduYXR1cmVzIGFzICRzaWduYXR1cmUpIHsKICAgICAgICAgICAgJGp3cyA9IHNlbGY6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wYXlsb2FkLAogICAgICAgICAgICAgICAgJHRoaXMtPmVuY29kZWRQYXlsb2FkLAogICAgICAgICAgICAgICAgJHRoaXMtPmlzUGF5bG9hZERldGFjaGVkCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRqd3MgPSAkandzLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAgJHNpZ25hdHVyZS0+Z2V0U2lnbmF0dXJlKCksCiAgICAgICAgICAgICAgICAgJHNpZ25hdHVyZS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCksCiAgICAgICAgICAgICAgICAgJHNpZ25hdHVyZS0+Z2V0RW5jb2RlZFByb3RlY3RlZEhlYWRlcigpLAogICAgICAgICAgICAgICAgICRzaWduYXR1cmUtPmdldEhlYWRlcigpCiAgICAgICAgICAgICApOwoKICAgICAgICAgICAgJHJlc3VsdFtdID0gJGp3czsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcSnNvbkNvbnZlcnRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxVdGlsXEtleUNoZWNrZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtXFNpZ25hdHVyZUFsZ29yaXRobTsKCmNsYXNzIEpXU0J1aWxkZXIKewogICAgLyoqCiAgICAgKiBAdmFyIEpzb25Db252ZXJ0ZXIKICAgICAqLwogICAgcHJpdmF0ZSAkanNvbkNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkcGF5bG9hZDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwcml2YXRlICRpc1BheWxvYWREZXRhY2hlZDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkc2lnbmF0dXJlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHZhciBBbGdvcml0aG1NYW5hZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgJHNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2x8bnVsbAogICAgICovCiAgICBwcml2YXRlICRpc1BheWxvYWRFbmNvZGVkID0gbnVsbDsKCiAgICAvKioKICAgICAqIEpXU0J1aWxkZXIgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChKc29uQ29udmVydGVyICRqc29uQ29udmVydGVyLCBBbGdvcml0aG1NYW5hZ2VyICRzaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyKQogICAgewogICAgICAgICR0aGlzLT5qc29uQ29udmVydGVyID0gJGpzb25Db252ZXJ0ZXI7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXIgPSAkc2lnbmF0dXJlQWxnb3JpdGhtTWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFsZ29yaXRobSBtYW5hZ2VyIGFzc29jaWF0ZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyKCk6IEFsZ29yaXRobU1hbmFnZXIKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUgY3VycmVudCBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gSldTQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKCk6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+cGF5bG9hZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPmlzUGF5bG9hZERldGFjaGVkID0gZmFsc2U7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZXMgPSBbXTsKICAgICAgICAkdGhpcy0+aXNQYXlsb2FkRW5jb2RlZCA9IG51bGw7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgcGF5bG9hZC4KICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgbmV3IEpXU0J1aWxkZXIgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gSldTQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBheWxvYWQoc3RyaW5nICRwYXlsb2FkLCBib29sICRpc1BheWxvYWREZXRhY2hlZCA9IGZhbHNlKTogc2VsZgogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gXG1iX2RldGVjdF9lbmNvZGluZygkcGF5bG9hZCwgJ1VURi04JywgdHJ1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBwYXlsb2FkIG11c3QgYmUgZW5jb2RlZCBpbiBVVEYtOCcpOwogICAgICAgIH0KICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKICAgICAgICAkY2xvbmUtPnBheWxvYWQgPSAkcGF5bG9hZDsKICAgICAgICAkY2xvbmUtPmlzUGF5bG9hZERldGFjaGVkID0gJGlzUGF5bG9hZERldGFjaGVkOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICogQWRkcyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXB1dGUgdGhlIHNpZ25hdHVyZS4KICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgbmV3IEpXU0J1aWxkZXIgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gSldTQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU2lnbmF0dXJlKEpXSyAkc2lnbmF0dXJlS2V5LCBhcnJheSAkcHJvdGVjdGVkSGVhZGVyLCBhcnJheSAkaGVhZGVyID0gW10pOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrQjY0QW5kQ3JpdGljYWxIZWFkZXIoJHByb3RlY3RlZEhlYWRlcik7CiAgICAgICAgJGlzUGF5bG9hZEVuY29kZWQgPSAkdGhpcy0+Y2hlY2tJZlBheWxvYWRJc0VuY29kZWQoJHByb3RlY3RlZEhlYWRlcik7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5pc1BheWxvYWRFbmNvZGVkKSB7CiAgICAgICAgICAgICR0aGlzLT5pc1BheWxvYWRFbmNvZGVkID0gJGlzUGF5bG9hZEVuY29kZWQ7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5pc1BheWxvYWRFbmNvZGVkICE9PSAkaXNQYXlsb2FkRW5jb2RlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRm9yZWlnbiBwYXlsb2FkIGVuY29kaW5nIGRldGVjdGVkLicpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+Y2hlY2tEdXBsaWNhdGVkSGVhZGVyUGFyYW1ldGVycygkcHJvdGVjdGVkSGVhZGVyLCAkaGVhZGVyKTsKICAgICAgICBLZXlDaGVja2VyOjpjaGVja0tleVVzYWdlKCRzaWduYXR1cmVLZXksICdzaWduYXR1cmUnKTsKICAgICAgICAkc2lnbmF0dXJlQWxnb3JpdGhtID0gJHRoaXMtPmZpbmRTaWduYXR1cmVBbGdvcml0aG0oJHNpZ25hdHVyZUtleSwgJHByb3RlY3RlZEhlYWRlciwgJGhlYWRlcik7CiAgICAgICAgS2V5Q2hlY2tlcjo6Y2hlY2tLZXlBbGdvcml0aG0oJHNpZ25hdHVyZUtleSwgJHNpZ25hdHVyZUFsZ29yaXRobS0+bmFtZSgpKTsKICAgICAgICAkY2xvbmUgPSBjbG9uZSAkdGhpczsKICAgICAgICAkY2xvbmUtPnNpZ25hdHVyZXNbXSA9IFsKICAgICAgICAgICAgJ3NpZ25hdHVyZV9hbGdvcml0aG0nID0+ICRzaWduYXR1cmVBbGdvcml0aG0sCiAgICAgICAgICAgICdzaWduYXR1cmVfa2V5JyA9PiAkc2lnbmF0dXJlS2V5LAogICAgICAgICAgICAncHJvdGVjdGVkX2hlYWRlcicgPT4gJHByb3RlY3RlZEhlYWRlciwKICAgICAgICAgICAgJ2hlYWRlcicgPT4gJGhlYWRlciwKICAgICAgICBdOwoKICAgICAgICByZXR1cm4gJGNsb25lOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcHV0ZXMgYWxsIHNpZ25hdHVyZXMgYW5kIHJldHVybiB0aGUgZXhwZWN0ZWQgSldTIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkKCk6IEpXUwogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+cGF5bG9hZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBwYXlsb2FkIGlzIG5vdCBzZXQuJyk7CiAgICAgICAgfQogICAgICAgIGlmICgwID09PSBcY291bnQoJHRoaXMtPnNpZ25hdHVyZXMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQXQgbGVhc3Qgb25lIHNpZ25hdHVyZSBtdXN0IGJlIHNldC4nKTsKICAgICAgICB9CgogICAgICAgICRlbmNvZGVkUGF5bG9hZCA9IGZhbHNlID09PSAkdGhpcy0+aXNQYXlsb2FkRW5jb2RlZCA/ICR0aGlzLT5wYXlsb2FkIDogQmFzZTY0VXJsOjplbmNvZGUoJHRoaXMtPnBheWxvYWQpOwogICAgICAgICRqd3MgPSBKV1M6OmNyZWF0ZSgkdGhpcy0+cGF5bG9hZCwgJGVuY29kZWRQYXlsb2FkLCAkdGhpcy0+aXNQYXlsb2FkRGV0YWNoZWQpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zaWduYXR1cmVzIGFzICRzaWduYXR1cmUpIHsKICAgICAgICAgICAgLyoqIEB2YXIgU2lnbmF0dXJlQWxnb3JpdGhtICRzaWduYXR1cmVBbGdvcml0aG0gKi8KICAgICAgICAgICAgJHNpZ25hdHVyZUFsZ29yaXRobSA9ICRzaWduYXR1cmVbJ3NpZ25hdHVyZV9hbGdvcml0aG0nXTsKICAgICAgICAgICAgLyoqIEB2YXIgSldLICRzaWduYXR1cmVLZXkgKi8KICAgICAgICAgICAgJHNpZ25hdHVyZUtleSA9ICRzaWduYXR1cmVbJ3NpZ25hdHVyZV9rZXknXTsKICAgICAgICAgICAgLyoqIEB2YXIgYXJyYXkgJHByb3RlY3RlZEhlYWRlciAqLwogICAgICAgICAgICAkcHJvdGVjdGVkSGVhZGVyID0gJHNpZ25hdHVyZVsncHJvdGVjdGVkX2hlYWRlciddOwogICAgICAgICAgICAvKiogQHZhciBhcnJheSAkaGVhZGVyICovCiAgICAgICAgICAgICRoZWFkZXIgPSAkc2lnbmF0dXJlWydoZWFkZXInXTsKICAgICAgICAgICAgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIgPSBlbXB0eSgkcHJvdGVjdGVkSGVhZGVyKSA/IG51bGwgOiBCYXNlNjRVcmw6OmVuY29kZSgkdGhpcy0+anNvbkNvbnZlcnRlci0+ZW5jb2RlKCRwcm90ZWN0ZWRIZWFkZXIpKTsKICAgICAgICAgICAgJGlucHV0ID0gXHNwcmludGYoJyVzLiVzJywgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIsICRlbmNvZGVkUGF5bG9hZCk7CiAgICAgICAgICAgICRzID0gJHNpZ25hdHVyZUFsZ29yaXRobS0+c2lnbigkc2lnbmF0dXJlS2V5LCAkaW5wdXQpOwogICAgICAgICAgICAkandzID0gJGp3cy0+YWRkU2lnbmF0dXJlKCRzLCAkcHJvdGVjdGVkSGVhZGVyLCAkZW5jb2RlZFByb3RlY3RlZEhlYWRlciwgJGhlYWRlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGp3czsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrSWZQYXlsb2FkSXNFbmNvZGVkKGFycmF5ICRwcm90ZWN0ZWRIZWFkZXIpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICFcYXJyYXlfa2V5X2V4aXN0cygnYjY0JywgJHByb3RlY3RlZEhlYWRlcikgfHwgdHJ1ZSA9PT0gJHByb3RlY3RlZEhlYWRlclsnYjY0J107CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0I2NEFuZENyaXRpY2FsSGVhZGVyKGFycmF5ICRwcm90ZWN0ZWRIZWFkZXIpCiAgICB7CiAgICAgICAgaWYgKCFcYXJyYXlfa2V5X2V4aXN0cygnYjY0JywgJHByb3RlY3RlZEhlYWRlcikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCdjcml0JywgJHByb3RlY3RlZEhlYWRlcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignVGhlIHByb3RlY3RlZCBoZWFkZXIgcGFyYW1ldGVyICJjcml0IiBpcyBtYW5kYXRvcnkgd2hlbiBwcm90ZWN0ZWQgaGVhZGVyIHBhcmFtZXRlciAiYjY0IiBpcyBzZXQuJyk7CiAgICAgICAgfQogICAgICAgIGlmICghXGlzX2FycmF5KCRwcm90ZWN0ZWRIZWFkZXJbJ2NyaXQnXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignVGhlIHByb3RlY3RlZCBoZWFkZXIgcGFyYW1ldGVyICJjcml0IiBtdXN0IGJlIGFuIGFycmF5LicpOwogICAgICAgIH0KICAgICAgICBpZiAoIVxpbl9hcnJheSgnYjY0JywgJHByb3RlY3RlZEhlYWRlclsnY3JpdCddLCB0cnVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdUaGUgcHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXIgImNyaXQiIG11c3QgY29udGFpbiAiYjY0IiB3aGVuIHByb3RlY3RlZCBoZWFkZXIgcGFyYW1ldGVyICJiNjQiIGlzIHNldC4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kU2lnbmF0dXJlQWxnb3JpdGhtKEpXSyAka2V5LCBhcnJheSAkcHJvdGVjdGVkSGVhZGVyLCBhcnJheSAkaGVhZGVyKTogU2lnbmF0dXJlQWxnb3JpdGhtCiAgICB7CiAgICAgICAgJGNvbXBsZXRlSGVhZGVyID0gXGFycmF5X21lcmdlKCRoZWFkZXIsICRwcm90ZWN0ZWRIZWFkZXIpOwogICAgICAgIGlmICghXGFycmF5X2tleV9leGlzdHMoJ2FsZycsICRjb21wbGV0ZUhlYWRlcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ05vICJhbGciIHBhcmFtZXRlciBzZXQgaW4gdGhlIGhlYWRlci4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRrZXktPmhhcygnYWxnJykgJiYgJGtleS0+Z2V0KCdhbGcnKSAhPT0gJGNvbXBsZXRlSGVhZGVyWydhbGcnXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGFsZ29yaXRobSAiJXMiIGlzIG5vdCBhbGxvd2VkIHdpdGggdGhpcyBrZXkuJywgJGNvbXBsZXRlSGVhZGVyWydhbGcnXSkpOwogICAgICAgIH0KCiAgICAgICAgJHNpZ25hdHVyZUFsZ29yaXRobSA9ICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyLT5nZXQoJGNvbXBsZXRlSGVhZGVyWydhbGcnXSk7CiAgICAgICAgaWYgKCEkc2lnbmF0dXJlQWxnb3JpdGhtIGluc3RhbmNlb2YgU2lnbmF0dXJlQWxnb3JpdGhtKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgYWxnb3JpdGhtICIlcyIgaXMgbm90IHN1cHBvcnRlZC4nLCAkY29tcGxldGVIZWFkZXJbJ2FsZyddKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpZ25hdHVyZUFsZ29yaXRobTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlZEhlYWRlclBhcmFtZXRlcnMoYXJyYXkgJGhlYWRlcjEsIGFycmF5ICRoZWFkZXIyKQogICAgewogICAgICAgICRpbnRlciA9IFxhcnJheV9pbnRlcnNlY3Rfa2V5KCRoZWFkZXIxLCAkaGVhZGVyMik7CiAgICAgICAgaWYgKCFlbXB0eSgkaW50ZXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdUaGUgaGVhZGVyIGNvbnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllczogJXMuJywgXGltcGxvZGUoJywgJywgXGFycmF5X2tleXMoJGludGVyKSkpKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSBuilderFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5Owp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcSnNvbkNvbnZlcnRlcjsKCmNsYXNzIEpXU0J1aWxkZXJGYWN0b3J5CnsKICAgIC8qKgogICAgICogQHZhciBKc29uQ29udmVydGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGpzb25FbmNvZGVyOwoKICAgIC8qKgogICAgICogQHZhciBBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRzaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeTsKCiAgICAvKioKICAgICAqIEpXU0J1aWxkZXJGYWN0b3J5IGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSnNvbkNvbnZlcnRlciAkanNvbkVuY29kZXIsIEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5ICRzaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+anNvbkVuY29kZXIgPSAkanNvbkVuY29kZXI7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5ID0gJHNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIEpXU0J1aWxkZXIgdXNpbmcgdGhlIGdpdmVuIGFsZ29yaXRobSBhbGlhc2VzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkYWxnb3JpdGhtcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRhbGdvcml0aG1zKTogSldTQnVpbGRlcgogICAgewogICAgICAgICRhbGdvcml0aG1NYW5hZ2VyID0gJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXJGYWN0b3J5LT5jcmVhdGUoJGFsZ29yaXRobXMpOwoKICAgICAgICByZXR1cm4gbmV3IEpXU0J1aWxkZXIoJHRoaXMtPmpzb25FbmNvZGVyLCAkYWxnb3JpdGhtTWFuYWdlcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDaGVja2VyXEhlYWRlckNoZWNrZXJNYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyXEpXU1NlcmlhbGl6ZXJNYW5hZ2VyOwoKY2xhc3MgSldTTG9hZGVyCnsKICAgIC8qKgogICAgICogQHZhciBKV1NWZXJpZmllcgogICAgICovCiAgICBwcml2YXRlICRqd3NWZXJpZmllcjsKCiAgICAvKioKICAgICAqIEB2YXIgSGVhZGVyQ2hlY2tlck1hbmFnZXJ8bnVsbAogICAgICovCiAgICBwcml2YXRlICRoZWFkZXJDaGVja2VyTWFuYWdlcjsKCiAgICAvKioKICAgICAqIEB2YXIgSldTU2VyaWFsaXplck1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSAkc2VyaWFsaXplck1hbmFnZXI7CgogICAgLyoqCiAgICAgKiBKV1NMb2FkZXIgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChKV1NTZXJpYWxpemVyTWFuYWdlciAkc2VyaWFsaXplck1hbmFnZXIsIEpXU1ZlcmlmaWVyICRqd3NWZXJpZmllciwgP0hlYWRlckNoZWNrZXJNYW5hZ2VyICRoZWFkZXJDaGVja2VyTWFuYWdlcikKICAgIHsKICAgICAgICAkdGhpcy0+c2VyaWFsaXplck1hbmFnZXIgPSAkc2VyaWFsaXplck1hbmFnZXI7CiAgICAgICAgJHRoaXMtPmp3c1ZlcmlmaWVyID0gJGp3c1ZlcmlmaWVyOwogICAgICAgICR0aGlzLT5oZWFkZXJDaGVja2VyTWFuYWdlciA9ICRoZWFkZXJDaGVja2VyTWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEpXU1ZlcmlmaWVyIGFzc29jaWF0ZWQgdG8gdGhlIEpXU0xvYWRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEp3c1ZlcmlmaWVyKCk6IEpXU1ZlcmlmaWVyCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5qd3NWZXJpZmllcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEhlYWRlciBDaGVja2VyIE1hbmFnZXIgYXNzb2NpYXRlZCB0byB0aGUgSldTTG9hZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyQ2hlY2tlck1hbmFnZXIoKTogP0hlYWRlckNoZWNrZXJNYW5hZ2VyCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJDaGVja2VyTWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEpXU1NlcmlhbGl6ZXIgYXNzb2NpYXRlZCB0byB0aGUgSldTTG9hZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VyaWFsaXplck1hbmFnZXIoKTogSldTU2VyaWFsaXplck1hbmFnZXIKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlcmlhbGl6ZXJNYW5hZ2VyOwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gbG9hZCBhbmQgdmVyaWZ5IHRoZSB0b2tlbiB1c2luZyB0aGUgZ2l2ZW4ga2V5LgogICAgICogSXQgcmV0dXJucyBhIEpXUyBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgJHNpZ25hdHVyZSB2YXJpYWJsZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG90aGVyd2lzZSBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICoKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEFuZFZlcmlmeVdpdGhLZXkoc3RyaW5nICR0b2tlbiwgSldLICRrZXksID9pbnQgJiRzaWduYXR1cmUsID9zdHJpbmcgJHBheWxvYWQgPSBudWxsKTogSldTCiAgICB7CiAgICAgICAgJGtleXNldCA9IEpXS1NldDo6Y3JlYXRlRnJvbUtleXMoWyRrZXldKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5sb2FkQW5kVmVyaWZ5V2l0aEtleVNldCgkdG9rZW4sICRrZXlzZXQsICRzaWduYXR1cmUsICRwYXlsb2FkKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIGxvYWQgYW5kIHZlcmlmeSB0aGUgdG9rZW4gdXNpbmcgdGhlIGdpdmVuIGtleSBzZXQuCiAgICAgKiBJdCByZXR1cm5zIGEgSldTIGFuZCB3aWxsIHBvcHVsYXRlIHRoZSAkc2lnbmF0dXJlIHZhcmlhYmxlIGluIGNhc2Ugb2Ygc3VjY2Vzcywgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQW5kVmVyaWZ5V2l0aEtleVNldChzdHJpbmcgJHRva2VuLCBKV0tTZXQgJGtleXNldCwgP2ludCAmJHNpZ25hdHVyZSwgP3N0cmluZyAkcGF5bG9hZCA9IG51bGwpOiBKV1MKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkandzID0gJHRoaXMtPnNlcmlhbGl6ZXJNYW5hZ2VyLT51bnNlcmlhbGl6ZSgkdG9rZW4pOwogICAgICAgICAgICAkbmJTaWduYXR1cmVzID0gJGp3cy0+Y291bnRTaWduYXR1cmVzKCk7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRuYlNpZ25hdHVyZXM7ICsrJGkpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+cHJvY2Vzc1NpZ25hdHVyZSgkandzLCAka2V5c2V0LCAkaSwgJHBheWxvYWQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNpZ25hdHVyZSA9ICRpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGp3czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gTm90aGluZyB0byBkby4gRXhjZXB0aW9uIHRocm93biBqdXN0IGFmdGVyCiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbignVW5hYmxlIHRvIGxvYWQgYW5kIHZlcmlmeSB0aGUgdG9rZW4uJyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBwcm9jZXNzU2lnbmF0dXJlKEpXUyAkandzLCBKV0tTZXQgJGtleXNldCwgaW50ICRzaWduYXR1cmUsID9zdHJpbmcgJHBheWxvYWQpOiBib29sCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5oZWFkZXJDaGVja2VyTWFuYWdlcikgewogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlckNoZWNrZXJNYW5hZ2VyLT5jaGVjaygkandzLCAkc2lnbmF0dXJlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5qd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleVNldCgkandzLCAka2V5c2V0LCAkc2lnbmF0dXJlLCAkcGF5bG9hZCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSLoaderFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDaGVja2VyXEhlYWRlckNoZWNrZXJNYW5hZ2VyRmFjdG9yeTsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyXEpXU1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeTsKCmNsYXNzIEpXU0xvYWRlckZhY3RvcnkKewogICAgLyoqCiAgICAgKiBAdmFyIEpXU1ZlcmlmaWVyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRqd3NWZXJpZmllckZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIEpXU1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRqd3NTZXJpYWxpemVyTWFuYWdlckZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIEhlYWRlckNoZWNrZXJNYW5hZ2VyRmFjdG9yeXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGhlYWRlckNoZWNrZXJNYW5hZ2VyRmFjdG9yeSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBKV1NMb2FkZXJGYWN0b3J5IGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSldTU2VyaWFsaXplck1hbmFnZXJGYWN0b3J5ICRqd3NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnksIEpXU1ZlcmlmaWVyRmFjdG9yeSAkandzVmVyaWZpZXJGYWN0b3J5LCA/SGVhZGVyQ2hlY2tlck1hbmFnZXJGYWN0b3J5ICRoZWFkZXJDaGVja2VyTWFuYWdlckZhY3RvcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPmp3c1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeSA9ICRqd3NTZXJpYWxpemVyTWFuYWdlckZhY3Rvcnk7CiAgICAgICAgJHRoaXMtPmp3c1ZlcmlmaWVyRmFjdG9yeSA9ICRqd3NWZXJpZmllckZhY3Rvcnk7CiAgICAgICAgJHRoaXMtPmhlYWRlckNoZWNrZXJNYW5hZ2VyRmFjdG9yeSA9ICRoZWFkZXJDaGVja2VyTWFuYWdlckZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgSldTTG9hZGVyIHVzaW5nIHRoZSBnaXZlbiBzZXJpYWxpemVyIGFsaWFzZXMsIHNpZ25hdHVyZSBhbGdvcml0aG0gYWxpYXNlcyBhbmQgKG9wdGlvbmFsbHkpCiAgICAgKiB0aGUgaGVhZGVyIGNoZWNrZXIgYWxpYXNlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkc2VyaWFsaXplcnMsIGFycmF5ICRhbGdvcml0aG1zLCBhcnJheSAkaGVhZGVyQ2hlY2tlcnMgPSBbXSk6IEpXU0xvYWRlcgogICAgewogICAgICAgICRzZXJpYWxpemVyTWFuYWdlciA9ICR0aGlzLT5qd3NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnktPmNyZWF0ZSgkc2VyaWFsaXplcnMpOwogICAgICAgICRqd3NWZXJpZmllciA9ICR0aGlzLT5qd3NWZXJpZmllckZhY3RvcnktPmNyZWF0ZSgkYWxnb3JpdGhtcyk7CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5oZWFkZXJDaGVja2VyTWFuYWdlckZhY3RvcnkpIHsKICAgICAgICAgICAgJGhlYWRlckNoZWNrZXJNYW5hZ2VyID0gJHRoaXMtPmhlYWRlckNoZWNrZXJNYW5hZ2VyRmFjdG9yeS0+Y3JlYXRlKCRoZWFkZXJDaGVja2Vycyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGhlYWRlckNoZWNrZXJNYW5hZ2VyID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSldTTG9hZGVyKCRzZXJpYWxpemVyTWFuYWdlciwgJGp3c1ZlcmlmaWVyLCAkaGVhZGVyQ2hlY2tlck1hbmFnZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSTokenSupport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDaGVja2VyXFRva2VuVHlwZVN1cHBvcnQ7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXVDsKCmZpbmFsIGNsYXNzIEpXU1Rva2VuU3VwcG9ydCBpbXBsZW1lbnRzIFRva2VuVHlwZVN1cHBvcnQKewogICAgcHVibGljIGZ1bmN0aW9uIHN1cHBvcnRzKEpXVCAkand0KTogYm9vbAogICAgewogICAgICAgIHJldHVybiAkand0IGluc3RhbmNlb2YgSldTOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZVRva2VuSGVhZGVycyhKV1QgJGp3dCwgaW50ICRpbmRleCwgYXJyYXkgJiRwcm90ZWN0ZWRIZWFkZXIsIGFycmF5ICYkdW5wcm90ZWN0ZWRIZWFkZXIpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkand0IGluc3RhbmNlb2YgSldTKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgkaW5kZXggPiAkand0LT5jb3VudFNpZ25hdHVyZXMoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5rbm93biBzaWduYXR1cmUgaW5kZXguJyk7CiAgICAgICAgfQogICAgICAgICRwcm90ZWN0ZWRIZWFkZXIgPSAkand0LT5nZXRTaWduYXR1cmUoJGluZGV4KS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCk7CiAgICAgICAgJHVucHJvdGVjdGVkSGVhZGVyID0gJGp3dC0+Z2V0U2lnbmF0dXJlKCRpbmRleCktPmdldEhlYWRlcigpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSVerifier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxBbGdvcml0aG1NYW5hZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxLZXlDaGVja2VyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEFsZ29yaXRobVxTaWduYXR1cmVBbGdvcml0aG07CgpjbGFzcyBKV1NWZXJpZmllcgp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtTWFuYWdlcgogICAgICovCiAgICBwcml2YXRlICRzaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyOwoKICAgIC8qKgogICAgICogSldTVmVyaWZpZXIgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBbGdvcml0aG1NYW5hZ2VyICRzaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyKQogICAgewogICAgICAgICR0aGlzLT5zaWduYXR1cmVBbGdvcml0aG1NYW5hZ2VyID0gJHNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhbGdvcml0aG0gbWFuYWdlciBhc3NvY2lhdGVkIHRvIHRoZSBKV1NWZXJpZmllci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXIoKTogQWxnb3JpdGhtTWFuYWdlcgogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlQWxnb3JpdGhtTWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHZlcmlmeSB0aGUgSldTIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4ga2V5IGFuZCBmb3IgdGhlIGdpdmVuIHNpZ25hdHVyZS4KICAgICAqIEl0IHJldHVybnMgdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIGlzIHZlcmlmaWVkLCBvdGhlcndpc2UgZmFsc2UuCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgc2lnbmF0dXJlIHN1Y2NlZWRlZCwgZWxzZSBmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5V2l0aEtleShKV1MgJGp3cywgSldLICRqd2ssIGludCAkc2lnbmF0dXJlLCA/c3RyaW5nICRkZXRhY2hlZFBheWxvYWQgPSBudWxsKTogYm9vbAogICAgewogICAgICAgICRqd2tzZXQgPSBKV0tTZXQ6OmNyZWF0ZUZyb21LZXlzKFskandrXSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dmVyaWZ5V2l0aEtleVNldCgkandzLCAkandrc2V0LCAkc2lnbmF0dXJlLCAkZGV0YWNoZWRQYXlsb2FkKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHZlcmlmeSB0aGUgSldTIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4ga2V5IHNldCBhbmQgZm9yIHRoZSBnaXZlbiBzaWduYXR1cmUuCiAgICAgKiBJdCByZXR1cm5zIHRydWUgaWYgdGhlIHNpZ25hdHVyZSBpcyB2ZXJpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLgogICAgICoKICAgICAqIEBwYXJhbSBKV1MgICAgICAgICAkandzICAgICAgICAgICAgIEEgSldTIG9iamVjdAogICAgICogQHBhcmFtIEpXS1NldCAgICAgICRqd2tzZXQgICAgICAgICAgVGhlIHNpZ25hdHVyZSB3aWxsIGJlIHZlcmlmaWVkIHVzaW5nIGtleXMgaW4gdGhlIGtleSBzZXQKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGV0YWNoZWRQYXlsb2FkIElmIG5vdCBudWxsLCB0aGUgdmFsdWUgbXVzdCBiZSB0aGUgZGV0YWNoZWQgcGF5bG9hZCBlbmNvZGVkIGluIEJhc2U2NCBVUkwgc2FmZS4gSWYgdGhlIGlucHV0IGNvbnRhaW5zIGEgcGF5bG9hZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBzaWduYXR1cmUgc3VjY2VlZGVkLCBlbHNlIGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlXaXRoS2V5U2V0KEpXUyAkandzLCBKV0tTZXQgJGp3a3NldCwgaW50ICRzaWduYXR1cmUsID9zdHJpbmcgJGRldGFjaGVkUGF5bG9hZCA9IG51bGwpOiBib29sCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrSldLU2V0KCRqd2tzZXQpOwogICAgICAgICR0aGlzLT5jaGVja1NpZ25hdHVyZXMoJGp3cyk7CiAgICAgICAgJHRoaXMtPmNoZWNrUGF5bG9hZCgkandzLCAkZGV0YWNoZWRQYXlsb2FkKTsKCiAgICAgICAgJHNpZ25hdHVyZSA9ICRqd3MtPmdldFNpZ25hdHVyZSgkc2lnbmF0dXJlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJpZnlTaWduYXR1cmUoJGp3cywgJGp3a3NldCwgJHNpZ25hdHVyZSwgJGRldGFjaGVkUGF5bG9hZCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUoSldTICRqd3MsIEpXS1NldCAkandrc2V0LCBTaWduYXR1cmUgJHNpZ25hdHVyZSwgP3N0cmluZyAkZGV0YWNoZWRQYXlsb2FkID0gbnVsbCk6IGJvb2wKICAgIHsKICAgICAgICAkaW5wdXQgPSAkdGhpcy0+Z2V0SW5wdXRUb1ZlcmlmeSgkandzLCAkc2lnbmF0dXJlLCAkZGV0YWNoZWRQYXlsb2FkKTsKICAgICAgICBmb3JlYWNoICgkandrc2V0LT5hbGwoKSBhcyAkandrKSB7CiAgICAgICAgICAgICRhbGdvcml0aG0gPSAkdGhpcy0+Z2V0QWxnb3JpdGhtKCRzaWduYXR1cmUpOwoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIEtleUNoZWNrZXI6OmNoZWNrS2V5VXNhZ2UoJGp3aywgJ3ZlcmlmaWNhdGlvbicpOwogICAgICAgICAgICAgICAgS2V5Q2hlY2tlcjo6Y2hlY2tLZXlBbGdvcml0aG0oJGp3aywgJGFsZ29yaXRobS0+bmFtZSgpKTsKICAgICAgICAgICAgICAgIGlmICghXGluX2FycmF5KCRqd2stPmdldCgna3R5JyksICRhbGdvcml0aG0tPmFsbG93ZWRLZXlUeXBlcygpLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdXcm9uZyBrZXkgdHlwZS4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0cnVlID09PSAkYWxnb3JpdGhtLT52ZXJpZnkoJGp3aywgJGlucHV0LCAkc2lnbmF0dXJlLT5nZXRTaWduYXR1cmUoKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgLy9XZSBkbyBub3RoaW5nLCB3ZSBjb250aW51ZSB3aXRoIG90aGVyIGtleXMKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRJbnB1dFRvVmVyaWZ5KEpXUyAkandzLCBTaWduYXR1cmUgJHNpZ25hdHVyZSwgP3N0cmluZyAkZGV0YWNoZWRQYXlsb2FkKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIgPSAkc2lnbmF0dXJlLT5nZXRFbmNvZGVkUHJvdGVjdGVkSGVhZGVyKCk7CiAgICAgICAgaWYgKCEkc2lnbmF0dXJlLT5oYXNQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2I2NCcpIHx8IHRydWUgPT09ICRzaWduYXR1cmUtPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYjY0JykpIHsKICAgICAgICAgICAgaWYgKG51bGwgIT09ICRqd3MtPmdldEVuY29kZWRQYXlsb2FkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcc3ByaW50ZignJXMuJXMnLCAkZW5jb2RlZFByb3RlY3RlZEhlYWRlciwgJGp3cy0+Z2V0RW5jb2RlZFBheWxvYWQoKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRwYXlsb2FkID0gZW1wdHkoJGp3cy0+Z2V0UGF5bG9hZCgpKSA/ICRkZXRhY2hlZFBheWxvYWQgOiAkandzLT5nZXRQYXlsb2FkKCk7CgogICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJyVzLiVzJywgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIsIEJhc2U2NFVybDo6ZW5jb2RlKCRwYXlsb2FkKSk7CiAgICAgICAgfQoKICAgICAgICAkcGF5bG9hZCA9IGVtcHR5KCRqd3MtPmdldFBheWxvYWQoKSkgPyAkZGV0YWNoZWRQYXlsb2FkIDogJGp3cy0+Z2V0UGF5bG9hZCgpOwoKICAgICAgICByZXR1cm4gXHNwcmludGYoJyVzLiVzJywgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIsICRwYXlsb2FkKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrU2lnbmF0dXJlcyhKV1MgJGp3cykKICAgIHsKICAgICAgICBpZiAoMCA9PT0gJGp3cy0+Y291bnRTaWduYXR1cmVzKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBKV1MgZG9lcyBub3QgY29udGFpbiBhbnkgc2lnbmF0dXJlLicpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrSldLU2V0KEpXS1NldCAkandrc2V0KQogICAgewogICAgICAgIGlmICgwID09PSBcY291bnQoJGp3a3NldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZXJlIGlzIG5vIGtleSBpbiB0aGUga2V5IHNldC4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1BheWxvYWQoSldTICRqd3MsID9zdHJpbmcgJGRldGFjaGVkUGF5bG9hZCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRkZXRhY2hlZFBheWxvYWQgJiYgIWVtcHR5KCRqd3MtPmdldFBheWxvYWQoKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0EgZGV0YWNoZWQgcGF5bG9hZCBpcyBzZXQsIGJ1dCB0aGUgSldTIGFscmVhZHkgaGFzIGEgcGF5bG9hZC4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCRqd3MtPmdldFBheWxvYWQoKSkgJiYgbnVsbCA9PT0gJGRldGFjaGVkUGF5bG9hZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIEpXUyBoYXMgYSBkZXRhY2hlZCBwYXlsb2FkLCBidXQgbm8gcGF5bG9hZCBpcyBwcm92aWRlZC4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRBbGdvcml0aG0oU2lnbmF0dXJlICRzaWduYXR1cmUpOiBTaWduYXR1cmVBbGdvcml0aG0KICAgIHsKICAgICAgICAkY29tcGxldGVIZWFkZXIgPSBcYXJyYXlfbWVyZ2UoJHNpZ25hdHVyZS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCksICRzaWduYXR1cmUtPmdldEhlYWRlcigpKTsKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCdhbGcnLCAkY29tcGxldGVIZWFkZXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdObyAiYWxnIiBwYXJhbWV0ZXIgc2V0IGluIHRoZSBoZWFkZXIuJyk7CiAgICAgICAgfQoKICAgICAgICAkYWxnb3JpdGhtID0gJHRoaXMtPnNpZ25hdHVyZUFsZ29yaXRobU1hbmFnZXItPmdldCgkY29tcGxldGVIZWFkZXJbJ2FsZyddKTsKICAgICAgICBpZiAoISRhbGdvcml0aG0gaW5zdGFuY2VvZiBTaWduYXR1cmVBbGdvcml0aG0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBhbGdvcml0aG0gIiVzIiBpcyBub3Qgc3VwcG9ydGVkIG9yIGlzIG5vdCBhIHNpZ25hdHVyZSBhbGdvcml0aG0uJywgJGNvbXBsZXRlSGVhZGVyWydhbGcnXSkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhbGdvcml0aG07CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/JWSVerifierFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5OwoKY2xhc3MgSldTVmVyaWZpZXJGYWN0b3J5CnsKICAgIC8qKgogICAgICogQHZhciBBbGdvcml0aG1NYW5hZ2VyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRhbGdvcml0aG1NYW5hZ2VyRmFjdG9yeTsKCiAgICAvKioKICAgICAqIEpXU1ZlcmlmaWVyRmFjdG9yeSBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5ICRhbGdvcml0aG1NYW5hZ2VyRmFjdG9yeSkKICAgIHsKICAgICAgICAkdGhpcy0+YWxnb3JpdGhtTWFuYWdlckZhY3RvcnkgPSAkYWxnb3JpdGhtTWFuYWdlckZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgSldTVmVyaWZpZXIgdXNpbmcgdGhlIGdpdmVuIHNpZ25hdHVyZSBhbGdvcml0aG0gYWxpYXNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJGFsZ29yaXRobXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkYWxnb3JpdGhtcyk6IEpXU1ZlcmlmaWVyCiAgICB7CiAgICAgICAgJGFsZ29yaXRobU1hbmFnZXIgPSAkdGhpcy0+YWxnb3JpdGhtTWFuYWdlckZhY3RvcnktPmNyZWF0ZSgkYWxnb3JpdGhtcyk7CgogICAgICAgIHJldHVybiBuZXcgSldTVmVyaWZpZXIoJGFsZ29yaXRobU1hbmFnZXIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEhQIEpXVCBTaWduYXR1cmUgQ29tcG9uZW50Cj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZXBvc2l0b3J5IGlzIGEgc3ViIHJlcG9zaXRvcnkgb2YgW3RoZSBKV1QgRnJhbWV3b3JrXShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIHByb2plY3QgYW5kIGlzIFJFQUQgT05MWS4KCioqUGxlYXNlIGRvIG5vdCBzdWJtaXQgYW55IFB1bGwgUmVxdWVzdCBoZXJlLioqCllvdSBzaG91bGQgZ28gdG8gW3RoZSBtYWluIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yaykgaW5zdGVhZC4gCgojIERvY3VtZW50YXRpb24KClRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBodHRwczovL3dlYi10b2tlbi5zcG9ta3ktbGFicy5jb20vCgojIFN1cHBvcnQKCkkgYnJpbmcgc29sdXRpb25zIHRvIHlvdXIgcHJvYmxlbXMgYW5kIGFuc3dlciB5b3VyIHF1ZXN0aW9ucy4KCklmIHlvdSByZWFsbHkgbG92ZSB0aGF0IHByb2plY3QgYW5kIHRoZSB3b3JrIEkgaGF2ZSBkb25lIG9yIGlmIHlvdSB3YW50IEkgcHJpb3JpdGl6ZSB5b3VyIGlzc3VlcywgdGhlbiB5b3UgY2FuIGhlbHAgbWUgb3V0IGZvciBhIGNvdXBsZSBvZiA6YmVlcnM6IG9yIG1vcmUhCgpbIVtCZWNvbWUgYSBQYXRyZW9uXShodHRwczovL2M1LnBhdHJlb24uY29tL2V4dGVybmFsL2xvZ28vYmVjb21lX2FfcGF0cm9uX2J1dHRvbi5wbmcpXShodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkpCgojIENvbnRyaWJ1dGluZwoKUmVxdWVzdHMgZm9yIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVkIGFuZCBhbGwgb3RoZXIgaWRlYXMgdG8gbWFrZSB0aGlzIGZyYW1ld29yayB1c2VmdWwgYXJlIHdlbGNvbWUuCklmIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHdyaXRpbmcgY29kZSwgeW91IGNvdWxkIHRyeSB0byBmaXggW29wZW5lZCBpc3N1ZXMgd2hlcmUgaGVscCBpcyB3YW50ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvaGVscCt3YW50ZWQpIG9yIFt0aG9zZSB0aGF0IGFyZSBlYXN5IHRvIGZpeF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9lYXN5LXBpY2spLgoKRG8gbm90IGZvcmdldCB0byBbZm9sbG93IHRoZXNlIGJlc3QgcHJhY3RpY2VzXSguZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuCgoqKklmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIHNlY3VyaXR5IGlzc3VlLCBETyBOT1Qgb3BlbiBhbiBpc3N1ZSoqLiBbWW91IE1VU1Qgc3VibWl0IHlvdXIgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXR0ZXIuaW0vU3BvbWt5LykuCgojIExpY2VuY2UKClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZSB1bmRlciBbTUlUIGxpY2VuY2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/CompactSerializer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXENvbnZlcnRlclxKc29uQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXUzsKCmZpbmFsIGNsYXNzIENvbXBhY3RTZXJpYWxpemVyIGV4dGVuZHMgU2VyaWFsaXplcgp7CiAgICBwdWJsaWMgY29uc3QgTkFNRSA9ICdqd3NfY29tcGFjdCc7CgogICAgLyoqCiAgICAgKiBAdmFyIEpzb25Db252ZXJ0ZXIKICAgICAqLwogICAgcHJpdmF0ZSAkanNvbkNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEpTT05GbGF0dGVuZWRTZXJpYWxpemVyIGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSnNvbkNvbnZlcnRlciAkanNvbkNvbnZlcnRlcikKICAgIHsKICAgICAgICAkdGhpcy0+anNvbkNvbnZlcnRlciA9ICRqc29uQ29udmVydGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5TmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ0pXUyBDb21wYWN0JzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6TkFNRTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplKEpXUyAkandzLCA/aW50ICRzaWduYXR1cmVJbmRleCA9IG51bGwpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHNpZ25hdHVyZUluZGV4KSB7CiAgICAgICAgICAgICRzaWduYXR1cmVJbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgICRzaWduYXR1cmUgPSAkandzLT5nZXRTaWduYXR1cmUoJHNpZ25hdHVyZUluZGV4KTsKICAgICAgICBpZiAoIWVtcHR5KCRzaWduYXR1cmUtPmdldEhlYWRlcigpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdUaGUgc2lnbmF0dXJlIGNvbnRhaW5zIHVucHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXJzIGFuZCBjYW5ub3QgYmUgY29udmVydGVkIGludG8gY29tcGFjdCBKU09OLicpOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT5pc1BheWxvYWRFbmNvZGVkKCRzaWduYXR1cmUtPmdldFByb3RlY3RlZEhlYWRlcigpKSAmJiAhZW1wdHkoJGp3cy0+Z2V0RW5jb2RlZFBheWxvYWQoKSkpIHsKICAgICAgICAgICAgaWYgKDEgIT09IFxwcmVnX21hdGNoKCcvXltceHsyMH0tXHh7MmR9fFx4ezJmfS1ceHs3ZX1dKiQvdScsICRqd3MtPmdldFBheWxvYWQoKSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IHRoZSBKV1Mgd2l0aCBub24tZW5jb2RlZCBwYXlsb2FkLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gXHNwcmludGYoCiAgICAgICAgICAgICclcy4lcy4lcycsCiAgICAgICAgICAgICRzaWduYXR1cmUtPmdldEVuY29kZWRQcm90ZWN0ZWRIZWFkZXIoKSwKICAgICAgICAgICAgJGp3cy0+Z2V0RW5jb2RlZFBheWxvYWQoKSwKICAgICAgICAgICAgQmFzZTY0VXJsOjplbmNvZGUoJHNpZ25hdHVyZS0+Z2V0U2lnbmF0dXJlKCkpCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoc3RyaW5nICRpbnB1dCk6IEpXUwogICAgewogICAgICAgICRwYXJ0cyA9IFxleHBsb2RlKCcuJywgJGlucHV0KTsKICAgICAgICBpZiAoMyAhPT0gXGNvdW50KCRwYXJ0cykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGlucHV0Jyk7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkZW5jb2RlZFByb3RlY3RlZEhlYWRlciA9ICRwYXJ0c1swXTsKICAgICAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9ICR0aGlzLT5qc29uQ29udmVydGVyLT5kZWNvZGUoQmFzZTY0VXJsOjpkZWNvZGUoJHBhcnRzWzBdKSk7CiAgICAgICAgICAgIGlmIChlbXB0eSgkcGFydHNbMV0pKSB7CiAgICAgICAgICAgICAgICAkcGF5bG9hZCA9IG51bGw7CiAgICAgICAgICAgICAgICAkZW5jb2RlZFBheWxvYWQgPSBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGVuY29kZWRQYXlsb2FkID0gJHBhcnRzWzFdOwogICAgICAgICAgICAgICAgJHBheWxvYWQgPSAkdGhpcy0+aXNQYXlsb2FkRW5jb2RlZCgkcHJvdGVjdGVkSGVhZGVyKSA/IEJhc2U2NFVybDo6ZGVjb2RlKCRlbmNvZGVkUGF5bG9hZCkgOiAkZW5jb2RlZFBheWxvYWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpZ25hdHVyZSA9IEJhc2U2NFVybDo6ZGVjb2RlKCRwYXJ0c1syXSk7CgogICAgICAgICAgICAkandzID0gSldTOjpjcmVhdGUoJHBheWxvYWQsICRlbmNvZGVkUGF5bG9hZCwgZW1wdHkoJHBhcnRzWzFdKSk7CiAgICAgICAgICAgICRqd3MgPSAkandzLT5hZGRTaWduYXR1cmUoJHNpZ25hdHVyZSwgJHByb3RlY3RlZEhlYWRlciwgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIpOwoKICAgICAgICAgICAgcmV0dXJuICRqd3M7CiAgICAgICAgfSBjYXRjaCAoXEVycm9yIHwgXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgaW5wdXQnKTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/JSONFlattenedSerializer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXENvbnZlcnRlclxKc29uQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXUzsKCmZpbmFsIGNsYXNzIEpTT05GbGF0dGVuZWRTZXJpYWxpemVyIGV4dGVuZHMgU2VyaWFsaXplcgp7CiAgICBwdWJsaWMgY29uc3QgTkFNRSA9ICdqd3NfanNvbl9mbGF0dGVuZWQnOwoKICAgIC8qKgogICAgICogQHZhciBKc29uQ29udmVydGVyCiAgICAgKi8KICAgIHByaXZhdGUgJGpzb25Db252ZXJ0ZXI7CgogICAgLyoqCiAgICAgKiBKU09ORmxhdHRlbmVkU2VyaWFsaXplciBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEpzb25Db252ZXJ0ZXIgJGpzb25Db252ZXJ0ZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmpzb25Db252ZXJ0ZXIgPSAkanNvbkNvbnZlcnRlcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheU5hbWUoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICdKV1MgSlNPTiBGbGF0dGVuZWQnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpOQU1FOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoSldTICRqd3MsID9pbnQgJHNpZ25hdHVyZUluZGV4ID0gbnVsbCk6IHN0cmluZwogICAgewogICAgICAgIGlmIChudWxsID09PSAkc2lnbmF0dXJlSW5kZXgpIHsKICAgICAgICAgICAgJHNpZ25hdHVyZUluZGV4ID0gMDsKICAgICAgICB9CiAgICAgICAgJHNpZ25hdHVyZSA9ICRqd3MtPmdldFNpZ25hdHVyZSgkc2lnbmF0dXJlSW5kZXgpOwoKICAgICAgICAkZGF0YSA9IFtdOwogICAgICAgICR2YWx1ZXMgPSBbCiAgICAgICAgICAgICdwYXlsb2FkJyA9PiAkandzLT5nZXRFbmNvZGVkUGF5bG9hZCgpLAogICAgICAgICAgICAncHJvdGVjdGVkJyA9PiAkc2lnbmF0dXJlLT5nZXRFbmNvZGVkUHJvdGVjdGVkSGVhZGVyKCksCiAgICAgICAgICAgICdoZWFkZXInID0+ICRzaWduYXR1cmUtPmdldEhlYWRlcigpLAogICAgICAgIF07CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkZGF0YVsnc2lnbmF0dXJlJ10gPSBCYXNlNjRVcmw6OmVuY29kZSgkc2lnbmF0dXJlLT5nZXRTaWduYXR1cmUoKSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+anNvbkNvbnZlcnRlci0+ZW5jb2RlKCRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoc3RyaW5nICRpbnB1dCk6IEpXUwogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmpzb25Db252ZXJ0ZXItPmRlY29kZSgkaW5wdXQpOwogICAgICAgIGlmICghXGlzX2FycmF5KCRkYXRhKSB8fCAhXGFycmF5X2tleV9leGlzdHMoJ3NpZ25hdHVyZScsICRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgaW5wdXQuJyk7CiAgICAgICAgfQoKICAgICAgICAkc2lnbmF0dXJlID0gQmFzZTY0VXJsOjpkZWNvZGUoJGRhdGFbJ3NpZ25hdHVyZSddKTsKCiAgICAgICAgaWYgKFxhcnJheV9rZXlfZXhpc3RzKCdwcm90ZWN0ZWQnLCAkZGF0YSkpIHsKICAgICAgICAgICAgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIgPSAkZGF0YVsncHJvdGVjdGVkJ107CiAgICAgICAgICAgICRwcm90ZWN0ZWRIZWFkZXIgPSAkdGhpcy0+anNvbkNvbnZlcnRlci0+ZGVjb2RlKEJhc2U2NFVybDo6ZGVjb2RlKCRkYXRhWydwcm90ZWN0ZWQnXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyID0gbnVsbDsKICAgICAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFtdOwogICAgICAgIH0KICAgICAgICBpZiAoXGFycmF5X2tleV9leGlzdHMoJ2hlYWRlcicsICRkYXRhKSkgewogICAgICAgICAgICBpZiAoIVxpc19hcnJheSgkZGF0YVsnaGVhZGVyJ10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQmFkIGhlYWRlci4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaGVhZGVyID0gJGRhdGFbJ2hlYWRlciddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRoZWFkZXIgPSBbXTsKICAgICAgICB9CgogICAgICAgIGlmIChcYXJyYXlfa2V5X2V4aXN0cygncGF5bG9hZCcsICRkYXRhKSkgewogICAgICAgICAgICAkZW5jb2RlZFBheWxvYWQgPSAkZGF0YVsncGF5bG9hZCddOwogICAgICAgICAgICAkcGF5bG9hZCA9ICR0aGlzLT5pc1BheWxvYWRFbmNvZGVkKCRwcm90ZWN0ZWRIZWFkZXIpID8gQmFzZTY0VXJsOjpkZWNvZGUoJGVuY29kZWRQYXlsb2FkKSA6ICRlbmNvZGVkUGF5bG9hZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGF5bG9hZCA9IG51bGw7CiAgICAgICAgICAgICRlbmNvZGVkUGF5bG9hZCA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkandzID0gSldTOjpjcmVhdGUoJHBheWxvYWQsICRlbmNvZGVkUGF5bG9hZCwgbnVsbCA9PT0gJGVuY29kZWRQYXlsb2FkKTsKICAgICAgICAkandzID0gJGp3cy0+YWRkU2lnbmF0dXJlKCRzaWduYXR1cmUsICRwcm90ZWN0ZWRIZWFkZXIsICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyLCAkaGVhZGVyKTsKCiAgICAgICAgcmV0dXJuICRqd3M7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/JSONGeneralSerializer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKdXNlIEJhc2U2NFVybFxCYXNlNjRVcmw7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXENvbnZlcnRlclxKc29uQ29udmVydGVyOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXUzsKCmZpbmFsIGNsYXNzIEpTT05HZW5lcmFsU2VyaWFsaXplciBleHRlbmRzIFNlcmlhbGl6ZXIKewogICAgcHVibGljIGNvbnN0IE5BTUUgPSAnandzX2pzb25fZ2VuZXJhbCc7CgogICAgLyoqCiAgICAgKiBAdmFyIEpzb25Db252ZXJ0ZXIKICAgICAqLwogICAgcHJpdmF0ZSAkanNvbkNvbnZlcnRlcjsKCiAgICAvKioKICAgICAqIEpTT05GbGF0dGVuZWRTZXJpYWxpemVyIGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSnNvbkNvbnZlcnRlciAkanNvbkNvbnZlcnRlcikKICAgIHsKICAgICAgICAkdGhpcy0+anNvbkNvbnZlcnRlciA9ICRqc29uQ29udmVydGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5TmFtZSgpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ0pXUyBKU09OIEdlbmVyYWwnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBzZWxmOjpOQU1FOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoSldTICRqd3MsID9pbnQgJHNpZ25hdHVyZUluZGV4ID0gbnVsbCk6IHN0cmluZwogICAgewogICAgICAgIGlmICgwID09PSAkandzLT5jb3VudFNpZ25hdHVyZXMoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdObyBzaWduYXR1cmUuJyk7CiAgICAgICAgfQoKICAgICAgICAkZGF0YSA9IFtdOwogICAgICAgICR0aGlzLT5jaGVja1BheWxvYWRFbmNvZGluZygkandzKTsKCiAgICAgICAgaWYgKGZhbHNlID09PSAkandzLT5pc1BheWxvYWREZXRhY2hlZCgpKSB7CiAgICAgICAgICAgICRkYXRhWydwYXlsb2FkJ10gPSAkandzLT5nZXRFbmNvZGVkUGF5bG9hZCgpOwogICAgICAgIH0KCiAgICAgICAgJGRhdGFbJ3NpZ25hdHVyZXMnXSA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRqd3MtPmdldFNpZ25hdHVyZXMoKSBhcyAkc2lnbmF0dXJlKSB7CiAgICAgICAgICAgICR0bXAgPSBbJ3NpZ25hdHVyZScgPT4gQmFzZTY0VXJsOjplbmNvZGUoJHNpZ25hdHVyZS0+Z2V0U2lnbmF0dXJlKCkpXTsKICAgICAgICAgICAgJHZhbHVlcyA9IFsKICAgICAgICAgICAgICAgICdwcm90ZWN0ZWQnID0+ICRzaWduYXR1cmUtPmdldEVuY29kZWRQcm90ZWN0ZWRIZWFkZXIoKSwKICAgICAgICAgICAgICAgICdoZWFkZXInID0+ICRzaWduYXR1cmUtPmdldEhlYWRlcigpLAogICAgICAgICAgICBdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRtcFska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkZGF0YVsnc2lnbmF0dXJlcyddW10gPSAkdG1wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5qc29uQ29udmVydGVyLT5lbmNvZGUoJGRhdGEpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tEYXRhKCRkYXRhKQogICAgewogICAgICAgIGlmICghXGlzX2FycmF5KCRkYXRhKSB8fCAhXGFycmF5X2tleV9leGlzdHMoJ3NpZ25hdHVyZXMnLCAkZGF0YSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGlucHV0LicpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrU2lnbmF0dXJlKCRzaWduYXR1cmUpCiAgICB7CiAgICAgICAgaWYgKCFcaXNfYXJyYXkoJHNpZ25hdHVyZSkgfHwgIVxhcnJheV9rZXlfZXhpc3RzKCdzaWduYXR1cmUnLCAkc2lnbmF0dXJlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgaW5wdXQuJyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZShzdHJpbmcgJGlucHV0KTogSldTCiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+anNvbkNvbnZlcnRlci0+ZGVjb2RlKCRpbnB1dCk7CiAgICAgICAgJHRoaXMtPmNoZWNrRGF0YSgkZGF0YSk7CgogICAgICAgICRpc1BheWxvYWRFbmNvZGVkID0gbnVsbDsKICAgICAgICAkcmF3UGF5bG9hZCA9IFxhcnJheV9rZXlfZXhpc3RzKCdwYXlsb2FkJywgJGRhdGEpID8gJGRhdGFbJ3BheWxvYWQnXSA6IG51bGw7CiAgICAgICAgJHNpZ25hdHVyZXMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkZGF0YVsnc2lnbmF0dXJlcyddIGFzICRzaWduYXR1cmUpIHsKICAgICAgICAgICAgJHRoaXMtPmNoZWNrU2lnbmF0dXJlKCRzaWduYXR1cmUpOwogICAgICAgICAgICBsaXN0KCRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyLCAkcHJvdGVjdGVkSGVhZGVyLCAkaGVhZGVyKSA9ICR0aGlzLT5wcm9jZXNzSGVhZGVycygkc2lnbmF0dXJlKTsKICAgICAgICAgICAgJHNpZ25hdHVyZXNbXSA9IFsKICAgICAgICAgICAgICAgICdzaWduYXR1cmUnID0+IEJhc2U2NFVybDo6ZGVjb2RlKCRzaWduYXR1cmVbJ3NpZ25hdHVyZSddKSwKICAgICAgICAgICAgICAgICdwcm90ZWN0ZWQnID0+ICRwcm90ZWN0ZWRIZWFkZXIsCiAgICAgICAgICAgICAgICAnZW5jb2RlZF9wcm90ZWN0ZWQnID0+ICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyLAogICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gJGhlYWRlciwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJGlzUGF5bG9hZEVuY29kZWQgPSAkdGhpcy0+cHJvY2Vzc0lzUGF5bG9hZEVuY29kZWQoJGlzUGF5bG9hZEVuY29kZWQsICRwcm90ZWN0ZWRIZWFkZXIpOwogICAgICAgIH0KCiAgICAgICAgJHBheWxvYWQgPSAkdGhpcy0+cHJvY2Vzc1BheWxvYWQoJHJhd1BheWxvYWQsICRpc1BheWxvYWRFbmNvZGVkKTsKICAgICAgICAkandzID0gSldTOjpjcmVhdGUoJHBheWxvYWQsICRyYXdQYXlsb2FkKTsKICAgICAgICBmb3JlYWNoICgkc2lnbmF0dXJlcyBhcyAkc2lnbmF0dXJlKSB7CiAgICAgICAgICAgICRqd3MgPSAkandzLT5hZGRTaWduYXR1cmUoCiAgICAgICAgICAgICAgICAkc2lnbmF0dXJlWydzaWduYXR1cmUnXSwKICAgICAgICAgICAgICAgICRzaWduYXR1cmVbJ3Byb3RlY3RlZCddLAogICAgICAgICAgICAgICAgJHNpZ25hdHVyZVsnZW5jb2RlZF9wcm90ZWN0ZWQnXSwKICAgICAgICAgICAgICAgICRzaWduYXR1cmVbJ2hlYWRlciddCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGp3czsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NJc1BheWxvYWRFbmNvZGVkKD9ib29sICRpc1BheWxvYWRFbmNvZGVkLCBhcnJheSAkcHJvdGVjdGVkSGVhZGVyKTogYm9vbAogICAgewogICAgICAgIGlmIChudWxsID09PSAkaXNQYXlsb2FkRW5jb2RlZCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6aXNQYXlsb2FkRW5jb2RlZCgkcHJvdGVjdGVkSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgaWYgKCR0aGlzLT5pc1BheWxvYWRFbmNvZGVkKCRwcm90ZWN0ZWRIZWFkZXIpICE9PSAkaXNQYXlsb2FkRW5jb2RlZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRm9yZWlnbiBwYXlsb2FkIGVuY29kaW5nIGRldGVjdGVkLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpc1BheWxvYWRFbmNvZGVkOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcnMoYXJyYXkgJHNpZ25hdHVyZSk6IGFycmF5CiAgICB7CiAgICAgICAgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIgPSBcYXJyYXlfa2V5X2V4aXN0cygncHJvdGVjdGVkJywgJHNpZ25hdHVyZSkgPyAkc2lnbmF0dXJlWydwcm90ZWN0ZWQnXSA6IG51bGw7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IG51bGwgIT09ICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyID8gJHRoaXMtPmpzb25Db252ZXJ0ZXItPmRlY29kZShCYXNlNjRVcmw6OmRlY29kZSgkZW5jb2RlZFByb3RlY3RlZEhlYWRlcikpIDogW107CiAgICAgICAgJGhlYWRlciA9IFxhcnJheV9rZXlfZXhpc3RzKCdoZWFkZXInLCAkc2lnbmF0dXJlKSA/ICRzaWduYXR1cmVbJ2hlYWRlciddIDogW107CgogICAgICAgIHJldHVybiBbJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIsICRwcm90ZWN0ZWRIZWFkZXIsICRoZWFkZXJdOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJvY2Vzc1BheWxvYWQoP3N0cmluZyAkcmF3UGF5bG9hZCwgP2Jvb2wgJGlzUGF5bG9hZEVuY29kZWQpOiA/c3RyaW5nCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRyYXdQYXlsb2FkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlID09PSAkaXNQYXlsb2FkRW5jb2RlZCA/ICRyYXdQYXlsb2FkIDogQmFzZTY0VXJsOjpkZWNvZGUoJHJhd1BheWxvYWQpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tQYXlsb2FkRW5jb2RpbmcoSldTICRqd3MpCiAgICB7CiAgICAgICAgaWYgKCRqd3MtPmlzUGF5bG9hZERldGFjaGVkKCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkaXNfZW5jb2RlZCA9IG51bGw7CiAgICAgICAgZm9yZWFjaCAoJGp3cy0+Z2V0U2lnbmF0dXJlcygpIGFzICRzaWduYXR1cmUpIHsKICAgICAgICAgICAgaWYgKG51bGwgPT09ICRpc19lbmNvZGVkKSB7CiAgICAgICAgICAgICAgICAkaXNfZW5jb2RlZCA9ICR0aGlzLT5pc1BheWxvYWRFbmNvZGVkKCRzaWduYXR1cmUtPmdldFByb3RlY3RlZEhlYWRlcigpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZmFsc2UgPT09ICRqd3MtPmlzUGF5bG9hZERldGFjaGVkKCkpIHsKICAgICAgICAgICAgICAgIGlmICgkaXNfZW5jb2RlZCAhPT0gJHRoaXMtPmlzUGF5bG9hZEVuY29kZWQoJHNpZ25hdHVyZS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignRm9yZWlnbiBwYXlsb2FkIGVuY29kaW5nIGRldGVjdGVkLicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/JWSSerializer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CgppbnRlcmZhY2UgSldTU2VyaWFsaXplcgp7CiAgICAvKioKICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJpYWxpemF0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXlOYW1lKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGEgSldTIGludG8gYSBzdHJpbmcuCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoSldTICRqd3MsID9pbnQgJHNpZ25hdHVyZUluZGV4ID0gbnVsbCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIExvYWRzIGRhdGEgYW5kIHJldHVybiBhIEpXUyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXQgQSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgSldTCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZShzdHJpbmcgJGlucHV0KTogSldTOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/JWSSerializerManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CgpjbGFzcyBKV1NTZXJpYWxpemVyTWFuYWdlcgp7CiAgICAvKioKICAgICAqIEB2YXIgSldTU2VyaWFsaXplcltdCiAgICAgKi8KICAgIHByaXZhdGUgJHNlcmlhbGl6ZXJzID0gW107CgogICAgLyoqCiAgICAgKiBKV1NTZXJpYWxpemVyTWFuYWdlciBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gSldTU2VyaWFsaXplcltdICRzZXJpYWxpemVycwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRzZXJpYWxpemVycykKICAgIHsKICAgICAgICBmb3JlYWNoICgkc2VyaWFsaXplcnMgYXMgJHNlcmlhbGl6ZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmFkZCgkc2VyaWFsaXplcik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIEpXU1NlcmlhbGl6ZXJbXSAkc2VyaWFsaXplcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIEpXU1NlcmlhbGl6ZXJNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRzZXJpYWxpemVycyk6IHNlbGYKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHNlcmlhbGl6ZXJzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSldTU2VyaWFsaXplck1hbmFnZXIKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGQoSldTU2VyaWFsaXplciAkc2VyaWFsaXplcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+c2VyaWFsaXplcnNbJHNlcmlhbGl6ZXItPm5hbWUoKV0gPSAkc2VyaWFsaXplcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdCgpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiBcYXJyYXlfa2V5cygkdGhpcy0+c2VyaWFsaXplcnMpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBKV1MgaW50byBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZShzdHJpbmcgJG5hbWUsIEpXUyAkandzLCA/aW50ICRzaWduYXR1cmVJbmRleCA9IG51bGwpOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+c2VyaWFsaXplcnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFxzcHJpbnRmKCdVbnN1cHBvcnRlZCBzZXJpYWxpemVyICIlcyIuJywgJG5hbWUpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoJHRoaXMtPnNlcmlhbGl6ZXJzWyRuYW1lXSktPnNlcmlhbGl6ZSgkandzLCAkc2lnbmF0dXJlSW5kZXgpOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZHMgZGF0YSBhbmQgcmV0dXJuIGEgSldTIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGlucHV0IEEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIEpXUwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRuYW1lICB0aGUgbmFtZSBvZiB0aGUgc2VyaWFsaXplciBpZiB0aGUgaW5wdXQgaXMgdW5zZXJpYWxpemVkCiAgICAgKgogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZShzdHJpbmcgJGlucHV0LCA/c3RyaW5nICYkbmFtZSA9IG51bGwpOiBKV1MKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c2VyaWFsaXplcnMgYXMgJHNlcmlhbGl6ZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRqd3MgPSAkc2VyaWFsaXplci0+dW5zZXJpYWxpemUoJGlucHV0KTsKICAgICAgICAgICAgICAgICRuYW1lID0gJHNlcmlhbGl6ZXItPm5hbWUoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJGp3czsKICAgICAgICAgICAgfSBjYXRjaCAoXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBpbnB1dC4nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/JWSSerializerManagerFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKY2xhc3MgSldTU2VyaWFsaXplck1hbmFnZXJGYWN0b3J5CnsKICAgIC8qKgogICAgICogQHZhciBKV1NTZXJpYWxpemVyW10KICAgICAqLwogICAgcHJpdmF0ZSAkc2VyaWFsaXplcnMgPSBbXTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkbmFtZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkbmFtZXMpOiBKV1NTZXJpYWxpemVyTWFuYWdlcgogICAgewogICAgICAgICRzZXJpYWxpemVycyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRuYW1lcyBhcyAkbmFtZSkgewogICAgICAgICAgICBpZiAoIVxhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+c2VyaWFsaXplcnMpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVW5zdXBwb3J0ZWQgc2VyaWFsaXNlciAiJXMiLicsICRuYW1lKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNlcmlhbGl6ZXJzW10gPSAkdGhpcy0+c2VyaWFsaXplcnNbJG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEpXU1NlcmlhbGl6ZXJNYW5hZ2VyOjpjcmVhdGUoJHNlcmlhbGl6ZXJzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5hbWVzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuIFxhcnJheV9rZXlzKCR0aGlzLT5zZXJpYWxpemVycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEpXU1NlcmlhbGl6ZXJbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXJpYWxpemVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gSldTU2VyaWFsaXplck1hbmFnZXJGYWN0b3J5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoSldTU2VyaWFsaXplciAkc2VyaWFsaXplcik6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+c2VyaWFsaXplcnNbJHNlcmlhbGl6ZXItPm5hbWUoKV0gPSAkc2VyaWFsaXplcjsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Serializer/Serializer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxTZXJpYWxpemVyOwoKYWJzdHJhY3QgY2xhc3MgU2VyaWFsaXplciBpbXBsZW1lbnRzIEpXU1NlcmlhbGl6ZXIKewogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUGF5bG9hZEVuY29kZWQoYXJyYXkgJHByb3RlY3RlZEhlYWRlcik6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gIVxhcnJheV9rZXlfZXhpc3RzKCdiNjQnLCAkcHJvdGVjdGVkSGVhZGVyKSB8fCB0cnVlID09PSAkcHJvdGVjdGVkSGVhZGVyWydiNjQnXTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Signature.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZTsKCmNsYXNzIFNpZ25hdHVyZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkZW5jb2RlZFByb3RlY3RlZEhlYWRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkcHJvdGVjdGVkSGVhZGVyOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRoZWFkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRzaWduYXR1cmU7CgogICAgLyoqCiAgICAgKiBTaWduYXR1cmUgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzaWduYXR1cmUsIGFycmF5ICRwcm90ZWN0ZWRIZWFkZXIsID9zdHJpbmcgJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXIsIGFycmF5ICRoZWFkZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPnByb3RlY3RlZEhlYWRlciA9IG51bGwgPT09ICRlbmNvZGVkUHJvdGVjdGVkSGVhZGVyID8gW10gOiAkcHJvdGVjdGVkSGVhZGVyOwogICAgICAgICR0aGlzLT5lbmNvZGVkUHJvdGVjdGVkSGVhZGVyID0gJGVuY29kZWRQcm90ZWN0ZWRIZWFkZXI7CiAgICAgICAgJHRoaXMtPnNpZ25hdHVyZSA9ICRzaWduYXR1cmU7CiAgICAgICAgJHRoaXMtPmhlYWRlciA9ICRoZWFkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHNpZ25hdHVyZS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqCiAgICAgKiBAcmV0dXJuIFNpZ25hdHVyZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShzdHJpbmcgJHNpZ25hdHVyZSwgYXJyYXkgJHByb3RlY3RlZEhlYWRlciwgP3N0cmluZyAkZW5jb2RlZFByb3RlY3RlZEhlYWRlciwgYXJyYXkgJGhlYWRlciA9IFtdKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkc2lnbmF0dXJlLCAkcHJvdGVjdGVkSGVhZGVyLCAkZW5jb2RlZFByb3RlY3RlZEhlYWRlciwgJGhlYWRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgcHJvdGVjdGVkIGhlYWRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ25hdHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RlY3RlZEhlYWRlcigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJvdGVjdGVkSGVhZGVyOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIHVucHJvdGVjdGVkIGhlYWRlciBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZ25hdHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcigpOiBhcnJheQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGVhZGVyOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIHByb3RlY3RlZCBoZWFkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWduYXR1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbmNvZGVkUHJvdGVjdGVkSGVhZGVyKCk6ID9zdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmVuY29kZWRQcm90ZWN0ZWRIZWFkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcHJvdGVjdGVkIGhlYWRlciBvZiB0aGUgc3BlY2lmaWVkIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbCBIZWFkZXIgdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcihzdHJpbmcgJGtleSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmhhc1Byb3RlY3RlZEhlYWRlclBhcmFtZXRlcigka2V5KSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldFByb3RlY3RlZEhlYWRlcigpWyRrZXldOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ1RoZSBwcm90ZWN0ZWQgaGVhZGVyICIlcyIgZG9lcyBub3QgZXhpc3QnLCAka2V5KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3RlY3RlZCBoZWFkZXIgaGFzIHRoZSBnaXZlbiBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Byb3RlY3RlZEhlYWRlclBhcmFtZXRlcihzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmdldFByb3RlY3RlZEhlYWRlcigpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB1bnByb3RlY3RlZCBoZWFkZXIgb2YgdGhlIHNwZWNpZmllZCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkfG51bGwgSGVhZGVyIHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJQYXJhbWV0ZXIoc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5oYXNIZWFkZXJQYXJhbWV0ZXIoJGtleSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJbJGtleV07CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignVGhlIGhlYWRlciAiJXMiIGRvZXMgbm90IGV4aXN0JywgJGtleSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1bnByb3RlY3RlZCBoZWFkZXIgaGFzIHRoZSBnaXZlbiBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0hlYWRlclBhcmFtZXRlcihzdHJpbmcgJGtleSk6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmhlYWRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2lnbmF0dXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlKCk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2lnbmF0dXJlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/ForeignJWTTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CgovKioKICogQGdyb3VwIEZvcmVpZ25KV1QKICogQGdyb3VwIEZ1bmN0aW9uYWwKICovCmNsYXNzIEZvcmVpZ25KV1RUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKgogICAgICogVGhlIGZvbGxvd2luZyB0ZXN0IHVzZXMgYW4gYXNzZXJ0aW9uIGNyZWF0ZWQgd2l0aCBhbm90aGVyIGxpYnJhcnkuCiAgICAgKiBUaGlzIGFzc2VydGlvbiBpcyB2YWxpZCBpZiB2ZXJpZmllZCB3aXRoIHRoZSBKV0suCiAgICAgKi8KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZEpXVEZyb21PdGhlckxpYnJhcnkoKQogICAgewogICAgICAgICRqd2sgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAna2lkJyA9PiAncHVibGljJywKICAgICAgICAgICAgJ24nID0+ICdyWVlPZGlHcnRSekNjVjE3OXFFSTdUTi1ra2RtTDM3ekozcXVnSW1hb09LYnR3OUVVd1pHeU1rY1lwNDhlVmtzT3dUN2J4U24xaHpQX243NUpsd2w4NU1NQVlJcUtpUUZIampVVkhCQUQ2SFdGSHNyaW9kNi1mZEp4c1hEaEo0bERvV3hJUUZMRUtoR28zUWVJWU8wYjZpd3VTU0lSMnFPOHNPQ21tRW5ndnE0T2Z5WnoxMW1UcHp0bDVjT2JlYWw4ZjZsUTVVSEZVQ1hmeF9RTG5rcnJUTXVSaW9GWjFsRW4yTWhHbTlNeDhlQVRZOE9YVXNLNkw0N0xZUDdhaVdGS2VwZXNYNFRrMTZhS29CMkdkbERPMy1URzBhQVllODlBcjdyR2FvVzM5RVlBdXp4cGJNa2EyUHA4M1JlNGRFek1LTVh5LW1iR01UaDV3YXFISUU5TDlSd2xkaTJDYVJyTGdCQnVNRl9YeXJDTDRuTWJFUTd4YlZEeGtheVoxc09pcjNUYnJWOVotYlJqTk5RaFBsX3ptZnR0eVRFazE4RXlYaEl3T1Z4alJtTWRiUGJQX0s5M28zaDdfLW1ZVFJncG9VTTkzWF8zZWMtbG55REhoU1gySXJSZTl6M2Vlcnp1NGM3bDNYVjhlV2hxSVlXT3dfQXlBcksxWHhTbEpoY1N3V0FGQlh0N2ZZSEdvVC13T0kzbHI3bUpiOGhxSU1JT3hBM005LTNOS19JUFBqQmNLUUhycFVLUUJ1bGFZR0NTbGJJZ1VJa01Eb3hVNFJhUkFiUl8zMUpMaTlaRWdUbUtqZzdEYjZJLW9tSWxCU3FkUFpJRVZRcEhnR1BsTU1mS0QwNWNZZlhnODJiNU1feHVHTkhYYUZtX01rQ0puS0RxNE5LeDRlUFVrTScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgXSk7CgogICAgICAgICRjaGFsbGVuZ2UgPSAnZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKbU5USXlNakkzT1Mxa05UUTBMVFJqTTJRdFlXTTNZeTFtWXpVME56RTFaREJqTWpZaUxDSmxlSEFpT2pFME5qazJORGt5TURrc0ltcDBhU0k2SWpaaFpqRXhORGszTFRka05tSXRORFE1TnkwNE5ESTFMVGMwWW1FeE0yRTFPRE14WXlJc0luSmxaR2x5SWpvaWFIUjBjSE02THk5c2IyTmhiR2h2YzNRNk5EUTBOQzl2WVhWMGFESXZZWFYwYUQ5amJHbGxiblJmYVdROVpqVXlNakl5TnprdFpEVTBOQzAwWXpOa0xXRmpOMk10Wm1NMU5EY3hOV1F3WXpJMlhIVXdNREkyY21WemNHOXVjMlZmZEhsd1pUMWpiMlJsWEhVd01ESTJjMk52Y0dVOVkyOXlaU3RtYjI5Y2RUQXdNalp6ZEdGMFpUMWhZbU5rWldabmFGeDFNREF5Tm5KbFpHbHlaV04wWDNWeWFUMW9kSFJ3T2k4dmJHOWpZV3hvYjNOMEwyTmlJaXdpYzJOd0lqcGJJbU52Y21VaUxDSm1iMjhpWFgwLlUzZnU1ZUpWREQ1dHBPYTlPM1Nlak1oNzhza0NqNmEzcnY1cVdxem1NRTJXRjBSOVFuVFI2VFM1ZzZPT0NoODZvMDNBbEhpMkxoRTRHU29VbUM4V01QelhvcERTZFpkRWt1aWZZVU9TalJRVjNNcDV0bjZvemtrQjc1VHRJaE04eDVfUVYzWUtnVHkzYmNvamctTngzaXg0M0VOR2RuYmFDWjZTeHFqNHhEa25oN3BIdHNVaUhmSFpMN2pkMEkweFA1VFlPdzBfcnhodUs5VVpLdHRfbzA1c0ZuTnIwUFcxazVkNmFVNXFKb0JOVkFlbmRyX2V2cnpYSVYweUNDX29kajVLeVNzTmFRaVhqVVhfVHJpMl81Z1NnY3I4dDNHTVJtLUhqREpSdHR3RDN2Z1FHX0szdnVUb0ItSkF0SE5NRGNxbVBqTHpFRkZrUkRlaDU1a0hnUEpsWXpTZHdXRDUyYjlzWDVmai1WclJMZFF6TzJWVlZrUDdhOUdvQ0dTMDZ5cFY5Ul95R0s4SHpLSjh1QjEyZFRObXBsbzAzdjR2ZFd4VmRzbld4bUJKMG03Rzd5QkNyLWlHaTg3ZXpvd3BrTXcyMnJOQmtxbmFFWklWYm1YNUUtRzNVbmNFNmlvM0lpekVHSDRZY0d4V1NrX0QyZkNJSTZYOXVuY2YycndzbGhFTWlHQzZyd2xyTDhkZ2wza0pUQjRkMHMyd0lLZ1dKd0VmTGtpYW1KMkNKcDZ4MHRxRzdveld2M2sxdE5RYVo5T3dhdWxaN25ibUhnYWx5SU9JMmstZW1NaEZac2RuQXRDeHRjcnhsZWV2b2lZRi1RNTRoMUJoWUluUVQ2RWp4N0NkS09URWpsanR0QjdsY3FxcGJvU2JsdzhKaTdseFVpS0hXeUdoY1BJJzsKCiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydSUzI1NiddKTsKICAgICAgICAkand0ID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRjaGFsbGVuZ2UpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGp3dCwgJGp3aywgMCkpOwoKICAgICAgICAkZXhwZWN0ZWRIZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnLAogICAgICAgIF07CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkand0KTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZXhwZWN0ZWRIZWFkZXIsICRqd3QtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/JWSFlattenedTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTOwoKLyoqCiAqIEBncm91cCBGdW5jdGlvbmFsCiAqLwpjbGFzcyBKV1NGbGF0dGVuZWRUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTYjYXBwZW5kaXgtQS41CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRGbGF0dGVuZWRKV1MoKQogICAgewogICAgICAgICRsb2FkZWQgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJ3sicGF5bG9hZCI6ImV5SnBjM01pT2lKcWIyVWlMQTBLSUNKbGVIQWlPakV6TURBNE1Ua3pPREFzRFFvZ0ltaDBkSEE2THk5bGVHRnRjR3hsTG1OdmJTOXBjMTl5YjI5MElqcDBjblZsZlEiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSkZVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiJlOWJjMDk3YS1jZTUxLTQwMzYtOTU2Mi1kMmFkZTg4MmRiMGQifSwic2lnbmF0dXJlIjoiRHRFaFUzbGpiRWc4TDM4VldBZlVBcU95S0FNNi1YeC1GNEdhd3hhZXBtWEZDZ2ZUakR4dzVkanhMYThJU2xTQXBtV1F4ZktUVUpxUFAzLUtnNk5VMVEifScpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGxvYWRlZCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0VTMjU2JywgJGxvYWRlZC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscyhbJ2lzcycgPT4gJ2pvZScsICdleHAnID0+IDEzMDA4MTkzODAsICdodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCcgPT4gdHJ1ZV0sIFxqc29uX2RlY29kZSgkbG9hZGVkLT5nZXRQYXlsb2FkKCksIHRydWUpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/JWSLoaderTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXSzsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTTG9hZGVyOwoKLyoqCiAqIEBncm91cCBKV1NMb2FkZXIKICogQGdyb3VwIFVuaXQKICovCmNsYXNzIEpXU0xvYWRlclRlc3QgZXh0ZW5kcyBTaWduYXR1cmVUZXN0CnsKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuYWJsZSB0byBsb2FkIGFuZCB2ZXJpZnkgdGhlIHRva2VuLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlRmxhdHRlbmVkVG9rZW5DYW5ub3RCZUxvYWRlZCgpCiAgICB7CiAgICAgICAgJHRva2VuID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2SW1KcGJHSnZMbUpoWjJkcGJuTkFhRzlpWW1sMGIyNHVaWGhoYlhCc1pTSjkiLCJzaWduYXR1cmUiOiJNUmpka2x5N18tb1RQVFMzQVhQNDFpUUlHS2E4MEEwWm1UdVY1TUVhSG94blcyZTVDWjVObEt0YWlub0ZtS1pvcGRITTFPMlU0bXd6SmRReDk5Nml2cDgzeHVnbElJN1BORGk4NHduQi1CRGtvQndBNzgxODVoWC1FczRKSXdtRExKSzNsZldSYS1YdEwwUm5sdHVZdjc0NmlZVGhfcUhSRDY4Qk50MXVTTkNyVUNUSkR0NWFBRTZ4OHdXMUt0OWVSbzRRUG9jU2FkbkhYRnhudDhJczlVenBFUlYwZVBQUWRMdVczSVNfZGUzeHlJckRhTEdkamx1UHhVQWhiNkwyYVhpYzFVMTJwb2RHVTBLTFVRU0Vfb0ktWm5tS0ozRjR1T1pEbmQ2UVpXSnVzaFo0MUF4Zl9mY0llOHU5aXBIODRvZ29yZWU3dmpiVTV5MThrRHF1RGcifSc7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICdraWQnID0+ICdiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ24nID0+ICduNEVQdEFPQ2M5QWxrZVFIUHpIU3RnQWJnczdiVFpMd1VCWmRSOF9LdUtQRUhMZDRySFZUZVQtTy1YVjJqUm9qZE5oeEpXVER2TmQ3bnFRMFZFaVpRSHpfQUptU0NwTWFKTVJCU0ZLcktiMndxVndHVV9Oc1lPWUwtUXRpV04ybGJ6Y0VlNlhDMGRBcHI1eWRRTHJIcWtISGlnM1JCb3JkYVo2QWotb0JIcUZFSFlwUGU3VHBlLU9mVmZIZDFFNmNTNk0xRlpjRDFOTkxZRDVsRkhwUEk5YlR3SmxzZGUzdWhHcUMwWkN1RUhnOGxoendPSHJ0SVFiUzBGVmJiOWszLXRWVFU0ZmdfM0xfdm5pVUZBS3d1Q0xxS25TMkJZd2RxX216U25iTFk3aF9xaXhvUjdqaWczX19rUmh1YXh3VWtSejVpYWlRa3FnYzVnSGRyTlA1encnLAogICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+Z2V0SldTTG9hZGVyKCktPmxvYWRBbmRWZXJpZnlXaXRoS2V5KCR0b2tlbiwgJGtleSwgJHNpZ25hdHVyZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgVW5hYmxlIHRvIGxvYWQgYW5kIHZlcmlmeSB0aGUgdG9rZW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVUb2tlbkNhbm5vdEJlVmVyaWZpZWRCZWNhdXNlT2ZBblVuc3VwcG9ydGVkQWxnb3JpdGhtKCkKICAgIHsKICAgICAgICAkdG9rZW4gPSAnZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltSnBiR0p2TG1KaFoyZHBibk5BYUc5aVltbDBiMjR1WlhoaGJYQnNaU0o5LlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQuTVJqZGtseTdfLW9UUFRTM0FYUDQxaVFJR0thODBBMFptVHVWNU1FYUhveG5XMmU1Q1o1TmxLdGFpbm9GbUtab3BkSE0xTzJVNG13ekpkUXg5OTZpdnA4M3h1Z2xJSTdQTkRpODR3bkItQkRrb0J3QTc4MTg1aFgtRXM0Skl3bURMSkszbGZXUmEtWHRMMFJubHR1WXY3NDZpWVRoX3FIUkQ2OEJOdDF1U05DclVDVEpEdDVhQUU2eDh3VzFLdDllUm80UVBvY1NhZG5IWEZ4bnQ4SXM5VXpwRVJWMGVQUFFkTHVXM0lTX2RlM3h5SXJEYUxHZGpsdVB4VUFoYjZMMmFYaWMxVTEycG9kR1UwS0xVUVNFX29JLVpubUtKM0Y0dU9aRG5kNlFaV0p1c2haNDFBeGZfZmNJZTh1OWlwSDg0b2dvcmVlN3ZqYlU1eTE4a0RxdURnJzsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ2JpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnbicgPT4gJ240RVB0QU9DYzlBbGtlUUhQekhTdGdBYmdzN2JUWkx3VUJaZFI4X0t1S1BFSExkNHJIVlRlVC1PLVhWMmpSb2pkTmh4SldURHZOZDducVEwVkVpWlFIel9BSm1TQ3BNYUpNUkJTRktyS2Iyd3FWd0dVX05zWU9ZTC1RdGlXTjJsYnpjRWU2WEMwZEFwcjV5ZFFMckhxa0hIaWczUkJvcmRhWjZBai1vQkhxRkVIWXBQZTdUcGUtT2ZWZkhkMUU2Y1M2TTFGWmNEMU5OTFlENWxGSHBQSTliVHdKbHNkZTN1aEdxQzBaQ3VFSGc4bGh6d09IcnRJUWJTMEZWYmI5azMtdFZUVTRmZ18zTF92bmlVRkFLd3VDTHFLblMyQll3ZHFfbXpTbmJMWTdoX3FpeG9SN2ppZzNfX2tSaHVheHdVa1J6NWlhaVFrcWdjNWdIZHJOUDV6dycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5nZXRKV1NMb2FkZXIoKS0+bG9hZEFuZFZlcmlmeVdpdGhLZXkoJHRva2VuLCAka2V5LCAkc2lnbmF0dXJlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBVbmFibGUgdG8gbG9hZCBhbmQgdmVyaWZ5IHRoZSB0b2tlbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZVRva2VuQ2Fubm90QmVWZXJpZmllZEJlY2F1c2VPZkFCYWRLZXkoKQogICAgewogICAgICAgICR0b2tlbiA9ICdleUpoYkdjaU9pSklVekkxTmlJc0ltdHBaQ0k2SWpBeE9HTXdZV1UxTFRSa09XSXRORGN4WWkxaVptUTJMV1ZsWmpNeE5HSmpOekF6TnlKOS5TWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0LnMwaDZLVGh6a2ZCQkJrTHNwVzFoODRWc0paRlRzUFBxTURBN2cxTWQ3cDAnOwogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAna2lkJyA9PiAnYmlsYm8uYmFnZ2luc0Bob2JiaXRvbi5leGFtcGxlJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICduJyA9PiAnbjRFUHRBT0NjOUFsa2VRSFB6SFN0Z0FiZ3M3YlRaTHdVQlpkUjhfS3VLUEVITGQ0ckhWVGVULU8tWFYyalJvamROaHhKV1REdk5kN25xUTBWRWlaUUh6X0FKbVNDcE1hSk1SQlNGS3JLYjJ3cVZ3R1VfTnNZT1lMLVF0aVdOMmxiemNFZTZYQzBkQXByNXlkUUxySHFrSEhpZzNSQm9yZGFaNkFqLW9CSHFGRUhZcFBlN1RwZS1PZlZmSGQxRTZjUzZNMUZaY0QxTk5MWUQ1bEZIcFBJOWJUd0psc2RlM3VoR3FDMFpDdUVIZzhsaHp3T0hydElRYlMwRlZiYjlrMy10VlRVNGZnXzNMX3ZuaVVGQUt3dUNMcUtuUzJCWXdkcV9telNuYkxZN2hfcWl4b1I3amlnM19fa1JodWF4d1VrUno1aWFpUWtxZ2M1Z0hkck5QNXp3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmdldEpXU0xvYWRlcigpLT5sb2FkQW5kVmVyaWZ5V2l0aEtleSgkdG9rZW4sICRrZXksICRzaWduYXR1cmUpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRoZVRva2VuQ2FuQmVWZXJpZmllZCgpCiAgICB7CiAgICAgICAgJHRva2VuID0gJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5LlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQuczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCc7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2snID0+ICdoSnRYSVoydVNONWtiUWZidFROV2JwZG1oa1Y4RkpHLU9uYmM2bXhDY1lnJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3cyA9ICR0aGlzLT5nZXRKV1NMb2FkZXIoKS0+bG9hZEFuZFZlcmlmeVdpdGhLZXkoJHRva2VuLCAka2V5LCAkc2lnbmF0dXJlKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGp3cyk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIiwgJGp3cy0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygwLCAkc2lnbmF0dXJlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgSldTTG9hZGVyfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSAkandzTG9hZGVyID0gbnVsbDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEpXU0xvYWRlcigpOiBKV1NMb2FkZXIKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmp3c0xvYWRlcikgewogICAgICAgICAgICAkdGhpcy0+andzTG9hZGVyID0gJHRoaXMtPmdldEpXU0xvYWRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnandzX2NvbXBhY3QnXSwgWydIUzI1NiddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+andzTG9hZGVyOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/JWSSplitTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXENvbnZlcnRlclxTdGFuZGFyZENvbnZlcnRlcjsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxKU09OR2VuZXJhbFNlcmlhbGl6ZXI7CgovKioKICogQGdyb3VwIEpXUwogKi8KY2xhc3MgSldTU3BsaXRUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhSndzT2JqZWN0V2l0aE1vcmVUaGFuT25lUmVjaXBpZW50Q2FuQmVTcGxpdHRlZEludG9TZXZlcmFsSndzT2JqZWN0cygpCiAgICB7CiAgICAgICAgJGlucHV0ID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJzaWduYXR1cmVzIjpbeyJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlNVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUifSwic2lnbmF0dXJlIjoiTUlzanF0VmxPcGE3MUtFLU1zczhfTnEyWUg0RkdoaW9jc3FyZ2k1TnZ5RzUzdW9pbWljMXRjTWRTZy1xcHRyelpjN0NHNlN2dzJZMTNURElxSHpUVXJMX2xSMlpGY3J5TkZpSGtTdzEyOUVnaEdwd2tweGFUbl9USEpUQ2dsTmJBRGtvMU1aQkNkd3pKeHdxWmMtMVJscE8ySGliVVl5WFN3Tzk3QlNlMF9ldlpLZGp2dktTZ3NJcWp5dEtTZUFNYmhNQmRNbWE2MjJfQkc1dDRzZGJ1Q0h0RmpwOWlKbWtpbzQ3QUl3cWtaVjFhSVpzdjMzdVBVcUJCQ1hiWW9RSnd0N214UGZ0SG1ObEdvT1NNeFJfM3RobVhUQ200VVMteGlOT3loYm04YWZLSzY0alU2X1RQdFFIaUplUUp4ejlHM1R4LTA4M0I3NDVfQWZZT25sQzl3In0seyJoZWFkZXIiOnsiYWxnIjoiRVM1MTIiLCJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUifSwic2lnbmF0dXJlIjoiQVJjVkxuYUpKYVVXRzhmRy04dDVCUkVWQXVUWThuOFlIandETzFtdWhjZENvRlpGRmpmSVN1MENka245WWJkbG1pNTRobzB4OTI0RFV6OHNLN1pYa2hjN0FGTThPYkxmVHZOQ3JxY0kzSmtsMlU1SVgzdXROaE9ESDZ2N3hneTFRYWhzbjBmeWI0elNBa2plOGJBV3o0dklmajVwQ01ZeHhtNGZnVjNxN1pZaG01ZUQifSx7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5Iiwic2lnbmF0dXJlIjoiczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCJ9XX0nOwogICAgICAgICRzZXJpYWxpemVyID0gbmV3IEpTT05HZW5lcmFsU2VyaWFsaXplcihuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSk7CiAgICAgICAgJGp3cyA9ICRzZXJpYWxpemVyLT51bnNlcmlhbGl6ZSgkaW5wdXQpOwogICAgICAgICRzcGxpdCA9ICRqd3MtPnNwbGl0KCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDMsICRqd3MtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygzLCBcY291bnQoJGp3cy0+c3BsaXQoKSkpOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkandzLT5jb3VudFNpZ25hdHVyZXMoKTsgKyskaSkgewogICAgICAgICAgICAkc2lnbmF0dXJlMSA9ICRqd3MtPmdldFNpZ25hdHVyZSgkaSk7CiAgICAgICAgICAgICR0ZW1wSndzID0gJHNwbGl0WyRpXTsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJHRlbXBKd3MtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJGp3cy0+aXNQYXlsb2FkRGV0YWNoZWQoKSwgJHRlbXBKd3MtPmlzUGF5bG9hZERldGFjaGVkKCkpOwogICAgICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkandzLT5nZXRFbmNvZGVkUGF5bG9hZCgpLCAkdGVtcEp3cy0+Z2V0RW5jb2RlZFBheWxvYWQoKSk7CiAgICAgICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRqd3MtPmdldFBheWxvYWQoKSwgJHRlbXBKd3MtPmdldFBheWxvYWQoKSk7CgogICAgICAgICAgICAkc2lnbmF0dXJlMiA9ICR0ZW1wSndzLT5nZXRTaWduYXR1cmUoMCk7CiAgICAgICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRzaWduYXR1cmUxLT5nZXRTaWduYXR1cmUoKSwgJHNpZ25hdHVyZTItPmdldFNpZ25hdHVyZSgpKTsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJHNpZ25hdHVyZTEtPmdldEhlYWRlcigpLCAkc2lnbmF0dXJlMi0+Z2V0SGVhZGVyKCkpOwogICAgICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkc2lnbmF0dXJlMS0+Z2V0RW5jb2RlZFByb3RlY3RlZEhlYWRlcigpLCAkc2lnbmF0dXJlMi0+Z2V0RW5jb2RlZFByb3RlY3RlZEhlYWRlcigpKTsKICAgICAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJHNpZ25hdHVyZTEtPmdldFByb3RlY3RlZEhlYWRlcigpLCAkc2lnbmF0dXJlMi0+Z2V0UHJvdGVjdGVkSGVhZGVyKCkpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/JWSTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXUzsKCi8qKgogKiBAZ3JvdXAgSldTCiAqIEBncm91cCBVbml0CiAqLwpjbGFzcyBKV1NUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqV1MoKQogICAgewogICAgICAgICRjbGFpbXMgPSBbCiAgICAgICAgICAgICduYmYnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdpYXQnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdleHAnID0+IFx0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAnaXNzJyA9PiAnTWUnLAogICAgICAgICAgICAnYXVkJyA9PiAnWW91JywKICAgICAgICAgICAgJ3N1YicgPT4gJ015IGZyaWVuZCcsCiAgICAgICAgXTsKICAgICAgICAkaGVhZGVyID0gWydhbGcnID0+ICdub25lJ107CiAgICAgICAgJGp3cyA9IEpXUzo6Y3JlYXRlKFxqc29uX2VuY29kZSgkY2xhaW1zKSwgXGpzb25fZW5jb2RlKCRjbGFpbXMpKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgnJywgJGhlYWRlciwgQmFzZTY0VXJsOjplbmNvZGUoXGpzb25fZW5jb2RlKCRoZWFkZXIpKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFxqc29uX2VuY29kZSgkY2xhaW1zKSwgJGp3cy0+Z2V0UGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3MtPmdldFNpZ25hdHVyZSgwKS0+aGFzUHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJGhlYWRlciwgJGp3cy0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXIoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ25vbmUnLCAkandzLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKFtdLCAkandzLT5nZXRTaWduYXR1cmUoMCktPmdldEhlYWRlcigpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBzaWduYXR1cmUgZG9lcyBub3QgZXhpc3QuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQ29tcGFjdEpTT05GYWlsZWQoKQogICAgewogICAgICAgICRjbGFpbXMgPSBbCiAgICAgICAgICAgICduYmYnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdpYXQnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdleHAnID0+IFx0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAnaXNzJyA9PiAnTWUnLAogICAgICAgICAgICAnYXVkJyA9PiAnWW91JywKICAgICAgICAgICAgJ3N1YicgPT4gJ015IGZyaWVuZCcsCiAgICAgICAgXTsKICAgICAgICAkandzID0gSldTOjpjcmVhdGUoXGpzb25fZW5jb2RlKCRjbGFpbXMpLCBcanNvbl9lbmNvZGUoJGNsYWltcykpOwogICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgc2lnbmF0dXJlIGRvZXMgbm90IGV4aXN0LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0ZsYXR0ZW5lZEpTT05GYWlsZWQoKQogICAgewogICAgICAgICRjbGFpbXMgPSBbCiAgICAgICAgICAgICduYmYnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdpYXQnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdleHAnID0+IFx0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAnaXNzJyA9PiAnTWUnLAogICAgICAgICAgICAnYXVkJyA9PiAnWW91JywKICAgICAgICAgICAgJ3N1YicgPT4gJ015IGZyaWVuZCcsCiAgICAgICAgXTsKICAgICAgICAkandzID0gSldTOjpjcmVhdGUoXGpzb25fZW5jb2RlKCRjbGFpbXMpLCBcanNvbl9lbmNvZGUoJGNsYWltcykpOwogICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2ZsYXR0ZW5lZCcsICRqd3MsIDApOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxMb2dpY0V4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBObyBzaWduYXR1cmUuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSlNPTkZhaWxlZCgpCiAgICB7CiAgICAgICAgJGNsYWltcyA9IFsKICAgICAgICAgICAgJ25iZicgPT4gXHRpbWUoKSwKICAgICAgICAgICAgJ2lhdCcgPT4gXHRpbWUoKSwKICAgICAgICAgICAgJ2V4cCcgPT4gXHRpbWUoKSArIDM2MDAsCiAgICAgICAgICAgICdpc3MnID0+ICdNZScsCiAgICAgICAgICAgICdhdWQnID0+ICdZb3UnLAogICAgICAgICAgICAnc3ViJyA9PiAnTXkgZnJpZW5kJywKICAgICAgICBdOwogICAgICAgICRqd3MgPSBKV1M6OmNyZWF0ZShcanNvbl9lbmNvZGUoJGNsYWltcyksIFxqc29uX2VuY29kZSgkY2xhaW1zKSk7CiAgICAgICAgJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2pzb25fZ2VuZXJhbCcsICRqd3MsIDApOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxMb2dpY0V4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgc2lnbmF0dXJlIGNvbnRhaW5zIHVucHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXJzIGFuZCBjYW5ub3QgYmUgY29udmVydGVkIGludG8gY29tcGFjdCBKU09OCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25hdHVyZUNvbnRhaW5zVW5wcm90ZWN0ZWRIZWFkZXIoKQogICAgewogICAgICAgICRjbGFpbXMgPSBbCiAgICAgICAgICAgICduYmYnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdpYXQnID0+IFx0aW1lKCksCiAgICAgICAgICAgICdleHAnID0+IFx0aW1lKCkgKyAzNjAwLAogICAgICAgICAgICAnaXNzJyA9PiAnTWUnLAogICAgICAgICAgICAnYXVkJyA9PiAnWW91JywKICAgICAgICAgICAgJ3N1YicgPT4gJ015IGZyaWVuZCcsCiAgICAgICAgXTsKICAgICAgICAkaGVhZGVyID0gWydhbGcnID0+ICdub25lJ107CiAgICAgICAgJGp3cyA9IEpXUzo6Y3JlYXRlKFxqc29uX2VuY29kZSgkY2xhaW1zKSwgXGpzb25fZW5jb2RlKCRjbGFpbXMpKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgnJywgJGhlYWRlciwgQmFzZTY0VXJsOjplbmNvZGUoXGpzb25fZW5jb2RlKCRoZWFkZXIpKSwgWydmb28nID0+ICdiYXInXSk7CgogICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgaGVhZGVyICJmb28iIGRvZXMgbm90IGV4aXN0CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25hdHVyZURvZXNOb3RDb250YWluSGVhZGVyKCkKICAgIHsKICAgICAgICAkY2xhaW1zID0gWwogICAgICAgICAgICAnbmJmJyA9PiBcdGltZSgpLAogICAgICAgICAgICAnaWF0JyA9PiBcdGltZSgpLAogICAgICAgICAgICAnZXhwJyA9PiBcdGltZSgpICsgMzYwMCwKICAgICAgICAgICAgJ2lzcycgPT4gJ01lJywKICAgICAgICAgICAgJ2F1ZCcgPT4gJ1lvdScsCiAgICAgICAgICAgICdzdWInID0+ICdNeSBmcmllbmQnLAogICAgICAgIF07CiAgICAgICAgJGhlYWRlciA9IFsnYWxnJyA9PiAnbm9uZSddOwogICAgICAgICRqd3MgPSBKV1M6OmNyZWF0ZShcanNvbl9lbmNvZGUoJGNsYWltcyksIFxqc29uX2VuY29kZSgkY2xhaW1zKSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJycsICRoZWFkZXIsIEJhc2U2NFVybDo6ZW5jb2RlKFxqc29uX2VuY29kZSgkaGVhZGVyKSkpOwogICAgICAgICRqd3MtPmdldFNpZ25hdHVyZSgwKS0+Z2V0SGVhZGVyUGFyYW1ldGVyKCdmb28nKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBwcm90ZWN0ZWQgaGVhZGVyICJmb28iIGRvZXMgbm90IGV4aXN0CiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25hdHVyZURvZXNOb3RDb250YWluUHJvdGVjdGVkSGVhZGVyKCkKICAgIHsKICAgICAgICAkY2xhaW1zID0gWwogICAgICAgICAgICAnbmJmJyA9PiBcdGltZSgpLAogICAgICAgICAgICAnaWF0JyA9PiBcdGltZSgpLAogICAgICAgICAgICAnZXhwJyA9PiBcdGltZSgpICsgMzYwMCwKICAgICAgICAgICAgJ2lzcycgPT4gJ01lJywKICAgICAgICAgICAgJ2F1ZCcgPT4gJ1lvdScsCiAgICAgICAgICAgICdzdWInID0+ICdNeSBmcmllbmQnLAogICAgICAgIF07CiAgICAgICAgJGhlYWRlciA9IFsnYWxnJyA9PiAnbm9uZSddOwogICAgICAgICRqd3MgPSBKV1M6OmNyZWF0ZShcanNvbl9lbmNvZGUoJGNsYWltcyksIFxqc29uX2VuY29kZSgkY2xhaW1zKSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJycsICRoZWFkZXIsIEJhc2U2NFVybDo6ZW5jb2RlKFxqc29uX2VuY29kZSgkaGVhZGVyKSkpOwogICAgICAgICRqd3MtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdmb28nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/RFC7520/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/RFC7520/MultipleSignaturesTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0c1xSRkM3NTIwOwoKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFRlc3RzXFNpZ25hdHVyZVRlc3Q7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuOAogKgogKiBAZ3JvdXAgUkZDNzUyMAogKi8KY2xhc3MgTXVsdGlwbGVTaWduYXR1cmVzVGVzdCBleHRlbmRzIFNpZ25hdHVyZVRlc3QKewogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGlwbGVTaWduYXR1cmVzKCkKICAgIHsKICAgICAgICAvKgogICAgICAgICAqIFBheWxvYWQsCiAgICAgICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuOC4xCiAgICAgICAgICovCiAgICAgICAgJHBheWxvYWQgPSAiSXRceGUyXHg4MFx4OTlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmVceGUyXHg4MFx4OTlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4iOwoKICAgICAgICAkcnNhX3ByaXZhdGVfa2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ2JpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnbicgPT4gJ240RVB0QU9DYzlBbGtlUUhQekhTdGdBYmdzN2JUWkx3VUJaZFI4X0t1S1BFSExkNHJIVlRlVC1PLVhWMmpSb2pkTmh4SldURHZOZDducVEwVkVpWlFIel9BSm1TQ3BNYUpNUkJTRktyS2Iyd3FWd0dVX05zWU9ZTC1RdGlXTjJsYnpjRWU2WEMwZEFwcjV5ZFFMckhxa0hIaWczUkJvcmRhWjZBai1vQkhxRkVIWXBQZTdUcGUtT2ZWZkhkMUU2Y1M2TTFGWmNEMU5OTFlENWxGSHBQSTliVHdKbHNkZTN1aEdxQzBaQ3VFSGc4bGh6d09IcnRJUWJTMEZWYmI5azMtdFZUVTRmZ18zTF92bmlVRkFLd3VDTHFLblMyQll3ZHFfbXpTbmJMWTdoX3FpeG9SN2ppZzNfX2tSaHVheHdVa1J6NWlhaVFrcWdjNWdIZHJOUDV6dycsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdkJyA9PiAnYldVQzlCLUVGUklvOGtwR2ZoMFp1eUdQdk1OS3ZZV050Ql9pa2lIOWsyMGVULU8xcV9JNzhlaVprcFh4WFEwVVRFczJMc05SUy04dUpidlEtQTFpcmt3TVNNa0sxSjNYVEdnZHJoQ2t1OWdSbGRZN3NOQV9BS1pHaC1RNjYxXzQycklOTFJDZThXLW5aMzR1aV9xT2ZrTG5LOVFXRERxcGFJc0EtYk13V1dTREZ1Mk1VQll3a0hUTUV6TFlHcU9lMDRub3FlcTFoRXhCVEhCT0Jka01YaXVGaFVxMUJVNmwtRHFFaVd4cWc4MnNYdDJoLUxNblQzMDQ2QU9ZSm9SaW96NzV0U1VRZkdDc2hXVEJuUDV1RGpkMThrS2h5djA3bGhmU0pkclBkTTVQbHlsMjFoc0ZmNExfbUhDdW9GYXU3Z2RzUGZIUHh4alZPY09wQnJRendRJywKICAgICAgICAgICAgJ3AnID0+ICczU2x4Z19Ed1RYSmNiNjA5NVJvWHlnUUNBWjVSbkF2WmxubzF5aEh0blVleF9mcDdBWl85blJhTzdIWF8tU0ZmR1FldXRhbzJURGpEQVdVNFZ1cGs4cnc5SlIwQXpaME4yZnZ1SUFtcl9XQ3NtR3BlTnFRbmV2MVQ3SXlFc25oOFVNdC1uNUNhZmhraWt6aEVzcm1uZEg2THhPcnZSSmxzUHA2WnY4YlVxMGsnLAogICAgICAgICAgICAncScgPT4gJ3VLRTJkaC1jVGY2RVJGNGs0ZV9qeTc4R2ZQWVVJYVV5b1NTSnVCenAzQ3ViazNPQ3FzNmdyVDhiUl9jdTBEbTFNWndXbXRkcUR5STk1SHJVZXEzTVAxNXZNTU9OOGxIVGVadTJsbUt2d3FXN2FuVjVVemhNMWlaN3o0eU1rdVV3RldvQnZ5WTg5OEVYdlJELWhkcVJ4SGxTcUFaMTkyekIzcFZGSjBzN3BGYycsCiAgICAgICAgICAgICdkcCcgPT4gJ0I4UFZ2WGt2SnJqMkwtR1lRN3YzeTlyNkt3NWc5U2FoWEJ3c1dVenAxOVRWbGdJLVlWODVxMU5JYjFyeFF0RC1Jc1hYUjMtVGFuZXZ1UlBSdDVPQk9kaU1HUXA4cGJ0MjZnbGpZZktVX0U5eG4tUlVMSHowLWVkOUU5Z1hMS0Q0VkduZ3B6LVBmUV9xMjlwazV4V0hvSnAwMDlRZjFIdkNoaXhSWDU5ZWhpaycsCiAgICAgICAgICAgICdkcScgPT4gJ0NMRG1ER2R1aHlsYzlvN3I4NHJFVVZuN3B6UTZQRjgzWS1pQlp4NU5ULVRwbk9aS0YxcEVyQU1WZUt6RkVsNDFEbEhIcXFCTFNNMFcxc09GYndUeFlXWkRtNnNJNm9nNWlUYndRR0lDM2duSktiaV83a192SmdHSHdIeGdQYVgyUG52UC16eUVrREVSdWYtcnk0Y19aMTFDcTlBcUMyeWVMNmtkS1QxY1lGOCcsCiAgICAgICAgICAgICdxaScgPT4gJzNQaXF2WFFOMHp3TWVFLXNCdlpnaTI4OVhQOVhDUUYzVldxUHpNS25JZ1FwN19UdWdvNi1OWkJLQ1FzTWYzSGFFR0JqVFZKc19qY0s4LVRSWHZhS2UtN1pNYVFqOFZmQmRZa3NzYnUwTktERGhqSi1HdGlzZWFEVld0N2RjSDBjZnd4Z0ZVSHBRaDdGb0NyakZKNmg2WkVwTUY2eG11anM0cU1wUHo4YWFJNCcsCiAgICAgICAgXSk7CgogICAgICAgICRlY2RzYV9wcml2YXRlX2tleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgJ2tpZCcgPT4gJ2JpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgICAgICd1c2UnID0+ICdzaWcnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC01MjEnLAogICAgICAgICAgICAneCcgPT4gJ0FIS1pMTE9zQ096ejVjWTk3ZXdOVWFqQjk1N3ktQy1VODhjM3YxM25tR1p4NnNZbF9vSlh1OUE1UmtUS3FqcXZqeWVrV0YtN3l0RHlSWFlnQ0Y1Y2owS3QnLAogICAgICAgICAgICAneScgPT4gJ0FkeW1sSHZPaUx4WGtFaGF5WFFuTkN2RFg0aDlodFphQ0pOMzRrZm1DNnBWNU9oUUhpcmFWeVNzVWRhUWtBZ0RQcndRckptYm5YOWN3bEdmUC1IcUhaUjEnLAogICAgICAgICAgICAnZCcgPT4gJ0FBaFJPTjJyOWNxWFgxaGctUm9JNlIxdFg1cDJyVUFZZG1wSFpvQzFYTk01Nkt0c2NyWDZ6YktpcFFyQ1c5Q0daSDNUNHVicG5vVEtMRFlKX2ZGM19ySnQnLAogICAgICAgIF0pOwoKICAgICAgICAkc3ltbWV0cmljX2tleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdraWQnID0+ICcwMThjMGFlNS00ZDliLTQ3MWItYmZkNi1lZWYzMTRiYzcwMzcnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2snID0+ICdoSnRYSVoydVNONWtiUWZidFROV2JwZG1oa1Y4RkpHLU9uYmM2bXhDY1lnJywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnUlMyNTYnLCAnRVM1MTInLCAnSFMyNTYnXSk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydSUzI1NicsICdFUzUxMicsICdIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRlY2RzYV9wcml2YXRlX2tleSwgW10sIFsnYWxnJyA9PiAnRVM1MTInLCAna2lkJyA9PiAnYmlsYm8uYmFnZ2luc0Bob2JiaXRvbi5leGFtcGxlJ10pIC8vQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTQuOC4yCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRyc2FfcHJpdmF0ZV9rZXksIFsnYWxnJyA9PiAnUlMyNTYnXSwgWydraWQnID0+ICdiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUnXSkgICAgLy9Ac2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC44LjMKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHN5bW1ldHJpY19rZXksIFsnYWxnJyA9PiAnSFMyNTYnLCAna2lkJyA9PiAnMDE4YzBhZTUtNGQ5Yi00NzFiLWJmZDYtZWVmMzE0YmM3MDM3J10pICAgLy9Ac2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTIwI3NlY3Rpb24tNC44LjQKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygzLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGp3cywgJGVjZHNhX3ByaXZhdGVfa2V5LCAwKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkandzLCAkcnNhX3ByaXZhdGVfa2V5LCAxKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkandzLCAkc3ltbWV0cmljX2tleSwgMikpOwoKICAgICAgICAvKgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MjAjc2VjdGlvbi00LjguNQogICAgICAgICAqLwogICAgICAgICRleHBlY3RlZF9qc29uID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJzaWduYXR1cmVzIjpbeyJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSlNVekkxTmlKOSIsImhlYWRlciI6eyJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUifSwic2lnbmF0dXJlIjoiTUlzanF0VmxPcGE3MUtFLU1zczhfTnEyWUg0RkdoaW9jc3FyZ2k1TnZ5RzUzdW9pbWljMXRjTWRTZy1xcHRyelpjN0NHNlN2dzJZMTNURElxSHpUVXJMX2xSMlpGY3J5TkZpSGtTdzEyOUVnaEdwd2tweGFUbl9USEpUQ2dsTmJBRGtvMU1aQkNkd3pKeHdxWmMtMVJscE8ySGliVVl5WFN3Tzk3QlNlMF9ldlpLZGp2dktTZ3NJcWp5dEtTZUFNYmhNQmRNbWE2MjJfQkc1dDRzZGJ1Q0h0RmpwOWlKbWtpbzQ3QUl3cWtaVjFhSVpzdjMzdVBVcUJCQ1hiWW9RSnd0N214UGZ0SG1ObEdvT1NNeFJfM3RobVhUQ200VVMteGlOT3loYm04YWZLSzY0alU2X1RQdFFIaUplUUp4ejlHM1R4LTA4M0I3NDVfQWZZT25sQzl3In0seyJoZWFkZXIiOnsiYWxnIjoiRVM1MTIiLCJraWQiOiJiaWxiby5iYWdnaW5zQGhvYmJpdG9uLmV4YW1wbGUifSwic2lnbmF0dXJlIjoiQVJjVkxuYUpKYVVXRzhmRy04dDVCUkVWQXVUWThuOFlIandETzFtdWhjZENvRlpGRmpmSVN1MENka245WWJkbG1pNTRobzB4OTI0RFV6OHNLN1pYa2hjN0FGTThPYkxmVHZOQ3JxY0kzSmtsMlU1SVgzdXROaE9ESDZ2N3hneTFRYWhzbjBmeWI0elNBa2plOGJBV3o0dklmajVwQ01ZeHhtNGZnVjNxN1pZaG01ZUQifSx7InByb3RlY3RlZCI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW10cFpDSTZJakF4T0dNd1lXVTFMVFJrT1dJdE5EY3hZaTFpWm1RMkxXVmxaak14TkdKak56QXpOeUo5Iiwic2lnbmF0dXJlIjoiczBoNktUaHprZkJCQmtMc3BXMWg4NFZzSlpGVHNQUHFNREE3ZzFNZDdwMCJ9XX0nOwoKICAgICAgICAkbG9hZGVkX2pzb24gPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJGV4cGVjdGVkX2pzb24pOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDMsICRsb2FkZWRfanNvbi0+Y291bnRTaWduYXR1cmVzKCkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfanNvbiwgJHJzYV9wcml2YXRlX2tleSwgMCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF9qc29uLCAkZWNkc2FfcHJpdmF0ZV9rZXksIDEpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfanNvbiwgJHN5bW1ldHJpY19rZXksIDIpKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/RFC7520/NestingTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0c1xSRkM3NTIwOwoKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcSldLOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFRlc3RzXFNpZ25hdHVyZVRlc3Q7CgovKioKICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzUyMCNzZWN0aW9uLTYKICoKICogQGdyb3VwIFJGQzc1MjAKICovCmNsYXNzIE5lc3RpbmdUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduYXR1cmVWZXJpZmljYXRpb24oKQogICAgewogICAgICAgICRwYXlsb2FkID0gWwogICAgICAgICAgICAnaXNzJyA9PiAnaG9iYml0b24uZXhhbXBsZScsCiAgICAgICAgICAgICdleHAnID0+IDEzMDA4MTkzODAsCiAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCcgPT4gdHJ1ZSwKICAgICAgICBdOwoKICAgICAgICAkc2lnbmF0dXJlX2tleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICdraWQnID0+ICdob2JiaXRvbi5leGFtcGxlJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICduJyA9PiAna05yUElCRFhNVTZmY3l2NWktUUhRQVEtSzhnc0MzSEpiN0ZZaFlhdzhoWGJOSmEtdDhxMGxES3dMWmdRWFlWLWZmV3hYSnY1R0dybFpFNEdVNTJsZk1FZWdURHpZVHJSUTN0ZXBnS0ZqTUdnNkl5NmZrbDFaTnN4MmdFb25zbmxTaGZ6QTlHSndSVG10S1BiazFzLWh3eDFJVTVBVC1BSWVsTnFCZ2NGMnZFNVcyNV9TR0dCb2FST1ZkVVl4cUVURGdnTTF6NWNLVjRaakRaOC1saDRvVkIwN2JrYWM2TFFkSHBKVVV5U0hfRXIyMERYeDMwS3lpOTdQY2lYS1RTLVFLWG5tbThpdnlSQ211eDIyWm9QVWluZDJCS0M1T2lHNE13QUxoYUwyWjJrOENzUmRmeS03ZGc3ejQxUnA2RDBaZUV2dGFVcDRiWDRhS3JhTDRyVGZ3JywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ2QnID0+ICdaTGVfVEl4cEU5LVdfbjJWQmEtSFd2dVlQdGp2eHdWWENsSkZPcEpzZGVhOGc5Uk14MzRxRU9FdG5vWWMydW4zQ1ozTHRKaS1tanU1UkFUOFlTYzc2WUpkczNaVncwVWlPOG1NQmVHNi1pT252Z29ib2JOeDdLNTcteGpUSlpVNzJFak9yOWtCN3o2Wkt3RERxN0hGeUNEaFVFY1ljSEZWYzdpTF82VGliVmhBaE9GT05XbHFsSmdFZ3dWWWQwcnliTkdLaWZkbnBFYnd5SG9Nd1k2SE0xcXZuRUZnUDdpWjBZekhVVDUzNXg2amo0VktjZEE3WmR1RmtoVWF1eXN5U0VXN214Wk02ZmoxdmRqSkl5OUxEMWZJejMwWHY0Y2tvcWhLRjVHT05VNnRObU1tTmdBRDZnSVZpeUVsZTFQckl4bDF0QmhDSTE0YlJXLXpycEhnQVEnLAogICAgICAgICAgICAncCcgPT4gJ3lLV1lvTklBcXdNUlFsZ0lCT2RUMU5JY2JETlVVczJSaC1wQmF4RF9tSWt3ZU10NE1nLTAtQjJpU1l2TXJzOGhvcmhvblY3dnhDUWFnY0JBQVRHVy1oQWFmVWVoV2p4V1NILTNLY2NSTTh0b0w0ZTBxN00taWRSRE9CWFNvZTdaMi1DVjJ4X1pDWTNSUDhxcDY0MlIxM1dnWHFHRElNNE1iVWtaU2pjWTktYycsCiAgICAgICAgICAgICdxJyA9PiAndU5ENG8xNVYzMEtEemY4dkZKdzU4OXAxdmxRVlEzTkVpbHJpblJVUEhra3hhQXpEemNjR2dyV01XcEd4R0ZGbk5MM3c1Q3FQTGVVNzYtNUlWWVFxMEh3WVZsMGhWWFFIcjdzZ2FHdS00ODNBZDNFTmNMMjNGck9uRjQ1bTdfMm9vQXN0SkRlNDlNZUxUVFFLclNJQmxfU0t2cXBZdmZTUFRjelBjWmtoOUtrJywKICAgICAgICAgICAgJ2RwJyA9PiAnam1UbkVvcTJxcWE4b3VheW1qaEpTQ25zdmVVWG5NUUMyZ0FuZVFKUlFrRnFRdS16VjJQS1BLTmJQdktWeWlGNWIyLUwzdE0zT1cyZDJpTkR5UlVXWGxUN1Y1bDBLd1BUQUJTVE9uVHFBbVlDaEdpOGtYWGRsaGNydFN2WGxkQmFrQzZzYXh3SV9UekdHWTJNVlh6YzJabkN2Q1hIVjRxalN4T3JmUDNwSEZVJywKICAgICAgICAgICAgJ2RxJyA9PiAnUjlGVXZVODhPVnpFa1RrWGwzLTUtV3VzRTREakhtbmRlWklsdTNyaWZCZGZMcHFfUC1pV1BCYkdhcTl3elExYy1KN1N6Q2RKcWtFSkR2NXlkMkM3cm5aNmtwendCaF9ubUw4enNjQWsxcXN1bm50OUNKR0FZejctc0dXeTFKR1NoRmF6ZlA1MlRoQjRybENKMFl1RWFRTXJJenBZNzdfb0xBaHBtREEwaExrJywKICAgICAgICAgICAgJ3FpJyA9PiAnUzh0Qzdaa25XNmhQSVRramN3dHRRT1BMVm1SZndpclJsRkFWaXVEYjhOVzlDclZfN0YyT3FVWkNxbXpIVFlBdW13R0ZISTFXVlJlcDdhbmxlV2FKanhDXzFiM2ZxX2FsNHFIM1BlLUVLaUhnNklNYXp1UnRaTFVST2NUaHJFeERiRjVkWWJzY2lEbmZSVVdMRXJaNE4xQmUwYm54WXVQcXh3S2Q5UVp3TW8wJywKICAgICAgICBdKTsKCiAgICAgICAgJHNpZ25hdHVyZV9oZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdQUzI1NicsCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnLAogICAgICAgIF07CgogICAgICAgICRqc29uX2NvbXBhY3QgPSAnZXlKaGJHY2lPaUpRVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKb2IySmlhWFJ2Ymk1bGVHRnRjR3hsSWl3aVpYaHdJam94TXpBd09ERTVNemd3TENKb2RIUndPaTh2WlhoaGJYQnNaUzVqYjIwdmFYTmZjbTl2ZENJNmRISjFaWDAuZFBwTXF3Ulp4RllpMVVmY0RBYWY4TTk5bzdrd1VXdGlYWi1CeXZWdUppaDRNaEpfYVpxY2lwcnowT1dhSUFrSXZuMXFza0NoaXJqS3ZZOUVTWk5VQ1A0Smp2ZnlQUy1ucWpKeFlvQTV6dFdPeUZrMmNaTklQWGpjSlhTUXdYUE85dEVlLXY0VlNxZ0QwYUtIcVB4WW9nNE42Q3oxbEtwaDFVMXNZRFNJNjdfYkxMN2VsZ192a2pmTXA1X1c1bDVMdVVZR01laDZoeFFJYUlVWGY5RXdWMkptdlRNdVotdkJPV3kwU25peTFFRm83MkNSVHZtdHJJZjVBUk9vNU1ObGlZM0t0VXhlUC1TT21ELUxFWXdXOVNsa29oWXpNVkFaRERPclZidjdLVlJIcGVZTmFLNzVLRVFxZENFRWtTX3Jza1pTLVF0dF9ubGVnVFdoMW1FWWFBJzsKCiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydQUzI1NiddKTsKICAgICAgICAkbG9hZGVkX2NvbXBhY3RfanNvbiA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkanNvbl9jb21wYWN0KTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkX2NvbXBhY3RfanNvbiwgJHNpZ25hdHVyZV9rZXksIDApKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkc2lnbmF0dXJlX2hlYWRlciwgJGxvYWRlZF9jb21wYWN0X2pzb24tPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRwYXlsb2FkLCBcanNvbl9kZWNvZGUoJGxvYWRlZF9jb21wYWN0X2pzb24tPmdldFBheWxvYWQoKSwgdHJ1ZSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/SignatureTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5Owp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxDb252ZXJ0ZXJcU3RhbmRhcmRDb252ZXJ0ZXI7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcQWxnb3JpdGhtOwp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU0J1aWxkZXJGYWN0b3J5Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXEpXU0xvYWRlckZhY3Rvcnk7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcSldTVmVyaWZpZXJGYWN0b3J5Owp1c2UgSm9zZVxDb21wb25lbnRcU2lnbmF0dXJlXFNlcmlhbGl6ZXI7CnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKCmFic3RyYWN0IGNsYXNzIFNpZ25hdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB2YXIgQWxnb3JpdGhtTWFuYWdlckZhY3RvcnkKICAgICAqLwogICAgcHJpdmF0ZSAkYWxnb3JpdGhtTWFuYWdlckZhY3Rvcnk7CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5KCk6IEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5CiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5hbGdvcml0aG1NYW5hZ2VyRmFjdG9yeSkgewogICAgICAgICAgICAkdGhpcy0+YWxnb3JpdGhtTWFuYWdlckZhY3RvcnkgPSBuZXcgQWxnb3JpdGhtTWFuYWdlckZhY3RvcnkoKTsKICAgICAgICAgICAgJHRoaXMtPmFsZ29yaXRobU1hbmFnZXJGYWN0b3J5CiAgICAgICAgICAgICAgICAtPmFkZCgnSFMyNTYnLCBuZXcgQWxnb3JpdGhtXEhTMjU2KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnSFMzODQnLCBuZXcgQWxnb3JpdGhtXEhTMzg0KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnSFM1MTInLCBuZXcgQWxnb3JpdGhtXEhTNTEyKCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnRVMyNTYnLCBuZXcgQWxnb3JpdGhtXEVTMjU2KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnRVMzODQnLCBuZXcgQWxnb3JpdGhtXEVTMzg0KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnRVM1MTInLCBuZXcgQWxnb3JpdGhtXEVTNTEyKCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUlMyNTYnLCBuZXcgQWxnb3JpdGhtXFJTMjU2KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUlMzODQnLCBuZXcgQWxnb3JpdGhtXFJTMzg0KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUlM1MTInLCBuZXcgQWxnb3JpdGhtXFJTNTEyKCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUFMyNTYnLCBuZXcgQWxnb3JpdGhtXFBTMjU2KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUFMzODQnLCBuZXcgQWxnb3JpdGhtXFBTMzg0KCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnUFM1MTInLCBuZXcgQWxnb3JpdGhtXFBTNTEyKCkpCiAgICAgICAgICAgICAgICAtPmFkZCgnbm9uZScsIG5ldyBBbGdvcml0aG1cTm9uZSgpKQogICAgICAgICAgICAgICAgLT5hZGQoJ0VkRFNBJywgbmV3IEFsZ29yaXRobVxFZERTQSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+YWxnb3JpdGhtTWFuYWdlckZhY3Rvcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdmFyIEpXU0J1aWxkZXJGYWN0b3J5CiAgICAgKi8KICAgIHByaXZhdGUgJGp3c0J1aWxkZXJGYWN0b3J5OwoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRKV1NCdWlsZGVyRmFjdG9yeSgpOiBKV1NCdWlsZGVyRmFjdG9yeQogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+andzQnVpbGRlckZhY3RvcnkpIHsKICAgICAgICAgICAgJHRoaXMtPmp3c0J1aWxkZXJGYWN0b3J5ID0gbmV3IEpXU0J1aWxkZXJGYWN0b3J5KAogICAgICAgICAgICAgICAgbmV3IFN0YW5kYXJkQ29udmVydGVyKCksCiAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0QWxnb3JpdGhtTWFuYWdlckZhY3RvcnkoKQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5qd3NCdWlsZGVyRmFjdG9yeTsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgSldTVmVyaWZpZXJGYWN0b3J5CiAgICAgKi8KICAgIHByaXZhdGUgJGp3c1ZlcmlmaWVyRmFjdG9yeTsKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SldTVmVyaWZpZXJGYWN0b3J5KCk6IEpXU1ZlcmlmaWVyRmFjdG9yeQogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+andzVmVyaWZpZXJGYWN0b3J5KSB7CiAgICAgICAgICAgICR0aGlzLT5qd3NWZXJpZmllckZhY3RvcnkgPSBuZXcgSldTVmVyaWZpZXJGYWN0b3J5KAogICAgICAgICAgICAgICAgJHRoaXMtPmdldEFsZ29yaXRobU1hbmFnZXJGYWN0b3J5KCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+andzVmVyaWZpZXJGYWN0b3J5OwogICAgfQoKICAgIC8qKgogICAgICogQHZhciBTZXJpYWxpemVyXEpXU1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGp3c1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeSA9IG51bGw7CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeSgpOiBTZXJpYWxpemVyXEpXU1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeQogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+andzU2VyaWFsaXplck1hbmFnZXJGYWN0b3J5KSB7CiAgICAgICAgICAgICR0aGlzLT5qd3NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnkgPSBuZXcgU2VyaWFsaXplclxKV1NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnkoKTsKICAgICAgICAgICAgJHRoaXMtPmp3c1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeS0+YWRkKG5ldyBTZXJpYWxpemVyXENvbXBhY3RTZXJpYWxpemVyKG5ldyBTdGFuZGFyZENvbnZlcnRlcigpKSk7CiAgICAgICAgICAgICR0aGlzLT5qd3NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnktPmFkZChuZXcgU2VyaWFsaXplclxKU09ORmxhdHRlbmVkU2VyaWFsaXplcihuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSkpOwogICAgICAgICAgICAkdGhpcy0+andzU2VyaWFsaXplck1hbmFnZXJGYWN0b3J5LT5hZGQobmV3IFNlcmlhbGl6ZXJcSlNPTkdlbmVyYWxTZXJpYWxpemVyKG5ldyBTdGFuZGFyZENvbnZlcnRlcigpKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmp3c1NlcmlhbGl6ZXJNYW5hZ2VyRmFjdG9yeTsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgU2VyaWFsaXplclxKV1NTZXJpYWxpemVyTWFuYWdlcnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJGp3c1NlcmlhbGl6ZXJNYW5hZ2VyID0gbnVsbDsKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SldTU2VyaWFsaXplck1hbmFnZXIoKTogU2VyaWFsaXplclxKV1NTZXJpYWxpemVyTWFuYWdlcgogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+andzU2VyaWFsaXplck1hbmFnZXIpIHsKICAgICAgICAgICAgJHRoaXMtPmp3c1NlcmlhbGl6ZXJNYW5hZ2VyID0gU2VyaWFsaXplclxKV1NTZXJpYWxpemVyTWFuYWdlcjo6Y3JlYXRlKFsKICAgICAgICAgICAgICAgIG5ldyBTZXJpYWxpemVyXENvbXBhY3RTZXJpYWxpemVyKG5ldyBTdGFuZGFyZENvbnZlcnRlcigpKSwKICAgICAgICAgICAgICAgIG5ldyBTZXJpYWxpemVyXEpTT05GbGF0dGVuZWRTZXJpYWxpemVyKG5ldyBTdGFuZGFyZENvbnZlcnRlcigpKSwKICAgICAgICAgICAgICAgIG5ldyBTZXJpYWxpemVyXEpTT05HZW5lcmFsU2VyaWFsaXplcihuZXcgU3RhbmRhcmRDb252ZXJ0ZXIoKSksCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5qd3NTZXJpYWxpemVyTWFuYWdlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEB2YXIgSldTTG9hZGVyRmFjdG9yeQogICAgICovCiAgICBwcml2YXRlICRqd3NMb2FkZXJGYWN0b3J5OwoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRKV1NMb2FkZXJGYWN0b3J5KCk6IEpXU0xvYWRlckZhY3RvcnkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPmp3c0xvYWRlckZhY3RvcnkpIHsKICAgICAgICAgICAgJHRoaXMtPmp3c0xvYWRlckZhY3RvcnkgPSBuZXcgSldTTG9hZGVyRmFjdG9yeSgKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlckZhY3RvcnkoKSwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRKV1NWZXJpZmllckZhY3RvcnkoKSwKICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+andzTG9hZGVyRmFjdG9yeTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Tests/SignerTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxUZXN0czsKCnVzZSBCYXNlNjRVcmxcQmFzZTY0VXJsOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxKV0s7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXEpXS1NldDsKdXNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxKV1M7CnVzZSBKb3NlXENvbXBvbmVudFxTaWduYXR1cmVcU2VyaWFsaXplclxDb21wYWN0U2VyaWFsaXplcjsKCi8qKgogKiBAZ3JvdXAgU2lnbmVyCiAqIEBncm91cCBGdW5jdGlvbmFsCiAqLwpjbGFzcyBTaWduZXJUZXN0IGV4dGVuZHMgU2lnbmF0dXJlVGVzdAp7CiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIE5vICJhbGciIHBhcmFtZXRlciBzZXQgaW4gdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxnUGFyYW1ldGVySXNNaXNzaW5nKCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoW10pOwogICAgICAgICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKFxqc29uX2VuY29kZSgkdGhpcy0+Z2V0S2V5MygpKSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgW10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBhbGdvcml0aG0gImZvbyIgaXMgbm90IHN1cHBvcnRlZC4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxnUGFyYW1ldGVySXNOb3RTdXBwb3J0ZWQoKQogICAgewogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbXSk7CiAgICAgICAgJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoXGpzb25fZW5jb2RlKCR0aGlzLT5nZXRLZXkzKCkpKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MSgpLCBbJ2FsZycgPT4gJ2ZvbyddKQogICAgICAgICAgICAtPmJ1aWxkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgaGVhZGVyIGNvbnRhaW5zIGR1cGxpY2F0ZWQgZW50cmllczogZm9vLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdXBsaWNhdGVkSGVhZGVyKCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoW10pOwogICAgICAgICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKFxqc29uX2VuY29kZSgkdGhpcy0+Z2V0S2V5MygpKSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgWydhbGcnID0+ICdFUzI1NicsICdmb28nID0+ICdiYXInXSwgWydmb28nID0+ICdiYXInXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbkFuZExvYWRDb21wYWN0KCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoXGpzb25fZW5jb2RlKCR0aGlzLT5nZXRLZXkzKCkpKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MSgpLCBbJ2FsZycgPT4gJ0hTNTEyJ10pCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkyKCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygyLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSk7CgogICAgICAgICRsb2FkZWQgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2pzb25fZ2VuZXJhbCcsICRqd3MsIDApKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRsb2FkZWQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdIUzUxMicsICRsb2FkZWQtPmdldFNpZ25hdHVyZSgwKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ1JTNTEyJywgJGxvYWRlZC0+Z2V0U2lnbmF0dXJlKDEpLT5nZXRQcm90ZWN0ZWRIZWFkZXJQYXJhbWV0ZXIoJ2FsZycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduTXVsdGlwbGVJbnN0cnVjdGlvbldpdGhDb21wYWN0UmVwcmVzZW50YXRpb24oKQogICAgewogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTNTEyJywgJ1JTNTEyJ10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkxKCksIFsnYWxnJyA9PiAnSFM1MTInXSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTIoKSwgWydhbGcnID0+ICdSUzUxMiddKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDIsICRqd3MtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpJVXpVeE1pSjkuVEdsMlpTQnNiMjVuSUdGdVpDQlFjbTl6Y0dWeUxnLlRqeHZWTEtMYzFrVTVYVzFOalpsSTZfa1FIamVVMm9yVFdCWjdwMEt1UnpxXzlseVBXUjA0UEFVcGJZa2FMSkxzbUlKOEZ4aThHc3JjMGtoUHRGeGZRJywgJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAwKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2V5SmhiR2NpT2lKU1V6VXhNaUo5LlRHbDJaU0JzYjI1bklHRnVaQ0JRY205emNHVnlMZy5jUi1ucHkyb0VpMjc1cnBlVEFLb29MUnpPaElPRk1ld3B6RTM4Q0x4NF9DdGRrTjRZN0VVbGNhOXJ5VjZ5R01IOFNzd1Vxb3NNbm1VVThYWWc3eGt1TkFjNm1DT0RKVkYyZXhmYl9NdWxtcjlZb2xRckxGckZSc01rMXJ6dFhNaW5DTVFlQ2U1dWUzQ2s0RTRhSmxJa2pmLWQwREprdG9JaEg2ZDJnWi1pSmVMUTMyd2NCaFBjRWJqMmdyN0tfd1lLbEVYaEtGd0c1OU9FLWhJaTlJSFhFS3ZLLTJWNXZ6WkxWQzgwRzRhV1lkM0QtMmVYM0xGMUs2OU5QMDRqR2N1MUQ0bDlVVjh6VHoxZ09XZTY5N2laRzBKeUtoU2NjVWFIWjBUZkVhOGNUMHRtNnhUejZ0cFVHU0RkdlBRVThKQ1U4R1RPc2k5aWZ4VHNJLUdsV0UzWUEnLCAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfY29tcGFjdCcsICRqd3MsIDEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBncm91cCBKV1NCdWlsZGVyCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25NdWx0aXBsZUluc3RydWN0aW9uV2l0aENvbXBhY3RSZXByZXNlbnRhdGlvblVzaW5nQnVpbGRlcigpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFM1MTInLCAnUlM1MTInXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgWydhbGcnID0+ICdIUzUxMiddKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MigpLCBbJ2FsZycgPT4gJ1JTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJGp3cy0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSklVelV4TWlKOS5UR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGcuVGp4dlZMS0xjMWtVNVhXMU5qWmxJNl9rUUhqZVUyb3JUV0JaN3AwS3VSenFfOWx5UFdSMDRQQVVwYllrYUxKTHNtSUo4RnhpOEdzcmMwa2hQdEZ4ZlEnLCAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfY29tcGFjdCcsICRqd3MsIDApKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpTVXpVeE1pSjkuVEdsMlpTQnNiMjVuSUdGdVpDQlFjbTl6Y0dWeUxnLmNSLW5weTJvRWkyNzVycGVUQUtvb0xSek9oSU9GTWV3cHpFMzhDTHg0X0N0ZGtONFk3RVVsY2E5cnlWNnlHTUg4U3N3VXFvc01ubVVVOFhZZzd4a3VOQWM2bUNPREpWRjJleGZiX011bG1yOVlvbFFyTEZyRlJzTWsxcnp0WE1pbkNNUWVDZTV1ZTNDazRFNGFKbElramYtZDBESmt0b0loSDZkMmdaLWlKZUxRMzJ3Y0JoUGNFYmoyZ3I3S193WUtsRVhoS0Z3RzU5T0UtaElpOUlIWEVLdkstMlY1dnpaTFZDODBHNGFXWWQzRC0yZVgzTEYxSzY5TlAwNGpHY3UxRDRsOVVWOHpUejFnT1dlNjk3aVpHMEp5S2hTY2NVYUhaMFRmRWE4Y1QwdG02eFR6NnRwVUdTRGR2UFFVOEpDVThHVE9zaTlpZnhUc0ktR2xXRTNZQScsICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMSkpOwogICAgfQoKICAgIC8qKgogICAgICogQGdyb3VwIEpXU0J1aWxkZXIKICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbk11bHRpcGxlSW5zdHJ1Y3Rpb25XaXRoQ29tcGFjdFJlcHJlc2VudGF0aW9uVXNpbmdCdWlsZGVyQW5kRGV0YWNoZWRQYXlsb2FkKCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nLCB0cnVlKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MSgpLCBbJ2FsZycgPT4gJ0hTNTEyJ10pCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkyKCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygyLCAkandzLT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2V5SmhiR2NpT2lKSVV6VXhNaUo5Li5Uanh2VkxLTGMxa1U1WFcxTmpabEk2X2tRSGplVTJvclRXQlo3cDBLdVJ6cV85bHlQV1IwNFBBVXBiWWthTEpMc21JSjhGeGk4R3NyYzBraFB0RnhmUScsICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSlNVelV4TWlKOS4uY1ItbnB5Mm9FaTI3NXJwZVRBS29vTFJ6T2hJT0ZNZXdwekUzOENMeDRfQ3Rka040WTdFVWxjYTlyeVY2eUdNSDhTc3dVcW9zTW5tVVU4WFlnN3hrdU5BYzZtQ09ESlZGMmV4ZmJfTXVsbXI5WW9sUXJMRnJGUnNNazFyenRYTWluQ01RZUNlNXVlM0NrNEU0YUpsSWtqZi1kMERKa3RvSWhINmQyZ1otaUplTFEzMndjQmhQY0ViajJncjdLX3dZS2xFWGhLRndHNTlPRS1oSWk5SUhYRUt2Sy0yVjV2elpMVkM4MEc0YVdZZDNELTJlWDNMRjFLNjlOUDA0akdjdTFENGw5VVY4elR6MWdPV2U2OTdpWkcwSnlLaFNjY1VhSFowVGZFYThjVDB0bTZ4VHo2dHBVR1NEZHZQUVU4SkNVOEdUT3NpOWlmeFRzSS1HbFdFM1lBJywgJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAxKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQ29tcGFjdEpXU1VzaW5nRmFjdG9yeSgpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFM1MTInLCAnUlM1MTInXSk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKCiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgWydhbGcnID0+ICdIUzUxMiddKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MigpLCBbJ2FsZycgPT4gJ1JTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkandzMCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCk7CiAgICAgICAgJGp3czEgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfY29tcGFjdCcsICRqd3MsIDEpOwoKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nLCB0cnVlKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MSgpLCBbJ2FsZycgPT4gJ0hTNTEyJ10pCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkyKCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwogICAgICAgICRqd3MyID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAwKTsKICAgICAgICAkandzMyA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdleUpoYkdjaU9pSklVelV4TWlKOS5UR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGcuVGp4dlZMS0xjMWtVNVhXMU5qWmxJNl9rUUhqZVUyb3JUV0JaN3AwS3VSenFfOWx5UFdSMDRQQVVwYllrYUxKTHNtSUo4RnhpOEdzcmMwa2hQdEZ4ZlEnLCAkandzMCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2V5SmhiR2NpT2lKU1V6VXhNaUo5LlRHbDJaU0JzYjI1bklHRnVaQ0JRY205emNHVnlMZy5jUi1ucHkyb0VpMjc1cnBlVEFLb29MUnpPaElPRk1ld3B6RTM4Q0x4NF9DdGRrTjRZN0VVbGNhOXJ5VjZ5R01IOFNzd1Vxb3NNbm1VVThYWWc3eGt1TkFjNm1DT0RKVkYyZXhmYl9NdWxtcjlZb2xRckxGckZSc01rMXJ6dFhNaW5DTVFlQ2U1dWUzQ2s0RTRhSmxJa2pmLWQwREprdG9JaEg2ZDJnWi1pSmVMUTMyd2NCaFBjRWJqMmdyN0tfd1lLbEVYaEtGd0c1OU9FLWhJaTlJSFhFS3ZLLTJWNXZ6WkxWQzgwRzRhV1lkM0QtMmVYM0xGMUs2OU5QMDRqR2N1MUQ0bDlVVjh6VHoxZ09XZTY5N2laRzBKeUtoU2NjVWFIWjBUZkVhOGNUMHRtNnhUejZ0cFVHU0RkdlBRVThKQ1U4R1RPc2k5aWZ4VHNJLUdsV0UzWUEnLCAkandzMSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ2V5SmhiR2NpT2lKSVV6VXhNaUo5Li5Uanh2VkxLTGMxa1U1WFcxTmpabEk2X2tRSGplVTJvclRXQlo3cDBLdVJ6cV85bHlQV1IwNFBBVXBiWWthTEpMc21JSjhGeGk4R3NyYzBraFB0RnhmUScsICRqd3MyKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpTVXpVeE1pSjkuLmNSLW5weTJvRWkyNzVycGVUQUtvb0xSek9oSU9GTWV3cHpFMzhDTHg0X0N0ZGtONFk3RVVsY2E5cnlWNnlHTUg4U3N3VXFvc01ubVVVOFhZZzd4a3VOQWM2bUNPREpWRjJleGZiX011bG1yOVlvbFFyTEZyRlJzTWsxcnp0WE1pbkNNUWVDZTV1ZTNDazRFNGFKbElramYtZDBESmt0b0loSDZkMmdaLWlKZUxRMzJ3Y0JoUGNFYmoyZ3I3S193WUtsRVhoS0Z3RzU5T0UtaElpOUlIWEVLdkstMlY1dnpaTFZDODBHNGFXWWQzRC0yZVgzTEYxSzY5TlAwNGpHY3UxRDRsOVVWOHpUejFnT1dlNjk3aVpHMEp5S2hTY2NVYUhaMFRmRWE4Y1QwdG02eFR6NnRwVUdTRGR2UFFVOEpDVThHVE9zaTlpZnhUc0ktR2xXRTNZQScsICRqd3MzKTsKCiAgICAgICAgJGxvYWRlZF8wID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRqd3MwKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfMCwgJHRoaXMtPmdldEtleTEoKSwgMCkpOwoKICAgICAgICAkbG9hZGVkXzEgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJGp3czEpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF8xLCAkdGhpcy0+Z2V0S2V5MigpLCAwKSk7CgogICAgICAgICRsb2FkZWRfMiA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkandzMik7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkXzIsICR0aGlzLT5nZXRLZXkxKCksIDAsICdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykpOwoKICAgICAgICAkbG9hZGVkXzMgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJGp3czMpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF8zLCAkdGhpcy0+Z2V0S2V5MigpLCAwLCAnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduTXVsdGlwbGVJbnN0cnVjdGlvbldpdGhGbGF0dGVuZWRSZXByZXNlbnRhdGlvbigpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFM1MTInLCAnUlM1MTInXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJykKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgWydhbGcnID0+ICdIUzUxMiddKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MigpLCBbJ2FsZycgPT4gJ1JTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJGp3cy0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7InBheWxvYWQiOiJUR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGciLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVelV4TWlKOSIsInNpZ25hdHVyZSI6IlRqeHZWTEtMYzFrVTVYVzFOalpsSTZfa1FIamVVMm9yVFdCWjdwMEt1UnpxXzlseVBXUjA0UEFVcGJZa2FMSkxzbUlKOEZ4aThHc3JjMGtoUHRGeGZRIn0nLCAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9mbGF0dGVuZWQnLCAkandzLCAwKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sicGF5bG9hZCI6IlRHbDJaU0JzYjI1bklHRnVaQ0JRY205emNHVnlMZyIsInByb3RlY3RlZCI6ImV5SmhiR2NpT2lKU1V6VXhNaUo5Iiwic2lnbmF0dXJlIjoiY1ItbnB5Mm9FaTI3NXJwZVRBS29vTFJ6T2hJT0ZNZXdwekUzOENMeDRfQ3Rka040WTdFVWxjYTlyeVY2eUdNSDhTc3dVcW9zTW5tVVU4WFlnN3hrdU5BYzZtQ09ESlZGMmV4ZmJfTXVsbXI5WW9sUXJMRnJGUnNNazFyenRYTWluQ01RZUNlNXVlM0NrNEU0YUpsSWtqZi1kMERKa3RvSWhINmQyZ1otaUplTFEzMndjQmhQY0ViajJncjdLX3dZS2xFWGhLRndHNTlPRS1oSWk5SUhYRUt2Sy0yVjV2elpMVkM4MEc0YVdZZDNELTJlWDNMRjFLNjlOUDA0akdjdTFENGw5VVY4elR6MWdPV2U2OTdpWkcwSnlLaFNjY1VhSFowVGZFYThjVDB0bTZ4VHo2dHBVR1NEZHZQUVU4SkNVOEdUT3NpOWlmeFRzSS1HbFdFM1lBIn0nLCAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9mbGF0dGVuZWQnLCAkandzLCAxKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRmxhdHRlbmVkSldTVXNpbmdGYWN0b3J5KCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKICAgICAgICAkandzVmVyaWZpZXIgPSAkdGhpcy0+Z2V0SldTVmVyaWZpZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTNTEyJywgJ1JTNTEyJ10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkxKCksIFsnYWxnJyA9PiAnSFM1MTInXSwgWydmb28nID0+ICdiYXInXSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTIoKSwgWydhbGcnID0+ICdSUzUxMiddLCBbJ3BsaWMnID0+ICdwbG9jJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkandzMCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2ZsYXR0ZW5lZCcsICRqd3MsIDApOwogICAgICAgICRqd3MxID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2pzb25fZmxhdHRlbmVkJywgJGp3cywgMSk7CgogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsIHRydWUpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkxKCksIFsnYWxnJyA9PiAnSFM1MTInXSwgWydmb28nID0+ICdiYXInXSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTIoKSwgWydhbGcnID0+ICdSUzUxMiddLCBbJ3BsaWMnID0+ICdwbG9jJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkandzMiA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2ZsYXR0ZW5lZCcsICRqd3MsIDApOwogICAgICAgICRqd3MzID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2pzb25fZmxhdHRlbmVkJywgJGp3cywgMSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCd7InBheWxvYWQiOiJUR2wyWlNCc2IyNW5JR0Z1WkNCUWNtOXpjR1Z5TGciLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVelV4TWlKOSIsImhlYWRlciI6eyJmb28iOiJiYXIifSwic2lnbmF0dXJlIjoiVGp4dlZMS0xjMWtVNVhXMU5qWmxJNl9rUUhqZVUyb3JUV0JaN3AwS3VSenFfOWx5UFdSMDRQQVVwYllrYUxKTHNtSUo4RnhpOEdzcmMwa2hQdEZ4ZlEifScsICRqd3MwKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygneyJwYXlsb2FkIjoiVEdsMlpTQnNiMjVuSUdGdVpDQlFjbTl6Y0dWeUxnIiwicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpTVXpVeE1pSjkiLCJoZWFkZXIiOnsicGxpYyI6InBsb2MifSwic2lnbmF0dXJlIjoiY1ItbnB5Mm9FaTI3NXJwZVRBS29vTFJ6T2hJT0ZNZXdwekUzOENMeDRfQ3Rka040WTdFVWxjYTlyeVY2eUdNSDhTc3dVcW9zTW5tVVU4WFlnN3hrdU5BYzZtQ09ESlZGMmV4ZmJfTXVsbXI5WW9sUXJMRnJGUnNNazFyenRYTWluQ01RZUNlNXVlM0NrNEU0YUpsSWtqZi1kMERKa3RvSWhINmQyZ1otaUplTFEzMndjQmhQY0ViajJncjdLX3dZS2xFWGhLRndHNTlPRS1oSWk5SUhYRUt2Sy0yVjV2elpMVkM4MEc0YVdZZDNELTJlWDNMRjFLNjlOUDA0akdjdTFENGw5VVY4elR6MWdPV2U2OTdpWkcwSnlLaFNjY1VhSFowVGZFYThjVDB0bTZ4VHo2dHBVR1NEZHZQUVU4SkNVOEdUT3NpOWlmeFRzSS1HbFdFM1lBIn0nLCAkandzMSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpJVXpVeE1pSjkiLCJoZWFkZXIiOnsiZm9vIjoiYmFyIn0sInNpZ25hdHVyZSI6IlRqeHZWTEtMYzFrVTVYVzFOalpsSTZfa1FIamVVMm9yVFdCWjdwMEt1UnpxXzlseVBXUjA0UEFVcGJZa2FMSkxzbUlKOEZ4aThHc3JjMGtoUHRGeGZRIn0nLCAkandzMik7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ3sicHJvdGVjdGVkIjoiZXlKaGJHY2lPaUpTVXpVeE1pSjkiLCJoZWFkZXIiOnsicGxpYyI6InBsb2MifSwic2lnbmF0dXJlIjoiY1ItbnB5Mm9FaTI3NXJwZVRBS29vTFJ6T2hJT0ZNZXdwekUzOENMeDRfQ3Rka040WTdFVWxjYTlyeVY2eUdNSDhTc3dVcW9zTW5tVVU4WFlnN3hrdU5BYzZtQ09ESlZGMmV4ZmJfTXVsbXI5WW9sUXJMRnJGUnNNazFyenRYTWluQ01RZUNlNXVlM0NrNEU0YUpsSWtqZi1kMERKa3RvSWhINmQyZ1otaUplTFEzMndjQmhQY0ViajJncjdLX3dZS2xFWGhLRndHNTlPRS1oSWk5SUhYRUt2Sy0yVjV2elpMVkM4MEc0YVdZZDNELTJlWDNMRjFLNjlOUDA0akdjdTFENGw5VVY4elR6MWdPV2U2OTdpWkcwSnlLaFNjY1VhSFowVGZFYThjVDB0bTZ4VHo2dHBVR1NEZHZQUVU4SkNVOEdUT3NpOWlmeFRzSS1HbFdFM1lBIn0nLCAkandzMyk7CgogICAgICAgICRsb2FkZWRfMCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkandzMCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkXzAsICR0aGlzLT5nZXRLZXkxKCksIDApKTsKCiAgICAgICAgJGxvYWRlZF8xID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRqd3MxKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfMSwgJHRoaXMtPmdldEtleTIoKSwgMCkpOwoKICAgICAgICAkbG9hZGVkXzIgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJGp3czIpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZF8yLCAkdGhpcy0+Z2V0S2V5MSgpLCAwLCAnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpKTsKCiAgICAgICAgJGxvYWRlZF8zID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRqd3MzKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWRfMywgJHRoaXMtPmdldEtleTIoKSwgMCwgJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgYWxnb3JpdGhtICJSUzUxMiIgaXMgbm90IGFsbG93ZWQgd2l0aCB0aGlzIGtleS4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxnb3JpdGhtTm90QWxsb3dlZEZvclRoZUtleSgpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFtdKTsKICAgICAgICAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXk1KCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbk1lc3NhZ2UgS2V5IGNhbm5vdCBiZSB1c2VkIHRvIHNpZ24KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlcmF0aW9uTm90QWxsb3dlZEZvclRoZUtleSgpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnUFM1MTInXSk7CiAgICAgICAgJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5NCgpLCBbJ2FsZycgPT4gJ1BTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduQW5kTG9hZEZsYXR0ZW5lZCgpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFM1MTInXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKFxqc29uX2VuY29kZShbJ2JheicsICdiYW4nXSkpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkxKCksIFsnYWxnJyA9PiAnSFM1MTInXSwgWydmb28nID0+ICdiYXInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2ZsYXR0ZW5lZCcsICRqd3MsIDApKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMSwgJGxvYWRlZC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkbG9hZGVkKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnSFM1MTInLCAkbG9hZGVkLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25BbmRMb2FkKCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKICAgICAgICAkandzVmVyaWZpZXIgPSAkdGhpcy0+Z2V0SldTVmVyaWZpZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTNTEyJywgJ1JTNTEyJ10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkxKCksIFsnYWxnJyA9PiAnSFM1MTInXSwgWydmb28nID0+ICdiYXInXSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTIoKSwgWydhbGcnID0+ICdSUzUxMiddKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgICRsb2FkZWQgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+dW5zZXJpYWxpemUoJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2pzb25fZ2VuZXJhbCcsICRqd3MsIDApKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJGxvYWRlZC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkbG9hZGVkKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicsICRsb2FkZWQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleVNldCgkbG9hZGVkLCAkdGhpcy0+Z2V0U3ltbWV0cmljS2V5U2V0KCksIDApKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5U2V0KCRsb2FkZWQsICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKSwgMSkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnSFM1MTInLCAkbG9hZGVkLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSUzUxMicsICRsb2FkZWQtPmdldFNpZ25hdHVyZSgxKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbkFuZExvYWRXaXRoV3JvbmdLZXlzKCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydSUzUxMiddKTsKICAgICAgICAkandzVmVyaWZpZXIgPSAkdGhpcy0+Z2V0SldTVmVyaWZpZXJGYWN0b3J5KCktPmNyZWF0ZShbJ1JTNTEyJ10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgnTGl2ZSBsb25nIGFuZCBQcm9zcGVyLicpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkyKCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2dlbmVyYWwnLCAkandzLCAwKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDEsICRsb2FkZWQtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGxvYWRlZCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nLCAkbG9hZGVkLT5nZXRQYXlsb2FkKCkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEZhbHNlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleVNldCgkbG9hZGVkLCAkdGhpcy0+Z2V0U3ltbWV0cmljS2V5U2V0KCksIDApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaWduQW5kTG9hZFdpdGhVbnN1cHBvcnRlZEFsZ29yaXRobSgpCiAgICB7CiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnUlM1MTInXSk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydSUzUxMiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MigpLCBbJ2FsZycgPT4gJ1JTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGxvYWRlZCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9nZW5lcmFsJywgJGp3cywgMCkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkbG9hZGVkLT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRsb2FkZWQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdMaXZlIGxvbmcgYW5kIFByb3NwZXIuJywgJGxvYWRlZC0+Z2V0UGF5bG9hZCgpKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRGYWxzZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXlTZXQoJGxvYWRlZCwgJHRoaXMtPmdldFN5bW1ldHJpY0tleVNldCgpLCAwKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgSldTIGRvZXMgbm90IGNvbnRhaW4gYW55IHNpZ25hdHVyZS4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbkFuZExvYWRXaXRoSldTV2l0aG91dFNpZ25hdHVyZXMoKQogICAgewogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAkandzID0gJ3sicGF5bG9hZCI6IlNYVGlnSmx6SUdFZ1pHRnVaMlZ5YjNWeklHSjFjMmx1WlhOekxDQkdjbTlrYnl3Z1oyOXBibWNnYjNWMElIbHZkWElnWkc5dmNpNGdXVzkxSUhOMFpYQWdiMjUwYnlCMGFHVWdjbTloWkN3Z1lXNWtJR2xtSUhsdmRTQmtiMjRuZENCclpXVndJSGx2ZFhJZ1ptVmxkQ3dnZEdobGNtWGlnSmx6SUc1dklHdHViM2RwYm1jZ2QyaGxjbVVnZVc5MUlHMXBaMmgwSUdKbElITjNaWEIwSUc5bVppQjBieTQiLCJzaWduYXR1cmVzIjpbXX0nOwoKICAgICAgICAkandzVmVyaWZpZXIgPSAkdGhpcy0+Z2V0SldTVmVyaWZpZXJGYWN0b3J5KCktPmNyZWF0ZShbXSk7CiAgICAgICAgJGxvYWRlZCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkandzKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMCwgJGxvYWRlZC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkbG9hZGVkKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkcGF5bG9hZCwgJGxvYWRlZC0+Z2V0UGF5bG9hZCgpKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleVNldCgkbG9hZGVkLCAkdGhpcy0+Z2V0U3ltbWV0cmljS2V5U2V0KCksIDApKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc3OTcjc2VjdGlvbi00CiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3Nzk3I3NlY3Rpb24tNC4yCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXExvZ2ljRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFVuYWJsZSB0byBjb252ZXJ0IHRoZSBKV1Mgd2l0aCBub24tZW5jb2RlZCBwYXlsb2FkLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYWN0SlNPTldpdGhVbmVuY29kZWRQYXlsb2FkRmFpbHNCZWNhdXNlT2ZGb3JiaWRkZW5DaGFyYWN0ZXJzKCkKICAgIHsKICAgICAgICAkcHJvdGVjdGVkSGVhZGVyID0gWwogICAgICAgICAgICAnYWxnJyA9PiAnSFMyNTYnLAogICAgICAgICAgICAnYjY0JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2NyaXQnID0+IFsnYjY0J10sCiAgICAgICAgXTsKCiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdrJyA9PiAnQXlNMVN5c1BwYnlEZmdabGQzdW1qMXF6S09id1ZNa29xUS1Fc3RKUUxyX1QtMXFTMGdaSDc1YUt0TU4zWWowaVBTNGhjZ1V1VHdqQXpacjFaOUNBb3cnLAogICAgICAgIF0pOwoKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blci4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3Nzk3I3NlY3Rpb24tNAogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzc5NyNzZWN0aW9uLTQuMgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYWN0SlNPTldpdGhVbmVuY29kZWRQYXlsb2FkU3VjY2VlZGVkKCkKICAgIHsKICAgICAgICAkcHJvdGVjdGVkSGVhZGVyID0gWwogICAgICAgICAgICAnYWxnJyA9PiAnSFMyNTYnLAogICAgICAgICAgICAnYjY0JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2NyaXQnID0+IFsnYjY0J10sCiAgICAgICAgXTsKCiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdrJyA9PiAnQXlNMVN5c1BwYnlEZmdabGQzdW1qMXF6S09id1ZNa29xUS1Fc3RKUUxyX1QtMXFTMGdaSDc1YUt0TU4zWWowaVBTNGhjZ1V1VHdqQXpacjFaOUNBb3cnLAogICAgICAgIF0pOwoKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blcn4nKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyKQogICAgICAgICAgICAtPmJ1aWxkKCk7CgogICAgICAgICRjb21wYWN0ID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAwKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpJVXpJMU5pSXNJbUkyTkNJNlptRnNjMlVzSW1OeWFYUWlPbHNpWWpZMElsMTkuTGl2ZSBsb25nIGFuZCBQcm9zcGVyfi5uVU5lbmJqTkFFSDJuTklYeVFZbXV0aUhSUG5UMTdIY2FNcjVMc2hvNEJFJywgJGNvbXBhY3QpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRjb21wYWN0LCAkc2VyaWFsaXplcik7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoQ29tcGFjdFNlcmlhbGl6ZXI6Ok5BTUUsICRzZXJpYWxpemVyKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnTGl2ZSBsb25nIGFuZCBQcm9zcGVyficsICRsb2FkZWQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJ0xpdmUgbG9uZyBhbmQgUHJvc3Blcn4nLCAkbG9hZGVkLT5nZXRFbmNvZGVkUGF5bG9hZCgpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkcHJvdGVjdGVkSGVhZGVyLCAkbG9hZGVkLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlcigpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc3OTcjc2VjdGlvbi00CiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3Nzk3I3NlY3Rpb24tNC4yCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhY3RKU09OV2l0aFVuZW5jb2RlZERldGFjaGVkUGF5bG9hZCgpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2I2NCddLAogICAgICAgIF07CgogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ0F5TTFTeXNQcGJ5RGZnWmxkM3VtajFxektPYndWTWtvcVEtRXN0SlFMcl9ULTFxUzBnWkg3NWFLdE1OM1lqMGlQUzRoY2dVdVR3akF6WnIxWjlDQW93JywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFMyNTYnXSk7CiAgICAgICAgJGp3c1ZlcmlmaWVyID0gJHRoaXMtPmdldEpXU1ZlcmlmaWVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQsIHRydWUpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRrZXksICRwcm90ZWN0ZWRIZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkandzID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAwKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnZXlKaGJHY2lPaUpJVXpJMU5pSXNJbUkyTkNJNlptRnNjMlVzSW1OeWFYUWlPbHNpWWpZMElsMTkuLkE1ZHhmMnM5Nl9uNUZMdWVWdVcxWl92aDE2MUZ3WFpDNFlMUGZmNmRtRFknLCAkandzKTsKCiAgICAgICAgJGxvYWRlZCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkandzKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5KCRsb2FkZWQsICRrZXksIDAsICRwYXlsb2FkKSk7CgogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkbG9hZGVkKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkcHJvdGVjdGVkSGVhZGVyLCAkbG9hZGVkLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlcigpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBsaWJyYXJ5IGlzIGFibGUgdG8gc3VwcG9ydCBtdWx0aXBsZSBwYXlsb2FkIGVuY29kaW5nIGFuZCBjb252ZXJzaW9uIGluIEpTT04gaWYgcGF5bG9hZCBpcyBkZXRhY2hlZC4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFjdEpTT05XaXRoVW5lbmNvZGVkRGV0YWNoZWRQYXlsb2FkQW5kTXVsdGlwbGVTaWduYXR1cmVzKCkKICAgIHsKICAgICAgICAkcGF5bG9hZCA9ICckLjAyJzsKICAgICAgICAkcHJvdGVjdGVkSGVhZGVyMSA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2I2NCddLAogICAgICAgIF07CiAgICAgICAgJHByb3RlY3RlZEhlYWRlcjIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdIUzUxMicsCiAgICAgICAgICAgICdiNjQnID0+IGZhbHNlLAogICAgICAgICAgICAnY3JpdCcgPT4gWydiNjQnXSwKICAgICAgICBdOwoKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgJ2snID0+ICdBeU0xU3lzUHBieURmZ1psZDN1bWoxcXpLT2J3Vk1rb3FRLUVzdEpRTHJfVC0xcVMwZ1pINzVhS3RNTjNZajBpUFM0aGNnVXVUd2pBelpyMVo5Q0FvdycsCiAgICAgICAgXSk7CgogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTMjU2JywgJ0hTNTEyJ10pOwogICAgICAgICRqd3NWZXJpZmllciA9ICR0aGlzLT5nZXRKV1NWZXJpZmllckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFMyNTYnLCAnSFM1MTInXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCRwYXlsb2FkLCB0cnVlKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyMSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJHByb3RlY3RlZEhlYWRlcjIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGV4cGVjdGVkX3Jlc3VsdCA9ICd7InNpZ25hdHVyZXMiOlt7InNpZ25hdHVyZSI6IkE1ZHhmMnM5Nl9uNUZMdWVWdVcxWl92aDE2MUZ3WFpDNFlMUGZmNmRtRFkiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVekkxTmlJc0ltSTJOQ0k2Wm1Gc2MyVXNJbU55YVhRaU9sc2lZalkwSWwxOSJ9LHsic2lnbmF0dXJlIjoiTXAtbS1WeXN0MHpZQ05rcGcyUmlJTjhXOUdPNG5MVTNGS3NGdEh6RWNQNHRnUjRRY015czFfMm05SHJEd3N6aTBDcDJndl9MaW9lNlVQQ2NUTm42dFEiLCJwcm90ZWN0ZWQiOiJleUpoYkdjaU9pSklVelV4TWlJc0ltSTJOQ0k2Wm1Gc2MyVXNJbU55YVhRaU9sc2lZalkwSWwxOSJ9XX0nOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZXhwZWN0ZWRfcmVzdWx0LCAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9nZW5lcmFsJywgJGp3cywgMCkpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRleHBlY3RlZF9yZXN1bHQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZCwgJGtleSwgMCwgJHBheWxvYWQpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkcHJvdGVjdGVkSGVhZGVyMSwgJGxvYWRlZC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgbGlicmFyeSBpcyBhYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgcGF5bG9hZCBlbmNvZGluZyBhbmQgY29udmVyc2lvbiBpbiBKU09OIGlzIG5vdCBhdmFpbGFibGUgaWYgcGF5bG9hZCBpcyBub3QgZGV0YWNoZWQuCiAgICAgKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxMb2dpY0V4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSAgRm9yZWlnbiBwYXlsb2FkIGVuY29kaW5nIGRldGVjdGVkLgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYWN0SlNPTldpdGhVbmVuY29kZWRQYXlsb2FkQW5kTXVsdGlwbGVTaWduYXR1cmVzKCkKICAgIHsKICAgICAgICAkcGF5bG9hZCA9ICckLjAyJzsKICAgICAgICAkcHJvdGVjdGVkSGVhZGVyMSA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2I2NCddLAogICAgICAgIF07CiAgICAgICAgJHByb3RlY3RlZEhlYWRlcjIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdIUzI1NicsCiAgICAgICAgXTsKCiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdrJyA9PiAnQXlNMVN5c1BwYnlEZmdabGQzdW1qMXF6S09id1ZNa29xUS1Fc3RKUUxyX1QtMXFTMGdaSDc1YUt0TU4zWWowaVBTNGhjZ1V1VHdqQXpacjFaOUNBb3cnLAogICAgICAgIF0pOwoKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRrZXksICRwcm90ZWN0ZWRIZWFkZXIxKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyMikKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9nZW5lcmFsJywgJGp3cywgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXExvZ2ljRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBwcm90ZWN0ZWQgaGVhZGVyIHBhcmFtZXRlciAiY3JpdCIgaXMgbWFuZGF0b3J5IHdoZW4gcHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXIgImI2NCIgaXMgc2V0LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqV1NXaXRoVW5lbmNvZGVkUGF5bG9hZEJ1dE5vQ3JpdEhlYWRlcigpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgXTsKCiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICdrJyA9PiAnQXlNMVN5c1BwYnlEZmdabGQzdW1qMXF6S09id1ZNa29xUS1Fc3RKUUxyX1QtMXFTMGdaSDc1YUt0TU4zWWowaVBTNGhjZ1V1VHdqQXpacjFaOUNBb3cnLAogICAgICAgIF0pOwoKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzI1NiddKTsKICAgICAgICAkandzID0gJGp3c0J1aWxkZXIKICAgICAgICAgICAgLT5jcmVhdGUoKS0+d2l0aFBheWxvYWQoJHBheWxvYWQsIHRydWUpCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCRrZXksICRwcm90ZWN0ZWRIZWFkZXIpCiAgICAgICAgICAgIC0+YnVpbGQoKTsKICAgICAgICAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfY29tcGFjdCcsICRqd3MsIDApOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxMb2dpY0V4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGUgcHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXIgImNyaXQiIG11c3QgYmUgYW4gYXJyYXkuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpXU1dpdGhVbmVuY29kZWRQYXlsb2FkQnV0Q3JpdEhlYWRlcklzTm90QW5BcnJheSgpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiAnZm9vJywKICAgICAgICBdOwoKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgJ2snID0+ICdBeU0xU3lzUHBieURmZ1psZDN1bWoxcXpLT2J3Vk1rb3FRLUVzdEpRTHJfVC0xcVMwZ1pINzVhS3RNTjNZajBpUFM0aGNnVXVUd2pBelpyMVo5Q0FvdycsCiAgICAgICAgXSk7CgogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTMjU2J10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgkcGF5bG9hZCwgdHJ1ZSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJHByb3RlY3RlZEhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwogICAgICAgICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19jb21wYWN0JywgJGp3cywgMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXExvZ2ljRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIFRoZSBwcm90ZWN0ZWQgaGVhZGVyIHBhcmFtZXRlciAiY3JpdCIgbXVzdCBjb250YWluICJiNjQiIHdoZW4gcHJvdGVjdGVkIGhlYWRlciBwYXJhbWV0ZXIgImI2NCIgaXMgc2V0LgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqV1NXaXRoVW5lbmNvZGVkUGF5bG9hZEJ1dENyaXRIZWFkZXJEb2VzTm90Q29udGFpbkI2NCgpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2ZvbyddLAogICAgICAgIF07CgogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ0F5TTFTeXNQcGJ5RGZnWmxkM3VtajFxektPYndWTWtvcVEtRXN0SlFMcl9ULTFxUzBnWkg3NWFLdE1OM1lqMGlQUzRoY2dVdVR3akF6WnIxWjlDQW93JywKICAgICAgICBdKTsKCiAgICAgICAgJGp3c0J1aWxkZXIgPSAkdGhpcy0+Z2V0SldTQnVpbGRlckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFMyNTYnXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCRwYXlsb2FkLCB0cnVlKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyKQogICAgICAgICAgICAtPmJ1aWxkKCk7CiAgICAgICAgJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnNlcmlhbGl6ZSgnandzX2NvbXBhY3QnLCAkandzLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc3OTcjc2VjdGlvbi00CiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3Nzk3I3NlY3Rpb24tNC4yCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsYXR0ZW5lZEpTT05XaXRoVW5lbmNvZGVkUGF5bG9hZCgpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2I2NCddLAogICAgICAgIF07CgogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ0F5TTFTeXNQcGJ5RGZnWmxkM3VtajFxektPYndWTWtvcVEtRXN0SlFMcl9ULTFxUzBnWkg3NWFLdE1OM1lqMGlQUzRoY2dVdVR3akF6WnIxWjlDQW93JywKICAgICAgICBdKTsKCiAgICAgICAgJGV4cGVjdGVkX3Jlc3VsdCA9IFsKICAgICAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW1JMk5DSTZabUZzYzJVc0ltTnlhWFFpT2xzaVlqWTBJbDE5JywKICAgICAgICAgICAgJ3BheWxvYWQnID0+ICckLjAyJywKICAgICAgICAgICAgJ3NpZ25hdHVyZScgPT4gJ0E1ZHhmMnM5Nl9uNUZMdWVWdVcxWl92aDE2MUZ3WFpDNFlMUGZmNmRtRFknLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTMjU2J10pOwogICAgICAgICRqd3NWZXJpZmllciA9ICR0aGlzLT5nZXRKV1NWZXJpZmllckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFMyNTYnXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKCRwYXlsb2FkKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgka2V5LCAkcHJvdGVjdGVkSGVhZGVyKQogICAgICAgICAgICAtPmJ1aWxkKCk7CiAgICAgICAgJGp3cyA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2ZsYXR0ZW5lZCcsICRqd3MsIDApOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkZXhwZWN0ZWRfcmVzdWx0LCBcanNvbl9kZWNvZGUoJGp3cywgdHJ1ZSkpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRqd3MpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0VHJ1ZSgkandzVmVyaWZpZXItPnZlcmlmeVdpdGhLZXkoJGxvYWRlZCwgJGtleSwgMCkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGxvYWRlZCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJHBheWxvYWQsICRsb2FkZWQtPmdldFBheWxvYWQoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJHByb3RlY3RlZEhlYWRlciwgJGxvYWRlZC0+Z2V0U2lnbmF0dXJlKDApLT5nZXRQcm90ZWN0ZWRIZWFkZXIoKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3Nzk3I3NlY3Rpb24tNAogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzc5NyNzZWN0aW9uLTQuMgogICAgICoKICAgICAqIEB0ZXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbGF0dGVuZWRKU09OV2l0aFVuZW5jb2RlZERldGFjaGVkUGF5bG9hZCgpCiAgICB7CiAgICAgICAgJHBheWxvYWQgPSAnJC4wMic7CiAgICAgICAgJHByb3RlY3RlZEhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ0hTMjU2JywKICAgICAgICAgICAgJ2I2NCcgPT4gZmFsc2UsCiAgICAgICAgICAgICdjcml0JyA9PiBbJ2I2NCddLAogICAgICAgIF07CgogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ0F5TTFTeXNQcGJ5RGZnWmxkM3VtajFxektPYndWTWtvcVEtRXN0SlFMcl9ULTFxUzBnWkg3NWFLdE1OM1lqMGlQUzRoY2dVdVR3akF6WnIxWjlDQW93JywKICAgICAgICBdKTsKCiAgICAgICAgJGV4cGVjdGVkX3Jlc3VsdCA9IFsKICAgICAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW1JMk5DSTZabUZzYzJVc0ltTnlhWFFpT2xzaVlqWTBJbDE5JywKICAgICAgICAgICAgJ3NpZ25hdHVyZScgPT4gJ0E1ZHhmMnM5Nl9uNUZMdWVWdVcxWl92aDE2MUZ3WFpDNFlMUGZmNmRtRFknLAogICAgICAgIF07CgogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTMjU2J10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZCgkcGF5bG9hZCwgdHJ1ZSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJGtleSwgJHByb3RlY3RlZEhlYWRlcikKICAgICAgICAgICAgLT5idWlsZCgpOwogICAgICAgICRqd3MgPSAkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9mbGF0dGVuZWQnLCAkandzLCAwKTsKCiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJGV4cGVjdGVkX3Jlc3VsdCwgXGpzb25fZGVjb2RlKCRqd3MsIHRydWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIE5vICJhbGciIHBhcmFtZXRlciBzZXQgaW4gdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiBAdGVzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbkFuZExvYWRXaXRob3V0QWxnUGFyYW1ldGVySW5UaGVIZWFkZXIoKQogICAgewogICAgICAgICRwYXlsb2FkID0gIkl0XHhlMlx4ODBceDk5cyBhIGRhbmdlcm91cyBidXNpbmVzcywgRnJvZG8sIGdvaW5nIG91dCB5b3VyIGRvb3IuIFlvdSBzdGVwIG9udG8gdGhlIHJvYWQsIGFuZCBpZiB5b3UgZG9uJ3Qga2VlcCB5b3VyIGZlZXQsIHRoZXJlXHhlMlx4ODBceDk5cyBubyBrbm93aW5nIHdoZXJlIHlvdSBtaWdodCBiZSBzd2VwdCBvZmYgdG8uIjsKICAgICAgICAkandzID0gJ2V5SnJhV1FpT2lKaWFXeGlieTVpWVdkbmFXNXpRR2h2WW1KcGRHOXVMbVY0WVcxd2JHVWlmUS5TWFRpZ0pseklHRWdaR0Z1WjJWeWIzVnpJR0oxYzJsdVpYTnpMQ0JHY205a2J5d2daMjlwYm1jZ2IzVjBJSGx2ZFhJZ1pHOXZjaTRnV1c5MUlITjBaWEFnYjI1MGJ5QjBhR1VnY205aFpDd2dZVzVrSUdsbUlIbHZkU0JrYjI0bmRDQnJaV1Z3SUhsdmRYSWdabVZsZEN3Z2RHaGxjbVhpZ0pseklHNXZJR3R1YjNkcGJtY2dkMmhsY21VZ2VXOTFJRzFwWjJoMElHSmxJSE4zWlhCMElHOW1aaUIwYnk0Lk1SamRrbHk3Xy1vVFBUUzNBWFA0MWlRSUdLYTgwQTBabVR1VjVNRWFIb3huVzJlNUNaNU5sS3RhaW5vRm1LWm9wZEhNMU8yVTRtd3pKZFF4OTk2aXZwODN4dWdsSUk3UE5EaTg0d25CLUJEa29Cd0E3ODE4NWhYLUVzNEpJd21ETEpLM2xmV1JhLVh0TDBSbmx0dVl2NzQ2aVlUaF9xSFJENjhCTnQxdVNOQ3JVQ1RKRHQ1YUFFNng4d1cxS3Q5ZVJvNFFQb2NTYWRuSFhGeG50OElzOVV6cEVSVjBlUFBRZEx1VzNJU19kZTN4eUlyRGFMR2RqbHVQeFVBaGI2TDJhWGljMVUxMnBvZEdVMEtMVVFTRV9vSS1abm1LSjNGNHVPWkRuZDZRWldKdXNoWjQxQXhmX2ZjSWU4dTlpcEg4NG9nb3JlZTd2amJVNXkxOGtEcXVEZyc7CgogICAgICAgICRqd3NWZXJpZmllciA9ICR0aGlzLT5nZXRKV1NWZXJpZmllckZhY3RvcnkoKS0+Y3JlYXRlKFtdKTsKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCRqd3MpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygxLCAkbG9hZGVkLT5jb3VudFNpZ25hdHVyZXMoKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRJbnN0YW5jZU9mKEpXUzo6Y2xhc3MsICRsb2FkZWQpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCRwYXlsb2FkLCAkbG9hZGVkLT5nZXRQYXlsb2FkKCkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5U2V0KCRsb2FkZWQsICR0aGlzLT5nZXRTeW1tZXRyaWNLZXlTZXQoKSwgMCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ25BbmRMb2FkSldLU2V0KCkKICAgIHsKICAgICAgICAkandzQnVpbGRlciA9ICR0aGlzLT5nZXRKV1NCdWlsZGVyRmFjdG9yeSgpLT5jcmVhdGUoWydIUzUxMicsICdSUzUxMiddKTsKICAgICAgICAkandzVmVyaWZpZXIgPSAkdGhpcy0+Z2V0SldTVmVyaWZpZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTNTEyJywgJ1JTNTEyJ10pOwogICAgICAgICRqd3MgPSAkandzQnVpbGRlcgogICAgICAgICAgICAtPmNyZWF0ZSgpLT53aXRoUGF5bG9hZChcanNvbl9lbmNvZGUoJHRoaXMtPmdldEtleXNldCgpKSkKICAgICAgICAgICAgLT5hZGRTaWduYXR1cmUoJHRoaXMtPmdldEtleTEoKSwgWydhbGcnID0+ICdIUzUxMiddLCBbJ2ZvbycgPT4gJ2JhciddKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MigpLCBbJ2FsZycgPT4gJ1JTNTEyJ10pCiAgICAgICAgICAgIC0+YnVpbGQoKTsKCiAgICAgICAgJGxvYWRlZCA9ICR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT51bnNlcmlhbGl6ZSgkdGhpcy0+Z2V0SldTU2VyaWFsaXplck1hbmFnZXIoKS0+c2VyaWFsaXplKCdqd3NfanNvbl9nZW5lcmFsJywgJGp3cywgMCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKDIsICRsb2FkZWQtPmNvdW50U2lnbmF0dXJlcygpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEluc3RhbmNlT2YoSldTOjpjbGFzcywgJGxvYWRlZCk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoJHRoaXMtPmdldEtleXNldCgpLCBKV0tTZXQ6OmNyZWF0ZUZyb21LZXlEYXRhKFxqc29uX2RlY29kZSgkbG9hZGVkLT5nZXRQYXlsb2FkKCksIHRydWUpKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleVNldCgkbG9hZGVkLCAkdGhpcy0+Z2V0U3ltbWV0cmljS2V5U2V0KCksIDApKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5U2V0KCRsb2FkZWQsICR0aGlzLT5nZXRQdWJsaWNLZXlTZXQoKSwgMSkpOwoKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygnSFM1MTInLCAkbG9hZGVkLT5nZXRTaWduYXR1cmUoMCktPmdldFByb3RlY3RlZEhlYWRlclBhcmFtZXRlcignYWxnJykpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0RXF1YWxzKCdSUzUxMicsICRsb2FkZWQtPmdldFNpZ25hdHVyZSgxKS0+Z2V0UHJvdGVjdGVkSGVhZGVyUGFyYW1ldGVyKCdhbGcnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb24gXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBUaGVyZSBpcyBubyBrZXkgaW4gdGhlIGtleSBzZXQuCiAgICAgKgogICAgICogQHRlc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleVNldElzRW1wdHkoKQogICAgewogICAgICAgICRqd3NCdWlsZGVyID0gJHRoaXMtPmdldEpXU0J1aWxkZXJGYWN0b3J5KCktPmNyZWF0ZShbJ0hTNTEyJywgJ1JTNTEyJ10pOwogICAgICAgICRqd3NWZXJpZmllciA9ICR0aGlzLT5nZXRKV1NWZXJpZmllckZhY3RvcnkoKS0+Y3JlYXRlKFsnSFM1MTInLCAnUlM1MTInXSk7CiAgICAgICAgJGp3cyA9ICRqd3NCdWlsZGVyCiAgICAgICAgICAgIC0+Y3JlYXRlKCktPndpdGhQYXlsb2FkKFxqc29uX2VuY29kZSgkdGhpcy0+Z2V0S2V5c2V0KCkpKQogICAgICAgICAgICAtPmFkZFNpZ25hdHVyZSgkdGhpcy0+Z2V0S2V5MSgpLCBbJ2FsZycgPT4gJ0hTNTEyJywgWydmb28nID0+ICdiYXInXV0pCiAgICAgICAgICAgIC0+YWRkU2lnbmF0dXJlKCR0aGlzLT5nZXRLZXkyKCksIFsnYWxnJyA9PiAnUlM1MTInXSkKICAgICAgICAgICAgLT5idWlsZCgpOwoKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldEpXU1NlcmlhbGl6ZXJNYW5hZ2VyKCktPnVuc2VyaWFsaXplKCR0aGlzLT5nZXRKV1NTZXJpYWxpemVyTWFuYWdlcigpLT5zZXJpYWxpemUoJ2p3c19qc29uX2dlbmVyYWwnLCAkandzLCAwKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRFcXVhbHMoMiwgJGxvYWRlZC0+Y291bnRTaWduYXR1cmVzKCkpOwogICAgICAgIHN0YXRpYzo6YXNzZXJ0SW5zdGFuY2VPZihKV1M6OmNsYXNzLCAkbG9hZGVkKTsKICAgICAgICBzdGF0aWM6OmFzc2VydEVxdWFscygkdGhpcy0+Z2V0S2V5c2V0KCksIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoXGpzb25fZGVjb2RlKCRsb2FkZWQtPmdldFBheWxvYWQoKSwgdHJ1ZSkpKTsKICAgICAgICBzdGF0aWM6OmFzc2VydFRydWUoJGp3c1ZlcmlmaWVyLT52ZXJpZnlXaXRoS2V5U2V0KCRsb2FkZWQsIEpXS1NldDo6Y3JlYXRlRnJvbUtleXMoW10pLCAwKSk7CiAgICAgICAgc3RhdGljOjphc3NlcnRUcnVlKCRqd3NWZXJpZmllci0+dmVyaWZ5V2l0aEtleSgkbG9hZGVkLCBKV0s6OmNyZWF0ZShbJ2t0eScgPT4gJ0VDJ10pLCAxKSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRLZXkxKCk6IEpXSwogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdvY3QnLAogICAgICAgICAgICAnaycgPT4gJ0F5TTFTeXNQcGJ5RGZnWmxkM3VtajFxektPYndWTWtvcVEtRXN0SlFMcl9ULTFxUzBnWkg3NWFLdE1OM1lqMGlQUzRoY2dVdVR3akF6WnIxWjlDQW93JywKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuICRrZXk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRLZXkyKCk6IEpXSwogICAgewogICAgICAgICRrZXkgPSBKV0s6OmNyZWF0ZShbCiAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsnc2lnbiddLAogICAgICAgICAgICAnbicgPT4gJ29mZ1dDdUxqeWJSbHpvMHRaV0pqTml1U2ZiNHA0ZkFrZF93V0pjeVFvVGJqaTlrMGw4VzI2bVBkZHhIbWZIUXAtVmF3LTRxUENKcmNTMm1KUE1FelAxUHQwQm00ZDRRbEwteVJULVNGZDJsWlMtcENnTk1zRDFXX1lwUlBFd09Xdkc2YjMyNjkwcjJqWjQ3c29NWm85d0d6amJfN09NZzBMT0wtYlNmNjNrcGFTSFNYbmRTNXo1cmV4TWRiQllVc0xBOWUtS1hCZFFPUy1VVG83V1RCRU1hMlIyQ2FwSGc2NjV4c210ZFZNVEJRWTR1RFpseHZiM3FDbzVad0toOWtHNExUNl9JNUlobEpIN2FHaHl4WEZ2VUstRFdObW91ZEY4TkFjbzlfaDlpYUdOajhxMmV0aEZrTUxzOTFremsyUEFjRFRXOWdiNTRoNEZSV3l1WHBvUScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdkJyA9PiAnRXE1eHBHbk5DaXZEZmxKc1JRQlhIeDFoZFIxazZVbHdlMkpaRDUwTHBYeVdQRUFlUDg4dkxOTzk3SWpsQTdfR1E1c0xLTWd2ZlRlWFp4OVNFLTdZd1ZvbDJOWE9vQUplNDZzdWkzOTVJV19HTy1wV0oxTzBCa1RHb1ZFbjJiS1ZSVUNndS1HakJWYVlMVTZmM2w5a0pmRk5TM0UwUWJWZHh6dWJTdTNNa3F6amtuNDM5WDBNX1Y1MWdmcFJMSTlKWWFuckM0RDRxQWRHY29wVl8wWkhIelFsQmp1ZFUyUXZYdDRlaE5ZVENCcjZYQ0xRVVNoYjFqdVVPMVpkaVlvRmFGUVQ1VHc4YkdVbF94X2pUajNjY1BEVlpGRDlwSXVoTGhCT25ldWZ1QmlCNGNTOThsMlNSX1JReUdXU2VXam5jelQwUVU5MXAxRGhPVlJ1T29wem5RJywKICAgICAgICAgICAgJ3AnID0+ICc0QnpFRU90SXBtVmRWRVpOQ3FTN2JhQzRjcmQwcHFuUkhfNUlCM2p3M2JjeEduNlFMdm5FdGZkVWRpWXJxQmRzczFsNThCUTNLaG9vS2VRVGE5QUIwSHdfUHk1UEpkVEpOUFk4Y1FuN291WjJLS0RjbW5QR0JZNXQ3eUxjMVFsUTV4SGR3VzFWaHZLbi1uWHFoSlRCZ0lQZ3RsZEMtS0RWNXoteTJYRHdHVWMnLAogICAgICAgICAgICAncScgPT4gJ3VRUEVmZ21WdGpMMFV5eXg4OEdaRkYxZk91bkgzLTdjZXBLbXRINHB4aHRDb0hxcFdtVDhZQW1aeGFld0hnSEFqTFlzcDFaU2U3ekZZSGo3QzZ1bDdUamVMUWVaRF9Zd0Q2NnQ2MndEbXBlX0hsQi1UbkJBLW5qYmdsZklzUkx0WGxuRHpRa3Y1ZFRsdFJKMTFCS0JCeXBlZUY2Njg5cmpjSklERXo5UldkYycsCiAgICAgICAgICAgICdkcCcgPT4gJ0J3S2ZWM0FrcTVfTUZaREZaQ25XLXd6bC1DQ284M1dvWnZuTFF3Q1RlRHY4dXpsdVJTbm03MUkzUUNMZGhycUUyZTlZa3h2dXhkQmZwVF9QSTdZei1GT0tudTFSNkhzSmVEQ2puMTJTazN2bUFrdFYyemIzNE1DZHk3Y3BkVGhfWVZyN3RzczJ1NnZuZVR3ckE4NnJadHU1TWJyMUMxWHNtdmt4SFFBZFlvMCcsCiAgICAgICAgICAgICdkcScgPT4gJ2hfOTYtbUsxUl83Z2xoc3VtODFkWnhqVG5ZeW5QYlpwSHppWmplZUhjWFlzWGFhTXdrT2xPRHNXYTdJOXhYRG9Sd2JLZ0I3MTlycm1JMm9LcjZOM0RvOVUwYWphSEYtTktKbndnak1kMnc5Y2p6M18ta3lObHhBcjJ2NElLaEdOcG1NNWlJZ09TMVZabk9aNjhtNl9wYkxCU3AzbnNzVGRscXZkMHRJaVRIVScsCiAgICAgICAgICAgICdxaScgPT4gJ0lZZDdESE9ocld2eGt3UFFzUk0ydE9ncmpiY3JmdnRRSmlwZC1EbGN4eVZ1dU05c1FMZGdqVmsyb3kyNkYwRW1wU2NHTHEyTW93WDdmaGRfUUpRM3lkeTVjWTdZSUJpODd3OTNJS0xFZGZuYkp0b09QTFVXMElUckpSZU9nbzFjcTlTYnN4WWF3QmdmcF9naDZBNTYwM2syLVpRd1ZLMEpLU0h1TEZrdVEzVScsCiAgICAgICAgXSk7CgogICAgICAgIHJldHVybiAka2V5OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0S2V5MygpOiBKV0sKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnRUMnLAogICAgICAgICAgICAnY3J2JyA9PiAnUC0yNTYnLAogICAgICAgICAgICAndXNlJyA9PiAnc2lnJywKICAgICAgICAgICAgJ2tleV9vcHMnID0+IFsnc2lnbiddLAogICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAneScgPT4gJ3hfRkV6UnU5bTM2SExOX3R1ZTY1OUxOcFhXNnBDeVN0aWtZaktJV0k1YTAnLAogICAgICAgICAgICAnZCcgPT4gJ2pwc1FubkdRbUwtWUJJZmZIMTEzNmNzcFlHNi0waVk3WDFmQ0U5LUU5TEknLAogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEtleTQoKTogSldLCiAgICB7CiAgICAgICAgJGtleSA9IEpXSzo6Y3JlYXRlKFsKICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICdhbGcnID0+ICdQUzUxMicsCiAgICAgICAgICAgICdrZXlfb3BzJyA9PiBbJ2VuY3J5cHQnLCAnZGVjcnlwdCddLAogICAgICAgICAgICAnbicgPT4gJ29mZ1dDdUxqeWJSbHpvMHRaV0pqTml1U2ZiNHA0ZkFrZF93V0pjeVFvVGJqaTlrMGw4VzI2bVBkZHhIbWZIUXAtVmF3LTRxUENKcmNTMm1KUE1FelAxUHQwQm00ZDRRbEwteVJULVNGZDJsWlMtcENnTk1zRDFXX1lwUlBFd09Xdkc2YjMyNjkwcjJqWjQ3c29NWm85d0d6amJfN09NZzBMT0wtYlNmNjNrcGFTSFNYbmRTNXo1cmV4TWRiQllVc0xBOWUtS1hCZFFPUy1VVG83V1RCRU1hMlIyQ2FwSGc2NjV4c210ZFZNVEJRWTR1RFpseHZiM3FDbzVad0toOWtHNExUNl9JNUlobEpIN2FHaHl4WEZ2VUstRFdObW91ZEY4TkFjbzlfaDlpYUdOajhxMmV0aEZrTUxzOTFremsyUEFjRFRXOWdiNTRoNEZSV3l1WHBvUScsCiAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgICdkJyA9PiAnRXE1eHBHbk5DaXZEZmxKc1JRQlhIeDFoZFIxazZVbHdlMkpaRDUwTHBYeVdQRUFlUDg4dkxOTzk3SWpsQTdfR1E1c0xLTWd2ZlRlWFp4OVNFLTdZd1ZvbDJOWE9vQUplNDZzdWkzOTVJV19HTy1wV0oxTzBCa1RHb1ZFbjJiS1ZSVUNndS1HakJWYVlMVTZmM2w5a0pmRk5TM0UwUWJWZHh6dWJTdTNNa3F6amtuNDM5WDBNX1Y1MWdmcFJMSTlKWWFuckM0RDRxQWRHY29wVl8wWkhIelFsQmp1ZFUyUXZYdDRlaE5ZVENCcjZYQ0xRVVNoYjFqdVVPMVpkaVlvRmFGUVQ1VHc4YkdVbF94X2pUajNjY1BEVlpGRDlwSXVoTGhCT25ldWZ1QmlCNGNTOThsMlNSX1JReUdXU2VXam5jelQwUVU5MXAxRGhPVlJ1T29wem5RJywKICAgICAgICAgICAgJ3AnID0+ICc0QnpFRU90SXBtVmRWRVpOQ3FTN2JhQzRjcmQwcHFuUkhfNUlCM2p3M2JjeEduNlFMdm5FdGZkVWRpWXJxQmRzczFsNThCUTNLaG9vS2VRVGE5QUIwSHdfUHk1UEpkVEpOUFk4Y1FuN291WjJLS0RjbW5QR0JZNXQ3eUxjMVFsUTV4SGR3VzFWaHZLbi1uWHFoSlRCZ0lQZ3RsZEMtS0RWNXoteTJYRHdHVWMnLAogICAgICAgICAgICAncScgPT4gJ3VRUEVmZ21WdGpMMFV5eXg4OEdaRkYxZk91bkgzLTdjZXBLbXRINHB4aHRDb0hxcFdtVDhZQW1aeGFld0hnSEFqTFlzcDFaU2U3ekZZSGo3QzZ1bDdUamVMUWVaRF9Zd0Q2NnQ2MndEbXBlX0hsQi1UbkJBLW5qYmdsZklzUkx0WGxuRHpRa3Y1ZFRsdFJKMTFCS0JCeXBlZUY2Njg5cmpjSklERXo5UldkYycsCiAgICAgICAgICAgICdkcCcgPT4gJ0J3S2ZWM0FrcTVfTUZaREZaQ25XLXd6bC1DQ284M1dvWnZuTFF3Q1RlRHY4dXpsdVJTbm03MUkzUUNMZGhycUUyZTlZa3h2dXhkQmZwVF9QSTdZei1GT0tudTFSNkhzSmVEQ2puMTJTazN2bUFrdFYyemIzNE1DZHk3Y3BkVGhfWVZyN3RzczJ1NnZuZVR3ckE4NnJadHU1TWJyMUMxWHNtdmt4SFFBZFlvMCcsCiAgICAgICAgICAgICdkcScgPT4gJ2hfOTYtbUsxUl83Z2xoc3VtODFkWnhqVG5ZeW5QYlpwSHppWmplZUhjWFlzWGFhTXdrT2xPRHNXYTdJOXhYRG9Sd2JLZ0I3MTlycm1JMm9LcjZOM0RvOVUwYWphSEYtTktKbndnak1kMnc5Y2p6M18ta3lObHhBcjJ2NElLaEdOcG1NNWlJZ09TMVZabk9aNjhtNl9wYkxCU3AzbnNzVGRscXZkMHRJaVRIVScsCiAgICAgICAgICAgICdxaScgPT4gJ0lZZDdESE9ocld2eGt3UFFzUk0ydE9ncmpiY3JmdnRRSmlwZC1EbGN4eVZ1dU05c1FMZGdqVmsyb3kyNkYwRW1wU2NHTHEyTW93WDdmaGRfUUpRM3lkeTVjWTdZSUJpODd3OTNJS0xFZGZuYkp0b09QTFVXMElUckpSZU9nbzFjcTlTYnN4WWF3QmdmcF9naDZBNTYwM2syLVpRd1ZLMEpLU0h1TEZrdVEzVScsCiAgICAgICAgXSk7CgogICAgICAgIHJldHVybiAka2V5OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0S2V5NSgpOiBKV0sKICAgIHsKICAgICAgICAka2V5ID0gSldLOjpjcmVhdGUoWwogICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgJ2FsZycgPT4gJ1BTNTEyJywKICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICduJyA9PiAnb2ZnV0N1TGp5YlJsem8wdFpXSmpOaXVTZmI0cDRmQWtkX3dXSmN5UW9UYmppOWswbDhXMjZtUGRkeEhtZkhRcC1WYXctNHFQQ0pyY1MybUpQTUV6UDFQdDBCbTRkNFFsTC15UlQtU0ZkMmxaUy1wQ2dOTXNEMVdfWXBSUEV3T1d2RzZiMzI2OTByMmpaNDdzb01abzl3R3pqYl83T01nMExPTC1iU2Y2M2twYVNIU1huZFM1ejVyZXhNZGJCWVVzTEE5ZS1LWEJkUU9TLVVUbzdXVEJFTWEyUjJDYXBIZzY2NXhzbXRkVk1UQlFZNHVEWmx4dmIzcUNvNVp3S2g5a0c0TFQ2X0k1SWhsSkg3YUdoeXhYRnZVSy1EV05tb3VkRjhOQWNvOV9oOWlhR05qOHEyZXRoRmtNTHM5MWt6azJQQWNEVFc5Z2I1NGg0RlJXeXVYcG9RJywKICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgJ2QnID0+ICdFcTV4cEduTkNpdkRmbEpzUlFCWEh4MWhkUjFrNlVsd2UySlpENTBMcFh5V1BFQWVQODh2TE5POTdJamxBN19HUTVzTEtNZ3ZmVGVYWng5U0UtN1l3Vm9sMk5YT29BSmU0NnN1aTM5NUlXX0dPLXBXSjFPMEJrVEdvVkVuMmJLVlJVQ2d1LUdqQlZhWUxVNmYzbDlrSmZGTlMzRTBRYlZkeHp1YlN1M01rcXpqa240MzlYME1fVjUxZ2ZwUkxJOUpZYW5yQzRENHFBZEdjb3BWXzBaSEh6UWxCanVkVTJRdlh0NGVoTllUQ0JyNlhDTFFVU2hiMWp1VU8xWmRpWW9GYUZRVDVUdzhiR1VsX3hfalRqM2NjUERWWkZEOXBJdWhMaEJPbmV1ZnVCaUI0Y1M5OGwyU1JfUlF5R1dTZVdqbmN6VDBRVTkxcDFEaE9WUnVPb3B6blEnLAogICAgICAgICAgICAncCcgPT4gJzRCekVFT3RJcG1WZFZFWk5DcVM3YmFDNGNyZDBwcW5SSF81SUIzanczYmN4R242UUx2bkV0ZmRVZGlZcnFCZHNzMWw1OEJRM0tob29LZVFUYTlBQjBId19QeTVQSmRUSk5QWThjUW43b3VaMktLRGNtblBHQlk1dDd5TGMxUWxRNXhIZHdXMVZodktuLW5YcWhKVEJnSVBndGxkQy1LRFY1ei15MlhEd0dVYycsCiAgICAgICAgICAgICdxJyA9PiAndVFQRWZnbVZ0akwwVXl5eDg4R1pGRjFmT3VuSDMtN2NlcEttdEg0cHhodENvSHFwV21UOFlBbVp4YWV3SGdIQWpMWXNwMVpTZTd6RllIajdDNnVsN1RqZUxRZVpEX1l3RDY2dDYyd0RtcGVfSGxCLVRuQkEtbmpiZ2xmSXNSTHRYbG5EelFrdjVkVGx0UkoxMUJLQkJ5cGVlRjY2ODlyamNKSURFejlSV2RjJywKICAgICAgICAgICAgJ2RwJyA9PiAnQndLZlYzQWtxNV9NRlpERlpDblctd3psLUNDbzgzV29adm5MUXdDVGVEdjh1emx1UlNubTcxSTNRQ0xkaHJxRTJlOVlreHZ1eGRCZnBUX1BJN1l6LUZPS251MVI2SHNKZURDam4xMlNrM3ZtQWt0VjJ6YjM0TUNkeTdjcGRUaF9ZVnI3dHNzMnU2dm5lVHdyQTg2clp0dTVNYnIxQzFYc212a3hIUUFkWW8wJywKICAgICAgICAgICAgJ2RxJyA9PiAnaF85Ni1tSzFSXzdnbGhzdW04MWRaeGpUbll5blBiWnBIemlaamVlSGNYWXNYYWFNd2tPbE9Ec1dhN0k5eFhEb1J3YktnQjcxOXJybUkyb0tyNk4zRG85VTBhamFIRi1OS0pud2dqTWQydzljanozXy1reU5seEFyMnY0SUtoR05wbU01aUlnT1MxVlpuT1o2OG02X3BiTEJTcDNuc3NUZGxxdmQwdElpVEhVJywKICAgICAgICAgICAgJ3FpJyA9PiAnSVlkN0RIT2hyV3Z4a3dQUXNSTTJ0T2dyamJjcmZ2dFFKaXBkLURsY3h5VnV1TTlzUUxkZ2pWazJveTI2RjBFbXBTY0dMcTJNb3dYN2ZoZF9RSlEzeWR5NWNZN1lJQmk4N3c5M0lLTEVkZm5iSnRvT1BMVVcwSVRySlJlT2dvMWNxOVNic3hZYXdCZ2ZwX2doNkE1NjAzazItWlF3VkswSktTSHVMRmt1UTNVJywKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuICRrZXk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRLZXlzZXQoKTogSldLU2V0CiAgICB7CiAgICAgICAgJGtleXNldCA9IEpXS1NldDo6Y3JlYXRlRnJvbUtleXMoWyR0aGlzLT5nZXRLZXkxKCksICR0aGlzLT5nZXRLZXkyKCldKTsKCiAgICAgICAgcmV0dXJuICRrZXlzZXQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRQdWJsaWNLZXlTZXQoKTogSldLU2V0CiAgICB7CiAgICAgICAgJGtleXMgPSBbJ2tleXMnID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2tpZCcgPT4gJzcxZWUyMzAzNzFkMTk2MzBiYzE3ZmI5MGNjZjIwYWU2MzJhZDhjZjgnLAogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnYWxnJyA9PiAnUlMyNTYnLAogICAgICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICAgICAnbicgPT4gJ3ZuTVRSQ012c1MwNE0xeWFLUjExMmFCOFJ4T2tXSEZpeFpPNjh3Q1JsVkx4SzR1Z2NrWFZEX0ViY3Eta21zMVQyWHBvV250VmZCdVg0MHIyR3ZjRDlVc1RGdF9NWmxnZDF4eUd3R1Y2VV90ZlFVbGw1bUt4Q1BqcjYwaDgzTFhLSl96bUxYSXFrVjh0QW9JZzc4YTVWUldvbXNfMEJuMDlES1QzLVJCV0Zqaz0nLAogICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2tpZCcgPT4gJzAyNDkxZjk0NWM5NTFhZGYxNTZmMzcwNzg4ZThjY2RhYmY4ODc3YTgnLAogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnYWxnJyA9PiAnUlMyNTYnLAogICAgICAgICAgICAgICAgJ3VzZScgPT4gJ3NpZycsCiAgICAgICAgICAgICAgICAnbicgPT4gJ3JJNjd1SElEV0RnQ3lfVXQtRmhoalRDa0VjcXpvTzgwSVJnZHBrX2ZKSGxEbVhoTVRKS1BpenhiSUVNczB3UkhSWnB3SC00RDIwdGhwblFCNU1neDYtWE05a092Y1lwSFNkY1lNRTc3QndYNnVRRy1odzJ3NzdOT2hZaUNTWkNMengtNWxkNVdqeTBkeW1wTC1FeHFRdy13cldpcE1YN05RaEliSnFWYloxOD0nLAogICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ1JTQScsCiAgICAgICAgICAgICAgICAnbicgPT4gJ29haFVJb1d3MEswdXNLTnVPUjZINHdrZjRvQlVYSFR4UnZnYjQ4RS1CVnZ4a2VETmpiQzRoZThyVVdjSm9abWRzMmg3TTcwaW1FVmhSVTVkaklOWHRxbGxYSTRERnFjSTFEZ2pUOUxld05EOE1XMktyZjNTcHNrX1prb0ZuaWxha0d5Z1R3cFozdWVzSC1QRkFCTklVWXBPaU4xNWRzUVJrZ3IwdkVoeE45MmkyYXNiT2VuU1pleWF4emlLNzJVd3hycktvRXh2NmtjNXR3WFRxNGgtUUNoTE9sbjBfbXRVWndmc1JhTVN0UHM2bVM2WHJneG54Yldob2pmNjYzdHVFUXVlR0MtRkNNZnJhMzZDOWtuREZHektzTmE3TFpLMmRqWWd5RDNKUl9NQl80TlVKV19UcU9RdHdIWWJ4ZXZvSkFybS1MNVN0b3dqekd5LV9icTZHdycsCiAgICAgICAgICAgICAgICAnZScgPT4gJ0FRQUInLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnUlNBJywKICAgICAgICAgICAgICAgICduJyA9PiAnc1hjaERhUWViSG5QaUd2eURPQVQ0c2FHRVVldFN5bzlNS0xPb1dGc3VlcmkyM2JPZGdXcDREeTFXbFV6ZXdiZ0JIb2Q1cGNNOUg5NUdRUlYzSkRYYm9JUlJPU0JpZ2VDNXlqVTFoR3pISHlYc3M4VURwcmVjYkFZeGtuVGNRa2hzbEFOR1JVWm1kVE9RNXFUUnNMQXQ2QlRZdXl2VlJkaFM4ZXhTWkV5X2M0Z3NfN3N2bEpKUTRIOV9OeHNpSW9Md0FFazctUTNVWEVSR1l3Xzc1SURyR0E4NC1sQV8tQ3Q0ZVRsWEhCSVkyRWFWN3Q3TGpKYXluVkpDcGt2NExLalRUQXVtaUdVSXVRaHJOaFpMdUZfUkpMcUhwTTJrZ1dGTFU3LVZUZEwxVmJDMnRlanZjSTJCbE1rRXBrMUJ6QlpJMEtRQjBHYURXRkxOLWFFQXczdlJ3JywKICAgICAgICAgICAgICAgICdlJyA9PiAnQVFBQicsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdrdHknID0+ICdSU0EnLAogICAgICAgICAgICAgICAgJ24nID0+ICdvZmdXQ3VManliUmx6bzB0WldKak5pdVNmYjRwNGZBa2Rfd1dKY3lRb1Riamk5azBsOFcyNm1QZGR4SG1mSFFwLVZhdy00cVBDSnJjUzJtSlBNRXpQMVB0MEJtNGQ0UWxMLXlSVC1TRmQybFpTLXBDZ05Nc0QxV19ZcFJQRXdPV3ZHNmIzMjY5MHIyalo0N3NvTVpvOXdHempiXzdPTWcwTE9MLWJTZjYza3BhU0hTWG5kUzV6NXJleE1kYkJZVXNMQTllLUtYQmRRT1MtVVRvN1dUQkVNYTJSMkNhcEhnNjY1eHNtdGRWTVRCUVk0dURabHh2YjNxQ281WndLaDlrRzRMVDZfSTVJaGxKSDdhR2h5eFhGdlVLLURXTm1vdWRGOE5BY285X2g5aWFHTmo4cTJldGhGa01Mczkxa3prMlBBY0RUVzlnYjU0aDRGUld5dVhwb1EnLAogICAgICAgICAgICAgICAgJ2UnID0+ICdBUUFCJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTI1NicsCiAgICAgICAgICAgICAgICAneCcgPT4gJ2Y4M09KM0QyeEYxQmc4dnViOXRMZTFnSE16Vjc2ZThUdXM5dVBIdlJWRVUnLAogICAgICAgICAgICAgICAgJ3knID0+ICd4X0ZFelJ1OW0zNkhMTl90dWU2NTlMTnBYVzZwQ3lTdGlrWWpLSVdJNWEwJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ0VDJywKICAgICAgICAgICAgICAgICdjcnYnID0+ICdQLTUyMScsCiAgICAgICAgICAgICAgICAneCcgPT4gJ0Fla3BCUThTVDhhOFZjZlZPVE5sMzUzdlNyRENMTEpYbVBrMDZ3VGp4cnJqY0JwWHA1RU9uWUdfTmpGWjZPdkxGVjFqU2ZTOXRzejRxVXhjV2NlcXdRR2snLAogICAgICAgICAgICAgICAgJ3knID0+ICdBRFNtUkE0M1oxRFNOeF9SdmNMSTg3Y2RMMDdsNmpReXlCWE1veFZnX2wyVGgteDNTMVdEaGpEbHk3OWFqTDRLa2QwQVpNYVptaDl1Ym1mNjNlM2t5TWoyJywKICAgICAgICAgICAgXSwKICAgICAgICBdXTsKCiAgICAgICAgcmV0dXJuIEpXS1NldDo6Y3JlYXRlRnJvbUtleURhdGEoJGtleXMpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0U3ltbWV0cmljS2V5U2V0KCk6IEpXS1NldAogICAgewogICAgICAgICRrZXlzID0gWydrZXlzJyA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdraWQnID0+ICdESVJfMScsCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgICAgICdrJyA9PiBCYXNlNjRVcmw6OmVuY29kZShcaGV4MmJpbignMDAxMTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRicpKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICAgICAnaycgPT4gJ2Y1YU41VjZpaWh3UVZxUC10UE5OdGtJSk5Dd1ViOS1KdWtDSUtrRjByTmZ4cXhBNzcxUkp5bllBVDJ4dHpBUDBNWWFSN1U1Zk1QX3d2YlJRcTVsMzhRJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2t0eScgPT4gJ29jdCcsCiAgICAgICAgICAgICAgICAnaycgPT4gJ0dhd2dndUZ5R3JXS2F2N0FYNFZLVWcnLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAna3R5JyA9PiAnb2N0JywKICAgICAgICAgICAgICAgICdrJyA9PiAnQXlNMVN5c1BwYnlEZmdabGQzdW1qMXF6S09id1ZNa29xUS1Fc3RKUUxyX1QtMXFTMGdaSDc1YUt0TU4zWWowaVBTNGhjZ1V1VHdqQXpacjFaOUNBb3cnLAogICAgICAgICAgICBdLAogICAgICAgIF1dOwoKICAgICAgICByZXR1cm4gSldLU2V0OjpjcmVhdGVGcm9tS2V5RGF0YSgka2V5cyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-signature/Util/RSA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XFNpZ25hdHVyZVxVdGlsOwoKdXNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxCaWdJbnRlZ2VyOwp1c2UgSm9zZVxDb21wb25lbnRcQ29yZVxVdGlsXEhhc2g7CnVzZSBKb3NlXENvbXBvbmVudFxDb3JlXFV0aWxcUlNBS2V5OwoKLyoqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgUlNBCnsKICAgIC8qKgogICAgICogUHJvYmFiaWxpc3RpYyBTaWduYXR1cmUgU2NoZW1lLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lHTkFUVVJFX1BTUyA9IDE7CgogICAgLyoqCiAgICAgKiBVc2UgdGhlIFBLQ1MjMS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNJR05BVFVSRV9QS0NTMSA9IDI7CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY29udmVydEludGVnZXJUb09jdGV0U3RyaW5nKEJpZ0ludGVnZXIgJHgsIGludCAkeExlbik6IHN0cmluZwogICAgewogICAgICAgICR4ID0gJHgtPnRvQnl0ZXMoKTsKICAgICAgICBpZiAoXG1iX3N0cmxlbigkeCwgJzhiaXQnKSA+ICR4TGVuKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxzdHJfcGFkKCR4LCAkeExlbiwgXGNocigwKSwgU1RSX1BBRF9MRUZUKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1HRjEuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldE1HRjEoc3RyaW5nICRtZ2ZTZWVkLCBpbnQgJG1hc2tMZW4sIEhhc2ggJG1nZkhhc2gpOiBzdHJpbmcKICAgIHsKICAgICAgICAkdCA9ICcnOwogICAgICAgICRjb3VudCA9IFxjZWlsKCRtYXNrTGVuIC8gJG1nZkhhc2gtPmdldExlbmd0aCgpKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY291bnQ7ICsrJGkpIHsKICAgICAgICAgICAgJGMgPSBccGFjaygnTicsICRpKTsKICAgICAgICAgICAgJHQgLj0gJG1nZkhhc2gtPmhhc2goJG1nZlNlZWQuJGMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxtYl9zdWJzdHIoJHQsIDAsICRtYXNrTGVuLCAnOGJpdCcpOwogICAgfQoKICAgIC8qKgogICAgICogRU1TQS1QU1MtRU5DT0RFLgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmNvZGVFTVNBUFNTKHN0cmluZyAkbWVzc2FnZSwgaW50ICRtb2R1bHVzTGVuZ3RoLCBIYXNoICRoYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGVtTGVuID0gKCRtb2R1bHVzTGVuZ3RoICsgMSkgPj4gMzsKICAgICAgICAkc0xlbiA9ICRoYXNoLT5nZXRMZW5ndGgoKTsKICAgICAgICAkbUhhc2ggPSAkaGFzaC0+aGFzaCgkbWVzc2FnZSk7CiAgICAgICAgaWYgKCRlbUxlbiA8PSAkaGFzaC0+Z2V0TGVuZ3RoKCkgKyAkc0xlbiArIDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRzYWx0ID0gXHJhbmRvbV9ieXRlcygkc0xlbik7CiAgICAgICAgJG0yID0gIlwwXDBcMFwwXDBcMFwwXDAiLiRtSGFzaC4kc2FsdDsKICAgICAgICAkaCA9ICRoYXNoLT5oYXNoKCRtMik7CiAgICAgICAgJHBzID0gXHN0cl9yZXBlYXQoXGNocigwKSwgJGVtTGVuIC0gJHNMZW4gLSAkaGFzaC0+Z2V0TGVuZ3RoKCkgLSAyKTsKICAgICAgICAkZGIgPSAkcHMuXGNocigxKS4kc2FsdDsKICAgICAgICAkZGJNYXNrID0gc2VsZjo6Z2V0TUdGMSgkaCwgJGVtTGVuIC0gJGhhc2gtPmdldExlbmd0aCgpIC0gMSwgJGhhc2gpOwogICAgICAgICRtYXNrZWREQiA9ICRkYiBeICRkYk1hc2s7CiAgICAgICAgJG1hc2tlZERCWzBdID0gflxjaHIoMHhGRiA8PCAoJG1vZHVsdXNMZW5ndGggJiA3KSkgJiAkbWFza2VkREJbMF07CiAgICAgICAgJGVtID0gJG1hc2tlZERCLiRoLlxjaHIoMHhCQyk7CgogICAgICAgIHJldHVybiAkZW07CiAgICB9CgogICAgLyoqCiAgICAgKiBFTVNBLVBTUy1WRVJJRlkuCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHZlcmlmeUVNU0FQU1Moc3RyaW5nICRtLCBzdHJpbmcgJGVtLCBpbnQgJGVtQml0cywgSGFzaCAkaGFzaCk6IGJvb2wKICAgIHsKICAgICAgICAkZW1MZW4gPSAoJGVtQml0cyArIDEpID4+IDM7CiAgICAgICAgJHNMZW4gPSAkaGFzaC0+Z2V0TGVuZ3RoKCk7CiAgICAgICAgJG1IYXNoID0gJGhhc2gtPmhhc2goJG0pOwogICAgICAgIGlmICgkZW1MZW4gPCAkaGFzaC0+Z2V0TGVuZ3RoKCkgKyAkc0xlbiArIDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRlbVtcbWJfc3RybGVuKCRlbSwgJzhiaXQnKSAtIDFdICE9PSBcY2hyKDB4QkMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRtYXNrZWREQiA9IFxtYl9zdWJzdHIoJGVtLCAwLCAtJGhhc2gtPmdldExlbmd0aCgpIC0gMSwgJzhiaXQnKTsKICAgICAgICAkaCA9IFxtYl9zdWJzdHIoJGVtLCAtJGhhc2gtPmdldExlbmd0aCgpIC0gMSwgJGhhc2gtPmdldExlbmd0aCgpLCAnOGJpdCcpOwogICAgICAgICR0ZW1wID0gXGNocigweEZGIDw8ICgkZW1CaXRzICYgNykpOwogICAgICAgIGlmICgofiRtYXNrZWREQlswXSAmICR0ZW1wKSAhPT0gJHRlbXApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICAgICAgJGRiTWFzayA9IHNlbGY6OmdldE1HRjEoJGgsICRlbUxlbiAtICRoYXNoLT5nZXRMZW5ndGgoKSAtIDEsICRoYXNoLypNR0YqLyk7CiAgICAgICAgJGRiID0gJG1hc2tlZERCIF4gJGRiTWFzazsKICAgICAgICAkZGJbMF0gPSB+XGNocigweEZGIDw8ICgkZW1CaXRzICYgNykpICYgJGRiWzBdOwogICAgICAgICR0ZW1wID0gJGVtTGVuIC0gJGhhc2gtPmdldExlbmd0aCgpIC0gJHNMZW4gLSAyOwogICAgICAgIGlmIChcbWJfc3Vic3RyKCRkYiwgMCwgJHRlbXAsICc4Yml0JykgIT09IFxzdHJfcmVwZWF0KFxjaHIoMCksICR0ZW1wKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICBpZiAoMSAhPT0gXG9yZCgkZGJbJHRlbXBdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkc2FsdCA9IFxtYl9zdWJzdHIoJGRiLCAkdGVtcCArIDEsIG51bGwsICc4Yml0Jyk7IC8vIHNob3VsZCBiZSAkc0xlbiBsb25nCiAgICAgICAgJG0yID0gIlwwXDBcMFwwXDBcMFwwXDAiLiRtSGFzaC4kc2FsdDsKICAgICAgICAkaDIgPSAkaGFzaC0+aGFzaCgkbTIpOwoKICAgICAgICByZXR1cm4gXGhhc2hfZXF1YWxzKCRoLCAkaDIpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGVuY29kZUVNU0ExNShzdHJpbmcgJG0sIGludCAkZW1CaXRzLCBIYXNoICRoYXNoKTogc3RyaW5nCiAgICB7CiAgICAgICAgJGggPSAkaGFzaC0+aGFzaCgkbSk7CiAgICAgICAgc3dpdGNoICgkaGFzaC0+bmFtZSgpKSB7CiAgICAgICAgICAgIGNhc2UgJ3NoYTI1Nic6CiAgICAgICAgICAgICAgICAkdCA9ICJceDMwXHgzMVx4MzBceDBkXHgwNlx4MDlceDYwXHg4Nlx4NDhceDAxXHg2NVx4MDNceDA0XHgwMlx4MDFceDA1XHgwMFx4MDRceDIwIjsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnc2hhMzg0JzoKICAgICAgICAgICAgICAgICR0ID0gIlx4MzBceDQxXHgzMFx4MGRceDA2XHgwOVx4NjBceDg2XHg0OFx4MDFceDY1XHgwM1x4MDRceDAyXHgwMlx4MDVceDAwXHgwNFx4MzAiOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzaGE1MTInOgogICAgICAgICAgICAgICAgJHQgPSAiXHgzMFx4NTFceDMwXHgwZFx4MDZceDA5XHg2MFx4ODZceDQ4XHgwMVx4NjVceDAzXHgwNFx4MDJceDAzXHgwNVx4MDBceDA0XHg0MCI7CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkdCAuPSAkaDsKICAgICAgICAkdExlbiA9IFxtYl9zdHJsZW4oJHQsICc4Yml0Jyk7CiAgICAgICAgaWYgKCRlbUJpdHMgPCAkdExlbiArIDExKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkcHMgPSBcc3RyX3JlcGVhdChcY2hyKDB4RkYpLCAkZW1CaXRzIC0gJHRMZW4gLSAzKTsKICAgICAgICAkZW0yID0gIlwwXDEkcHNcMCR0IjsKCiAgICAgICAgcmV0dXJuICRlbTI7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduKFJTQUtleSAka2V5LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkaGFzaCwgaW50ICRtb2RlKTogc3RyaW5nCiAgICB7CiAgICAgICAgc3dpdGNoICgkbW9kZSkgewogICAgICAgICAgICBjYXNlIHNlbGY6OlNJR05BVFVSRV9QU1M6CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6c2lnbldpdGhQU1MoJGtleSwgJG1lc3NhZ2UsICRoYXNoKTsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTSUdOQVRVUkVfUEtDUzE6CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6c2lnbldpdGhQS0NTMTUoJGtleSwgJG1lc3NhZ2UsICRoYXNoKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBtb2RlLicpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHNpZ25hdHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaWduV2l0aFBTUyhSU0FLZXkgJGtleSwgc3RyaW5nICRtZXNzYWdlLCBzdHJpbmcgJGhhc2gpOiBzdHJpbmcKICAgIHsKICAgICAgICAkZW0gPSBzZWxmOjplbmNvZGVFTVNBUFNTKCRtZXNzYWdlLCA4ICogJGtleS0+Z2V0TW9kdWx1c0xlbmd0aCgpIC0gMSwgSGFzaDo6JGhhc2goKSk7CiAgICAgICAgJG1lc3NhZ2UgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRlbSk7CiAgICAgICAgJHNpZ25hdHVyZSA9IFJTQUtleTo6ZXhwb25lbnRpYXRlKCRrZXksICRtZXNzYWdlKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmNvbnZlcnRJbnRlZ2VyVG9PY3RldFN0cmluZygkc2lnbmF0dXJlLCAka2V5LT5nZXRNb2R1bHVzTGVuZ3RoKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgc2lnbmF0dXJlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25XaXRoUEtDUzE1KFJTQUtleSAka2V5LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkaGFzaCk6IHN0cmluZwogICAgewogICAgICAgICRlbSA9IHNlbGY6OmVuY29kZUVNU0ExNSgkbWVzc2FnZSwgJGtleS0+Z2V0TW9kdWx1c0xlbmd0aCgpLCBIYXNoOjokaGFzaCgpKTsKICAgICAgICAkbWVzc2FnZSA9IEJpZ0ludGVnZXI6OmNyZWF0ZUZyb21CaW5hcnlTdHJpbmcoJGVtKTsKICAgICAgICAkc2lnbmF0dXJlID0gUlNBS2V5OjpleHBvbmVudGlhdGUoJGtleSwgJG1lc3NhZ2UpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Y29udmVydEludGVnZXJUb09jdGV0U3RyaW5nKCRzaWduYXR1cmUsICRrZXktPmdldE1vZHVsdXNMZW5ndGgoKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJpZnkoUlNBS2V5ICRrZXksIHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRzaWduYXR1cmUsIHN0cmluZyAkaGFzaCwgaW50ICRtb2RlKTogYm9vbAogICAgewogICAgICAgIHN3aXRjaCAoJG1vZGUpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTSUdOQVRVUkVfUFNTOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OnZlcmlmeVdpdGhQU1MoJGtleSwgJG1lc3NhZ2UsICRzaWduYXR1cmUsICRoYXNoKTsKICAgICAgICAgICAgY2FzZSBzZWxmOjpTSUdOQVRVUkVfUEtDUzE6CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6dmVyaWZ5V2l0aFBLQ1MxNSgka2V5LCAkbWVzc2FnZSwgJHNpZ25hdHVyZSwgJGhhc2gpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIG1vZGUuJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVmVyaWZpZXMgYSBzaWduYXR1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyaWZ5V2l0aFBTUyhSU0FLZXkgJGtleSwgc3RyaW5nICRtZXNzYWdlLCBzdHJpbmcgJHNpZ25hdHVyZSwgc3RyaW5nICRoYXNoKTogYm9vbAogICAgewogICAgICAgIGlmIChcbWJfc3RybGVuKCRzaWduYXR1cmUsICc4Yml0JykgIT09ICRrZXktPmdldE1vZHVsdXNMZW5ndGgoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAgIH0KICAgICAgICAkczIgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRzaWduYXR1cmUpOwogICAgICAgICRtMiA9IFJTQUtleTo6ZXhwb25lbnRpYXRlKCRrZXksICRzMik7CiAgICAgICAgJGVtID0gc2VsZjo6Y29udmVydEludGVnZXJUb09jdGV0U3RyaW5nKCRtMiwgJGtleS0+Z2V0TW9kdWx1c0xlbmd0aCgpKTsKICAgICAgICAkbW9kQml0cyA9IDggKiAka2V5LT5nZXRNb2R1bHVzTGVuZ3RoKCk7CgogICAgICAgIHJldHVybiBzZWxmOjp2ZXJpZnlFTVNBUFNTKCRtZXNzYWdlLCAkZW0sICRtb2RCaXRzIC0gMSwgSGFzaDo6JGhhc2goKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBWZXJpZmllcyBhIHNpZ25hdHVyZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2ZXJpZnlXaXRoUEtDUzE1KFJTQUtleSAka2V5LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkc2lnbmF0dXJlLCBzdHJpbmcgJGhhc2gpOiBib29sCiAgICB7CiAgICAgICAgaWYgKFxtYl9zdHJsZW4oJHNpZ25hdHVyZSwgJzhiaXQnKSAhPT0gJGtleS0+Z2V0TW9kdWx1c0xlbmd0aCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgICRzaWduYXR1cmUgPSBCaWdJbnRlZ2VyOjpjcmVhdGVGcm9tQmluYXJ5U3RyaW5nKCRzaWduYXR1cmUpOwogICAgICAgICRtMiA9IFJTQUtleTo6ZXhwb25lbnRpYXRlKCRrZXksICRzaWduYXR1cmUpOwogICAgICAgICRlbSA9IHNlbGY6OmNvbnZlcnRJbnRlZ2VyVG9PY3RldFN0cmluZygkbTIsICRrZXktPmdldE1vZHVsdXNMZW5ndGgoKSk7CgogICAgICAgIHJldHVybiBcaGFzaF9lcXVhbHMoJGVtLCBzZWxmOjplbmNvZGVFTVNBMTUoJG1lc3NhZ2UsICRrZXktPmdldE1vZHVsdXNMZW5ndGgoKSwgSGFzaDo6JGhhc2goKSkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAid2ViLXRva2VuL2p3dC11dGlsLWVjYyIsCiAgICAiZGVzY3JpcHRpb24iOiAiRUNDIFRvb2xzIGZvciB0aGUgSldUIEZyYW1ld29yay4iLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImtleXdvcmRzIjogWyJKV1MiLCAiSldUIiwgIkpXRSIsICJKV0EiLCAiSldLIiwgIkpXS1NldCIsICJKb3QiLCAiSm9zZSIsICJSRkM3NTE1IiwgIlJGQzc1MTYiLCAiUkZDNzUxNyIsICJSRkM3NTE4IiwgIlJGQzc1MTkiLCAiUkZDNzUyMCIsICJCdW5kbGUiLCAiU3ltZm9ueSJdLAogICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4iLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJGbG9yZW50IE1vcnNlbGxpIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9TcG9ta3kiCiAgICAgICAgfSx7CiAgICAgICAgICAgICJuYW1lIjogIkFsbCBjb250cmlidXRvcnMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtY29yZS9jb250cmlidXRvcnMiCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJKb3NlXFxDb21wb25lbnRcXENvcmVcXFV0aWxcXEVjY1xcIjogICIiCiAgICAgICAgfQogICAgfSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiXjcuMSIsCiAgICAgICAgImV4dC1nbXAiOiAiKiIsCiAgICAgICAgImV4dC1tYnN0cmluZyI6ICIqIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjB8XjcuMCIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLngtZGV2IgogICAgICAgIH0KICAgIH0sCiAgICAiY29uZmlnIjogewogICAgICAgICJzb3J0LXBhY2thZ2VzIjogdHJ1ZQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/Curve.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBDdXJ2ZQp7CiAgICAvKioKICAgICAqIEVsbGlwdGljIGN1cnZlIG92ZXIgdGhlIGZpZWxkIG9mIGludGVnZXJzIG1vZHVsbyBhIHByaW1lLgogICAgICoKICAgICAqIEB2YXIgXEdNUAogICAgICovCiAgICBwcml2YXRlICRhOwoKICAgIC8qKgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByaXZhdGUgJGI7CgogICAgLyoqCiAgICAgKiBAdmFyIFxHTVAKICAgICAqLwogICAgcHJpdmF0ZSAkcHJpbWU7CgogICAgLyoqCiAgICAgKiBCaW5hcnkgbGVuZ3RoIG9mIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGN1cnZlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkc2l6ZTsKCiAgICAvKioKICAgICAqIEB2YXIgUG9pbnQKICAgICAqLwogICAgcHJpdmF0ZSAkZ2VuZXJhdG9yOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJHNpemUsIFxHTVAgJHByaW1lLCBcR01QICRhLCBcR01QICRiLCBQb2ludCAkZ2VuZXJhdG9yKQogICAgewogICAgICAgICR0aGlzLT5zaXplID0gJHNpemU7CiAgICAgICAgJHRoaXMtPnByaW1lID0gJHByaW1lOwogICAgICAgICR0aGlzLT5hID0gJGE7CiAgICAgICAgJHRoaXMtPmIgPSAkYjsKICAgICAgICAkdGhpcy0+Z2VuZXJhdG9yID0gJGdlbmVyYXRvcjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QSgpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCKCk6IFxHTVAKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByaW1lKCk6IFxHTVAKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByaW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6IGludAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9pbnQoXEdNUCAkeCwgXEdNUCAkeSwgP1xHTVAgJG9yZGVyID0gbnVsbCk6IFBvaW50CiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y29udGFpbnMoJHgsICR5KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0N1cnZlICcuJHRoaXMtPl9fdG9TdHJpbmcoKS4nIGRvZXMgbm90IGNvbnRhaW4gcG9pbnQgKCcuTWF0aDo6dG9TdHJpbmcoJHgpLicsICcuTWF0aDo6dG9TdHJpbmcoJHkpLicpJyk7CiAgICAgICAgfQogICAgICAgICRwb2ludCA9IFBvaW50OjpjcmVhdGUoJHgsICR5LCAkb3JkZXIpOwogICAgICAgIGlmICghXGlzX251bGwoJG9yZGVyKSkgewogICAgICAgICAgICAkbXVsID0gJHRoaXMtPm11bCgkcG9pbnQsICRvcmRlcik7CiAgICAgICAgICAgIGlmICghJG11bC0+aXNJbmZpbml0eSgpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1NFTEYgKiBPUkRFUiBNVVNUIEVRVUFMIElORklOSVRZLiAoJy4oc3RyaW5nKSAkbXVsLicgZm91bmQgaW5zdGVhZCknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwb2ludDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHVibGljS2V5RnJvbShcR01QICR4LCBcR01QICR5KTogUHVibGljS2V5CiAgICB7CiAgICAgICAgJHplcm8gPSBcZ21wX2luaXQoMCwgMTApOwogICAgICAgIGlmIChNYXRoOjpjbXAoJHgsICR6ZXJvKSA8IDAgfHwgTWF0aDo6Y21wKCR0aGlzLT5nZW5lcmF0b3ItPmdldE9yZGVyKCksICR4KSA8PSAwIHx8IE1hdGg6OmNtcCgkeSwgJHplcm8pIDwgMCB8fCBNYXRoOjpjbXAoJHRoaXMtPmdlbmVyYXRvci0+Z2V0T3JkZXIoKSwgJHkpIDw9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdHZW5lcmF0b3IgcG9pbnQgaGFzIHggYW5kIHkgb3V0IG9mIHJhbmdlLicpOwogICAgICAgIH0KICAgICAgICAkcG9pbnQgPSAkdGhpcy0+Z2V0UG9pbnQoJHgsICR5KTsKCiAgICAgICAgcmV0dXJuIFB1YmxpY0tleTo6Y3JlYXRlKCRwb2ludCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zKFxHTVAgJHgsIFxHTVAgJHkpOiBib29sCiAgICB7CiAgICAgICAgJGVxX3plcm8gPSBNYXRoOjplcXVhbHMoCiAgICAgICAgICAgIE1vZHVsYXJBcml0aG1ldGljOjpzdWIoCiAgICAgICAgICAgICAgICBNYXRoOjpwb3coJHksIDIpLAogICAgICAgICAgICAgICAgTWF0aDo6YWRkKAogICAgICAgICAgICAgICAgICAgIE1hdGg6OmFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgTWF0aDo6cG93KCR4LCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgTWF0aDo6bXVsKCR0aGlzLT5nZXRBKCksICR4KQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldEIoKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICR0aGlzLT5nZXRQcmltZSgpCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFxnbXBfaW5pdCgwLCAxMCkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGVxX3plcm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZChQb2ludCAkb25lLCBQb2ludCAkdHdvKTogUG9pbnQKICAgIHsKICAgICAgICBpZiAoJHR3by0+aXNJbmZpbml0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiBjbG9uZSAkb25lOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvbmUtPmlzSW5maW5pdHkoKSkgewogICAgICAgICAgICByZXR1cm4gY2xvbmUgJHR3bzsKICAgICAgICB9CgogICAgICAgIGlmIChNYXRoOjplcXVhbHMoJHR3by0+Z2V0WCgpLCAkb25lLT5nZXRYKCkpKSB7CiAgICAgICAgICAgIGlmIChNYXRoOjplcXVhbHMoJHR3by0+Z2V0WSgpLCAkb25lLT5nZXRZKCkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdldERvdWJsZSgkb25lKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBQb2ludDo6aW5maW5pdHkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNsb3BlID0gTW9kdWxhckFyaXRobWV0aWM6OmRpdigKICAgICAgICAgICAgTWF0aDo6c3ViKCR0d28tPmdldFkoKSwgJG9uZS0+Z2V0WSgpKSwKICAgICAgICAgICAgTWF0aDo6c3ViKCR0d28tPmdldFgoKSwgJG9uZS0+Z2V0WCgpKSwKICAgICAgICAgICAgJHRoaXMtPmdldFByaW1lKCkKICAgICAgICApOwoKICAgICAgICAkeFIgPSBNb2R1bGFyQXJpdGhtZXRpYzo6c3ViKAogICAgICAgICAgICBNYXRoOjpzdWIoTWF0aDo6cG93KCRzbG9wZSwgMiksICRvbmUtPmdldFgoKSksCiAgICAgICAgICAgICR0d28tPmdldFgoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFByaW1lKCkKICAgICAgICApOwoKICAgICAgICAkeVIgPSBNb2R1bGFyQXJpdGhtZXRpYzo6c3ViKAogICAgICAgICAgICBNYXRoOjptdWwoJHNsb3BlLCBNYXRoOjpzdWIoJG9uZS0+Z2V0WCgpLCAkeFIpKSwKICAgICAgICAgICAgJG9uZS0+Z2V0WSgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0UHJpbWUoKQogICAgICAgICk7CgogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0UG9pbnQoJHhSLCAkeVIsICRvbmUtPmdldE9yZGVyKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtdWwoUG9pbnQgJG9uZSwgXEdNUCAkbik6IFBvaW50CiAgICB7CiAgICAgICAgaWYgKCRvbmUtPmlzSW5maW5pdHkoKSkgewogICAgICAgICAgICByZXR1cm4gUG9pbnQ6OmluZmluaXR5KCk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBcR01QICR6ZXJvICovCiAgICAgICAgJHplcm8gPSBcZ21wX2luaXQoMCwgMTApOwogICAgICAgIGlmIChNYXRoOjpjbXAoJG9uZS0+Z2V0T3JkZXIoKSwgJHplcm8pID4gMCkgewogICAgICAgICAgICAkbiA9IE1hdGg6Om1vZCgkbiwgJG9uZS0+Z2V0T3JkZXIoKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoTWF0aDo6ZXF1YWxzKCRuLCAkemVybykpIHsKICAgICAgICAgICAgcmV0dXJuIFBvaW50OjppbmZpbml0eSgpOwogICAgICAgIH0KCiAgICAgICAgLyoqIEB2YXIgUG9pbnRbXSAkciAqLwogICAgICAgICRyID0gWwogICAgICAgICAgICBQb2ludDo6aW5maW5pdHkoKSwKICAgICAgICAgICAgY2xvbmUgJG9uZSwKICAgICAgICBdOwoKICAgICAgICAkayA9ICR0aGlzLT5nZXRTaXplKCk7CiAgICAgICAgJG4gPSBcc3RyX3BhZChNYXRoOjpiYXNlQ29udmVydChNYXRoOjp0b1N0cmluZygkbiksIDEwLCAyKSwgJGssICcwJywgU1RSX1BBRF9MRUZUKTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGs7ICsrJGkpIHsKICAgICAgICAgICAgJGogPSAkblskaV07CiAgICAgICAgICAgIFBvaW50Ojpjc3dhcCgkclswXSwgJHJbMV0sICRqIF4gMSk7CiAgICAgICAgICAgICRyWzBdID0gJHRoaXMtPmFkZCgkclswXSwgJHJbMV0pOwogICAgICAgICAgICAkclsxXSA9ICR0aGlzLT5nZXREb3VibGUoJHJbMV0pOwogICAgICAgICAgICBQb2ludDo6Y3N3YXAoJHJbMF0sICRyWzFdLCAkaiBeIDEpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbGlkYXRlKCRyWzBdKTsKCiAgICAgICAgcmV0dXJuICRyWzBdOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIEN1cnZlICRvdGhlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY21wKHNlbGYgJG90aGVyKTogaW50CiAgICB7CiAgICAgICAgJGVxdWFsID0gTWF0aDo6ZXF1YWxzKCR0aGlzLT5nZXRBKCksICRvdGhlci0+Z2V0QSgpKTsKICAgICAgICAkZXF1YWwgJj0gTWF0aDo6ZXF1YWxzKCR0aGlzLT5nZXRCKCksICRvdGhlci0+Z2V0QigpKTsKICAgICAgICAkZXF1YWwgJj0gTWF0aDo6ZXF1YWxzKCR0aGlzLT5nZXRQcmltZSgpLCAkb3RoZXItPmdldFByaW1lKCkpOwoKICAgICAgICByZXR1cm4gJGVxdWFsID8gMCA6IDE7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ3VydmUgJG90aGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoc2VsZiAkb3RoZXIpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIDAgPT09ICR0aGlzLT5jbXAoJG90aGVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gJ2N1cnZlKCcuTWF0aDo6dG9TdHJpbmcoJHRoaXMtPmdldEEoKSkuJywgJy5NYXRoOjp0b1N0cmluZygkdGhpcy0+Z2V0QigpKS4nLCAnLk1hdGg6OnRvU3RyaW5nKCR0aGlzLT5nZXRQcmltZSgpKS4nKSc7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZShQb2ludCAkcG9pbnQpCiAgICB7CiAgICAgICAgaWYgKCEkcG9pbnQtPmlzSW5maW5pdHkoKSAmJiAhJHRoaXMtPmNvbnRhaW5zKCRwb2ludC0+Z2V0WCgpLCAkcG9pbnQtPmdldFkoKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIHBvaW50Jyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb3VibGUoUG9pbnQgJHBvaW50KTogUG9pbnQKICAgIHsKICAgICAgICBpZiAoJHBvaW50LT5pc0luZmluaXR5KCkpIHsKICAgICAgICAgICAgcmV0dXJuIFBvaW50OjppbmZpbml0eSgpOwogICAgICAgIH0KCiAgICAgICAgJGEgPSAkdGhpcy0+Z2V0QSgpOwogICAgICAgICR0aHJlZVgyID0gTWF0aDo6bXVsKFxnbXBfaW5pdCgzLCAxMCksIE1hdGg6OnBvdygkcG9pbnQtPmdldFgoKSwgMikpOwoKICAgICAgICAkdGFuZ2VudCA9IE1vZHVsYXJBcml0aG1ldGljOjpkaXYoCiAgICAgICAgICAgIE1hdGg6OmFkZCgkdGhyZWVYMiwgJGEpLAogICAgICAgICAgICBNYXRoOjptdWwoXGdtcF9pbml0KDIsIDEwKSwgJHBvaW50LT5nZXRZKCkpLAogICAgICAgICAgICAkdGhpcy0+Z2V0UHJpbWUoKQogICAgICAgICk7CgogICAgICAgICR4MyA9IE1vZHVsYXJBcml0aG1ldGljOjpzdWIoCiAgICAgICAgICAgIE1hdGg6OnBvdygkdGFuZ2VudCwgMiksCiAgICAgICAgICAgIE1hdGg6Om11bChcZ21wX2luaXQoMiwgMTApLCAkcG9pbnQtPmdldFgoKSksCiAgICAgICAgICAgICR0aGlzLT5nZXRQcmltZSgpCiAgICAgICAgKTsKCiAgICAgICAgJHkzID0gTW9kdWxhckFyaXRobWV0aWM6OnN1YigKICAgICAgICAgICAgTWF0aDo6bXVsKCR0YW5nZW50LCBNYXRoOjpzdWIoJHBvaW50LT5nZXRYKCksICR4MykpLAogICAgICAgICAgICAkcG9pbnQtPmdldFkoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFByaW1lKCkKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFBvaW50KCR4MywgJHkzLCAkcG9pbnQtPmdldE9yZGVyKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVQcml2YXRlS2V5KCk6IFByaXZhdGVLZXkKICAgIHsKICAgICAgICByZXR1cm4gUHJpdmF0ZUtleTo6Y3JlYXRlKCR0aGlzLT5nZW5lcmF0ZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUHVibGljS2V5KFByaXZhdGVLZXkgJHByaXZhdGVLZXkpOiBQdWJsaWNLZXkKICAgIHsKICAgICAgICAkcG9pbnQgPSAkdGhpcy0+bXVsKCR0aGlzLT5nZW5lcmF0b3IsICRwcml2YXRlS2V5LT5nZXRTZWNyZXQoKSk7CgogICAgICAgIHJldHVybiBQdWJsaWNLZXk6OmNyZWF0ZSgkcG9pbnQpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2VuZXJhdGUoKTogXEdNUAogICAgewogICAgICAgICRtYXggPSAkdGhpcy0+Z2VuZXJhdG9yLT5nZXRPcmRlcigpOwogICAgICAgICRudW1CaXRzID0gJHRoaXMtPmJuTnVtQml0cygkbWF4KTsKICAgICAgICAkbnVtQnl0ZXMgPSAoaW50KSBcY2VpbCgkbnVtQml0cyAvIDgpOwogICAgICAgIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgb2Ygc2l6ZSA+PSAkbnVtQml0cwogICAgICAgICRieXRlcyA9IFxyYW5kb21fYnl0ZXMoJG51bUJ5dGVzKTsKICAgICAgICAkdmFsdWUgPSBNYXRoOjpzdHJpbmdUb0ludCgkYnl0ZXMpOwogICAgICAgICRtYXNrID0gXGdtcF9zdWIoXGdtcF9wb3coMiwgJG51bUJpdHMpLCAxKTsKICAgICAgICAkaW50ZWdlciA9IFxnbXBfYW5kKCR2YWx1ZSwgJG1hc2spOwoKICAgICAgICByZXR1cm4gJGludGVnZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIHN0b3JlIHRoaXMgbnVtYmVyLiBOb24tc2lnbmlmaWNhbnQgdXBwZXIgYml0cyBhcmUgbm90IGNvdW50ZWQuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2NyeXB0by9CTl9udW1fYnl0ZXMuaHRtbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGJuTnVtQml0cyhcR01QICR4KTogaW50CiAgICB7CiAgICAgICAgJHplcm8gPSBcZ21wX2luaXQoMCwgMTApOwogICAgICAgIGlmIChNYXRoOjplcXVhbHMoJHgsICR6ZXJvKSkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgJGxvZzIgPSAwOwogICAgICAgIHdoaWxlIChmYWxzZSA9PT0gTWF0aDo6ZXF1YWxzKCR4LCAkemVybykpIHsKICAgICAgICAgICAgJHggPSBNYXRoOjpyaWdodFNoaWZ0KCR4LCAxKTsKICAgICAgICAgICAgKyskbG9nMjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbG9nMjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R2VuZXJhdG9yKCk6IFBvaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZW5lcmF0b3I7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBTcG9ta3ktTGFicwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/Math.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBNYXRoCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY21wKFxHTVAgJGZpcnN0LCBcR01QICRvdGhlcik6IGludAogICAgewogICAgICAgIHJldHVybiBcZ21wX2NtcCgkZmlyc3QsICRvdGhlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcXVhbHMoXEdNUCAkZmlyc3QsIFxHTVAgJG90aGVyKTogYm9vbAogICAgewogICAgICAgIHJldHVybiAwID09PSBcZ21wX2NtcCgkZmlyc3QsICRvdGhlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2QoXEdNUCAkbnVtYmVyLCBcR01QICRtb2R1bHVzKTogXEdNUAogICAgewogICAgICAgIHJldHVybiBcZ21wX21vZCgkbnVtYmVyLCAkbW9kdWx1cyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGQoXEdNUCAkYXVnZW5kLCBcR01QICRhZGRlbmQpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfYWRkKCRhdWdlbmQsICRhZGRlbmQpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3ViKFxHTVAgJG1pbnVlbmQsIFxHTVAgJHN1YnRyYWhlbmQpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3ViKCRtaW51ZW5kLCAkc3VidHJhaGVuZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtdWwoXEdNUCAkbXVsdGlwbGllciwgXEdNUCAkbXVsdGlwbGljYW5kKTogXEdNUAogICAgewogICAgICAgIHJldHVybiBcZ21wX211bCgkbXVsdGlwbGllciwgJG11bHRpcGxpY2FuZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwb3coXEdNUCAkYmFzZSwgaW50ICRleHBvbmVudCk6IFxHTVAKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9wb3coJGJhc2UsICRleHBvbmVudCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiaXR3aXNlQW5kKFxHTVAgJGZpcnN0LCBcR01QICRvdGhlcik6IFxHTVAKICAgIHsKICAgICAgICByZXR1cm4gXGdtcF9hbmQoJGZpcnN0LCAkb3RoZXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYml0d2lzZVhvcihcR01QICRmaXJzdCwgXEdNUCAkb3RoZXIpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfeG9yKCRmaXJzdCwgJG90aGVyKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvU3RyaW5nKFxHTVAgJHZhbHVlKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKCR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbnZlcnNlTW9kKFxHTVAgJGEsIFxHTVAgJG0pOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfaW52ZXJ0KCRhLCAkbSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiYXNlQ29udmVydChzdHJpbmcgJG51bWJlciwgaW50ICRmcm9tLCBpbnQgJHRvKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfc3RydmFsKFxnbXBfaW5pdCgkbnVtYmVyLCAkZnJvbSksICR0byk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByaWdodFNoaWZ0KFxHTVAgJG51bWJlciwgaW50ICRwb3NpdGlvbnMpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuIFxnbXBfZGl2KCRudW1iZXIsIFxnbXBfcG93KFxnbXBfaW5pdCgyLCAxMCksICRwb3NpdGlvbnMpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmluZ1RvSW50KHN0cmluZyAkcyk6IFxHTVAKICAgIHsKICAgICAgICAkcmVzdWx0ID0gXGdtcF9pbml0KDAsIDEwKTsKICAgICAgICAkc0xlbiA9IFxtYl9zdHJsZW4oJHMsICc4Yml0Jyk7CgogICAgICAgIGZvciAoJGMgPSAwOyAkYyA8ICRzTGVuOyArKyRjKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBcZ21wX2FkZChcZ21wX211bCgyNTYsICRyZXN1bHQpLCBcZ21wX2luaXQoXG9yZCgkc1skY10pLCAxMCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/ModularArithmetic.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBNb2R1bGFyQXJpdGhtZXRpYwp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1YihcR01QICRtaW51ZW5kLCBcR01QICRzdWJ0cmFoZW5kLCBcR01QICRtb2R1bHVzKTogXEdNUAogICAgewogICAgICAgIHJldHVybiBNYXRoOjptb2QoTWF0aDo6c3ViKCRtaW51ZW5kLCAkc3VidHJhaGVuZCksICRtb2R1bHVzKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG11bChcR01QICRtdWx0aXBsaWVyLCBcR01QICRtdWxpcGxpY2FuZCwgXEdNUCAkbW9kdWx1cyk6IFxHTVAKICAgIHsKICAgICAgICByZXR1cm4gTWF0aDo6bW9kKE1hdGg6Om11bCgkbXVsdGlwbGllciwgJG11bGlwbGljYW5kKSwgJG1vZHVsdXMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGl2KFxHTVAgJGRpdmlkZW5kLCBcR01QICRkaXZpc29yLCBcR01QICRtb2R1bHVzKTogXEdNUAogICAgewogICAgICAgIHJldHVybiBzZWxmOjptdWwoJGRpdmlkZW5kLCBNYXRoOjppbnZlcnNlTW9kKCRkaXZpc29yLCAkbW9kdWx1cyksICRtb2R1bHVzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/NistCurve.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoQykgMjAxMiBNYXR5YXMgRGFudGVyLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAogKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCiAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwogKiBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBOaXN0Q3VydmUKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIE5JU1QgUC0yNTYgY3VydmUuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3VydmUyNTYoKTogQ3VydmUKICAgIHsKICAgICAgICAkcCA9IFxnbXBfaW5pdCgnZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZicsIDE2KTsKICAgICAgICAkYSA9IFxnbXBfaW5pdCgnZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYycsIDE2KTsKICAgICAgICAkYiA9IFxnbXBfaW5pdCgnNWFjNjM1ZDhhYTNhOTNlN2IzZWJiZDU1NzY5ODg2YmM2NTFkMDZiMGNjNTNiMGY2M2JjZTNjM2UyN2QyNjA0YicsIDE2KTsKICAgICAgICAkeCA9IFxnbXBfaW5pdCgnNmIxN2QxZjJlMTJjNDI0N2Y4YmNlNmU1NjNhNDQwZjI3NzAzN2Q4MTJkZWIzM2EwZjRhMTM5NDVkODk4YzI5NicsIDE2KTsKICAgICAgICAkeSA9IFxnbXBfaW5pdCgnNGZlMzQyZTJmZTFhN2Y5YjhlZTdlYjRhN2MwZjllMTYyYmNlMzM1NzZiMzE1ZWNlY2JiNjQwNjgzN2JmNTFmNScsIDE2KTsKICAgICAgICAkbiA9IFxnbXBfaW5pdCgnZmZmZmZmZmYwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZiY2U2ZmFhZGE3MTc5ZTg0ZjNiOWNhYzJmYzYzMjU1MScsIDE2KTsKICAgICAgICAkZ2VuZXJhdG9yID0gUG9pbnQ6OmNyZWF0ZSgkeCwgJHksICRuKTsKCiAgICAgICAgcmV0dXJuIG5ldyBDdXJ2ZSgyNTYsICRwLCAkYSwgJGIsICRnZW5lcmF0b3IpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBOSVNUIFAtMzg0IGN1cnZlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGN1cnZlMzg0KCk6IEN1cnZlCiAgICB7CiAgICAgICAgJHAgPSBcZ21wX2luaXQoJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmZicsIDE2KTsKICAgICAgICAkYSA9IFxnbXBfaW5pdCgnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZjJywgMTYpOwogICAgICAgICRiID0gXGdtcF9pbml0KCdiMzMxMmZhN2UyM2VlN2U0OTg4ZTA1NmJlM2Y4MmQxOTE4MWQ5YzZlZmU4MTQxMTIwMzE0MDg4ZjUwMTM4NzVhYzY1NjM5OGQ4YTJlZDE5ZDJhODVjOGVkZDNlYzJhZWYnLCAxNik7CiAgICAgICAgJHggPSBcZ21wX2luaXQoJ2FhODdjYTIyYmU4YjA1Mzc4ZWIxYzcxZWYzMjBhZDc0NmUxZDNiNjI4YmE3OWI5ODU5Zjc0MWUwODI1NDJhMzg1NTAyZjI1ZGJmNTUyOTZjM2E1NDVlMzg3Mjc2MGFiNycsIDE2KTsKICAgICAgICAkeSA9IFxnbXBfaW5pdCgnMzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmJywgMTYpOwogICAgICAgICRuID0gXGdtcF9pbml0KCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNzYzNGQ4MWY0MzcyZGRmNTgxYTBkYjI0OGIwYTc3YWVjZWMxOTZhY2NjNTI5NzMnLCAxNik7CiAgICAgICAgJGdlbmVyYXRvciA9IFBvaW50OjpjcmVhdGUoJHgsICR5LCAkbik7CgogICAgICAgIHJldHVybiBuZXcgQ3VydmUoMzg0LCAkcCwgJGEsICRiLCAkZ2VuZXJhdG9yKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gTklTVCBQLTUyMSBjdXJ2ZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdXJ2ZTUyMSgpOiBDdXJ2ZQogICAgewogICAgICAgICRwID0gXGdtcF9pbml0KCcwMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywgMTYpOwogICAgICAgICRhID0gXGdtcF9pbml0KCcwMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjJywgMTYpOwogICAgICAgICRiID0gXGdtcF9pbml0KCcwMDAwMDA1MTk1M2ViOTYxOGUxYzlhMWY5MjlhMjFhMGI2ODU0MGVlYTJkYTcyNWI5OWIzMTVmM2I4YjQ4OTkxOGVmMTA5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIxYmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwJywgMTYpOwogICAgICAgICR4ID0gXGdtcF9pbml0KCcwMDAwMDBjNjg1OGUwNmI3MDQwNGU5Y2Q5ZTNlY2I2NjIzOTViNDQyOWM2NDgxMzkwNTNmYjUyMWY4MjhhZjYwNmI0ZDNkYmFhMTRiNWU3N2VmZTc1OTI4ZmUxZGMxMjdhMmZmYThkZTMzNDhiM2MxODU2YTQyOWJmOTdlN2UzMWMyZTViZDY2JywgMTYpOwogICAgICAgICR5ID0gXGdtcF9pbml0KCcwMDAwMDExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmM5N2VlNzI5OTVlZjQyNjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwJywgMTYpOwogICAgICAgICRuID0gXGdtcF9pbml0KCcwMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmE1MTg2ODc4M2JmMmY5NjZiN2ZjYzAxNDhmNzA5YTVkMDNiYjVjOWI4ODk5YzQ3YWViYjZmYjcxZTkxMzg2NDA5JywgMTYpOwogICAgICAgICRnZW5lcmF0b3IgPSBQb2ludDo6Y3JlYXRlKCR4LCAkeSwgJG4pOwoKICAgICAgICByZXR1cm4gbmV3IEN1cnZlKDUyMSwgJHAsICRhLCAkYiwgJGdlbmVyYXRvcik7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/phpunit.xml.dist</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICBiYWNrdXBTdGF0aWNBdHRyaWJ1dGVzPSJmYWxzZSIKICAgICAgICBjb252ZXJ0RXJyb3JzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnROb3RpY2VzVG9FeGNlcHRpb25zPSJ0cnVlIgogICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICBwcm9jZXNzSXNvbGF0aW9uPSJmYWxzZSIKICAgICAgICBzdG9wT25GYWlsdXJlPSJmYWxzZSIKICAgICAgICBzeW50YXhDaGVjaz0idHJ1ZSIKICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgY29sb3JzPSJ0cnVlIj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnkgc3VmZml4PSIucGhwIj4uLzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8ZXhjbHVkZT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0czwvZGlyZWN0b3J5PgogICAgICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3NyYzwvZGlyZWN0b3J5PgogICAgICAgICAgICA8L2V4Y2x1ZGU+CiAgICAgICAgPC93aGl0ZWxpc3Q+CiAgICA8L2ZpbHRlcj4KPC9waHB1bml0Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/Point.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoQykgMjAxMiBNYXR5YXMgRGFudGVyLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAogKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCiAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwogKiBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBQb2ludAp7CiAgICAvKioKICAgICAqIEB2YXIgXEdNUAogICAgICovCiAgICBwcml2YXRlICR4OwoKICAgIC8qKgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByaXZhdGUgJHk7CgogICAgLyoqCiAgICAgKiBAdmFyIFxHTVAKICAgICAqLwogICAgcHJpdmF0ZSAkb3JkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaW5maW5pdHkgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgYSBuZXcgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiB3aGVuIGVpdGhlciB0aGUgY3VydmUgZG9lcyBub3QgY29udGFpbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBvcmRlciBpcyBub3QgbnVsbCBhbmQgUCh4LCB5KSAqIG9yZGVyIGlzIG5vdCBlcXVhbCB0byBpbmZpbml0eQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxHTVAgJHgsIFxHTVAgJHksIFxHTVAgJG9yZGVyLCBib29sICRpbmZpbml0eSA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT54ID0gJHg7CiAgICAgICAgJHRoaXMtPnkgPSAkeTsKICAgICAgICAkdGhpcy0+b3JkZXIgPSAkb3JkZXI7CiAgICAgICAgJHRoaXMtPmluZmluaXR5ID0gJGluZmluaXR5OwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBQb2ludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShcR01QICR4LCBcR01QICR5LCA/XEdNUCAkb3JkZXIgPSBudWxsKTogc2VsZgogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkeCwgJHksIG51bGwgPT09ICRvcmRlciA/IFxnbXBfaW5pdCgwLCAxMCkgOiAkb3JkZXIpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBQb2ludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluZmluaXR5KCk6IHNlbGYKICAgIHsKICAgICAgICAkemVybyA9IFxnbXBfaW5pdCgwLCAxMCk7CgogICAgICAgIHJldHVybiBuZXcgc2VsZigkemVybywgJHplcm8sICR6ZXJvLCB0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNJbmZpbml0eSgpOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pbmZpbml0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JkZXIoKTogXEdNUAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+b3JkZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFgoKTogXEdNUAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+eDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WSgpOiBcR01QCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT55OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFBvaW50ICRhCiAgICAgKiBAcGFyYW0gUG9pbnQgJGIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjc3dhcChzZWxmICRhLCBzZWxmICRiLCBpbnQgJGNvbmQpCiAgICB7CiAgICAgICAgc2VsZjo6Y3N3YXBHTVAoJGEtPngsICRiLT54LCAkY29uZCk7CiAgICAgICAgc2VsZjo6Y3N3YXBHTVAoJGEtPnksICRiLT55LCAkY29uZCk7CiAgICAgICAgc2VsZjo6Y3N3YXBHTVAoJGEtPm9yZGVyLCAkYi0+b3JkZXIsICRjb25kKTsKICAgICAgICBzZWxmOjpjc3dhcEJvb2xlYW4oJGEtPmluZmluaXR5LCAkYi0+aW5maW5pdHksICRjb25kKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjc3dhcEJvb2xlYW4oYm9vbCAmJGEsIGJvb2wgJiRiLCBpbnQgJGNvbmQpCiAgICB7CiAgICAgICAgJHNhID0gXGdtcF9pbml0KFxpbnR2YWwoJGEpLCAxMCk7CiAgICAgICAgJHNiID0gXGdtcF9pbml0KFxpbnR2YWwoJGIpLCAxMCk7CgogICAgICAgIHNlbGY6OmNzd2FwR01QKCRzYSwgJHNiLCAkY29uZCk7CgogICAgICAgICRhID0gKGJvb2wpIFxnbXBfc3RydmFsKCRzYSwgMTApOwogICAgICAgICRiID0gKGJvb2wpIFxnbXBfc3RydmFsKCRzYiwgMTApOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNzd2FwR01QKFxHTVAgJiRzYSwgXEdNUCAmJHNiLCBpbnQgJGNvbmQpCiAgICB7CiAgICAgICAgJHNpemUgPSBcbWF4KFxtYl9zdHJsZW4oXGdtcF9zdHJ2YWwoJHNhLCAyKSwgJzhiaXQnKSwgXG1iX3N0cmxlbihcZ21wX3N0cnZhbCgkc2IsIDIpLCAnOGJpdCcpKTsKICAgICAgICAkbWFzayA9IFxzdHJ2YWwoMSAtIFxpbnR2YWwoJGNvbmQpKTsKICAgICAgICAkbWFzayA9IFxzdHJfcGFkKCcnLCAkc2l6ZSwgJG1hc2ssIFNUUl9QQURfTEVGVCk7CiAgICAgICAgJG1hc2sgPSBcZ21wX2luaXQoJG1hc2ssIDIpOwogICAgICAgICR0YUEgPSBNYXRoOjpiaXR3aXNlQW5kKCRzYSwgJG1hc2spOwogICAgICAgICR0YUIgPSBNYXRoOjpiaXR3aXNlQW5kKCRzYiwgJG1hc2spOwogICAgICAgICRzYSA9IE1hdGg6OmJpdHdpc2VYb3IoTWF0aDo6Yml0d2lzZVhvcigkc2EsICRzYiksICR0YUIpOwogICAgICAgICRzYiA9IE1hdGg6OmJpdHdpc2VYb3IoTWF0aDo6Yml0d2lzZVhvcigkc2EsICRzYiksICR0YUEpOwogICAgICAgICRzYSA9IE1hdGg6OmJpdHdpc2VYb3IoTWF0aDo6Yml0d2lzZVhvcigkc2EsICRzYiksICR0YUIpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/PrivateKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoQykgMjAxMiBNYXR5YXMgRGFudGVyLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAogKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCiAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwogKiBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBQcml2YXRlS2V5CnsKICAgIC8qKgogICAgICogQHZhciBcR01QCiAgICAgKi8KICAgIHByaXZhdGUgJHNlY3JldDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxHTVAgJHNlY3JldCkKICAgIHsKICAgICAgICAkdGhpcy0+c2VjcmV0ID0gJHNlY3JldDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gUHJpdmF0ZUtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShcR01QICRzZWNyZXQpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRzZWNyZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWNyZXQoKTogXEdNUAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2VjcmV0OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/PublicKey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoKICogVGhlIE1JVCBMaWNlbnNlIChNSVQpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4IFNwb21reS1MYWJzCiAqCiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMKICogb2YgdGhlIE1JVCBsaWNlbnNlLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCiAqLwoKbmFtZXNwYWNlIEpvc2VcQ29tcG9uZW50XENvcmVcVXRpbFxFY2M7CgovKioKICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoQykgMjAxMiBNYXR5YXMgRGFudGVyLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAogKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCiAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAogKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwogKiBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCiAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgovKioKICogQGludGVybmFsCiAqLwpjbGFzcyBQdWJsaWNLZXkKewogICAgLyoqCiAgICAgKiBAdmFyIFBvaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHBvaW50OwoKICAgIC8qKgogICAgICogUHVibGljS2V5IGNvbnN0cnVjdG9yLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBvaW50ICRwb2ludCkKICAgIHsKICAgICAgICAkdGhpcy0+cG9pbnQgPSAkcG9pbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFB1YmxpY0tleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShQb2ludCAkcG9pbnQpOiBzZWxmCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRwb2ludCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvaW50KCk6IFBvaW50CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb2ludDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/web-token/jwt-util-ecc/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[RUNDIFRvb2xzIEZvciBKV1QtRnJhbWV3b3JrCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgcmVwb3NpdG9yeSBpcyBhIHN1YiByZXBvc2l0b3J5IG9mIFt0aGUgSldUIEZyYW1ld29ya10oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrKSBwcm9qZWN0IGFuZCBpcyBSRUFEIE9OTFkuCgoqKlBsZWFzZSBkbyBub3Qgc3VibWl0IGFueSBQdWxsIFJlcXVlc3QgaGVyZS4qKgpZb3Ugc2hvdWxkIGdvIHRvIFt0aGUgbWFpbiByZXBvc2l0b3J5XShodHRwczovL2dpdGh1Yi5jb20vd2ViLXRva2VuL2p3dC1mcmFtZXdvcmspIGluc3RlYWQuCgojIERvY3VtZW50YXRpb24KClRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhcyBodHRwczovL3dlYi10b2tlbi5zcG9ta3ktbGFicy5jb20vCgojIFN1cHBvcnQKCkkgYnJpbmcgc29sdXRpb25zIHRvIHlvdXIgcHJvYmxlbXMgYW5kIGFuc3dlciB5b3VyIHF1ZXN0aW9ucy4KCklmIHlvdSByZWFsbHkgbG92ZSB0aGF0IHByb2plY3QgYW5kIHRoZSB3b3JrIEkgaGF2ZSBkb25lIG9yIGlmIHlvdSB3YW50IEkgcHJpb3JpdGl6ZSB5b3VyIGlzc3VlcywgdGhlbiB5b3UgY2FuIGhlbHAgbWUgb3V0IGZvciBhIGNvdXBsZSBvZiA6YmVlcnM6IG9yIG1vcmUhCgpbIVtCZWNvbWUgYSBQYXRyZW9uXShodHRwczovL2M1LnBhdHJlb24uY29tL2V4dGVybmFsL2xvZ28vYmVjb21lX2FfcGF0cm9uX2J1dHRvbi5wbmcpXShodHRwczovL3d3dy5wYXRyZW9uLmNvbS9GbG9yZW50TW9yc2VsbGkpCgojIENvbnRyaWJ1dGluZwoKUmVxdWVzdHMgZm9yIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVkIGFuZCBhbGwgb3RoZXIgaWRlYXMgdG8gbWFrZSB0aGlzIGZyYW1ld29yayB1c2VmdWwgYXJlIHdlbGNvbWUuCklmIHlvdSBmZWVsIGNvbWZvcnRhYmxlIHdyaXRpbmcgY29kZSwgeW91IGNvdWxkIHRyeSB0byBmaXggW29wZW5lZCBpc3N1ZXMgd2hlcmUgaGVscCBpcyB3YW50ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItdG9rZW4vand0LWZyYW1ld29yay9sYWJlbHMvaGVscCt3YW50ZWQpIG9yIFt0aG9zZSB0aGF0IGFyZSBlYXN5IHRvIGZpeF0oaHR0cHM6Ly9naXRodWIuY29tL3dlYi10b2tlbi9qd3QtZnJhbWV3b3JrL2xhYmVscy9lYXN5LXBpY2spLgoKRG8gbm90IGZvcmdldCB0byBbZm9sbG93IHRoZXNlIGJlc3QgcHJhY3RpY2VzXSguZ2l0aHViL0NPTlRSSUJVVElORy5tZCkuCgoqKklmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIHNlY3VyaXR5IGlzc3VlLCBETyBOT1Qgb3BlbiBhbiBpc3N1ZSoqLiBbWW91IE1VU1Qgc3VibWl0IHlvdXIgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXR0ZXIuaW0vU3BvbWt5LykuCgojIExpY2VuY2UKClRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZSB1bmRlciBbTUlUIGxpY2VuY2VdKExJQ0VOU0UpLgo=]]></data>
	</file>
</module>
