OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1MeHh4XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tuby1dc2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW25vLWFzbV0gW25vLWRzb10gW25vLWtyYjVdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJUl0gWy0td2l0aC14eHhbPXZ2dl1dIFstLXRlc3Qtc2FuaXR5XSBvcy9jb21waWxlcls6ZmxhZ3NdXG4iOwoKIyBPcHRpb25zOgojCiMgLS1vcGVuc3NsZGlyICBpbnN0YWxsIE9wZW5TU0wgaW4gT1BFTlNTTERJUiAoRGVmYXVsdDogRElSL3NzbCBpZiB0aGUKIyAgICAgICAgICAgICAgIC0tcHJlZml4IG9wdGlvbiBpcyBnaXZlbjsgL3Vzci9sb2NhbC9zc2wgb3RoZXJ3aXNlKQojIC0tcHJlZml4ICAgICAgcHJlZml4IGZvciB0aGUgT3BlblNTTCBpbmNsdWRlLCBsaWIgYW5kIGJpbiBkaXJlY3RvcmllcwojICAgICAgICAgICAgICAgKERlZmF1bHQ6IHRoZSBPUEVOU1NMRElSIGRpcmVjdG9yeSkKIwojIC0taW5zdGFsbF9wcmVmaXggIEFkZGl0aW9uYWwgcHJlZml4IGZvciBwYWNrYWdlIGJ1aWxkZXJzIChlbXB0eSBieQojICAgICAgICAgICAgICAgZGVmYXVsdCkuICBUaGlzIG5lZWRuJ3QgYmUgc2V0IGluIGFkdmFuY2UsIHlvdSBjYW4KIyAgICAgICAgICAgICAgIGp1c3QgYXMgd2VsbCB1c2UgIm1ha2UgSU5TVEFMTF9QUkVGSVg9L3doYXRldmVyIGluc3RhbGwiLgojCiMgLS13aXRoLWtyYjUtZGlyICBEZWNsYXJlIHdoZXJlIEtlcmJlcm9zIDUgbGl2ZXMuICBUaGUgbGlicmFyaWVzIGFyZSBleHBlY3RlZAojCQl0byBsaXZlIGluIHRoZSBzdWJkaXJlY3RvcnkgbGliLyBhbmQgdGhlIGhlYWRlciBmaWxlcyBpbgojCQlpbmNsdWRlLy4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMgLS13aXRoLWtyYjUtbGliICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGxpYnJhcmllcyBsaXZlLiAgQSB2YWx1ZSBpcwojCQlyZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2xpYikKIyAtLXdpdGgta3JiNS1pbmNsdWRlICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGhlYWRlciBmaWxlcyBsaXZlLiAgQQojCQl2YWx1ZSBpcyByZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2luY2x1ZGUpCiMgLS13aXRoLWtyYjUtZmxhdm9yICBEZWNsYXJlIHdoYXQgZmxhdm9yIG9mIEtlcmJlcm9zIDUgaXMgdXNlZC4gIEN1cnJlbnRseQojCQlzdXBwb3J0ZWQgdmFsdWVzIGFyZSAiTUlUIiBhbmQgIkhlaW1kYWwiLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIwojIC0tdGVzdC1zYW5pdHkgTWFrZSBhIG51bWJlciBvZiBzYW5pdHkgY2hlY2tzIG9uIHRoZSBkYXRhIGluIHRoaXMgZmlsZS4KIyAgICAgICAgICAgICAgIFRoaXMgaXMgYSBkZWJ1Z2dpbmcgdG9vbCBmb3IgT3BlblNTTCBkZXZlbG9wZXJzLgojCiMgbm8taHcteHh4ICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUuCiMgICAgICAgICAgICAgICBHZW5lcmljIE9wZW5TU0wtc3R5bGUgbWV0aG9kcyByZWxhdGluZyB0byB0aGlzIHN1cHBvcnQKIyAgICAgICAgICAgICAgIGFyZSBhbHdheXMgY29tcGlsZWQgYnV0IHJldHVybiBOVUxMIGlmIHRoZSBoYXJkd2FyZQojICAgICAgICAgICAgICAgc3VwcG9ydCBpc24ndCBjb21waWxlZC4KIyBuby1odyAgICAgICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIGFueSBjcnlwdG8gaGFyZHdhcmUuCiMgW25vLV10aHJlYWRzICBbZG9uJ3RdIHRyeSB0byBjcmVhdGUgYSBsaWJyYXJ5IHRoYXQgaXMgc3VpdGFibGUgZm9yCiMgICAgICAgICAgICAgICBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucyAoZGVmYXVsdCBpcyAidGhyZWFkcyIgaWYgd2UKIyAgICAgICAgICAgICAgIGtub3cgaG93IHRvIGRvIGl0KQojIFtuby1dc2hhcmVkCVtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIHdoZW4gc3VwcG9ydGVkLgojIG5vLWFzbSAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIKIyBuby1kc28gICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBuYXRpdmUgc2hhcmVkLWxpYnJhcnkgbWV0aG9kcy4gVGhpcwojICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhhdCBhbGwgbWV0aG9kcyBqdXN0IHJldHVybiBOVUxMLgojIG5vLWtyYjUgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IEtSQjUgbGlicmFyeSBvciBjb2RlLgojIFtuby1demxpYiAgICAgW2Rvbid0XSBjb21waWxlIHN1cHBvcnQgZm9yIHpsaWIgY29tcHJlc3Npb24uCiMgemxpYi1keW5hbWljCUxpa2UgInpsaWIiLCBidXQgdGhlIHpsaWIgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSBhIHNoYXJlZAojCQlsaWJyYXJ5IGFuZCB3aWxsIGJlIGxvYWRlZCBpbiBydW4tdGltZSBieSB0aGUgT3BlblNTTCBsaWJyYXJ5LgojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2VsZl9hc209Ing4NmNwdWlkLWVsZi5vOmJuODYtZWxmLm8gY284Ni1lbGYubzpkeDg2LWVsZi5vIHl4ODYtZWxmLm86YXg4Ni1lbGYubzpieDg2LWVsZi5vOm14ODYtZWxmLm86c3g4Ni1lbGYubyBzNTEyc3NlMi1lbGYubzpjeDg2LWVsZi5vOnJ4ODYtZWxmLm86cm04Ni1lbGYubzpyNTg2LWVsZi5vIjsKbXkgJHg4Nl9jb2ZmX2FzbT0ieDg2Y3B1aWQtY29mLm86Ym44Ni1jb2YubyBjbzg2LWNvZi5vOmR4ODYtY29mLm8geXg4Ni1jb2YubzpheDg2LWNvZi5vOmJ4ODYtY29mLm86bXg4Ni1jb2YubzpzeDg2LWNvZi5vIHM1MTJzc2UyLWNvZi5vOmN4ODYtY29mLm86cng4Ni1jb2YubzpybTg2LWNvZi5vOnI1ODYtY29mLm8iOwpteSAkeDg2X291dF9hc209Ing4NmNwdWlkLW91dC5vOmJuODYtb3V0Lm8gY284Ni1vdXQubzpkeDg2LW91dC5vIHl4ODYtb3V0Lm86YXg4Ni1vdXQubzpieDg2LW91dC5vOm14ODYtb3V0Lm86c3g4Ni1vdXQubyBzNTEyc3NlMi1vdXQubzpjeDg2LW91dC5vOnJ4ODYtb3V0Lm86cm04Ni1vdXQubzpyNTg2LW91dC5vIjsKCm15ICR4ODZfNjRfYXNtPSJ4ODZfNjRjcHVpZC5vOng4Nl82NC1nY2Mubzo6YWVzLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjoiOwpteSAkaWE2NF9hc209ImlhNjRjcHVpZC5vOmJuLWlhNjQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86OnJjNC1pYTY0Lm86OiI7CgpteSAkbm9fYXNtPSI6Ojo6Ojo6Ojo6IjsKCiMgQXMgZm9yICRCU0R0aHJlYWRzLiBJZGVhIGlzIHRvIG1haW50YWluICJjb2xsZWN0aXZlIiBzZXQgb2YgZmxhZ3MsCiMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLCAKIyBidXQgaXMgdHJlYXRlZCBkaWZmZXJlbnRseS4gT3BlbkJTRCBleHBhbmRzIGlzIGFzIC1EX1BPU0lYX1RIUkVBRAojIC1sY19yLCB3aGljaCBpcyBzdWZmaWNpZW50LiBGcmVlQlNEIDQueCBleHBhbmRzIGl0IGFzIC1sY19yLAojIHdoaWNoIGhhcyB0byBiZSBhY2NvbXBhbmllZCBieSBleHBsaWNpdCAtRF9USFJFQURfU0FGRSBhbmQKIyBzb21ldGltZXMgLURfUkVFTlRSQU5ULiBGcmVlQlNEIDUueCBleHBhbmRzIGl0IGFzIC1sY19yLCB3aGljaAojIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQ/Cm15ICRCU0R0aHJlYWRzPSItcHRocmVhZCAtRF9USFJFQURfU0FGRSAtRF9SRUVOVFJBTlQiOwoKI2NvbmZpZy1zdHJpbmcJJGNjIDogJGNmbGFncyA6ICR1bmlzdGQgOiAkdGhyZWFkX2NmbGFnIDogJHN5c19pZCA6ICRsZmxhZ3MgOiAkYm5fb3BzIDogJGNwdWlkX29iaiA6ICRibl9vYmogOiAkZGVzX29iaiA6ICRhZXNfb2JqIDogJGJmX29iaiA6ICRtZDVfb2JqIDogJHNoYTFfb2JqIDogJGNhc3Rfb2JqIDogJHJjNF9vYmogOiAkcm1kMTYwX29iaiA6ICRyYzVfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzCgpteSAldGFibGU9KAojIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LAojIGZvcm1hdHRlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgoKCiMiYiIsCQkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfToke3Ribl9tdWx9OjoiLAojImJsLTRjLTJjIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBNRDJfQ0hBUjoke3Ribl9tdWx9OjoiLAojImJsLTRjLXJpIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBSQzRfSU5ERVg6JHt0Ym5fbXVsfTo6IiwKIyJiMi1pcy1yaS1kcCIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czJ9SURFQV9TSE9SVCBSQzRfSU5ERVggREVTX1BUUjoke3Ribl9tdWx9OjoiLAoKIyBPdXIgZGV2ZWxvcG1lbnQgY29uZmlncwoicHVyaWZ5IiwJInB1cmlmeSBnY2M6LWcgLURQVVJJRlkgLVdhbGw6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Ojo6IiwKImRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZ2dkYiAtZzIgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjoodW5rbm93bik6Oi1sZWZlbmNlOjo6OiIsCiJkZWJ1Zy1iZW4iLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6Ojpibjg2LWVsZi5vIGNvODYtZWxmLm8iLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOi1ETF9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtRFBFREFOVElDIC1nIC1tYXJjaD1pNDg2IC1wZWRhbnRpYyAtV3NoYWRvdyAtV2FsbDo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZSIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1nIC1tY3B1PWk0ODYgLXBlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZCIsCiJkZWJ1Zy1zdGV2ZS1saW51eC1wc2V1ZG82NCIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRE9QRU5TU0xfTk9fQVNNIC1nIC1tY3B1PWk0ODYgLVdhbGwgLVdlcnJvciAtV3NoYWRvdyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpTSVhUWV9GT1VSX0JJVDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZi1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20tZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtRE1EMzJfUkVHX1Q9aW50IC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMgQmFzaWMgY29uZmlncyB0aGF0IHNob3VsZCB3b3JrIG9uIGFueSAoMzIgYW5kIGxlc3MgYml0KSBib3gKImdjYyIsCQkiZ2NjOi1PMzo6KHVua25vd24pOjo6Qk5fTExPTkc6OjoiLAoiY2MiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyMjI1ZPUyBDb25maWd1cmF0aW9ucwoidm9zLWdjYyIsImdjYzotTzMgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURCX0VORElBTjo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLWdjYyIsImdjYzotTzAgLWcgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURCX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBHTlUgQyBzZXR1cHMKIyAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSBzd2l0Y2hlcyBvZmYgaW5saW5lIGFzc2VtYmxlci4gV2UgaGF2ZSB0byBkbyBpdAojIGhlcmUgYmVjYXVzZSB3aGVuZXZlciBHTlUgQyBpbnN0YW50aWF0ZXMgYW4gYXNzZW1ibGVyIHRlbXBsYXRlIGl0CiMgc3Vycm91bmRzIGl0IHdpdGggI0FQUCAjTk9fQVBQIGNvbW1lbnQgcGFpciB3aGljaCAoYXQgbGVhc3QgU29sYXJpcwojIDdfeDg2KSAvdXNyL2Njcy9iaW4vYXMgZmFpbHMgdG8gYXNzZW1ibGUgd2l0aCAiSWxsZWdhbCBtbmVtb25pYyIKIyBlcnJvciBtZXNzYWdlLgoic29sYXJpcy14ODYtZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbCAtRExfRU5ESUFOIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1zaGFyZWQgLXN0YXRpYy1saWJnY2MgbWlnaHQgYXBwZWFyIGNvbnRyb3ZlcnNpYWwsIGJ1dCBtb2R1bGVzIHRha2VuCiMgZnJvbSBzdGF0aWMgbGliZ2NjIGRvIG5vdCBoYXZlIHJlbG9jYXRpb25zIGFuZCBsaW5raW5nIHRoZW0gaW50byBvdXIKIyBzaGFyZWQgb2JqZWN0cyBkb2Vzbid0IGhhdmUgYW55IG5lZ2F0aXZlIHNpZGUtZWZmZWN0cy4gT24gdGhlIGNvbnRyYXJ5LAojIGRvaW5nIHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBnY2Mgc2hhcmVkIGJ1aWxkIHdpdGggU3VuIEMuIEdpdmVuCiMgdGhhdCBnY2MgZ2VuZXJhdGVzIGZhc3RlciBjb2RlIFt0aGFua3MgdG8gaW5saW5lIGFzc2VtYmxlcl0sIEkgd291bGQKIyBhY3R1YWxseSByZWNvbW1lbmQgdG8gY29uc2lkZXIgdXNpbmcgZ2NjIHNoYXJlZCBidWlsZCBldmVuIHdpdGggdmVuZG9yCiMgY29tcGlsZXI6LSkKIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KInNvbGFyaXM2NC14ODZfNjQtZ2NjIiwiZ2NjOi1tNjQgLU8zIC1XYWxsIC1ETF9FTkRJQU4gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIAojIyMjIFNvbGFyaXMgeDg2IHdpdGggU3VuIEMgc2V0dXBzCiJzb2xhcmlzLXg4Ni1jYyIsImNjOi1mYXN0IC1PIC1YYTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQteDg2XzY0LWNjIiwiY2M6LWZhc3QgLXhhcmNoPWFtZDY0IC14c3RyY29uc3QgLVhhIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LXhhcmNoPWFtZDY0IC1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIEdOVSBDIHNldHVwcwoic29sYXJpcy1zcGFyY3Y3LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LW12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtbTMyIHNob3VsZCBiZSBzYWZlIHRvIGFkZCBhcyBsb25nIGFzIGRyaXZlciByZWNvZ25pemVzIC1tY3B1PXVsdHJhc3BhcmMKInNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4cGx1cy5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWdjYyIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjkubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtTyAtZyAtbXY4IC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1PIC1nIC1tY3B1PXVsdHJhc3BhcmMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1Xbm8tbG9uZy1sb25nIC1EX19FWFRFTlNJT05TX18gLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y4cGx1cy5vOjo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBTdW4gQyBzZXR1cHMKIyBTQzQuMCBkb2Vzbid0IHBhc3MgJ21ha2UgdGVzdCcsIHVwZ3JhZGUgdG8gU0M1LjAgb3IgU0M0LjIuCiMgU0M0LjIgaXMgb2ssIGJldHRlciB0aGFuIGdjYyBldmVuIG9uIGJuIGFzIGxvbmcgYXMgeW91IHRlbGwgaXQgLXhhcmNoPXY4CiMgU0M1LjAgbm90ZTogQ29tcGlsZXIgY29tbW9uIHBhdGNoIDEwNzM1Ny0wMSBvciBsYXRlciBpcyByZXF1aXJlZCEKInNvbGFyaXMtc3BhcmN2Ny1jYyIsImNjOi14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzoteGFyY2g9djggLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4cGx1cy5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OSAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjkubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD12OSAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTovdXNyL2Njcy9iaW4vYXIgcnMiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzo6OjptZDUtc3BhcmN2OHBsdXMubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCgojIyMjIFN1bk9TIGNvbmZpZ3MsIGFzc3VtaW5nIHNwYXJjIGZvciB0aGUgZ2NjIG9uZS4KIyJzdW5vcy1jYyIsICJjYzotTzQgLUROT1BST1RPIC1ETk9DT05TVDo6KHVua25vd24pOlNVTk9TOjpERVNfVU5ST0xMOiR7bm9fYXNtfTo6IiwKInN1bm9zLWdjYyIsImdjYzotTzMgLW12OCAtRHNzaXplX3Q9aW50OjoodW5rbm93bik6U1VOT1M6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19QVFIgREVTX1JJU0MxOiR7bm9fYXNtfTo6IiwKCiMjIyMgSVJJWCA1LnggY29uZmlncwojIC1taXBzMiBmbGFnIGlzIGFkZGVkIGJ5IC4vY29uZmlnIHdoZW4gYXBwcm9wcmlhdGUuCiJpcml4LWdjYyIsImdjYzotTzMgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJUklYIDYueCBjb25maWdzCiMgT25seSBOMzIgYW5kIE42NCBBQklzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBuZWVkIE8zMiBBQkkgYnVpbGQsIGludm9rZQojICcuL0NvbmZpZ3VyZSBpcml4LWNjIC1vMzInIG1hbnVhbGx5LgoiaXJpeC1taXBzMy1nY2MiLCJnY2M6LW1hYmk9bjMyIC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDo6Ym4tbWlwczMubzo6Ojo6Ojo6OjpkbGZjbjppcml4LXNoYXJlZDo6LW1hYmk9bjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtbWlwczMtY2MiLCAiY2M6LW4zMiAtbWlwczMgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OkRFU19QVFIgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDo6Ym4tbWlwczMubzo6Ojo6Ojo6OjpkbGZjbjppcml4LXNoYXJlZDo6LW4zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgTjY0IEFCSSBidWlsZHMuCiJpcml4NjQtbWlwczQtZ2NjIiwiZ2NjOi1tYWJpPTY0IC1taXBzNCAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOjpibi1taXBzMy5vOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4NjQtbWlwczQtY2MiLCAiY2M6LTY0IC1taXBzNCAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MyLWdjYyIsImdjYzotbWFyY2g9Mi4wIC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzJXLm86Ojo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMC1jYyIsImNjOitEQXBvcnRhYmxlICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzIubzo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1jYyIsImNjOitERDY0ICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzJXLm86Ojo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBIUC9VWCBJQS02NCB0YXJnZXRzCiJocHV4LWlhNjQtY2MiLCJjYzotQWUgK0REMzIgK08yICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDMyIC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgR0NDIGJ1aWxkcy4uLgoiaHB1eC1pYTY0LWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6Ym4taWE2NC5vOjphZXMtaWE2NC5vOjo6c2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vOjo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtaWE2NC1nY2MiLCJnY2M6LW1scDY0IC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LW1scDY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMgTGVnYWN5IEhQVVggOS5YIGNvbmZpZ3MuLi4KImhwdXgtY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVkgLUFlICtFU2xpdCArTzIgLXo6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSFAgTVBFL2lYIGh0dHA6Ly9qYXp6LmV4dGVybmFsLmhwLmNvbS9zcmMvb3BlbnNzbC8KIk1QRS9pWC1nY2MiLAkiZ2NjOi1EX0VORElBTiAtREJOX0RJVjJXIC1PMyAtRF9QT1NJWF9TT1VSQ0UgLURfU09DS0VUX1NPVVJDRSAtSS9TWVNMT0cvUFVCOjoodW5rbm93bik6TVBFOi1ML1NZU0xPRy9QVUIgLWxzeXNsb2cgLWxzb2NrZXQgLWxjdXJzZXM6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6OiIsCgojIERFQyBBbHBoYSBPU0YvMS9UcnU2NCB0YXJnZXRzLgojCiMJIldoYXQncyBpbiBhIG5hbWU/IFRoYXQgd2hpY2ggd2UgY2FsbCBhIHJvc2UKIwkgQnkgYW55IG90aGVyIHdvcmQgd291bGQgc21lbGwgYXMgc3dlZXQuIgojCiMgLSBXaWxsaWFtIFNoYWtlc3BlYXJlLCAiUm9tZW8gJiBKdWxpZXQiLCBBY3QgSUksIHNjZW5lIElJLgojCiMgRm9yIGdjYywgdGhlIGZvbGxvd2luZyBnYXZlIGEgJTUwIHNwZWVkdXAgb24gYSAxNjQgb3ZlciB0aGUgJ0RFU19JTlQnIHZlcnNpb24KIwoib3NmMS1hbHBoYS1nY2MiLCAiZ2NjOi1PMzo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKIm9zZjEtYWxwaGEtY2MiLCAgImNjOi1zdGQxIC10dW5lIGhvc3QgLU80IC1yZWFkb25seV9zdHJpbmdzOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke25vX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke25vX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCgojIyMjCiMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQojIyMjCiMgKi1nZW5lcmljKiBpcyBlbmRpYW4tbmV1dHJhbCB0YXJnZXQsIGJ1dCAuL2NvbmZpZyBpcyBmcmVlIHRvCiMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRlLi4uCiJsaW51eC1nZW5lcmljMzIiLCJnY2M6LURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtcHBjIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDo6bGludXhfcHBjMzIubzo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfb3V0X2FzbX0iLAojIyMjCiJsaW51eC1nZW5lcmljNjQiLCJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLWJwb3dlcnBjNjQtbGludXggaXMgdHJhbnNpZW50IG9wdGlvbiwgLW02NCBzaG91bGQgYmUgdGhlIG9uZSB0byB1c2UuLi4KImxpbnV4LXBwYzY0IiwJImdjYzotYnBvd2VycGM2NC1saW51eCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOjpsaW51eF9wcGM2NC5vOjo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotYnBvd2VycGM2NC1saW51eDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbCAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgQkZfUFRSMiBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgU1BBUkMgTGludXggc2V0dXBzCiMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CiMgYXNzaXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgoibGludXgtc3BhcmN2OCIsImdjYzotbXY4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIGl0J3MgYSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0CiMgLVdhLC1BdjhwbHVzIHNob3VsZCBkbyB0aGUgdHJpY2sgbm8gbWF0dGVyIHdoYXQuCiJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjhwbHVzLm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86OjptZDUtc3BhcmN2OHBsdXMubzo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfSIsCgojIyMjICpCU0QgW2RvIHNlZSBjb21tZW50IGFib3V0ICR7QlNEdGhyZWFkc30gYWJvdmUhXQoiQlNELWdlbmVyaWMzMiIsImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLUJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGwgLWc6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXNwYXJjdjgiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtbXY4IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjkubzo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2XzY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLURNRDMyX1JFR19UPWludCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiYnNkaS1lbGYtZ2NjIiwgICAgICJnY2M6LURQRVJMNSAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIm5leHRzdGVwIiwJImNjOi1PIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJuZXh0c3RlcDMuMyIsCSJjYzotTzMgLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgTkNSIE1QLVJBUyBVTklYIHZlciAwMi4wMy4wMQoibmNyLXNjZGUiLCJjYzotTzYgLVhhIC1Ib2ZmPUJFSEFWRUQgLTY4NiAtSHdpZGUgLUhpdzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbCAtbGM4OToke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBRTlgKInFueDQiLAkiY2M6LURMX0VORElBTiAtRFRFUk1JTzo6KHVua25vd24pOjo6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIsCiJxbng2IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU9TOjoodW5rbm93bik6Oi1sc29ja2V0OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoKIyMjIyBTQ08vQ2FsZGVyYSB0YXJnZXRzLgojCiMgT3JpZ2luYWxseSB3ZSBoYWQgbGlrZSB1bml4d2FyZS0qLCB1bml4d2FyZS0qLXBlbnRpdW0sIHVuaXh3YXJlLSotcDYsIGV0Yy4KIyBOb3cgd2Ugb25seSBoYXZlIGJsZW5kZWQgdW5peHdhcmUtKiBhcyBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IC4vY29uZmlnLgojIElmIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLCBieXBhc3MgLi9jb25maWcKIyBhbmQgJy4vQ29uZmlndXJlIHVuaXh3YXJlLTcgLUtwZW50aXVtX3Bybycgb3Igd2hhdGV2ZXIgYXBwcm9wcmlhdGUuCiMgTm90ZSB0aGF0IG5vdCBhbGwgdGFyZ2V0cyBpbmNsdWRlIGFzc2VtYmxlciBzdXBwb3J0LiBNb3N0bHkgYmVjYXVzZSBvZgojIGxhY2sgb2YgbW90aXZhdGlvbiB0byBzdXBwb3J0IG91dC1vZi1kYXRlIHBsYXRmb3JtcyB3aXRoIG91dC1vZi1kYXRlCiMgY29tcGlsZXIgZHJpdmVycyBhbmQgYXNzZW1ibGVycy4gVGltIFJpY2UgPHRpbUBtdWx0aXRhbGVudHMubmV0PiBoYXMKIyBwYXRpZW50bHkgYXNzaXN0ZWQgdG8gZGVidWcgbW9zdCBvZiBpdC4KIwojIFVuaXhXYXJlIDIuMHggZmFpbHMgZGVzdGVzdCB3aXRoIC1PLgoidW5peHdhcmUtMi4wIiwiY2M6LURGSUxJT19IIC1ETk9fU1RSSU5HU19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS0yLjEiLCJjYzotTyAtREZJTElPX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTciLCJjYzotTyAtREZJTElPX0ggLUthbGxvY2E6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInVuaXh3YXJlLTctZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURGSUxJT19IIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246Z251LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIFNDTyA1IC0gQmVuIExhdXJpZSA8YmVuQGFsZ3JvdXAuY28udWs+IHNheXMgdGhlIC1PIGJyZWFrcyB0aGUgU0NPIGNjLgoic2NvNS1jYyIsICAiY2M6LWJlbGY6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzY281LWdjYyIsICAiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSUJNJ3MgQUlYLgoiYWl4My1jYyIsICAiY2M6LU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OjoiLAoiYWl4LWdjYyIsICAiZ2NjOi1PIC1EQl9FTkRJQU46Oi1EX1RIUkVBRF9TQUZFOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OmFpeF9wcGMzMi5vOjo6Ojo6Ojo6OmRsZmNuOiIsCiMgQmVsb3cgdGFyZ2V0cyBhc3N1bWUgQUlYIDUuIElkZWEgaXMgdG8gZWZmZWN0aXZlbHkgZGlzcmVnYXJkICRPQkpFQ1RfTU9ERQojIGF0IGJ1aWxkIHRpbWUuICRPQkpFQ1RfTU9ERSBpcyByZXNwZWN0ZWQgYXQgLi9jb25maWcgc3RhZ2UhCiJhaXgtY2MiLCAgICJjYzotcTMyIC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQ6Oi1xdGhyZWFkZWQ6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6YWl4X3BwYzMyLm86Ojo6Ojo6Ojo6ZGxmY246YWl4LXNoYXJlZDo6LXEzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOjphaXhfcHBjNjQubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotcTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCA2NCIsCgojCiMgQ3JheSBUOTAgYW5kIHNpbWlsYXIgKFNEU0MpCiMgSXQncyBCaWctZW5kaWFuLCBidXQgdGhlIGFsZ29yaXRobXMgd29yayBwcm9wZXJseSB3aGVuIEJfRU5ESUFOIGlzIE5PVAojIGRlZmluZWQuICBUaGUgVDkwIGludHMgYW5kIGxvbmdzIGFyZSA4IGJ5dGVzIGxvbmcsIGFuZCBhcHBhcmVudGx5IHRoZQojIEJfRU5ESUFOIGNvZGUgYXNzdW1lcyA0IGJ5dGUgaW50cy4gIEZvcnR1bmF0ZWx5LCB0aGUgbm9uLUJfRU5ESUFOIGFuZAojIG5vbiBMX0VORElBTiBjb2RlIGFsaWducyB0aGUgYnl0ZXMgaW4gZWFjaCB3b3JkIGNvcnJlY3RseS4KIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSBpcyB0byBhdm9pZCB0d28gZmF0YWwgY29tcGlsZXIgZXJyb3JzOgojJ1Rha2luZyB0aGUgYWRkcmVzcyBvZiBhIGJpdCBmaWVsZCBpcyBub3QgYWxsb3dlZC4gJwojJ0FuIGV4cHJlc3Npb24gd2l0aCBiaXQgZmllbGQgZXhpc3RzIGFzIHRoZSBvcGVyYW5kIG9mICJzaXplb2YiICcKIyAod3JpdHRlbiBieSBXYXluZSBTY2hyb2VkZXIgPHNjaHJvZWRlQFNEU0MuRURVPikKIwojIGo5MCBpcyBjb25zaWRlcmVkIHRoZSBiYXNlIG1hY2hpbmUgdHlwZSBmb3IgdW5pY29zIG1hY2hpbmVzLAojIHNvIHRoaXMgY29uZmlndXJhdGlvbiBpcyBub3cgY2FsbGVkICJjcmF5LWo5MCIgLi4uCiJjcmF5LWo5MCIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgREVTX0lOVDo6OiIsCgojCiMgQ3JheSBUM0UgKFJlc2VhcmNoIENlbnRlciBKdWVsaWNoLCBiZWNrbWFuQGFjbC5sYW5sLmdvdikKIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSB3YXMgd3JpdHRlbiBmb3IgdGhlIEM5MCAoaXQgc2VlbXMpLiAgSSBhZGRlZAojIGFub3RoZXIgdXNlLiAgQmFzaWNhbGx5LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBUM0UgdXNlcyBzb21lIGJpdCBmaWVsZHMKIyBmb3Igc29tZSBzdF9hZGRyIHN0dWZmLCBhbmQgdGhlbiBzaXplb2YgYW5kIGFkZHJlc3Mtb2YgZmFpbHMKIyBJIGNvdWxkIG5vdCB1c2UgdGhlIGFtcy9hbHBoYS5vIG9wdGlvbiBiZWNhdXNlIHRoZSBDcmF5IGFzc2VtYmxlciwgJ2NhbScKIyBkaWQgbm90IGxpa2UgaXQuCiJjcmF5LXQzZSIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6OjoiLAoKIyBER1VYLCA4ODEwMC4KImRndXgtUjMtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC14ODYtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoKIyBTaW5peC9SZWxpYW50VU5JWCBSTTQwMAojIE5PVEU6IFRoZSBDRFMrKyBDb21waWxlciB1cCB0byBWMi4wQnNvbWV0aGluZyBoYXMgdGhlIElSSVhfQ0NfQlVHIG9wdGltaXplciBwcm9ibGVtLiBCZXR0ZXIgdXNlIC1nICAqLwoiUmVsaWFudFVOSVgiLCJjYzotS1BJQyAtZyAtRFRFUk1JT1MgLURCX0VORElBTjo6LUt0aHJlYWQ6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOkJOX0xMT05HIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpyZWxpYW50dW5peC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJTSU5JWCIsImNjOi1POjoodW5rbm93bik6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCiJTSU5JWC1OIiwiL3Vzci91Y2IvY2M6LU8yIC1taXNhbGlnbmVkOjoodW5rbm93bik6Oi1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCgojIFNJRU1FTlMgQlMyMDAwL09TRDogYW4gRUJDRElDLWJhc2VkIG1haW5mcmFtZQoiQlMyMDAwLU9TRCIsImM4OTotTyAtWExMTUwgLVhMTE1LIC1YTCAtREJfRU5ESUFOIC1EVEVSTUlPUyAtRENIQVJTRVRfRUJDRElDOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgT1MvMzkwIFVuaXggYW4gRUJDRElDLWJhc2VkIFVuaXggc3lzdGVtIG9uIElCTSBtYWluZnJhbWUKIyBZb3UgbmVlZCB0byBjb21waWxlIHVzaW5nIHRoZSBjODkuc2ggd3JhcHBlciBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZQojIElCTSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSAtTCBzd2l0Y2ggYWZ0ZXIgYW55IG9iamVjdCBtb2R1bGVzLgojCiJPUzM5MC1Vbml4IiwiYzg5LnNoOi1PIC1EQl9FTkRJQU4gLURDSEFSU0VUX0VCQ0RJQyAtRE5PX1NZU19QQVJBTV9IICAtRF9BTExfU09VUkNFOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIFdpbjY0IHRhcmdldHMsIFdJTjY0SSBkZW5vdGVzIElBLTY0IGFuZCBXSU42NEEgLSBBTUQ2NAoiVkMtV0lONjRJIiwiY2w6Ojo6V0lONjRJOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDo6OjpXSU42NEE6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKCiMgVmlzdWFsIEMgdGFyZ2V0cwoiVkMtTlQiLCJjbDo6OjpXSU5OVDo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1DRSIsImNsOjo6OldJTkNFOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKIlZDLVdJTjMyIiwiY2w6Ojo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoKIyBCb3JsYW5kIEMrKyA0LjUKIkJDLTMyIiwiYmNjMzI6Ojo6V0lOMzI6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKCiMgTWluR1cKIm1pbmd3IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbCAtRF9XSU4zMl9XSU5OVD0weDMzMzo6Ok1JTkdXMzI6LWx3c29jazMyIC1sZ2RpMzI6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9IEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfY29mZl9hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMIC1ET1BFTlNTTF9VU0VfQVBQTElOSzotbW5vLWN5Z3dpbiAtc2hhcmVkOi5kbGwuYSIsCgojIFVXSU4gCiJVV0lOIiwgImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1PIC1XYWxsOjo6VVdJTjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEN5Z3dpbgoiQ3lnd2luLXByZTEuMyIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6OjpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2NvZmZfYXNtfTpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCiJkZWJ1Zy1DeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6OkNZR1dJTjMyOjo6JHtub19hc219OmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKCiMgTmV0V2FyZSBmcm9tIERhdmlkIFdhcmQgKGRzd2FyZEBub3ZlbGwuY29tKSAtIHJlcXVpcmVzIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzCiMgbmV0d2FyZS1jbGliID0+IGxlZ2FjeSBDTGliIGMtcnVudGltZSBzdXBwb3J0CiJuZXR3YXJlLWNsaWIiLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIyBuZXR3YXJlLWxpYmMgPT4gTGliQy9OS1Mgc3VwcG9ydAojIE5ldFdhcmUgZGVmYXVsdHMgc29ja2V0IGJpbyB0byBXaW5Tb2NrIHNvY2tldHMuIEhvd2V2ZXIsIHRoZSBMaWJDIGJ1aWxkIGNhbiBiZQojIGNvbmZpZ3VyZWQgdG8gdXNlIEJTRCBzb2NrZXRzIGluc3RlYWQuCiJuZXR3YXJlLWxpYmMiLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1ic2Rzb2NrIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLUkvbmRrL2xpYmMvaW5jbHVkZS93aW5zb2NrIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKCiMgREpHUFAKIkRKR1BQIiwgImdjYzotSS9kZXYvZW52L1dBVFRfUk9PVC9pbmMgLURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8yIC1XYWxsOjo6TVNET1M6LUwvZGV2L2Vudi9XQVRUX1JPT1QvbGliIC1sd2F0dDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfb3V0X2FzbX06IiwKCiMgVWx0cml4IGZyb20gQmVybmhhcmQgU2ltb24gPHNpbW9uQHppZC50dXdpZW4uYWMuYXQ+CiJ1bHRyaXgtY2MiLCJjYzotc3RkMSAtTyAtT2xpbWl0IDI1MDAgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCiJ1bHRyaXgtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OjoiLAojIEsmUiBDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHlvdSBuZWVkIGdjYyBvbiBvbGQgVWx0cml4IGluc3RhbGxhdGlvbnMKIyMidWx0cml4IiwiY2M6LU8yIC1ETk9QUk9UTyAtRE5PQ09OU1QgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCgojIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAoicmhhcHNvZHktcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oih1bmtub3duKTpNQUNPU1hfUkhBUFNPRFk6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06OiIsCiJkYXJ3aW4tcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3Q6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpvc3hfcHBjMzIubzo6Ojo6Ojo6Ojo6ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLWNvbW1vbiAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OjpkYXJ3aW4tc2hhcmVkOi1mUElDOi1kdW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpvc3hfcHBjMzIubzo6Ojo6Ojo6Ojo6ZGFyd2luLXNoYXJlZDotZlBJQzotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1taXBzbGUiLCJjY21pcHM6LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRExfRU5ESUFOIC1FTCAtV2wsLUVMIC1taXBzMiAtbW5vLWJyYW5jaC1saWtlbHkgLUcgMCAtZm5vLWJ1aWx0aW4gLW1zb2Z0LWZsb2F0IC1EQ1BVPU1JUFMzMiAtRE1JUFNFTCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIKCQkgICAgQkMtMzIgT1MyLUVNWCBuZXR3YXJlLWNsaWIgbmV0d2FyZS1saWJjIG5ldHdhcmUtbGliYy1ic2Rzb2NrKTsKCm15ICRpZHggPSAwOwpteSAkaWR4X2NjID0gJGlkeCsrOwpteSAkaWR4X2NmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF91bmlzdGQgPSAkaWR4Kys7Cm15ICRpZHhfdGhyZWFkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3N5c19pZCA9ICRpZHgrKzsKbXkgJGlkeF9sZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfYm5fb3BzID0gJGlkeCsrOwpteSAkaWR4X2NwdWlkX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Rzb19zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX3RhcmdldCA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2xkZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfZXh0ZW5zaW9uID0gJGlkeCsrOwpteSAkaWR4X3JhbmxpYiA9ICRpZHgrKzsKbXkgJGlkeF9hcmZsYWdzID0gJGlkeCsrOwoKbXkgJHByZWZpeD0iIjsKbXkgJG9wZW5zc2xkaXI9IiI7Cm15ICRleGVfZXh0PSIiOwpteSAkaW5zdGFsbF9wcmVmaXg9IiI7Cm15ICRub190aHJlYWRzPTA7Cm15ICR0aHJlYWRzPTA7Cm15ICRub19zaGFyZWQ9MDsgIyBidXQgIm5vLXNoYXJlZCIgaXMgZGVmYXVsdApteSAkemxpYj0xOyAgICAgICMgYnV0ICJuby16bGliIiBpcyBkZWZhdWx0Cm15ICRub19rcmI1PTA7ICAgIyBidXQgIm5vLWtyYjUiIGlzIGltcGxpZWQgdW5sZXNzICItLXdpdGgta3JiNS0uLi4iIGlzIHVzZWQKbXkgJG5vX2FzbT0wOwpteSAkbm9fZHNvPTA7Cm15ICRub19nbXA9MDsKbXkgQHNraXA9KCk7Cm15ICRNYWtlZmlsZT0iTWFrZWZpbGUiOwpteSAkZGVzX2xvY2w9ImNyeXB0by9kZXMvZGVzX2xvY2wuaCI7Cm15ICRkZXMJPSJjcnlwdG8vZGVzL2Rlcy5oIjsKbXkgJGJuCT0iY3J5cHRvL2JuL2JuLmgiOwpteSAkbWQyCT0iY3J5cHRvL21kMi9tZDIuaCI7Cm15ICRyYzQJPSJjcnlwdG8vcmM0L3JjNC5oIjsKbXkgJHJjNF9sb2NsPSJjcnlwdG8vcmM0L3JjNF9sb2NsLmgiOwpteSAkaWRlYQk9ImNyeXB0by9pZGVhL2lkZWEuaCI7Cm15ICRyYzIJPSJjcnlwdG8vcmMyL3JjMi5oIjsKbXkgJGJmCT0iY3J5cHRvL2JmL2JmX2xvY2wuaCI7Cm15ICRibl9hc20JPSJibl9hc20ubyI7Cm15ICRkZXNfZW5jPSJkZXNfZW5jLm8gZmNyeXB0X2IubyI7Cm15ICRhZXNfZW5jPSJhZXNfY29yZS5vIGFlc19jYmMubyI7Cm15ICRiZl9lbmMJPSJiZl9lbmMubyI7Cm15ICRjYXN0X2VuYz0iY19lbmMubyI7Cm15ICRyYzRfZW5jPSJyYzRfZW5jLm8iOwpteSAkcmM1X2VuYz0icmM1X2VuYy5vIjsKbXkgJG1kNV9vYmo9IiI7Cm15ICRzaGExX29iaj0iIjsKbXkgJHJtZDE2MF9vYmo9IiI7Cm15ICRwcm9jZXNzb3I9IiI7Cm15ICRkZWZhdWx0X3JhbmxpYjsKbXkgJHBlcmw7CgoKIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKCm15ICVkaXNhYmxlZCA9ICggIyAid2hhdCIgICAgICAgICA9PiAiY29tbWVudCIKCQkgImdtcCIJCSAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJtZGMyIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJyYzUiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJzaGFyZWQiICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliLWR5bmFtaWMiICAgPT4gImRlZmF1bHQiCiAgICAgICAgICAgICAgICk7CgojIEFkZGl0aW9uYWwgIm5vLS4uLiIgb3B0aW9ucyB3aWxsIGJlIGNvbGxlY3RlZCBpbiAlZGlzYWJsZWQuCiMgVG8gcmVtb3ZlIHNvbWV0aGluZyBmcm9tICVkaXNhYmxlZCwgdXNlIGUuZy4gImVuYWJsZS1yYzUiLgojIEZvciBzeW1tZXRyeSwgImRpc2FibGUtLi4uIiBpcyBhIHN5bm9ueW0gZm9yICJuby0uLi4iLgoKIyBUaGlzIGlzIHdoYXQgJGRlcGZsYWdzIHdpbGwgbG9vayBsaWtlIHdpdGggdGhlIGFib3ZlIGRlZmF1bHQ6Cm15ICRkZWZhdWx0X2RlcGZsYWdzID0gIi1ET1BFTlNTTF9OT19HTVAgLURPUEVOU1NMX05PX01EQzIgLURPUEVOU1NMX05PX1JDNSAiOwoKCm15ICRub19zc2UyPTA7CgomdXNhZ2UgaWYgKCQjQVJHViA8IDApOwoKbXkgJGZsYWdzOwpteSAkZGVwZmxhZ3M7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcz0iIjsKCSRsaWJzPSIiOwoJJHRhcmdldD0iIjsKCSRvcHRpb25zPSIiOwoJJHN5bWxpbms9MTsKCgkkYXJndl91bnByb2Nlc3NlZD0wOwoJJGFyZ3ZzdHJpbmc9am9pbignICcsQGFyZ3Zjb3B5KTsKClBST0NFU1NfQVJHUzoKCWZvcmVhY2ggKEBhcmd2Y29weSkKCQl7CgkJcyAvXi1uby0vbm8tLzsgIyBzb21lIHBlb3BsZSBqdXN0IGNhbid0IHJlYWQgdGhlIGluc3RydWN0aW9ucwoKCQkjIHJld3JpdGUgc29tZSBvcHRpb25zIGluICJlbmFibGUtLi4uIiBmb3JtCgkJcyAvXi0/LT9zaGFyZWQkL2VuYWJsZS1zaGFyZWQvOwoJCXMgL150aHJlYWRzJC9lbmFibGUtdGhyZWFkcy87CgkJcyAvXnpsaWIkL2VuYWJsZS16bGliLzsKCQlzIC9eemxpYi1keW5hbWljJC9lbmFibGUtemxpYi1keW5hbWljLzsKCgkJaWYgKC9ebm8tKC4rKSQvIHx8IC9eZGlzYWJsZS0oLispJC8pCgkJCXsKCQkJaWYgKCQxIGVxICJzc2wiKQoJCQkJewoJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJJGRpc2FibGVkeyJzc2wzIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJfQoJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQl7CgkJCQkkZGlzYWJsZWR7InRsczEifSA9ICJvcHRpb24odGxzKSIKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQkJJGRpc2FibGVkeyQxfSA9ICJvcHRpb24iOwoJCQkJfQoJCQl9CQkJCgkJZWxzaWYgKC9eZW5hYmxlLSguKykkLykKCQkJewoJCQlkZWxldGUgJGRpc2FibGVkeyQxfTsKCgkJCSR0aHJlYWRzID0gMSBpZiAoJDEgZXEgInRocmVhZHMiKTsKCQkJfQoJCWVsc2lmICgvXi0tdGVzdC1zYW5pdHkkLykKCQkJewoJCQlleGl0KCZ0ZXN0X3Nhbml0eSgpKTsKCQkJfQoJCWVsc2lmICgvXnJlY29uZmlndXJlLyB8fCAvXnJlY29uZi8pCgkJCXsKCQkJaWYgKG9wZW4oSU4sIjwkTWFrZWZpbGUiKSkKCQkJCXsKCQkJCXdoaWxlICg8SU4+KQoJCQkJCXsKCQkJCQljaG9wOwoJCQkJCWlmICgvXkNPTkZJR1VSRV9BUkdTPSguKikvKQoJCQkJCQl7CgkJCQkJCSRhcmd2c3RyaW5nPSQxOwoJCQkJCQlAYXJndmNvcHk9c3BsaXQoJyAnLCRhcmd2c3RyaW5nKTsKCQkJCQkJZGllICJJbmNvcnJlY3QgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiIKCQkJCQkJCWlmIChncmVwKC9ecmVjb25mLyxAYXJndmNvcHkpKTsKCQkJCQkJcHJpbnQgIlJlY29uZmlndXJpbmcgd2l0aDogJGFyZ3ZzdHJpbmdcbiI7CgkJCQkJCSRhcmd2X3VucHJvY2Vzc2VkPTE7CgkJCQkJCWNsb3NlKElOKTsKCQkJCQkJbGFzdCBQUk9DRVNTX0FSR1M7CgkJCQkJCX0KCQkJCQl9CgkJCQljbG9zZShJTik7CgkJCQl9CgkJCWRpZSAiSW5zdWZmaWNpZW50IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iOwoJCQl9CgkJZWxzaWYgKC9eMzg2JC8pCgkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXlstK10vKQoJCQl7CgkJCWlmICgvXi1bbExdKC4qKSQvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLVteLV0vIG9yIC9eXCsvKQoJCQkJewoJCQkJJGZsYWdzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi0tcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRwcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tb3BlbnNzbGRpcj0oLiopJC8pCgkJCQl7CgkJCQkkb3BlbnNzbGRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1rcmI1LShkaXJ8bGlifGluY2x1ZGV8Zmxhdm9yKT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7ImtyYjUtIi4kMX09JDI7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXByaW50IFNUREVSUiAkdXNhZ2U7CgkJCQlleGl0KDEpOwoJCQkJfQoJCQl9CgkJZWxzaWYgKCRfID1+IC9eKFteOl0rKTooLispJC8pCgkJCXsKCQkJZXZhbCAiXCR0YWJsZXtcJDF9ID0gXCIkMlwiIjsgIyBhbGxvdyAkeHh4IGNvbnN0cnVjdHMgaW4gdGhlIHN0cmluZwoJCQkkdGFyZ2V0PSQxOwoJCQl9CgkJZWxzZQoJCQl7CgkJCWRpZSAidGFyZ2V0IGFscmVhZHkgZGVmaW5lZCAtICR0YXJnZXQgKG9mZmVuZGluZyBhcmc6ICRfKVxuIiBpZiAoJHRhcmdldCBuZSAiIik7CgkJCSR0YXJnZXQ9JF87CgkJCX0KCgkJdW5sZXNzICgkXyBlcSAkdGFyZ2V0IHx8IC9ebm8tLyB8fCAvXmRpc2FibGUtLykKCQkJewoJCQkjICJuby0uLi4iIGZvbGxvd3MgbGF0ZXIgYWZ0ZXIgaW1wbGllZCBkaXNhY3RpdmF0aW9ucwoJCQkjIGhhdmUgYmVlbiBkZXJpdmVkLiAgKERvbid0IHRha2UgdGhpcyB0b28gc2Vyb2l1c2x5LAoJCQkjIHdlIHJlYWxseSBvbmx5IHdyaXRlIE9QVElPTlMgdG8gdGhlIE1ha2VmaWxlIG91dCBvZgoJCQkjIG5vc3RhbGdpYS4pCgoJCQlpZiAoJG9wdGlvbnMgZXEgIiIpCgkJCQl7ICRvcHRpb25zID0gJF87IH0KCQkJZWxzZQoJCQkJeyAkb3B0aW9ucyAuPSAiICIuJF87IH0KCQkJfQoJCX0KCX0KCgoKaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpCgl7CgkkZGlzYWJsZWR7InNzZTIifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSkgfHwgJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9IGVxICIiKQoJewoJJGRpc2FibGVkeyJrcmI1In0gPSAia3JiNS1mbGF2b3Igbm90IHNwZWNpZmllZCI7Cgl9CgppZiAoIWRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgl7CgkjICJ6bGliLWR5bmFtaWMiIHdhcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCwgc28gZW5hYmxlICJ6bGliIgoJZGVsZXRlICRkaXNhYmxlZHsiemxpYiJ9OwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJyaWpuZGFlbCJ9KSkKCXsKCSRkaXNhYmxlZHsiYWVzIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJkZXMifSkpCgl7CgkkZGlzYWJsZWR7Im1kYzIifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pKQoJewoJJGRpc2FibGVkeyJlY2RzYSJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7ImVjZGgifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMi4wIHJlcXVpcmVzIE1ENSBhbmQgUlNBCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkpCgl7CgkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMy4wIGFuZCBUTFMgcmVxdWlyZXMgTUQ1IGFuZCBTSEEgYW5kIGVpdGhlciBSU0Egb3IgRFNBK0RICmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJzaGEifSkKICAgIHx8IChkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pCiAgICAgICAgJiYgKGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKSkpCgl7CgkkZGlzYWJsZWR7InNzbDMifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJ0bHMxIn0gPSAiZm9yY2VkIjsKCX0KCgppZiAoJHRhcmdldCBlcSAiVEFCTEUiKSB7Cglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludF90YWJsZV9lbnRyeSgkdGFyZ2V0KTsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgZXEgIkxJU1QiKSB7Cglmb3JlYWNoIChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnQ7CgkJcHJpbnQgIlxuIjsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7CgkkdGFyZ2V0ID0gIkN5Z3dpbiIuJDE7Cn0KCnByaW50ICJDb25maWd1cmluZyBmb3IgJHRhcmdldFxuIjsKCiZ1c2FnZSBpZiAoIWRlZmluZWQoJHRhYmxleyR0YXJnZXR9KSk7CgoKZm9yZWFjaCAoc29ydCAoa2V5cyAlZGlzYWJsZWQpKQoJewoJJG9wdGlvbnMgLj0gIiBuby0kXyI7CgoJcHJpbnRmICIgICAgbm8tJS0xMnMgJS0xMHMiLCAkXywgIlskZGlzYWJsZWR7JF99XSI7CgoJaWYgKC9eZHNvJC8pCgkJeyAkbm9fZHNvID0gMTsgfQoJZWxzaWYgKC9edGhyZWFkcyQvKQoJCXsgJG5vX3RocmVhZHMgPSAxOyB9CgllbHNpZiAoL15zaGFyZWQkLykKCQl7ICRub19zaGFyZWQgPSAxOyB9CgllbHNpZiAoL156bGliJC8pCgkJeyAkemxpYiA9IDA7IH0KCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCXsgfQoJZWxzaWYgKC9ec3ltbGlua3MkLykKCQl7ICRzeW1saW5rID0gMDsgfQoJZWxzaWYgKC9ec3NlMiQvKQoJCXsgJG5vX3NzZTIgPSAxOyB9CgllbHNlCgkJewoJCW15ICgkQUxHTywgJGFsZ28pOwoJCSgkQUxHTyA9ICRhbGdvID0gJF8pID1+IHRyL1thLXpdL1tBLVpdLzsKCgkJaWYgKC9eYXNtJC8gfHwgL15lcnIkLyB8fCAvXmh3JC8gfHwgL15ody0vKQoJCQl7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCQkKCQkJaWYgKC9eZXJyJC8pCXsgJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRVJSICI7IH0KCQkJZWxzaWYgKC9eYXNtJC8pCXsgJG5vX2FzbSA9IDE7IH0KCQkJfQoJCWVsc2UKCQkJewoJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoKCQkJaWYgKC9ea3JiNSQvKQoJCQkJeyAkbm9fa3JiNSA9IDE7IH0KCQkJZWxzZQoJCQkJewoJCQkJcHVzaCBAc2tpcCwgJGFsZ287CgkJCQlwcmludCAiIChza2lwIGRpcikiOwoKCQkJCSRkZXBmbGFncyAuPSItRE9QRU5TU0xfTk9fJEFMR08gIjsKCQkJCX0KCQkJfQoJCX0KCglwcmludCAiXG4iOwoJfQoKCm15ICRJc01LMU1GPXNjYWxhciBncmVwIC9eJHRhcmdldCQvLEBNSzFNRl9CdWlsZHM7CgokSXNNSzFNRj0xIGlmICgkdGFyZ2V0IGVxICJtaW5ndyIgJiYgJF5PIG5lICJjeWd3aW4iKTsKCiRleGVfZXh0PSIuZXhlIiBpZiAoJHRhcmdldCBlcSAiQ3lnd2luIiB8fCAkdGFyZ2V0IGVxICJESkdQUCIgfHwgJHRhcmdldCBlcSAibWluZ3ciKTsKJGV4ZV9leHQ9Ii5wbSIgIGlmICgkdGFyZ2V0ID1+IC92b3MvKTsKJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsIiBpZiAoJG9wZW5zc2xkaXIgZXEgIiIgYW5kICRwcmVmaXggZXEgIiIpOwokcHJlZml4PSRvcGVuc3NsZGlyIGlmICRwcmVmaXggZXEgIiI7CgokZGVmYXVsdF9yYW5saWI9ICZ3aGljaCgicmFubGliIikgb3IgJGRlZmF1bHRfcmFubGliPSJ0cnVlIjsKJHBlcmw9JEVOVnsnUEVSTCd9IG9yICRwZXJsPSZ3aGljaCgicGVybDUiKSBvciAkcGVybD0md2hpY2goInBlcmwiKQogIG9yICRwZXJsPSJwZXJsIjsKCmNob3AgJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgPX4gL1wvJC87CmNob3AgJHByZWZpeCBpZiAkcHJlZml4ID1+IC9cLyQvOwoKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvc3NsIiBpZiAkb3BlbnNzbGRpciBlcSAiIjsKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5bYS16QS1aXTpbXFxcL10pLzsKCgpwcmludCAiSXNNSzFNRj0kSXNNSzFNRlxuIjsKCm15IEBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7Cm15ICRjYyA9ICRmaWVsZHNbJGlkeF9jY107Cm15ICRjZmxhZ3MgPSAkZmllbGRzWyRpZHhfY2ZsYWdzXTsKbXkgJHVuaXN0ZCA9ICRmaWVsZHNbJGlkeF91bmlzdGRdOwpteSAkdGhyZWFkX2NmbGFnID0gJGZpZWxkc1skaWR4X3RocmVhZF9jZmxhZ107Cm15ICRzeXNfaWQgPSAkZmllbGRzWyRpZHhfc3lzX2lkXTsKbXkgJGxmbGFncyA9ICRmaWVsZHNbJGlkeF9sZmxhZ3NdOwpteSAkYm5fb3BzID0gJGZpZWxkc1skaWR4X2JuX29wc107Cm15ICRjcHVpZF9vYmogPSAkZmllbGRzWyRpZHhfY3B1aWRfb2JqXTsKbXkgJGJuX29iaiA9ICRmaWVsZHNbJGlkeF9ibl9vYmpdOwpteSAkZGVzX29iaiA9ICRmaWVsZHNbJGlkeF9kZXNfb2JqXTsKbXkgJGFlc19vYmogPSAkZmllbGRzWyRpZHhfYWVzX29ial07Cm15ICRiZl9vYmogPSAkZmllbGRzWyRpZHhfYmZfb2JqXTsKbXkgJG1kNV9vYmogPSAkZmllbGRzWyRpZHhfbWQ1X29ial07Cm15ICRzaGExX29iaiA9ICRmaWVsZHNbJGlkeF9zaGExX29ial07Cm15ICRjYXN0X29iaiA9ICRmaWVsZHNbJGlkeF9jYXN0X29ial07Cm15ICRyYzRfb2JqID0gJGZpZWxkc1skaWR4X3JjNF9vYmpdOwpteSAkcm1kMTYwX29iaiA9ICRmaWVsZHNbJGlkeF9ybWQxNjBfb2JqXTsKbXkgJHJjNV9vYmogPSAkZmllbGRzWyRpZHhfcmM1X29ial07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyZmxhZ3MgPSAkZmllbGRzWyRpZHhfYXJmbGFnc107CgpteSAkbm9fc2hhcmVkX3dhcm49MDsKbXkgJG5vX3VzZXJfY2ZsYWdzPTA7CgppZiAoJGZsYWdzIG5lICIiKQl7ICRjZmxhZ3M9IiRmbGFncyRjZmxhZ3MiOyB9CmVsc2UJCQl7ICRub191c2VyX2NmbGFncz0xOyAgICAgICB9CgojIEtlcmJlcm9zIHNldHRpbmdzLiAgVGhlIGZsYXZvciBtdXN0IGJlIHByb3ZpZGVkIGZyb20gb3V0c2lkZSwgZWl0aGVyIHRocm91Z2gKIyB0aGUgc2NyaXB0ICJjb25maWciIG9yIG1hbnVhbGx5LgppZiAoISRub19rcmI1KQoJewoJbXkgKCRscmVzb2x2LCAkbHBhdGgsICRsZXh0KTsKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bSGhdZWltZGFsJC8pCgkJewoJCWRpZSAiU29ycnksIEhlaW1kYWwgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiI7CgkJfQoJIyMjIyMgSEFDSyB0byBmb3JjZSB1c2Ugb2YgSGVpbWRhbC4KCSMjIyMjIFdBUk5JTkc6IFNpbmNlIHdlIGRvbid0IHJlYWxseSBoYXZlIGFkZXF1YXRlIHN1cHBvcnQgZm9yIEhlaW1kYWwsCgkjIyMjIyAgICAgICAgICB1c2luZyB0aGlzIHdpbGwgYnJlYWsgdGhlIGJ1aWxkLiAgWW91J2xsIGhhdmUgdG8gbWFrZQoJIyMjIyMgICAgICAgICAgY2hhbmdlcyB0byB0aGUgc291cmNlLCBhbmQgaWYgeW91IGRvLCBwbGVhc2Ugc2VuZAoJIyMjIyMgICAgICAgICAgcGF0Y2hlcyB0byBvcGVuc3NsLWRldkBvcGVuc3NsLm9yZwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXmZvcmNlLVtIaF1laW1kYWwkLykKCQl7CgkJd2FybiAiSGVpbWRhbCBpc24ndCByZWFsbHkgc3VwcG9ydGVkLiAgWW91ciBidWlsZCBXSUxMIGJyZWFrXG4iOwoJCXdhcm4gIklmIHlvdSBmaXggdGhlIHByb2JsZW1zLCBwbGVhc2Ugc2VuZCBhIHBhdGNoIHRvIG9wZW5zc2wtZGV2XEBvcGVuc3NsLm9yZ1xuIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9oZWltZGFsIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gZXEgIiI7CgkJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9ID0gIi1MIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uCgkJCSIvbGliIC1sZ3NzYXBpIC1sa3JiNSAtbGNvbV9lcnIiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X0hFSU1EQUwgJGNmbGFncyI7CgkJfQoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltNbV1bSWldW1R0XS8pCgkJewoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2tlcmJlcm9zIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gZXEgIiI7CgkJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9ID0gIi1MIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uCgkJCSIvbGliIC1sZ3NzYXBpX2tyYjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9NSVQgJGNmbGFncyI7CgkJJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IHMvXltNbV1bSWldW1R0XVsuXy1dKi8vOwoJCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL14xWy5fLV0qWzAxXS8pCgkJCXsKCQkJJGNmbGFncz0iLURLUkI1X01JVF9PTEQxMSAkY2ZsYWdzIjsKCQkJfQoJCX0KCUxSRVNPTFY6Cglmb3JlYWNoICRscGF0aCAoIi9saWIiLCAiL3Vzci9saWIiKQoJCXsKCQlmb3JlYWNoICRsZXh0ICgiYSIsICJzbyIpCgkJCXsKCQkJJGxyZXNvbHYgPSAiJGxwYXRoL2xpYnJlc29sdi4kbGV4dCI7CgkJCWxhc3QgTFJFU09MVglpZiAoLXIgIiRscmVzb2x2Iik7CgkJCSRscmVzb2x2ID0gIiI7CgkJCX0KCQl9Cgkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gLj0gIiAtbHJlc29sdiIKCQlpZiAoIiRscmVzb2x2IiBuZSAiIik7Cgkkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9ID0gIi1JIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uIi9pbmNsdWRlIgoJCWlmICR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gZXEgIiIgJiYKCQkgICAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gbmUgIiI7Cgl9CgojIFRoZSBEU08gY29kZSBjdXJyZW50bHkgYWx3YXlzIGltcGxlbWVudHMgYWxsIGZ1bmN0aW9ucyBzbyB0aGF0IG5vCiMgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGF0IGZyb20gYSBjb21waWxhdGlvbiBwb2ludAojIG9mIHZpZXcuIEhvd2V2ZXIsIHRoZSAibWV0aG9kInMgbWF5IHJldHVybiB6ZXJvIHVubGVzcyB0aGF0IHBsYXRmb3JtCiMgaGFzIHN1cHBvcnQgY29tcGlsZWQgaW4gZm9yIHRoZW0uIEN1cnJlbnRseSBlYWNoIG1ldGhvZCBpcyBlbmFibGVkCiMgYnkgYSBkZWZpbmUgIkRTT188bmFtZT4iIC4uLiB3ZSB0cmFuc2xhdGUgdGhlICJkc29fc2NoZW1lIiBjb25maWcKIyBzdHJpbmcgZW50cnkgaW50byB1c2luZyB0aGUgZm9sbG93aW5nIGxvZ2ljOwpteSAkZHNvX2NmbGFnczsKaWYgKCEkbm9fZHNvICYmICRkc29fc2NoZW1lIG5lICIiKQoJewoJJGRzb19zY2hlbWUgPX4gdHIvW2Etel0vW0EtWl0vOwoJaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTiIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIC1ESEFWRV9ETEZDTl9IIjsKCQl9CgllbHNpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOX05PX0giKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiI7CgkJfQoJZWxzZQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT18kZHNvX3NjaGVtZSI7CgkJfQoJJGNmbGFncyA9ICIkZHNvX2NmbGFncyAkY2ZsYWdzIjsKCX0KCm15ICR0aHJlYWRfY2ZsYWdzOwpteSAkdGhyZWFkX2RlZmluZXM7CmlmICgkdGhyZWFkX2NmbGFnIG5lICIodW5rbm93bikiICYmICEkbm9fdGhyZWFkcykKCXsKCSMgSWYgd2Uga25vdyBob3cgdG8gZG8gaXQsIHN1cHBvcnQgdGhyZWFkcyBieSBkZWZhdWx0LgoJJHRocmVhZHMgPSAxOwoJfQppZiAoJHRocmVhZF9jZmxhZyBlcSAiKHVua25vd24pIiAmJiAkdGhyZWFkcykKCXsKCSMgSWYgdGhlIHVzZXIgYXNrZWQgZm9yICJ0aHJlYWRzIiwgW3NdaGUgaXMgYWxzbyBleHBlY3RlZCB0bwoJIyBwcm92aWRlIGFueSBzeXN0ZW0tZGVwZW5kZW50IGNvbXBpbGVyIG9wdGlvbnMgdGhhdCBhcmUKCSMgbmVjZXNzYXJ5LgoJaWYgKCRub191c2VyX2NmbGFncykKCQl7CgkJcHJpbnQgIllvdSBhc2tlZCBmb3IgbXVsdGktdGhyZWFkaW5nIHN1cHBvcnQsIGJ1dCBkaWRuJ3RcbiI7CgkJcHJpbnQgInByb3ZpZGUgYW55IHN5c3RlbS1zcGVjaWZpYyBjb21waWxlciBvcHRpb25zXG4iOwoJCWV4aXQoMSk7CgkJfQoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICRjZmxhZ3MiIDsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7Cgl9CmVsc2UKCXsKCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkdGhyZWFkX2NmbGFnICRjZmxhZ3MiOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKIwlteSAkZGVmOwojCWZvcmVhY2ggJGRlZiAoc3BsaXQgJyAnLCR0aHJlYWRfY2ZsYWcpCiMJCXsKIwkJaWYgKCRkZWYgPX4gcy9eLUQvLyAmJiAkZGVmICF+IC9eXy8pCiMJCQl7CiMJCQkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgJGRlZlxuIjsKIwkJCX0KIwkJfQoJfQkKCiRsZmxhZ3M9IiRsaWJzJGxmbGFncyIgaWYgKCRsaWJzIG5lICIiKTsKCmlmICgkbm9fYXNtKQoJewoJJGNwdWlkX29iaj0kYm5fb2JqPSRkZXNfb2JqPSRhZXNfb2JqPSRiZl9vYmo9JGNhc3Rfb2JqPSRyYzRfb2JqPSRyYzVfb2JqPSIiOwoJJHNoYTFfb2JqPSRtZDVfb2JqPSRybWQxNjBfb2JqPSIiOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQkkbGZsYWdzID0gIiRsZmxhZ3MgLWx6IjsKCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQ7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICgkbm9fc2hhcmVkKQoJewoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCX0KZWxzZQoJewoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19TVEFUSUNfRU5HSU5FXG4iOwoJfQoKJGNwdWlkX29iai49IiB1cGxpbmsubyB1cGxpbmstY29mLm8iIGlmICgkY2ZsYWdzID1+IC9cLURPUEVOU1NMX1VTRV9BUFBMSU5LLyk7CiMgQ29tcGlsZXIgZml4LXVwcwppZiAoJHRhcmdldCA9fiAvaWNjJC8pCgl7CglteSgkaWNjdmVyKT1gJGNjIC1WIDI+JjFgOwoJaWYgKCRpY2N2ZXIgPX4gL1ZlcnNpb24gKFswLTldKylcLi8pCXsgJGljY3Zlcj0kMTsgfQoJZWxzZQkJCQkJeyAkaWNjdmVyPTA7ICB9CglpZiAoJGljY3Zlcj49OCkKCQl7CgkJIyBFbGltaW5hdGUgdW5uZWNlc3NhcnkgZGVwZW5kZW5jeSBmcm9tIGxpYmlyYy5hLiBUaGlzIGlzCgkJIyBlc3NlbnRpYWwgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQsIGFzIG90aGVyd2lzZQoJCSMgYXBwcy9vcGVuc3NsIGNhbiBlbmQgdXAgaW4gZW5kbGVzcyBsb29wIHVwb24gc3RhcnR1cC4uLgoJCSRjZmxhZ3MuPSIgLURtZW1jcHk9X19idWlsdGluX21lbWNweSAtRG1lbXNldD1fX2J1aWx0aW5fbWVtc2V0IjsKCQl9Cgl9CgppZiAoJHN5c19pZCBuZSAiIikKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkICRjZmxhZ3MiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiNkZWZpbmUgT1BFTlNTTF9TWVNOQU1FXyRzeXNfaWRcbiI7Cgl9CgppZiAoJHJhbmxpYiBlcSAiIikKCXsKCSRyYW5saWIgPSAkZGVmYXVsdF9yYW5saWI7Cgl9CgojbXkgKCRibjEpPXNwbGl0KC9ccysvLCRibl9vYmopOwojJGJuMSA9ICIiIHVubGVzcyBkZWZpbmVkICRibjE7CiMkYm4xPSRibl9hc20gdW5sZXNzICgkYm4xID1+IC9cLm8kLyk7CiMkYm5fb2JqPSIkYm4xIjsKCiRjcHVpZF9vYmo9IiIgaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpOwoKJGJuX29iaiA9ICRibl9hc20gdW5sZXNzICRibl9vYmogbmUgIiI7CiMgYm44NiogaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGluZyBibl8qX3BhcnRfd29yZHMKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX1BBUlRfV09SRFMiIGlmICgkYm5fb2JqID1+IC9ibjg2Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm9fc3NlMiAmJiAkYm5fb2JqID1+IC9ibjg2Lyk7CgokZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7CiRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7CiRjYXN0X29iaj0kY2FzdF9lbmMJdW5sZXNzICgkY2FzdF9vYmogPX4gL1wubyQvKTsKJHJjNF9vYmo9JHJjNF9lbmMJdW5sZXNzICgkcmM0X29iaiA9fiAvXC5vJC8pOwokcmM1X29iaj0kcmM1X2VuYwl1bmxlc3MgKCRyYzVfb2JqID1+IC9cLm8kLyk7CmlmICgkc2hhMV9vYmogPX4gL1wubyQvKQoJewojCSRzaGExX29iaj0kc2hhMV9lbmM7CgkkY2ZsYWdzLj0iIC1EU0hBMV9BU00iICAgaWYgKCRzaGExX29iaiA9fiAvc3g4Ni8gfHwgJHNoYTFfb2JqID1+IC9zaGExLyk7CgkkY2ZsYWdzLj0iIC1EU0hBMjU2X0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhMjU2Lyk7CgkkY2ZsYWdzLj0iIC1EU0hBNTEyX0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhNTEyLyk7CglpZiAoJHNoYTFfb2JqID1+IC9zeDg2LykKCSAgICB7CWlmICgkbm9fc3NlMikKCQl7ICAgJHNoYTFfb2JqID1+IHMvXFMqc3NlMlxTKy8vOyAgICAgICAgfQoJCWVsc2lmICgkY2ZsYWdzICF+IC9PUEVOU1NMX0lBMzJfU1NFMi8pCgkJeyAgICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiI7ICAgIH0KCSAgICB9Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CmlmICgkYWVzX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EQUVTX0FTTSI7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CgojICJTdHJpbmdpZnkiIHRoZSBDIGZsYWdzIHN0cmluZy4gIFRoaXMgcGVybWl0cyBpdCB0byBiZSBtYWRlIHBhcnQgb2YgYSBzdHJpbmcKIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgokY2ZsYWdzID1+IHMvKFtcXFwiXSkvXFxcMS9nOwoKbXkgJHZlcnNpb24gPSAidW5rbm93biI7Cm15ICR2ZXJzaW9uX251bSA9ICJ1bmtub3duIjsKbXkgJG1ham9yID0gInVua25vd24iOwpteSAkbWlub3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX251bWJlciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25faGlzdG9yeSA9ICJ1bmtub3duIjsKbXkgJHNobGliX21ham9yID0gInVua25vd24iOwpteSAkc2hsaWJfbWlub3IgPSAidW5rbm93biI7CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2x2LmgnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIG9wZW5zc2x2Lmg6JCFcbiI7CndoaWxlICg8SU4+KQoJewoJJHZlcnNpb249JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5URVhULipPcGVuU1NMIChcUyspIC87CgkkdmVyc2lvbl9udW09JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5OVU1CRVIuKjB4KFxTKykvOwoJJHNobGliX3ZlcnNpb25fbnVtYmVyPSQxIGlmIC9TSExJQl9WRVJTSU9OX05VTUJFUiAqIihbXiJdKykiLzsKCSRzaGxpYl92ZXJzaW9uX2hpc3Rvcnk9JDEgaWYgL1NITElCX1ZFUlNJT05fSElTVE9SWSAqIihbXiJdKikiLzsKCX0KY2xvc2UoSU4pOwppZiAoJHNobGliX3ZlcnNpb25faGlzdG9yeSBuZSAiIikgeyAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IC49ICI6IjsgfQoKaWYgKCR2ZXJzaW9uID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJG1ham9yPSQxOwoJJG1pbm9yPSQyOwoJfQoKaWYgKCRzaGxpYl92ZXJzaW9uX251bWJlciA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRzaGxpYl9tYWpvcj0kMTsKCSRzaGxpYl9taW5vcj0kMjsKCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhbIAldKSRkaXIgL1wxLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglzL15DQz0uKiQvQ0M9ICRjYy87CglzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9ICRkZXBmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkNQVUlEX09CSj0uKiQvQ1BVSURfT0JKPSAkY3B1aWRfb2JqLzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkFFU19BU01fT0JKPS4qJC9BRVNfQVNNX09CSj0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eUFJPQ0VTU09SPS4qL1BST0NFU1NPUj0gJHByb2Nlc3Nvci87CglzL15SQU5MSUI9LiovUkFOTElCPSAkcmFubGliLzsKCXMvXkFSRkxBR1M9LiovQVJGTEFHUz0gJGFyZmxhZ3MvOwoJcy9eUEVSTD0uKi9QRVJMPSAkcGVybC87CglzL15LUkI1X0lOQ0xVREVTPS4qL0tSQjVfSU5DTFVERVM9JHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifS87CglzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwoJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CglzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKCWlmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5keWxpYi87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSpcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01BSk9SKSAucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uXCQoU0hMSUJfTUFKT1IpLmR5bGliIC5keWxpYi87CgkJfQoJcy9eU0hBUkVEX0xERkxBR1M9LiovU0hBUkVEX0xERkxBR1M9JHNoYXJlZF9sZGZsYWcvOwoJcHJpbnQgT1VUICRfLiJcbiI7Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCRNYWtlZmlsZSwiJE1ha2VmaWxlLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGVcbiIgaWYgLWUgJE1ha2VmaWxlOwpyZW5hbWUoIiRNYWtlZmlsZS5uZXciLCRNYWtlZmlsZSkgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZS5uZXdcbiI7CgpwcmludCAiQ0MgICAgICAgICAgICA9JGNjXG4iOwpwcmludCAiQ0ZMQUcgICAgICAgICA9JGNmbGFnc1xuIjsKcHJpbnQgIkVYX0xJQlMgICAgICAgPSRsZmxhZ3NcbiI7CnByaW50ICJDUFVJRF9PQkogICAgID0kY3B1aWRfb2JqXG4iOwpwcmludCAiQk5fQVNNICAgICAgICA9JGJuX29ialxuIjsKcHJpbnQgIkRFU19FTkMgICAgICAgPSRkZXNfb2JqXG4iOwpwcmludCAiQUVTX0FTTV9PQkogICA9JGFlc19vYmpcbiI7CnByaW50ICJCRl9FTkMgICAgICAgID0kYmZfb2JqXG4iOwpwcmludCAiQ0FTVF9FTkMgICAgICA9JGNhc3Rfb2JqXG4iOwpwcmludCAiUkM0X0VOQyAgICAgICA9JHJjNF9vYmpcbiI7CnByaW50ICJSQzVfRU5DICAgICAgID0kcmM1X29ialxuIjsKcHJpbnQgIk1ENV9PQkpfQVNNICAgPSRtZDVfb2JqXG4iOwpwcmludCAiU0hBMV9PQkpfQVNNICA9JHNoYTFfb2JqXG4iOwpwcmludCAiUk1EMTYwX09CSl9BU009JHJtZDE2MF9vYmpcbiI7CnByaW50ICJQUk9DRVNTT1IgICAgID0kcHJvY2Vzc29yXG4iOwpwcmludCAiUkFOTElCICAgICAgICA9JHJhbmxpYlxuIjsKcHJpbnQgIkFSRkxBR1MgICAgICAgPSRhcmZsYWdzXG4iOwpwcmludCAiUEVSTCAgICAgICAgICA9JHBlcmxcbiI7CnByaW50ICJLUkI1X0lOQ0xVREVTID0iLCR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0sIlxuIgoJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBuZSAiIjsKCm15ICRkZXNfcHRyPTA7Cm15ICRkZXNfcmlzYzE9MDsKbXkgJGRlc19yaXNjMj0wOwpteSAkZGVzX3Vucm9sbD0wOwpteSAkYm5fbGw9MDsKbXkgJGRlZl9pbnQ9MjsKbXkgJHJjNF9pbnQ9JGRlZl9pbnQ7Cm15ICRtZDJfaW50PSRkZWZfaW50OwpteSAkaWRlYV9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzJfaW50PSRkZWZfaW50OwpteSAkcmM0X2lkeD0wOwpteSAkcmM0X2NodW5rPTA7Cm15ICRiZl9wdHI9MDsKbXkgQHR5cGU9KCJjaGFyIiwic2hvcnQiLCJpbnQiLCJsb25nIik7Cm15ICgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApOwpteSAkZXhwb3J0X3Zhcl9hc19mbj0wOwoKbXkgJGRlc19pbnQ7Cgpmb3JlYWNoIChzb3J0IHNwbGl0KC9ccysvLCRibl9vcHMpKQoJewoJJGRlc19wdHI9MSBpZiAvREVTX1BUUi87CgkkZGVzX3Jpc2MxPTEgaWYgL0RFU19SSVNDMS87CgkkZGVzX3Jpc2MyPTEgaWYgL0RFU19SSVNDMi87CgkkZGVzX3Vucm9sbD0xIGlmIC9ERVNfVU5ST0xMLzsKCSRkZXNfaW50PTEgaWYgL0RFU19JTlQvOwoJJGJuX2xsPTEgaWYgL0JOX0xMT05HLzsKCSRyYzRfaW50PTAgaWYgL1JDNF9DSEFSLzsKCSRyYzRfaW50PTMgaWYgL1JDNF9MT05HLzsKCSRyYzRfaWR4PTEgaWYgL1JDNF9JTkRFWC87CgkkcmM0X2NodW5rPTEgaWYgL1JDNF9DSFVOSy87CgkkcmM0X2NodW5rPTIgaWYgL1JDNF9DSFVOS19MTC87CgkkbWQyX2ludD0wIGlmIC9NRDJfQ0hBUi87CgkkbWQyX2ludD0zIGlmIC9NRDJfTE9ORy87CgkkaWRlYV9pbnQ9MSBpZiAvSURFQV9TSE9SVC87CgkkaWRlYV9pbnQ9MyBpZiAvSURFQV9MT05HLzsKCSRyYzJfaW50PTEgaWYgL1JDMl9TSE9SVC87CgkkcmMyX2ludD0zIGlmIC9SQzJfTE9ORy87CgkkYmZfcHRyPTEgaWYgJF8gZXEgIkJGX1BUUiI7CgkkYmZfcHRyPTIgaWYgJF8gZXEgIkJGX1BUUjIiOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMSwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgxLDAsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVF9MT05HLzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApIGlmIC9USElSVFlfVFdPX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMSwwKSBpZiAvU0lYVEVFTl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDAsMSkgaWYgL0VJR0hUX0JJVC87CgkkZXhwb3J0X3Zhcl9hc19mbj0xIGlmIC9FWFBPUlRfVkFSX0FTX0ZOLzsKCX0KCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbicpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgY3J5cHRvL29wZW5zc2xjb25mLmguaW46JCFcbiI7CnVubGluaygiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyI7Cm9wZW4oT1VULCc+Y3J5cHRvL29wZW5zc2xjb25mLmgubmV3JykgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIjsKcHJpbnQgT1VUICIvKiBvcGVuc3NsY29uZi5oICovXG4iOwpwcmludCBPVVQgIi8qIFdBUk5JTkc6IEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gb3BlbnNzbGNvbmYuaC5pbiBieSBDb25maWd1cmUuICovXG5cbiI7CgpwcmludCBPVVQgIi8qIE9wZW5TU0wgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6ICovXG4iOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF8oLiopLyMgaWYgZGVmaW5lZChPUEVOU1NMXyQxKSBcJlwmICFkZWZpbmVkKCQxKVxuIyAgZGVmaW5lICQxXG4jIGVuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9ICIgICAvKiBubyBjaXBoZXJzIGV4Y2x1ZGVkICovXG4iIGlmICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIGVxICIiOwokb3BlbnNzbF90aHJlYWRfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9zeXNfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9vdGhlcl9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CnByaW50IE9VVCAkb3BlbnNzbF9zeXNfZGVmaW5lczsKcHJpbnQgT1VUICIjaWZuZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORFxuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CnByaW50IE9VVCAiXG4jZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7IHByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMRElSIFwiJG9wZW5zc2xkaXJcIlxuIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsgcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkcHJlZml4L2xpYi9lbmdpbmVzXCJcbiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIm1ha2UgUEVSTD1cJyRwZXJsXCciOwoJbXkgJG1ha2VfdGFyZ2V0cyA9ICIiOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGxpbmtzIiBpZiAkc3ltbGluazsKCSRtYWtlX3RhcmdldHMgLj0gIiBkZXBlbmQiIGlmICRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAkbWFrZV9kZXBlbmQ7CgkkbWFrZV90YXJnZXRzIC49ICIgZ2VudGVzdHMiIGlmICRzeW1saW5rOwoJKHN5c3RlbSAkbWFrZV9jb21tYW5kLiRtYWtlX3RhcmdldHMpID09IDAgb3IgZXhpdCAkPwoJCWlmICRtYWtlX3RhcmdldHMgbmUgIiI7CglpZiAoICRwZXJsID1+IG1AXi9AKSB7CgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCRwZXJsLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCkgewoJCXByaW50IDw8RU9GOwoKU2luY2UgeW91J3ZlIGRpc2FibGVkIG9yIGVuYWJsZWQgYXQgbGVhc3Qgb25lIGFsZ29yaXRobSwgeW91IG5lZWQgdG8gZG8KdGhlIGZvbGxvd2luZyBiZWZvcmUgYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgl9Cn0KCiMgY3JlYXRlIHRoZSBtcy92ZXJzaW9uMzIucmMgZmlsZSBpZiBuZWVkZWQKaWYgKCRJc01LMU1GKSB7CglteSAoJHYxLCAkdjIsICR2MywgJHY0KTsKCWlmICgkdmVyc2lvbl9udW0gPX4gLyheWzAtOWEtZl17MX0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pL2kpIHsKCQkkdjE9aGV4ICQxOwoJCSR2Mj1oZXggJDI7CgkJJHYzPWhleCAkMzsKCQkkdjQ9aGV4ICQ0OwoJfQoJb3BlbiAoT1VULCI+bXMvdmVyc2lvbjMyLnJjIikgfHwgZGllICJDYW4ndCBvcGVuIG1zL3ZlcnNpb24zMi5yYyI7CglwcmludCBPVVQgPDxFT0Y7CiNpbmNsdWRlIDx3aW52ZXIuaD4KCkxBTkdVQUdFIDB4MDksMHgwMQoKMSBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIFBST0RVQ1RWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogIEZJTEVGTEFHUyAweDAxTAojZWxzZQogIEZJTEVGTEFHUyAweDAwTAojZW5kaWYKICBGSUxFT1MgVk9TX19XSU5ET1dTMzIKICBGSUxFVFlQRSBWRlRfRExMCiAgRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KCUJMT0NLICIwNDA5MDRiMCIKCUJFR0lOCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgoJICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIkdmVyc2lvblxcMCIKI2lmIGRlZmluZWQoQ1JZUFRPKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKFNTTCkKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInNzbGVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInNzbGVheTMyLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lJGV4ZV9leHQiIGFuZCAteCBfKQoJCQl7CgkJCXJldHVybiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgdW5sZXNzICgkbmFtZSBlcSAicGVybCIgYW5kCgkJCSBzeXN0ZW0oIiRwYXRoLyRuYW1lJGV4ZV9leHQgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRjcHVpZF9vYmosbXkgJGJuX29iaixteSAkZGVzX29iaixteSAkYWVzX29iaiwgbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkZHNvX3NjaGVtZSxteSAkc2hhcmVkX3RhcmdldCxteSAkc2hhcmVkX2NmbGFnLAoJbXkgJHNoYXJlZF9sZGZsYWcsbXkgJHNoYXJlZF9leHRlbnNpb24sbXkgJHJhbmxpYixteSAkYXJmbGFncyk9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkY3B1aWRfb2JqICAgID0gJGNwdWlkX29iagpcJGJuX29iaiAgICAgICA9ICRibl9vYmoKXCRkZXNfb2JqICAgICAgPSAkZGVzX29iagpcJGFlc19vYmogICAgICA9ICRhZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZSsxXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdICF+IC9eKGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2RsJywgJ2RsZmNuJywgJ3dpbjMyJyBhbmQgJ3ZtcydcbiI7CgkJCX0KCQl9CglwcmludCBTVERFUlIgIk5vIHNhbml0eSBlcnJvcnMgZGV0ZWN0ZWQhXG4iIGlmICRlcnJvcmNudCA9PSAwOwoJcmV0dXJuICRlcnJvcmNudDsKCX0K