OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFstRHh4eF0gWy1seHh4XSBbLUx4eHhdIFstZnh4eF0gWy1LeHh4XSBbbm8tZW5naW5lXSBbbm8taHcteHh4fG5vLWh3XSBbW25vLV10aHJlYWRzXSBbW25vLV1zaGFyZWRdIFtbbm8tXXpsaWJ8emxpYi1keW5hbWljXSBbbm8tYXNtXSBbbm8tZHNvXSBbbm8ta3JiNV0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3BlbnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tdGVzdC1zYW5pdHldIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7CgojIE9wdGlvbnM6CiMKIyAtLW9wZW5zc2xkaXIgIGluc3RhbGwgT3BlblNTTCBpbiBPUEVOU1NMRElSIChEZWZhdWx0OiBESVIvc3NsIGlmIHRoZQojICAgICAgICAgICAgICAgLS1wcmVmaXggb3B0aW9uIGlzIGdpdmVuOyAvdXNyL2xvY2FsL3NzbCBvdGhlcndpc2UpCiMgLS1wcmVmaXggICAgICBwcmVmaXggZm9yIHRoZSBPcGVuU1NMIGluY2x1ZGUsIGxpYiBhbmQgYmluIGRpcmVjdG9yaWVzCiMgICAgICAgICAgICAgICAoRGVmYXVsdDogdGhlIE9QRU5TU0xESVIgZGlyZWN0b3J5KQojCiMgLS1pbnN0YWxsX3ByZWZpeCAgQWRkaXRpb25hbCBwcmVmaXggZm9yIHBhY2thZ2UgYnVpbGRlcnMgKGVtcHR5IGJ5CiMgICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRoaXMgbmVlZG4ndCBiZSBzZXQgaW4gYWR2YW5jZSwgeW91IGNhbgojICAgICAgICAgICAgICAganVzdCBhcyB3ZWxsIHVzZSAibWFrZSBJTlNUQUxMX1BSRUZJWD0vd2hhdGV2ZXIgaW5zdGFsbCIuCiMKIyAtLXdpdGgta3JiNS1kaXIgIERlY2xhcmUgd2hlcmUgS2VyYmVyb3MgNSBsaXZlcy4gIFRoZSBsaWJyYXJpZXMgYXJlIGV4cGVjdGVkCiMJCXRvIGxpdmUgaW4gdGhlIHN1YmRpcmVjdG9yeSBsaWIvIGFuZCB0aGUgaGVhZGVyIGZpbGVzIGluCiMJCWluY2x1ZGUvLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIyAtLXdpdGgta3JiNS1saWIgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgbGlicmFyaWVzIGxpdmUuICBBIHZhbHVlIGlzCiMJCXJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvbGliKQojIC0td2l0aC1rcmI1LWluY2x1ZGUgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgaGVhZGVyIGZpbGVzIGxpdmUuICBBCiMJCXZhbHVlIGlzIHJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvaW5jbHVkZSkKIyAtLXdpdGgta3JiNS1mbGF2b3IgIERlY2xhcmUgd2hhdCBmbGF2b3Igb2YgS2VyYmVyb3MgNSBpcyB1c2VkLiAgQ3VycmVudGx5CiMJCXN1cHBvcnRlZCB2YWx1ZXMgYXJlICJNSVQiIGFuZCAiSGVpbWRhbCIuICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojCiMgLS10ZXN0LXNhbml0eSBNYWtlIGEgbnVtYmVyIG9mIHNhbml0eSBjaGVja3Mgb24gdGhlIGRhdGEgaW4gdGhpcyBmaWxlLgojICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRlYnVnZ2luZyB0b29sIGZvciBPcGVuU1NMIGRldmVsb3BlcnMuCiMKIyBuby1lbmdpbmUgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBlbmdpbmUgY29kZS4KIyBuby1ody14eHggICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZS4KIyAgICAgICAgICAgICAgIEdlbmVyaWMgT3BlblNTTC1zdHlsZSBtZXRob2RzIHJlbGF0aW5nIHRvIHRoaXMgc3VwcG9ydAojICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBjb21waWxlZCBidXQgcmV0dXJuIE5VTEwgaWYgdGhlIGhhcmR3YXJlCiMgICAgICAgICAgICAgICBzdXBwb3J0IGlzbid0IGNvbXBpbGVkLgojIG5vLWh3ICAgICAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IgYW55IGNyeXB0byBoYXJkd2FyZS4KIyBbbm8tXXRocmVhZHMgIFtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBpcyBzdWl0YWJsZSBmb3IKIyAgICAgICAgICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIChkZWZhdWx0IGlzICJ0aHJlYWRzIiBpZiB3ZQojICAgICAgICAgICAgICAga25vdyBob3cgdG8gZG8gaXQpCiMgW25vLV1zaGFyZWQJW2Rvbid0XSB0cnkgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgd2hlbiBzdXBwb3J0ZWQuCiMgbm8tYXNtICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlcgojIG5vLWRzbyAgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IG5hdGl2ZSBzaGFyZWQtbGlicmFyeSBtZXRob2RzLiBUaGlzCiMgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGF0IGFsbCBtZXRob2RzIGp1c3QgcmV0dXJuIE5VTEwuCiMgbm8ta3JiNSAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgS1JCNSBsaWJyYXJ5IG9yIGNvZGUuCiMgW25vLV16bGliICAgICBbZG9uJ3RdIGNvbXBpbGUgc3VwcG9ydCBmb3IgemxpYiBjb21wcmVzc2lvbi4KIyB6bGliLWR5bmFtaWMJTGlrZSAiemxpYiIsIGJ1dCB0aGUgemxpYiBsaWJyYXJ5IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2hhcmVkCiMJCWxpYnJhcnkgYW5kIHdpbGwgYmUgbG9hZGVkIGluIHJ1bi10aW1lIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiMgMzg2ICAgICAgICAgICBnZW5lcmF0ZSA4MDM4NiBjb2RlCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojIE1ENV9BU00JdXNlIHNvbWUgZXh0cmEgbWQ1IGFzc2VtYmVyLAojIFNIQTFfQVNNCXVzZSBzb21lIGV4dHJhIHNoYTEgYXNzZW1iZXIsIG11c3QgZGVmaW5lIExfRU5ESUFOIGZvciB4ODYKIyBSTUQxNjBfQVNNCXVzZSBzb21lIGV4dHJhIHJpcGVtZDE2MCBhc3NlbWJlciwKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2VsZl9hc209ImFzbS9ibjg2LWVsZi5vIGFzbS9jbzg2LWVsZi5vOmFzbS9keDg2LWVsZi5vIGFzbS95eDg2LWVsZi5vOmFzbS9ieDg2LWVsZi5vOmFzbS9teDg2LWVsZi5vOmFzbS9zeDg2LWVsZi5vOmFzbS9jeDg2LWVsZi5vOmFzbS9yeDg2LWVsZi5vOmFzbS9ybTg2LWVsZi5vOmFzbS9yNTg2LWVsZi5vIjsKbXkgJHg4Nl9vdXRfYXNtPSJhc20vYm44Ni1vdXQubyBhc20vY284Ni1vdXQubzphc20vZHg4Ni1vdXQubyBhc20veXg4Ni1vdXQubzphc20vYng4Ni1vdXQubzphc20vbXg4Ni1vdXQubzphc20vc3g4Ni1vdXQubzphc20vY3g4Ni1vdXQubzphc20vcng4Ni1vdXQubzphc20vcm04Ni1vdXQubzphc20vcjU4Ni1vdXQubyI7Cm15ICR4ODZfYnNkaV9hc209ImFzbS9ibjg2YnNkaS5vIGFzbS9jbzg2YnNkaS5vOmFzbS9keDg2YnNkaS5vIGFzbS95eDg2YnNkaS5vOmFzbS9ieDg2YnNkaS5vOmFzbS9teDg2YnNkaS5vOmFzbS9zeDg2YnNkaS5vOmFzbS9jeDg2YnNkaS5vOmFzbS9yeDg2YnNkaS5vOmFzbS9ybTg2YnNkaS5vOmFzbS9yNTg2YnNkaS5vIjsKCm15ICRtaXBzM19pcml4X2FzbT0iYXNtL21pcHMzLm86Ojo6Ojo6OiI7CiMgVGhlcmUgc2VlbXMgdG8gYmUgYm91bmRhcnkgZmF1bHRzIGluIGFzbS9hbHBoYS5zLgojbXkgJGFscGhhX2FzbT0iYXNtL2FscGhhLm86Ojo6Ojo6OiI7Cm15ICRhbHBoYV9hc209Ijo6Ojo6Ojo6IjsKCiMgLURCX0VORElBTiBzbG93cyB0aGluZ3MgZG93biBvbiBhIHNwYXJjIGZvciBtZDUsIGJ1dCBoZWxwcyBzaGExLgojIFNvIHRoZSBtZDVfbG9jbC5oIGZpbGUgaGFzIGFuIHVuZGVmIEJfRU5ESUFOIGlmIHN1biBpcyBkZWZpbmVkCgojY29uZmlnLXN0cmluZwkkY2MgOiAkY2ZsYWdzIDogJHVuaXN0ZCA6ICR0aHJlYWRfY2ZsYWcgOiAkc3lzX2lkIDogJGxmbGFncyA6ICRibl9vcHMgOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYmZfb2JqIDogJG1kNV9vYmogOiAkc2hhMV9vYmogOiAkY2FzdF9vYmogOiAkcmM0X29iaiA6ICRybWQxNjBfb2JqIDogJHJjNV9vYmogOiAkZHNvX3NjaGVtZSA6ICRzaGFyZWRfdGFyZ2V0IDogJHNoYXJlZF9jZmxhZyA6ICRzaGFyZWRfbGRmbGFnIDogJHNoYXJlZF9leHRlbnNpb24gOiAkcmFubGliIDogJGFyZmxhZ3MKCm15ICV0YWJsZT0oCiMgRmlsZSAnVEFCTEUnIChjcmVhdGVkIGJ5ICdtYWtlIFRBQkxFJykgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGlzIGxpc3QsCiMgZm9ybWF0dGVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCgoKIyJiIiwJCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9OiR7dGJuX211bH06OiIsCiMiYmwtNGMtMmMiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIE1EMl9DSEFSOiR7dGJuX211bH06OiIsCiMiYmwtNGMtcmkiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIFJDNF9JTkRFWDoke3Ribl9tdWx9OjoiLAojImIyLWlzLXJpLWRwIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMn1JREVBX1NIT1JUIFJDNF9JTkRFWCBERVNfUFRSOiR7dGJuX211bH06OiIsCgojIE91ciBkZXZlbG9wbWVudCBjb25maWdzCiJwdXJpZnkiLAkicHVyaWZ5IGdjYzotZyAtRFBVUklGWSAtV2FsbDo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDo6OjoiLAoiZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nZ2RiIC1nMiAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6Oih1bmtub3duKTo6LWxlZmVuY2U6Ojo6IiwKImRlYnVnLWJlbiIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6YXNtL2JuODYtZWxmLm8gYXNtL2NvODYtZWxmLm8iLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOi1ETF9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtRFBFREFOVElDIC1nIC1tNDg2IC1wZWRhbnRpYyAtV3NoYWRvdyAtV2FsbDo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6Ojp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZSIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1nIC1tY3B1PWk0ODYgLXBlZGFudGljIC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZCIsCiJkZWJ1Zy1zdGV2ZS1saW51eC1wc2V1ZG82NCIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRE9QRU5TU0xfTk9fQVNNIC1nIC1tY3B1PWk0ODYgLVdhbGwgLVdlcnJvciAtV3NoYWRvdyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpTSVhUWV9GT1VSX0JJVDo6ZGxmY246bGludXgtc2hhcmVkIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbS1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmYiLCJnY2M6LURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURCTl9TVFJJQ1QgLURCTl9DVFhfREVCVUcgLURQVVJJRlkgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLURPUEVOU1NMX05PX0FTTSAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLWcgLWdnZGIzIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306Ojo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMgQmFzaWMgY29uZmlncyB0aGF0IHNob3VsZCB3b3JrIG9uIGFueSAoMzIgYW5kIGxlc3MgYml0KSBib3gKImdjYyIsCQkiZ2NjOi1PMzo6KHVua25vd24pOjo6Qk5fTExPTkc6OjoiLAoiY2MiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIEdOVSBDIHNldHVwcwojIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIHN3aXRjaGVzIG9mZiBpbmxpbmUgYXNzZW1ibGVyLiBXZSBoYXZlIHRvIGRvIGl0CiMgaGVyZSBiZWNhdXNlIHdoZW5ldmVyIEdOVSBDIGluc3RhbnRpYXRlcyBhbiBhc3NlbWJsZXIgdGVtcGxhdGUgaXQKIyBzdXJyb3VuZHMgaXQgd2l0aCAjQVBQICNOT19BUFAgY29tbWVudCBwYWlyIHdoaWNoIChhdCBsZWFzdCBTb2xhcmlzCiMgN194ODYpIC91c3IvY2NzL2Jpbi9hcyBmYWlscyB0byBhc3NlbWJsZSB3aXRoICJJbGxlZ2FsIG1uZW1vbmljIgojIGVycm9yIG1lc3NhZ2UuCiJzb2xhcmlzLXg4Ni1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tNDg2IC1XYWxsIC1ETF9FTkRJQU4gLURPUEVOU1NMX05PX0lOTElORV9BU006Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNvbGFyaXMgeDg2IHdpdGggU3VuIEMgc2V0dXBzCiJzb2xhcmlzLXg4Ni1jYyIsImNjOi1mYXN0IC1PIC1YYTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOjo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBHTlUgQyBzZXR1cHMKInNvbGFyaXMtc3BhcmN2Ny1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LW12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOmFzbS9zcGFyY3Y4Lm86YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtbTMyIHNob3VsZCBiZSBzYWZlIHRvIGFkZCBhcyBsb25nIGFzIGRyaXZlciByZWNvZ25pemVzIC1tY3B1PXVsdHJhc3BhcmMKInNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOmFzbS9zcGFyY3Y4cGx1cy5vOmFzbS9kZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6YXNtL21kNS1zcGFyY3Y4cGx1cy5vOjo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgZ2NjIHByZS0yLjggZG9lc24ndCB1bmRlcnN0YW5kIC1tY3B1PXVsdHJhc3BhcmMsIHNvIGZhbGwgZG93biB0byAtbXY4CiMgYnV0IGtlZXAgdGhlIGFzc2VtYmxlciBtb2R1bGVzLgoic29sYXJpcy1zcGFyY3Y5LWdjYzI3IiwiZ2NjOi1tdjggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6YXNtL3NwYXJjdjhwbHVzLWdjYzI3Lm86YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjphc20vbWQ1LXNwYXJjdjhwbHVzLWdjYzI3Lm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWdjYyIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjphc20vbWQ1LXNwYXJjdjkubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLU8gLWcgLW12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOmFzbS9zcGFyY3Y4Lm86Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1PIC1nIC1tY3B1PXVsdHJhc3BhcmMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1Xbm8tbG9uZy1sb25nIC1EX19FWFRFTlNJT05TX18gLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjphc20vc3BhcmN2OHBsdXMubzphc20vZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86OmFzbS9tZDUtc3BhcmN2OHBsdXMubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgRE8gTk9UIHVzZSAveE9bMzRdIG9uIHNwYXJjIHdpdGggU0MzLjAuICBJdCBpcyBicm9rZW4sIGFuZCB3aWxsIG5vdCBwYXNzIHRoZSB0ZXN0cwoic29sYXJpcy1zcGFyYy1zYzMiLCJjYzotZmFzdCAtTyAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOjo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOmFzbS9zcGFyY3Y4Lm86YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY4cGx1cyAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6YXNtL3NwYXJjdjhwbHVzLm86YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjphc20vbWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djkgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OmFzbS9kZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6YXNtL21kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djk6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6L3Vzci9jY3MvYmluL2FyIHJzIiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteGFyY2g9djggLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOmFzbS9zcGFyY3Y4Lm86Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6YXNtL3NwYXJjdjhwbHVzLm86Ojphc20vbWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKImxpbnV4LXNwYXJjdjciLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6IiwKIyBSYXkgTWlsbGVyIDxyYXkubWlsbGVyQGNvbXB1dGluZy1zZXJ2aWNlcy5veGZvcmQuYWMudWs+IGhhcyBwYXRpZW50bHkKIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCiJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjphc20vc3BhcmN2OC5vOmFzbS9kZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgaXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KImxpbnV4LXNwYXJjdjkiLCJnY2M6LW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6YXNtL3NwYXJjdjhwbHVzLm86YXNtL2Rlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjphc20vbWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OmFzbS9kZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6YXNtL21kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIFN1bm9zIGNvbmZpZ3MsIGFzc3VtaW5nIHNwYXJjIGZvciB0aGUgZ2NjIG9uZS4KIyMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDo6OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMTo6OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElSSVggNi54IGNvbmZpZ3MKIyBPbmx5IE4zMiBhbmQgTjY0IEFCSXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgTzMyIEFCSSBidWlsZCwgaW52b2tlCiMgJy4vQ29uZmlndXJlIGlyaXgtY2MgLW8zMicgbWFudWFsbHkuCiMgLW1pcHM0IGZsYWcgaXMgYWRkZWQgYnkgLi9jb25maWcgd2hlbiBhcHByb3ByaWF0ZS4KImlyaXgtbWlwczMtZ2NjIiwiZ2NjOi1tYWJpPW4zMiAtbW1pcHMtYXMgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczNfaXJpeF9hc219OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1taXBzMy1jYyIsICJjYzotbjMyIC1taXBzMyAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6REVTX1BUUiBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczNfaXJpeF9hc219OmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBONjQgQUJJIGJ1aWxkcy4KImlyaXg2NC1taXBzNC1nY2MiLCJnY2M6LW1hYmk9NjQgLW1pcHM0IC1tbWlwcy1hcyAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczNfaXJpeF9hc219OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4NjQtbWlwczQtY2MiLCAiY2M6LTY0IC1taXBzNCAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6JHttaXBzM19pcml4X2FzbX06ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Ojo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDorWjo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Ojo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMi1nY2MiLCJnY2M6LW1hcmNoPTIuMCAtTzMgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6YXNtL3BhLXJpc2MyLm86Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDotZlBJQzo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIDY0Yml0IFBBUklTQyBmb3IgR0NDIHdpdGhvdXQgb3B0aW1pemF0aW9uLCB3aGljaCBzZWVtcyB0byBtYWtlIHByb2JsZW1zLgojIFN1Ym1pdHRlZCBieSA8cm9zcy5hbGV4YW5kZXJAdWsubmVjZXVyLmNvbT4KImhwdXg2NC1wYXJpc2MtZ2NjIiwiZ2NjOi1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6Ojo6Ojo6Ojo6ZGxmY246aHB1eDY0LXNoYXJlZDotZnBpYzo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDphc20vcGEtcmlzYzJXLm86Ojo6Ojo6OjpkbGZjbjpocHV4NjQtc2hhcmVkOi1mcGljOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOitaOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOmFzbS9wYS1yaXNjMi5vOjo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6K1o6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXg2NC1wYXJpc2MyLWNjIiwiY2M6K0RENjQgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6YXNtL3BhLXJpc2MyVy5vOjo6Ojo6Ojo6ZGxmY246aHB1eDY0LXNoYXJlZDorWjo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIElzbid0IHRoZSBsaW5lIGJlbG93IG1lYW5pbmdsZXNzPyBIUC1VWCBjYyBvcHRpbWl6ZXMgZm9yIGhvc3QgYnkgZGVmYXVsdC4KIyBocHV4LXBhcmlzYzFfMC1jYyB3aXRoICtEQXBvcnRhYmxlIGZsYWcgd291bGQgbWFrZSBtb3JlIHNlbnNlLiA8YXBwcm8+CiJocHV4LXBhcmlzYzFfMS1jYyIsImNjOitEQTEuMSArRFMxLjEgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6K1o6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgSFAvVVggSUEtNjQgdGFyZ2V0cwoiaHB1eC1pYTY0LWNjIiwiY2M6LUFlICtERDMyICtPMyArT2xpdD1hbGwgLXogLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOmFzbS9pYTY0LWNwcC5vOjo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6K1o6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOmFzbS9pYTY0LWNwcC5vOjo6Ojo6Ojo6ZGxmY246aHB1eDY0LXNoYXJlZDorWjo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEdDQyBidWlsZHMgW25vdCB0ZXN0ZWQgeWV0XS4uLgojIF9JTFAzMiBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQgYnkgY29tcGlsZXIgZHJpdmVyLCBidXQgaXQgaXNuJ3QuLi4KImhwdXgtaWE2NC1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfSUxQMzI6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDphc20vaWE2NC5vOjo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXg2NC1pYTY0LWdjYyIsImdjYzotbWxwNjQgLU8zIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOmFzbS9pYTY0Lm86Ojo6Ojo6OjpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMgSFBVWCA5LlggY29uZmlnLgojIERvbid0IHVzZSB0aGUgYnVuZGxlZCBjYy4gIEl0IGlzIGJyb2tlbi4gIFVzZSBIUCBBTlNJIEMgaWYgcG9zc2libGUsIG9yCiMgZWdjcy4gIGdjYyAyLjguMSBpcyBhbHNvIGJyb2tlbi4KCiJocHV4LWNjIiwJImNjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZIC1BZSArRVNsaXQgK08zIC16OjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOitaOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgSWYgaHB1eC1jYyBmYWlscyAoZS5nLiBkdXJpbmcgIm1ha2UgdGVzdCIpLCB0cnkgdGhlIG5leHQgb25lOyBvdGhlcndpc2UsCiMgcGxlYXNlIHJlcG9ydCB5b3VyIE9TIGFuZCBjb21waWxlciB2ZXJzaW9uIHRvIHRoZSBvcGVuc3NsLWJ1Z3NAb3BlbnNzbC5vcmcKIyBtYWlsaW5nIGxpc3QuCiJocHV4LWJyb2tlbmNjIiwJImNjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtQWUgK0VTbGl0ICtPMiAtejo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDorWjo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKImhwdXgtZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOi1mUElDOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgSWYgaHB1eC1nY2MgZmFpbHMsIHRyeSB0aGlzIG9uZToKImhwdXgtYnJva2VuZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOi1mUElDOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIEhQVVggOS5YIG9uIE1vdG9yb2xhIDY4ayBwbGF0Zm9ybXMgd2l0aCBnY2MKImhwdXgtbTY4ay1nY2MiLCAgImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6OjpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEw6Ojo6Ojo6Ojo6Ojo6IiwKCiMgSFBVWCAxMC5YIGNvbmZpZy4gIFN1cHBvcnRzIHRocmVhZHMuCiJocHV4MTAtY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVkgLUFlICtFU2xpdCArTzMgLXo6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6K1o6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBJZiBocHV4MTAtY2MgZmFpbHMsIHRyeSB0aGlzIG9uZSAoaWYgc3RpbGwgZmFpbHMsIHRyeSBkZWxldGluZyBCTl9MTE9ORyk6CiJocHV4MTAtYnJva2VuY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1BZSArRVNsaXQgK08yIC16OjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOitaOjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiaHB1eDEwLWdjYyIsCSJnY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1PMzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDotZlBJQzo6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIElmIGhwdXgxMC1nY2MgZmFpbHMsIHRyeSB0aGlzIG9uZToKImhwdXgxMC1icm9rZW5nY2MiLAkiZ2NjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtTzM6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6Oi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgSFBVWCAxMS5YIGZyb20gd3d3Lmdsb2J1cy5vcmcuCiMgT25seSB3b3JrcyBvbiBQQS1SSVNDIDIuMCBjcHVzLCBhbmQgbm90IG9wdGltaXplZC4gIFdoeT8KIyJocHV4MTEtMzJiaXQtY2MiLCJjYzorREEyLjAgLURCX0VORElBTiAtRF9IUFVYX1NPVVJDRSAtQWEgLUFlICtFU2xpdDo6LURfUkVFTlRSQU5UOjo6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6OiIsCiMiaHB1eDExLTY0Yml0LWNjIiwiY2M6K0RBMi4wVyAtZyAtRF9IUFVYX1NPVVJDRSAtQWEgLUFlICtFU2xpdDo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVCA6OjoiLAojIFVzZSB1bmlmaWVkIHNldHRpbmdzIGFib3ZlIGluc3RlYWQuCgojIyMjIEhQIE1QRS9pWCBodHRwOi8vamF6ei5leHRlcm5hbC5ocC5jb20vc3JjL29wZW5zc2wvCiJNUEUvaVgtZ2NjIiwgImdjYzotRF9FTkRJQU4gLURCTl9ESVYyVyAtTzMgLURfUE9TSVhfU09VUkNFIC1EX1NPQ0tFVF9TT1VSQ0UgLUkvU1lTTE9HL1BVQjo6KHVua25vd24pOk1QRTotTC9TWVNMT0cvUFVCIC1sc3lzbG9nIC1sc29ja2V0IC1sY3Vyc2VzOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OjoiLAoKIyMjIyBQQVJJU0MgTGludXggc2V0dXBzCiJsaW51eC1wYXJpc2MiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjoiLAoKIyBEZWMgQWxwaGEsIE9TRi8xIC0gdGhlIGFscGhhMTY0LWNjIGlzIGhpc3RvcmljYWwsIGZvciB0aGUgY29udmVyc2lvbgojIGZyb20gdGhlIG9sZGVyIERFQyBDIENvbXBpbGVyIHRvIHRoZSBuZXdlciBjb21waWxlci4gIEl0J3Mgbm93IHRoZQojIHNhbWUgYXMgdGhlIHByZWZlcnJlZCBlbnRyeSwgYWxwaGEtY2MuICBJZiB5b3UgYXJlIHN0aWxsIHVzaW5nIHRoZQojIG9sZGVyIGNvbXBpbGVyICh5b3UncmUgYXQgMy54IG9yIGVhcmxpZXIsIG9yIHBlcmhhcHMgdmVyeSBlYXJseSA0LngpCiMgeW91IHNob3VsZCB1c2UgYGFscGhhb2xkLWNjJy4KIwojCSJXaGF0J3MgaW4gYSBuYW1lPyBUaGF0IHdoaWNoIHdlIGNhbGwgYSByb3NlCiMJIEJ5IGFueSBvdGhlciB3b3JkIHdvdWxkIHNtZWxsIGFzIHN3ZWV0LiIKIwojIC0gV2lsbGlhbSBTaGFrZXNwZWFyZSwgIlJvbWVvICYgSnVsaWV0IiwgQWN0IElJLCBzY2VuZSBJSS4KIwojIEZvciBPU0YvMSAzLjJiIGFuZCBlYXJsaWVyLCBhbmQgRGlnaXRhbCBVTklYIDMuMmMgLSAzLjJnLCB3aXRoIHRoZQojIHZlbmRvciBjb21waWxlciwgdXNlIGFscGhhb2xkLWNjLgojIEZvciBEaWdpdGFsIFVOSVggNC4wIC0gNC4wZSwgd2l0aCB0aGUgdmVuZG9yIGNvbXBpbGVyLCB1c2UgYWxwaGEtY2MuCiMgRm9yIFRydTY0IFVOSVggNC5mIC0gY3VycmVudCwgd2l0aCB0aGUgdmVuZG9yIGNvbXBpbGVyLCB1c2UgYWxwaGEtY2MuCiMKIyBUaGVyZSdzIGFsc28gYW4gYWx0ZXJuYXRlIHRhcmdldCBhdmFpbGFibGUgKHdoaWNoIGBjb25maWcnIHdpbGwgbmV2ZXIKIyBzZWxlY3QpIGNhbGxlZCBhbHBoYS1jYy1ycGF0aC4gIFRoaXMgdGFyZ2V0IGJ1aWxkcyBhbiBSUEFUSCBpbnRvIHRoZQojIHNoYXJlZCBsaWJyYXJpZXMsIHdoaWNoIGlzIHZlcnkgY29udmVuaWVudCBvbiBUcnU2NCBzaW5jZSBiaW5hcmllcwojIGxpbmtlZCBhZ2FpbnN0IHRoYXQgc2hhcmVkIGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhhdCBSUEFUSCwKIyBhbmQgaGVuY2Uga25vdyB3aGVyZSB0byBsb29rIGZvciB0aGUgb3BlbnNzbCBsaWJyYXJpZXMsIGV2ZW4gaWYgdGhleSdyZSBpbgojIGFuIG9kZCBwbGFjZS4KIwojIEZvciBnY2MsIHRoZSBmb2xsb3dpbmcgZ2F2ZSBhICU1MCBzcGVlZHVwIG9uIGEgMTY0IG92ZXIgdGhlICdERVNfSU5UJyB2ZXJzaW9uCiMKImFscGhhLWdjYyIsImdjYzotTzM6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MxOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJhbHBoYW9sZC1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKImFscGhhMTY0LWNjIiwgImNjOi1zdGQxIC10dW5lIGhvc3QgLWZhc3QgLXJlYWRvbmx5X3N0cmluZ3M6Oi1wdGhyZWFkOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOnRydTY0LXNoYXJlZDo6Oi5zbyIsCiJhbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjp0cnU2NC1zaGFyZWQ6Ojouc28iLAoiYWxwaGEtY2MtcnBhdGgiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246dHJ1NjQtc2hhcmVkLXJwYXRoOjo6LnNvIiwKIwojIFRoaXMgcHJvYmFibHkgYmVsb25ncyBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgojCiJGcmVlQlNELWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAtTyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMjo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKIyBTcGVjaWFsIG5vdGVzOgojIC0gbGludXgtYWxwaGErYnd4LWdjYyBpcyBtZW50IHRvIGJlIHVzZWQgZnJvbSAuL2NvbmZpZyBvbmx5LiBJZiB5b3UKIyAgIG91Z2h0IHRvIHJ1biAnLi9Db25maWd1cmUgbGludXgtYWxwaGErYnd4LWdjYycgbWFudWFsbHksIGRvCiMgICBjb21wbGVtZW50IHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtbWNwdT1ldjU2LCAtbWNwdT1ldjYgb3Igd2hhdGV2ZXIKIyAgIHdoaWNoIGlzIGFwcHJvcHJpYXRlLgojIC0gSWYgeW91IHVzZSBjY2Mga2VlcCBpbiBtaW5kIHRoYXQgLWZhc3QgaW1wbGllcyAtYXJjaCBob3N0IGFuZCB0aGUKIyAgIGNvbXBpbGVyIGlzIGZyZWUgdG8gaXNzdWUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGdvbm5hIG1ha2UgZWxkZXIgQ1BVCiMgICBjaG9rZS4gSWYgeW91IHdpc2ggdG8gYnVpbGQgImJsZW5kZWQiIHRvb2xraXQsIGFkZCAtYXJjaCBnZW5lcmljCiMgICAqYWZ0ZXIqIC1mYXN0IGFuZCBpbnZva2UgJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhLWNjYycgbWFudWFsbHkuCiMKIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiJsaW51eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYStid3gtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAoibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKCiMgYXNzZW1ibGVyIHZlcnNpb25zIC0tIGN1cnJlbnRseSBkZWZ1bmN0OgojIyJPcGVuQlNELWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6OjoodW5rbm93bik6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyOiR7YWxwaGFfYXNtfSIsCgojIFRoZSBpbnRlbCBib3hlcyA6LSksIEl0IHdvdWxkIGJlIHdvcnRoIHNlZWluZyBpZiBic2RpLWdjYyBjYW4gdXNlIHRoZQojIGJuODYtZWxmLm8gZmlsZSBmaWxlIHNpbmNlIGl0IGlzIGhhbmQgdHdlYWtlZCBhc3NlbWJsZXIuCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBlbnRpdW0iLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcHJvIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWNwdT1wZW50aXVtcHJvIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtazYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PWs2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW00ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW00ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY24iLAoibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW00ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfSIsCiJsaW51eC1taXBzZWwiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LW1pcHMiLCAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYyIsICAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6YXNtL2xpbnV4X3BwYzMyLm86Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYzY0IiwgICJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOmFzbS9saW51eF9wcGM2NC5vOjo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LW02OGsiLCAgICJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6OkJOX0xMT05HOjoiLAoibGludXgtczM5MCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtRE5PX0FTTSAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXMzOTB4IiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1ETk9fQVNNIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkc6Ojo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0IiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgUkM0X0NIQVI6YXNtL2lhNjQubzo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtaWE2NC1lY2MiLCAgICJlY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBSQzRfQ0hBUjphc20vaWE2NC5vOjo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC14ODZfNjQiLCAiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGwgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIFJDNF9DSEFSIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOmFzbS94ODZfNjQtZ2NjLm86Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJOZXRCU0Qtc3BhcmMiLAkiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW12OCAtV2FsbCAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTDo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiTmV0QlNELW02OCIsCSJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTDo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiTmV0QlNELXg4NiIsCSJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbTQ4NiAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJGcmVlQlNELWVsZiIsICAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbTQ4NiAtV2FsbDo6LXB0aHJlYWQgLURfUkVFTlRSQU5UIC1EX1RIUkVBRF9TQUZFIC1EX1RIUkVBRFNBRkU6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkZyZWVCU0Qtc3BhcmM2NCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1wdGhyZWFkIC1EX1JFRU5UUkFOVCAtRF9USFJFQURfU0FGRSAtRF9USFJFQURTQUZFOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiRnJlZUJTRC1pYTY0IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBSQzRfQ0hBUjphc20vaWE2NC1jcHAubzo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJGcmVlQlNEIiwgICAgICAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbTQ4NiAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219IiwKImJzZGktZ2NjIiwgICAgICJnY2M6LU8zIC1mZmFzdC1tYXRoIC1ETF9FTkRJQU4gLURQRVJMNSAtbTQ4Njo6KHVua25vd24pOjo6UlNBX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9ic2RpX2FzbX0iLAoiYnNkaS1lbGYtZ2NjIiwgICAgICJnY2M6LURQRVJMNSAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbTQ4NiAtV2FsbDo6KHVua25vd24pOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibmV4dHN0ZXAiLAkiY2M6LU8gLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKIm5leHRzdGVwMy4zIiwJImNjOi1PMyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBOQ1IgTVAtUkFTIFVOSVggdmVyIDAyLjAzLjAxCiJuY3Itc2NkZSIsImNjOi1PNiAtWGEgLUhvZmY9QkVIQVZFRCAtNjg2IC1Id2lkZSAtSGl3OjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsIC1sYzg5OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIFFOWCA0CiJxbng0IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU86Oih1bmtub3duKTo6OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoKIyBRTlggNgoicW54NiIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPUzo6KHVua25vd24pOjotbHNvY2tldDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKCiMgTGludXggb24gQVJNCiJsaW51eC1lbGYtYXJtIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6OjpCTl9MTE9ORzo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgU0NPL0NhbGRlcmEgdGFyZ2V0cy4KIwojIE9yaWdpbmFsbHkgd2UgaGFkIGxpa2UgdW5peHdhcmUtKiwgdW5peHdhcmUtKi1wZW50aXVtLCB1bml4d2FyZS0qLXA2LCBldGMuCiMgTm93IHdlIG9ubHkgaGF2ZSBibGVuZGVkIHVuaXh3YXJlLSogYXMgaXQncyB0aGUgb25seSBvbmUgdXNlZCBieSAuL2NvbmZpZy4KIyBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSwgYnlwYXNzIC4vY29uZmlnCiMgYW5kICcuL0NvbmZpZ3VyZSB1bml4d2FyZS03IC1LcGVudGl1bV9wcm8nIG9yIHdoYXRldmVyIGFwcHJvcHJpYXRlLgojIE5vdGUgdGhhdCBub3QgYWxsIHRhcmdldHMgaW5jbHVkZSBhc3NlbWJsZXIgc3VwcG9ydC4gTW9zdGx5IGJlY2F1c2Ugb2YKIyBsYWNrIG9mIG1vdGl2YXRpb24gdG8gc3VwcG9ydCBvdXQtb2YtZGF0ZSBwbGF0Zm9ybXMgd2l0aCBvdXQtb2YtZGF0ZQojIGNvbXBpbGVyIGRyaXZlcnMgYW5kIGFzc2VtYmxlcnMuIFRpbSBSaWNlIDx0aW1AbXVsdGl0YWxlbnRzLm5ldD4gaGFzCiMgcGF0aWVudGx5IGFzc2lzdGVkIHRvIGRlYnVnIG1vc3Qgb2YgaXQuCiMKIyBVbml4V2FyZSAyLjB4IGZhaWxzIGRlc3Rlc3Qgd2l0aCAtTy4KInVuaXh3YXJlLTIuMCIsImNjOi1ERklMSU9fSCAtRE5PX1NUUklOR1NfSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtMi4xIiwiY2M6LU8gLURGSUxJT19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS03IiwiY2M6LU8gLURGSUxJT19IIC1LYWxsb2NhOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYICR7eDg2X2djY19kZXN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjUtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJ1bml4d2FyZS03LWdjYyIsImdjYzotRExfRU5ESUFOIC1ERklMSU9fSCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW00ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmdudS1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIk9wZW5VTklYLTgiLCJjYzotTyAtREZJTElPX0ggLUthbGxvY2E6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIk9wZW5VTklYLTgtZ2NjIiwiZ2NjOi1PIC1ERklMSU9fSCAtZm9taXQtZnJhbWUtcG9pbnRlcjo6LXB0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCAke3g4Nl9nY2NfZGVzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnI1LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic2NvMy1nY2MiLCAgImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURzc2l6ZV90PWludCAtRE5PX1NZU19VTl9IOjoodW5rbm93bik6Oi1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsICMgdGhlIFNDTyBhc3NlbWJsZXIgZG9lc24ndCBzZWVtIHRvIGxpa2Ugb3VyIGFzc2VtYmxlciBmaWxlcyAuLi4KIyBTQ08gNSAtIEJlbiBMYXVyaWUgPGJlbkBhbGdyb3VwLmNvLnVrPiBzYXlzIHRoZSAtTyBicmVha3MgdGhlIFNDTyBjYy4KInNjbzUtY2MiLCAgImNjOi1iZWxmOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic2NvNS1nY2MiLCAgImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoKIyBJQk0ncyBBSVguCiJhaXgtZ2NjIiwgICJnY2M6LU8gLURCX0VORElBTjo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6YXNtL2FpeF9wcGMzMi5vOjo6Ojo6Ojo6ZGxmY246IiwKImFpeDQzLWNjIiwgImNjOi1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQ6Oih1bmtub3duKTo6OkJOX0xMT05HIFJDNF9DSEFSOmFzbS9haXhfcHBjMzIubzo6Ojo6Ojo6OmRsZmNuOmFpeC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6YXNtL2FpeF9wcGMzMi5vOjo6Ojo6Ojo6ZGxmY246YWl4LXNoYXJlZDo6LXEzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOmFzbS9haXhfcHBjNjQubzo6Ojo6Ojo6OmRsZmNuOmFpeC1zaGFyZWQ6Oi1xNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YIDY0IiwKCiMKIyBDcmF5IFQ5MCBhbmQgc2ltaWxhciAoU0RTQykKIyBJdCdzIEJpZy1lbmRpYW4sIGJ1dCB0aGUgYWxnb3JpdGhtcyB3b3JrIHByb3Blcmx5IHdoZW4gQl9FTkRJQU4gaXMgTk9UCiMgZGVmaW5lZC4gIFRoZSBUOTAgaW50cyBhbmQgbG9uZ3MgYXJlIDggYnl0ZXMgbG9uZywgYW5kIGFwcGFyZW50bHkgdGhlCiMgQl9FTkRJQU4gY29kZSBhc3N1bWVzIDQgYnl0ZSBpbnRzLiAgRm9ydHVuYXRlbHksIHRoZSBub24tQl9FTkRJQU4gYW5kCiMgbm9uIExfRU5ESUFOIGNvZGUgYWxpZ25zIHRoZSBieXRlcyBpbiBlYWNoIHdvcmQgY29ycmVjdGx5LgojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIGlzIHRvIGF2b2lkIHR3byBmYXRhbCBjb21waWxlciBlcnJvcnM6CiMnVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgYml0IGZpZWxkIGlzIG5vdCBhbGxvd2VkLiAnCiMnQW4gZXhwcmVzc2lvbiB3aXRoIGJpdCBmaWVsZCBleGlzdHMgYXMgdGhlIG9wZXJhbmQgb2YgInNpemVvZiIgJwojICh3cml0dGVuIGJ5IFdheW5lIFNjaHJvZWRlciA8c2Nocm9lZGVAU0RTQy5FRFU+KQojCiMgajkwIGlzIGNvbnNpZGVyZWQgdGhlIGJhc2UgbWFjaGluZSB0eXBlIGZvciB1bmljb3MgbWFjaGluZXMsCiMgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIG5vdyBjYWxsZWQgImNyYXktajkwIiAuLi4KImNyYXktajkwIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UOjo6IiwKCiMKIyBDcmF5IFQzRSAoUmVzZWFyY2ggQ2VudGVyIEp1ZWxpY2gsIGJlY2ttYW5AYWNsLmxhbmwuZ292KQojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIHdhcyB3cml0dGVuIGZvciB0aGUgQzkwIChpdCBzZWVtcykuICBJIGFkZGVkCiMgYW5vdGhlciB1c2UuICBCYXNpY2FsbHksIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIFQzRSB1c2VzIHNvbWUgYml0IGZpZWxkcwojIGZvciBzb21lIHN0X2FkZHIgc3R1ZmYsIGFuZCB0aGVuIHNpemVvZiBhbmQgYWRkcmVzcy1vZiBmYWlscwojIEkgY291bGQgbm90IHVzZSB0aGUgYW1zL2FscGhhLm8gb3B0aW9uIGJlY2F1c2UgdGhlIENyYXkgYXNzZW1ibGVyLCAnY2FtJwojIGRpZCBub3QgbGlrZSBpdC4KImNyYXktdDNlIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDo6OiIsCgojIERHVVgsIDg4MTAwLgoiZGd1eC1SMy1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LXg4Ni1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCgojIFNpbml4L1JlbGlhbnRVTklYIFJNNDAwCiMgTk9URTogVGhlIENEUysrIENvbXBpbGVyIHVwIHRvIFYyLjBCc29tZXRoaW5nIGhhcyB0aGUgSVJJWF9DQ19CVUcgb3B0aW1pemVyIHByb2JsZW0uIEJldHRlciB1c2UgLWcgICovCiJSZWxpYW50VU5JWCIsImNjOi1LUElDIC1nIC1EVEVSTUlPUyAtREJfRU5ESUFOOjotS3RocmVhZDpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6Qk5fTExPTkcgREVTX1BUUiBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFI6Ojo6Ojo6Ojo6ZGxmY246cmVsaWFudHVuaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiU0lOSVgiLCJjYzotTzo6KHVua25vd24pOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoiU0lOSVgtTiIsIi91c3IvdWNiL2NjOi1PMiAtbWlzYWxpZ25lZDo6KHVua25vd24pOjotbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoKIyBTSUVNRU5TIEJTMjAwMC9PU0Q6IGFuIEVCQ0RJQy1iYXNlZCBtYWluZnJhbWUKIkJTMjAwMC1PU0QiLCJjODk6LU8gLVhMTE1MIC1YTExNSyAtWEwgLURCX0VORElBTiAtRFRFUk1JT1MgLURDSEFSU0VUX0VCQ0RJQzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIE9TLzM5MCBVbml4IGFuIEVCQ0RJQy1iYXNlZCBVbml4IHN5c3RlbSBvbiBJQk0gbWFpbmZyYW1lCiMgWW91IG5lZWQgdG8gY29tcGlsZSB1c2luZyB0aGUgYzg5LnNoIHdyYXBwZXIgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUKIyBJQk0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgLUwgc3dpdGNoIGFmdGVyIGFueSBvYmplY3QgbW9kdWxlcy4KIwoiT1MzOTAtVW5peCIsImM4OS5zaDotTyAtREJfRU5ESUFOIC1EQ0hBUlNFVF9FQkNESUMgLUROT19TWVNfUEFSQU1fSCAgLURfQUxMX1NPVVJDRTo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBXaW5kb3dzIE5ULCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA0LjAKCiJWQy1OVCIsImNsOjo6OldJTk5UOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306Ojo6Ojo6Ojo6d2luMzIiLAoiVkMtQ0UiLCJjbDo6OjpXSU5DRTo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9Ojo6Ojo6Ojo6OndpbjMyIiwKIlZDLVdJTjMyIiwiY2w6Ojo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfTo6Ojo6Ojo6Ojp3aW4zMiIsCiJWQy1XSU4xNiIsImNsOjo6KHVua25vd24pOldJTjE2OjpNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFRISVJUWV9UV09fQklUOjo6IiwKIlZDLVczMS0xNiIsImNsOjo6KHVua25vd24pOldJTjE2OjpCTl9MTE9ORyBNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFNJWFRFRU5fQklUOjo6IiwKIlZDLVczMS0zMiIsImNsOjo6OldJTjE2OjpCTl9MTE9ORyBNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFRISVJUWV9UV09fQklUOjo6IiwKIlZDLU1TRE9TIiwiY2w6OjoodW5rbm93bik6TVNET1M6OkJOX0xMT05HIE1EMl9DSEFSIERFU19VTlJPTEwgREVTX1BUUiBSQzRfSU5ERVggU0lYVEVFTl9CSVQ6OjoiLAoKIyBCb3JsYW5kIEMrKyA0LjUKIkJDLTMyIiwiYmNjMzI6Ojo6V0lOMzI6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk46Ojo6Ojo6Ojo6d2luMzIiLAoiQkMtMTYiLCJiY2M6OjoodW5rbm93bik6V0lOMTY6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIFNJWFRFRU5fQklUOjo6IiwKCiMgTWluR1cKIm1pbmd3IiwgImdjYzotRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtbW5vLWN5Z3dpbiAtV2FsbDo6Ok1JTkdXMzI6LW1uby1jeWd3aW4gLWx3c29jazMyIC1sZ2RpMzI6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219OndpbjMyOjo6Oi5kbGwiLAoKIyBVV0lOIAoiVVdJTiIsICJjYzotRFRFUk1JT1MgLURMX0VORElBTiAtTyAtV2FsbDo6OlVXSU46OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6Ojo6Ojo6Ojp3aW4zMiIsCgojIEN5Z3dpbgoiQ3lnd2luLXByZTEuMyIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6Ojo6Ojo6Ojp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfb3V0X2FzbX06d2luMzI6Y3lnd2luLXNoYXJlZDo6Oi5kbGwiLAoiZGVidWctQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZyAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6OjpDWUdXSU4zMjo6Ojp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCgojIE5ldFdhcmUgZnJvbSBEYXZpZCBXYXJkIChkc3dhcmRAbm92ZWxsLmNvbSkgLSByZXF1aXJlcyBNZXRyb1dlcmtzIE5MTSBkZXZlbG9wbWVudCB0b29scwojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6OiR7eDg2X2djY19vcHRzfTo6OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzIgLVdhbGw6OjpNU0RPUzotTC9kZXYvZW52L1dBVFRfUk9PVC9saWIgLWx3YXR0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6Ojo6Ojo6OjoiLAoKIyBVbHRyaXggZnJvbSBCZXJuaGFyZCBTaW1vbiA8c2ltb25AemlkLnR1d2llbi5hYy5hdD4KInVsdHJpeC1jYyIsImNjOi1zdGQxIC1PIC1PbGltaXQgMjUwMCAtRExfRU5ESUFOOjoodW5rbm93bik6Ojo6Ojo6IiwKInVsdHJpeC1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAojIEsmUiBDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHlvdSBuZWVkIGdjYyBvbiBvbGQgVWx0cml4IGluc3RhbGxhdGlvbnMKIyMidWx0cml4IiwiY2M6LU8yIC1ETk9QUk9UTyAtRE5PQ09OU1QgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCgojIFNvbWUgT3BlbkJTRCBmcm9tIEJvYiBCZWNrIDxiZWNrQG9idHVzZS5jb20+CiJPcGVuQlNEIiwJCSJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiT3BlbkJTRC1hbHBoYSIsCSJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyOjo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELWkzODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELW02OGsiLAkJImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOjo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELW04OGsiLAkJImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOjo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELW1pcHMiLAkJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOjo6Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELXBvd2VycGMiLAkiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6Ojo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIk9wZW5CU0Qtc3BhcmMiLAkiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6OmFzbS9kZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIk9wZW5CU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQgREVTX1BUUiBERVNfUklTQzIgQkZfUFRSOjphc20vZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuQlNELXZheCIsCQkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDo6Ojo6Ojo6OjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiT3BlbkJTRC1ocHBhIiwJCSJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6Ojo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMjIE1hY09TIFggKGEuay5hLiBSaGFwc29keSBvciBEYXJ3aW4pIHNldHVwCiJyaGFwc29keS1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOk1BQ09TWF9SSEFQU09EWTo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKImRhcndpbi1wcGMtY2MiLCJjYzotTzMgLWZuby1jb21tb24gLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOmFzbS9vc3hfcHBjMzIubzo6Ojo6Ojo6OjpkYXJ3aW4tc2hhcmVkOi1mUElDOjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLWNvbW1vbiAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Ojo6Ojo6Ojo6OmRhcndpbi1zaGFyZWQ6LWZQSUM6Oi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKCiMjIyMjIEEvVVgKImF1eDMtZ2NjIiwiZ2NjOi1PMiAtRFRFUk1JTzo6KHVua25vd24pOkFVWDotbGJzZDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjoiLAoKIyMjIyMgU29ueSBORVdTLU9TIDQueAoibmV3c29zNC1nY2MiLCJnY2M6LU8gLURCX0VORElBTjo6KHVua25vd24pOk5FV1M0Oi1sbWxkIC1saWJlcnR5OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OjoiLAoKIyMjIyMgR05VIEh1cmQKImh1cmQteDg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQyIsCgojIyMjIyBPUy8yIEVNWAoiT1MyLUVNWCIsICJnY2M6Ojo6Ojo6OiIsCgojIyMjIyBWeFdvcmtzIGZvciB2YXJpb3VzIHRhcmdldHMKInZ4d29ya3MtcHBjNDA1IiwiY2NwcGM6LWcgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNDA1IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MCIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIFwkKERFQlVHX0ZMQUcpOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjNzUwLWRlYnVnIiwiY2NwcGM6LWFuc2kgLW5vc3RkaW5jIC1EUFBDNzUwIC1EX1JFRU5UUkFOVCAtZnZvbGF0aWxlIC1mbm8tYnVpbHRpbiAtZm5vLWZvci1zY29wZSAtZnNpZ25lZC1jaGFyIC1XYWxsIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURERUJVRyAtZzo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzg2MCIsImNjcHBjOi1ub3N0ZGluYyAtbXNvZnQtZmxvYXQgLURDUFU9UFBDODYwIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLW1pcHNsZSIsImNjbWlwczotQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1ETF9FTkRJQU4gLUVMIC1XbCwtRUwgLW1pcHMyIC1tbm8tYnJhbmNoLWxpa2VseSAtRyAwIC1mbm8tYnVpbHRpbiAtbXNvZnQtZmxvYXQgLURDUFU9TUlQUzMyIC1ETUlQU0VMIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6Ojo6Ojo6Ojo6Ojo6cmFubGlibWlwczoiLAoKIyMjIyMgQ29tcGFxIE5vbi1TdG9wIEtlcm5lbCAoVGFuZGVtKQoidGFuZGVtLWM4OSIsImM4OTotV3cgLURfX1RBTkRFTSAtRF9YT1BFTl9TT1VSQ0UgLURfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgLURfVEFOREVNX1NPVVJDRSAtREJfRU5ESUFOOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVDo6OiIsCgopOwoKbXkgQE1LMU1GX0J1aWxkcz1xdyhWQy1OVCBWQy1DRSBWQy1XSU4zMiBWQy1XSU4xNiBWQy1XMzEtMTYgVkMtVzMxLTMyIFZDLU1TRE9TCglCQy0zMiBCQy0xNiBNaW5ndzMyIE9TMi1FTVggbmV0d2FyZS1jbGliIG5ldHdhcmUtbGliYyk7CgpteSAkaWR4ID0gMDsKbXkgJGlkeF9jYyA9ICRpZHgrKzsKbXkgJGlkeF9jZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfdW5pc3RkID0gJGlkeCsrOwpteSAkaWR4X3RocmVhZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zeXNfaWQgPSAkaWR4Kys7Cm15ICRpZHhfbGZsYWdzID0gJGlkeCsrOwpteSAkaWR4X2JuX29wcyA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9iZl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfbWQ1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9zaGExX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jYXN0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzRfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JtZDE2MF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9kc29fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF90YXJnZXQgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9sZGZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2V4dGVuc2lvbiA9ICRpZHgrKzsKbXkgJGlkeF9yYW5saWIgPSAkaWR4Kys7Cm15ICRpZHhfYXJmbGFncyA9ICRpZHgrKzsKCm15ICRwcmVmaXg9IiI7Cm15ICRvcGVuc3NsZGlyPSIiOwpteSAkZXhlX2V4dD0iIjsKbXkgJGluc3RhbGxfcHJlZml4PSIiOwpteSAkbm9fdGhyZWFkcz0wOwpteSAkbm9fc2hhcmVkPTE7Cm15ICR6bGliPTA7Cm15ICRub19rcmI1PTA7Cm15ICR0aHJlYWRzPTA7Cm15ICRub19hc209MDsKbXkgJG5vX2Rzbz0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZS5zc2wiOwpteSAkZGVzX2xvY2w9ImNyeXB0by9kZXMvZGVzX2xvY2wuaCI7Cm15ICRkZXMJPSJjcnlwdG8vZGVzL2Rlcy5oIjsKbXkgJGJuCT0iY3J5cHRvL2JuL2JuLmgiOwpteSAkbWQyCT0iY3J5cHRvL21kMi9tZDIuaCI7Cm15ICRyYzQJPSJjcnlwdG8vcmM0L3JjNC5oIjsKbXkgJHJjNF9sb2NsPSJjcnlwdG8vcmM0L3JjNF9sb2NsLmgiOwpteSAkaWRlYQk9ImNyeXB0by9pZGVhL2lkZWEuaCI7Cm15ICRyYzIJPSJjcnlwdG8vcmMyL3JjMi5oIjsKbXkgJGJmCT0iY3J5cHRvL2JmL2JmX2xvY2wuaCI7Cm15ICRibl9hc20JPSJibl9hc20ubyI7Cm15ICRkZXNfZW5jPSJkZXNfZW5jLm8gZmNyeXB0X2IubyI7Cm15ICRiZl9lbmMJPSJiZl9lbmMubyI7Cm15ICRjYXN0X2VuYz0iY19lbmMubyI7Cm15ICRyYzRfZW5jPSJyYzRfZW5jLm8iOwpteSAkcmM1X2VuYz0icmM1X2VuYy5vIjsKbXkgJG1kNV9vYmo9IiI7Cm15ICRzaGExX29iaj0iIjsKbXkgJHJtZDE2MF9vYmo9IiI7Cm15ICRwcm9jZXNzb3I9IiI7Cm15ICRkZWZhdWx0X3JhbmxpYjsKbXkgJHBlcmw7CgpteSAkbm9fc3NsMj0wOwpteSAkbm9fc3NsMz0wOwpteSAkbm9fdGxzMT0wOwpteSAkbm9fbWQ1PTA7Cm15ICRub19zaGE9MDsKbXkgJG5vX3JzYT0wOwpteSAkbm9fZGg9MDsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwoKJnVzYWdlIGlmICgkI0FSR1YgPCAwKTsKCm15ICRmbGFnczsKbXkgJGRlcGZsYWdzOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKbXkgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7Cm15ICRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwpteSAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzOwpteSAkbGliczsKbXkgJGxpYmtyYjU9IiI7Cm15ICR0YXJnZXQ7Cm15ICRvcHRpb25zOwpteSAkc3ltbGluazsKbXkgJG1ha2VfZGVwZW5kPTA7Cm15ICV3aXRoYXJncz0oKTsKCm15IEBhcmd2Y29weT1AQVJHVjsKbXkgJGFyZ3ZzdHJpbmc9IiI7Cm15ICRhcmd2X3VucHJvY2Vzc2VkPTE7Cgp3aGlsZSgkYXJndl91bnByb2Nlc3NlZCkKCXsKCSRmbGFncz0iIjsKCSRkZXBmbGFncz0iIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX290aGVyX2RlZmluZXM9IiI7CgkkbGlicz0iIjsKCSR0YXJnZXQ9IiI7Cgkkb3B0aW9ucz0iIjsKCSRzeW1saW5rPTE7CgoJJGFyZ3ZfdW5wcm9jZXNzZWQ9MDsKCSRhcmd2c3RyaW5nPWpvaW4oJyAnLEBhcmd2Y29weSk7CgpQUk9DRVNTX0FSR1M6Cglmb3JlYWNoIChAYXJndmNvcHkpCgkJewoJCXMgL14tbm8tL25vLS87ICMgc29tZSBwZW9wbGUganVzdCBjYW4ndCByZWFkIHRoZSBpbnN0cnVjdGlvbnMKCQlpZiAoL14tLXRlc3Qtc2FuaXR5JC8pCgkJCXsKCQkJZXhpdCgmdGVzdF9zYW5pdHkoKSk7CgkJCX0KCQllbHNpZiAoL15uby1hc20kLykKCQkgCXsKCQkJJG5vX2FzbT0xOwoJCQkjJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fQVNNICI7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19BU01cbiI7CgkJCX0KCQllbHNpZiAoL15uby1lcnIkLykKCQkgCXsKCQkJJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRVJSICI7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19FUlJcbiI7CgkJCX0KCQllbHNpZiAoL15uby1ody0oLispJC8pCgkJCXsKCQkJbXkgJGh3PSQxOwoJCQkkaHcgPX4gdHIvW2Etel0vW0EtWl0vOwoJCQkjJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fSFdfJGh3ICI7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19IV18kaHdcbiI7CgkJCX0KCQllbHNpZiAoL15uby1odyQvKQoJCQl7CgkJCSMkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19IVyAiOwoJCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fSFdcbiI7CgkJCX0KCQllbHNpZiAoL15uby1kc28kLykKCQkJeyAkbm9fZHNvPTE7IH0KCQllbHNpZiAoL15uby1rcmI1JC8pCgkJCXsgJG5vX2tyYjU9MTsgfQoJCWVsc2lmICgvXm5vLXRocmVhZHMkLykKCQkJeyAkbm9fdGhyZWFkcz0xOyB9CgkJZWxzaWYgKC9edGhyZWFkcyQvKQoJCQl7ICR0aHJlYWRzPTE7IH0KCQllbHNpZiAoL15uby1zaGFyZWQkLykKCQkJeyAkbm9fc2hhcmVkPTE7IH0KCQllbHNpZiAoL15zaGFyZWQkLyB8fCAvXi1zaGFyZWQkLyB8fCAvXi0tc2hhcmVkJC8pCgkJCXsgJG5vX3NoYXJlZD0wOyB9CgkJZWxzaWYgKC9ebm8temxpYiQvKQoJCQl7ICR6bGliPTA7IH0KCQllbHNpZiAoL156bGliJC8pCgkJCXsgJHpsaWI9MTsgfQoJCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCQl7ICR6bGliPTI7IH0KCQllbHNpZiAoL15uby1zeW1saW5rcyQvKQoJCQl7ICRzeW1saW5rPTA7IH0KCQllbHNpZiAoL15uby1zc2wkLykKCQkJeyAkbm9fc3NsMiA9ICRub19zc2wzID0gMTsgfQoJCWVsc2lmICgvXm5vLXNzbDIkLykKCQkJeyAkbm9fc3NsMiA9IDE7IH0KCQllbHNpZiAoL15uby1zc2wzJC8pCgkJCXsgJG5vX3NzbDMgPSAxOyB9CgkJZWxzaWYgKC9ebm8tdGxzMT8kLykKCQkJeyAkbm9fdGxzMSA9IDE7IH0KCQllbHNpZiAoL15uby0oLispJC8pCgkJCXsKCQkJbXkgJGFsZ289JDE7CgkJCXB1c2ggQHNraXAsJGFsZ287CgkJCSRhbGdvID1+IHRyL1thLXpdL1tBLVpdLzsKCQkJIyRmbGFncyAuPSAiLURPUEVOU1NMX05PXyRhbGdvICI7CgkJCSMkZGVwZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT18kYWxnbyAiOwoJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRhbGdvXG4iOwoJCQlpZiAoJGFsZ28gZXEgIlJJSk5EQUVMIikKCQkJCXsKCQkJCXB1c2ggQHNraXAsICJhZXMiOwoJCQkJIyRmbGFncyAuPSAiLURPUEVOU1NMX05PX0FFUyAiOwoJCQkJIyRkZXBmbGFncyAuPSAiLURPUEVOU1NMX05PX0FFUyAiOwoJCQkJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19BRVNcbiI7CgkJCQl9CgkJCWlmICgkYWxnbyBlcSAiREVTIikKCQkJCXsKCQkJCXB1c2ggQHNraXAsICJtZGMyIjsKCQkJCSRvcHRpb25zIC49ICIgbm8tbWRjMiI7CgkJCQkjJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fTURDMiAiOwoJCQkJIyRkZXBmbGFncyAuPSAiLURPUEVOU1NMX05PX01EQzIgIjsKCQkJCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fTURDMlxuIjsKCQkJCX0KCQkJaWYgKCRhbGdvIGVxICJFQyIpCgkJCQl7CgkJCQlwdXNoIEBza2lwLCAiZWNkc2EiOwoJCQkJcHVzaCBAc2tpcCwgImVjZGgiOwoJCQkJJG9wdGlvbnMgLj0gIiBuby1lY2RzYSI7CgkJCQkkb3B0aW9ucyAuPSAiIG5vLWVjZGgiOwoJCQkJJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRUNEU0EgIjsKCQkJCSRmbGFncyAuPSAiLURPUEVOU1NMX05PX0VDREggIjsKCQkJCSRkZXBmbGFncyAuPSAiLURPUEVOU1NMX05PX0VDRFNBICI7CgkJCQkkZGVwZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19FQ0RIICI7CgkJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PX0VDRFNBXG4iOwoJCQkJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19FQ0RIXG4iOwoJCQkJfQoJCQlpZiAoJGFsZ28gZXEgIlNIQSIgfHwgJGFsZ28gZXEgIlNIQTEiKQoJCQkJewoJCQkJcHVzaCBAc2tpcCwgImVjZHNhIjsKCQkJCSRvcHRpb25zIC49ICIgbm8tZWNkc2EiOwoJCQkJJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRUNEU0EgIjsKCQkJCSRkZXBmbGFncyAuPSAiLURPUEVOU1NMX05PX0VDRFNBICI7CgkJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PX0VDRFNBXG4iOwoJCQkJfQoJCQlpZiAoJGFsZ28gZXEgIk1ENSIpCgkJCQl7CgkJCQkkbm9fbWQ1ID0gMTsKCQkJCX0KCQkJaWYgKCRhbGdvIGVxICJTSEEiKQoJCQkJewoJCQkJJG5vX3NoYSA9IDE7CgkJCQl9CgkJCWlmICgkYWxnbyBlcSAiUlNBIikKCQkJCXsKCQkJCSRub19yc2EgPSAxOwoJCQkJfQoJCQlpZiAoJGFsZ28gZXEgIkRIIikKCQkJCXsKCQkJCSRub19kaCA9IDE7CgkJCQl9CgkJCX0KCQllbHNpZiAoL15yZWNvbmZpZ3VyZS8gfHwgL15yZWNvbmYvKQoJCQl7CgkJCWlmIChvcGVuKElOLCI8JE1ha2VmaWxlIikpCgkJCQl7CgkJCQl3aGlsZSAoPElOPikKCQkJCQl7CgkJCQkJY2hvcDsKCQkJCQlpZiAoL15DT05GSUdVUkVfQVJHUz0oLiopLykKCQkJCQkJewoJCQkJCQkkYXJndnN0cmluZz0kMTsKCQkJCQkJQGFyZ3Zjb3B5PXNwbGl0KCcgJywkYXJndnN0cmluZyk7CgkJCQkJCWRpZSAiSW5jb3JyZWN0IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iCgkJCQkJCQlpZiAoZ3JlcCgvXnJlY29uZi8sQGFyZ3Zjb3B5KSk7CgkJCQkJCXByaW50ICJSZWNvbmZpZ3VyaW5nIHdpdGg6ICRhcmd2c3RyaW5nXG4iOwoJCQkJCQkkYXJndl91bnByb2Nlc3NlZD0xOwoJCQkJCQljbG9zZShJTik7CgkJCQkJCWxhc3QgUFJPQ0VTU19BUkdTOwoJCQkJCQl9CgkJCQkJfQoJCQkJY2xvc2UoSU4pOwoJCQkJfQoJCQlkaWUgIkluc3VmZmljaWVudCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIjsKCQkJfQoJCWVsc2lmICgvXjM4NiQvKQoJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9CgkJZWxzaWYgKC9ecnNhcmVmJC8pCgkJCXsKCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCgkJCSMgVGhlIGNoZWNrIGZvciB0aGUgb3B0aW9uIGlzIHRoZXJlIHNvIHNjcmlwdHMgYXJlbid0CgkJCSMgYnJva2VuCgkJCX0KCQllbHNpZiAoL15bLStdLykKCQkJewoJCQlpZiAoL14tW2xMXSguKikkLykKCQkJCXsKCQkJCSRsaWJzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi1bXi1dLyBvciAvXlwrLykKCQkJCXsKCQkJCSRmbGFncy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tLXByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLW9wZW5zc2xkaXI9KC4qKSQvKQoJCQkJewoJCQkJJG9wZW5zc2xkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0taW5zdGFsbC5wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGluc3RhbGxfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgta3JiNS0oZGlyfGxpYnxpbmNsdWRlfGZsYXZvcik9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJrcmI1LSIuJDF9PSQyOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCQlwcmludCBTVERFUlIgJHVzYWdlOwoJCQkJZXhpdCgxKTsKCQkJCX0KCQkJfQoJCWVsc2lmICgkXyA9fiAvXihbXjpdKyk6KC4rKSQvKQoJCQl7CgkJCWV2YWwgIlwkdGFibGV7XCQxfSA9IFwiJDJcIiI7ICMgYWxsb3cgJHh4eCBjb25zdHJ1Y3RzIGluIHRoZSBzdHJpbmcKCQkJJHRhcmdldD0kMTsKCQkJfQoJCWVsc2UKCQkJewoJCQlkaWUgInRhcmdldCBhbHJlYWR5IGRlZmluZWQgLSAkdGFyZ2V0XG4iIGlmICgkdGFyZ2V0IG5lICIiKTsKCQkJJHRhcmdldD0kXzsKCQkJfQoJCXVubGVzcyAoJF8gZXEgJHRhcmdldCkgewoJCQlpZiAoJG9wdGlvbnMgZXEgIiIpIHsKCQkJCSRvcHRpb25zID0gJF87CgkJCX0gZWxzZSB7CgkJCQkkb3B0aW9ucyAuPSAiICIuJF87CgkJCX0KCQl9Cgl9Cn0KCiRub19zc2wzPTEgaWYgKCRub19tZDUgfHwgJG5vX3NoYSk7CiRub19zc2wzPTEgaWYgKCRub19yc2EgJiYgJG5vX2RoKTsKCiRub19zc2wyPTEgaWYgKCRub19tZDUpOwokbm9fc3NsMj0xIGlmICgkbm9fcnNhKTsKCiRub190bHMxPTEgaWYgKCRub19tZDUgfHwgJG5vX3NoYSk7CiRub190bHMxPTEgaWYgKCRub19kaCk7CgppZiAoJG5vX3NzbDIpCgl7CglwdXNoIEBza2lwLCJTU0wyIjsKCSMkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19TU0wyICI7CgkjJGRlcGZsYWdzIC49ICItRE9QRU5TU0xfTk9fU1NMMiAiOwoJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT19TU0wyXG4iOwoJfQoKaWYgKCRub19zc2wzKQoJewoJcHVzaCBAc2tpcCwiU1NMMyI7CgkjJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fU1NMMyAiOwoJIyRkZXBmbGFncyAuPSAiLURPUEVOU1NMX05PX1NTTDMgIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fU1NMM1xuIjsKCX0KCmlmICgkbm9fdGxzMSkKCXsKCXB1c2ggQHNraXAsIlRMUzEiOwoJIyRmbGFncyAuPSAiLURPUEVOU1NMX05PX1RMUzEgIjsKCSMkZGVwZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19UTFMxICI7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PX1RMUzFcbiI7Cgl9CgppZiAoJHRhcmdldCBlcSAiVEFCTEUiKSB7Cglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludF90YWJsZV9lbnRyeSgkdGFyZ2V0KTsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgZXEgIkxJU1QiKSB7Cglmb3JlYWNoIChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnQ7CgkJcHJpbnQgIlxuIjsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7CgkkdGFyZ2V0ID0gIkN5Z3dpbiIuJDE7Cn0KCnByaW50ICJDb25maWd1cmluZyBmb3IgJHRhcmdldFxuIjsKCiZ1c2FnZSBpZiAoIWRlZmluZWQoJHRhYmxleyR0YXJnZXR9KSk7CgpteSAkSXNNSzFNRj1zY2FsYXIgZ3JlcCAvXiR0YXJnZXQkLyxATUsxTUZfQnVpbGRzOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iKTsKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJESkdQUCIpOwokb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiIGlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIik7CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCmNob3AgJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgPX4gL1wvJC87CmNob3AgJHByZWZpeCBpZiAkcHJlZml4ID1+IC9cLyQvOwoKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvc3NsIiBpZiAkb3BlbnNzbGRpciBlcSAiIjsKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5bYS16QS1aXTpbXFxcL10pLzsKCgpwcmludCAiSXNNSzFNRj0kSXNNSzFNRlxuIjsKCm15IEBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7Cm15ICRjYyA9ICRmaWVsZHNbJGlkeF9jY107Cm15ICRjZmxhZ3MgPSAkZmllbGRzWyRpZHhfY2ZsYWdzXTsKbXkgJHVuaXN0ZCA9ICRmaWVsZHNbJGlkeF91bmlzdGRdOwpteSAkdGhyZWFkX2NmbGFnID0gJGZpZWxkc1skaWR4X3RocmVhZF9jZmxhZ107Cm15ICRzeXNfaWQgPSAkZmllbGRzWyRpZHhfc3lzX2lkXTsKbXkgJGxmbGFncyA9ICRmaWVsZHNbJGlkeF9sZmxhZ3NdOwpteSAkYm5fb3BzID0gJGZpZWxkc1skaWR4X2JuX29wc107Cm15ICRibl9vYmogPSAkZmllbGRzWyRpZHhfYm5fb2JqXTsKbXkgJGRlc19vYmogPSAkZmllbGRzWyRpZHhfZGVzX29ial07Cm15ICRiZl9vYmogPSAkZmllbGRzWyRpZHhfYmZfb2JqXTsKJG1kNV9vYmogPSAkZmllbGRzWyRpZHhfbWQ1X29ial07CiRzaGExX29iaiA9ICRmaWVsZHNbJGlkeF9zaGExX29ial07Cm15ICRjYXN0X29iaiA9ICRmaWVsZHNbJGlkeF9jYXN0X29ial07Cm15ICRyYzRfb2JqID0gJGZpZWxkc1skaWR4X3JjNF9vYmpdOwokcm1kMTYwX29iaiA9ICRmaWVsZHNbJGlkeF9ybWQxNjBfb2JqXTsKbXkgJHJjNV9vYmogPSAkZmllbGRzWyRpZHhfcmM1X29ial07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyZmxhZ3MgPSAkZmllbGRzWyRpZHhfYXJmbGFnc107CgpteSAkbm9fc2hhcmVkX3dhcm49MDsKCiRjZmxhZ3M9IiRmbGFncyRjZmxhZ3MiIGlmICgkZmxhZ3MgbmUgIiIpOwoKIyBLZXJiZXJvcyBzZXR0aW5ncy4gIFRoZSBmbGF2b3IgbXVzdCBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUsIGVpdGhlciB0aHJvdWdoCiMgdGhlIHNjcmlwdCAiY29uZmlnIiBvciBtYW51YWxseS4KaWYgKCRub19rcmI1Cgl8fCAhZGVmaW5lZCgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0pCgl8fCAkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gZXEgIiIpCgl7CgkjJGNmbGFncz0iLURPUEVOU1NMX05PX0tSQjUgJGNmbGFncyI7Cgkkb3B0aW9ucy49IiBuby1rcmI1IiB1bmxlc3MgJG5vX2tyYjU7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PX0tSQjVcbiI7Cgl9CmVsc2UKCXsKCW15ICgkbHJlc29sdiwgJGxwYXRoLCAkbGV4dCk7CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW0hoXWVpbWRhbCQvKQoJCXsKCQlkaWUgIlNvcnJ5LCBIZWltZGFsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iOwoJCX0KCSMjIyMjIEhBQ0sgdG8gZm9yY2UgdXNlIG9mIEhlaW1kYWwuCgkjIyMjIyBXQVJOSU5HOiBTaW5jZSB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhZGVxdWF0ZSBzdXBwb3J0IGZvciBIZWltZGFsLAoJIyMjIyMgICAgICAgICAgdXNpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZC4gIFlvdSdsbCBoYXZlIHRvIG1ha2UKCSMjIyMjICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHlvdSBkbywgcGxlYXNlIHNlbmQKCSMjIyMjICAgICAgICAgIHBhdGNoZXMgdG8gb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15mb3JjZS1bSGhdZWltZGFsJC8pCgkJewoJCXdhcm4gIkhlaW1kYWwgaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZC4gIFlvdXIgYnVpbGQgV0lMTCBicmVha1xuIjsKCQl3YXJuICJJZiB5b3UgZml4IHRoZSBwcm9ibGVtcywgcGxlYXNlIHNlbmQgYSBwYXRjaCB0byBvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmdcbiI7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3IvaGVpbWRhbCIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaSAtbGtyYjUgLWxjb21fZXJyIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiI7CgkJJGNmbGFncz0iLURLUkI1X0hFSU1EQUwgJGNmbGFncyI7CgkJfQoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltNbV1bSWldW1R0XS8pCgkJewoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2tlcmJlcm9zIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gZXEgIiI7CgkJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9ID0gIi1MIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uCgkJCSIvbGliIC1sZ3NzYXBpX2tyYjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiI7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBob3BlZnVsbHkgdGhleSBhbHNvIHByb3ZpZGVkCgkjIGFueSBzeXN0ZW0tZGVwZW5kZW50IGNvbXBpbGVyIG9wdGlvbnMgdGhhdCBhcmUgbmVjZXNzYXJ5LgoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICRjZmxhZ3MiIDsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7Cgl9CmVsc2UKCXsKCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkdGhyZWFkX2NmbGFnICRjZmxhZ3MiOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKIwlteSAkZGVmOwojCWZvcmVhY2ggJGRlZiAoc3BsaXQgJyAnLCR0aHJlYWRfY2ZsYWcpCiMJCXsKIwkJaWYgKCRkZWYgPX4gcy9eLUQvLyAmJiAkZGVmICF+IC9eXy8pCiMJCQl7CiMJCQkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgJGRlZlxuIjsKIwkJCX0KIwkJfQoJfQkKCiRsZmxhZ3M9IiRsaWJzJGxmbGFncyIgaWYgKCRsaWJzIG5lICIiKTsKCmlmICgkbm9fYXNtKQoJewoJJGJuX29iaj0kZGVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0iIjsKCSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0iIjsKCX0KCmlmICghJG5vX3NoYXJlZCkKCXsKCSRjYXN0X29iaj0iIjsJIyBDQVNUIGFzc2VtYmxlciBpcyBub3QgUElDCgl9CgppZiAoJHRocmVhZHMpCgl7CgkjJGNmbGFncz0kdGhyZWFkX2NmbGFnczsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzIC49ICR0aHJlYWRfZGVmaW5lczsKCX0KCmlmICgkemxpYikKCXsKCSRjZmxhZ3MgPSAiLURaTElCICRjZmxhZ3MiOwoJJGNmbGFncyA9ICItRFpMSUJfU0hBUkVEICRjZmxhZ3MiIGlmICR6bGliID09IDI7CgkkbGZsYWdzID0gIiRsZmxhZ3MgLWx6IiBpZiAkemxpYiA9PSAxOwoJfQoKIyBZb3Ugd2lsbCBmaW5kIHNobGliX21hcmsxIGFuZCBzaGxpYl9tYXJrMiBleHBsYWluZWQgaW4gTWFrZWZpbGUub3JnCm15ICRzaGFyZWRfbWFyayA9ICIiOwppZiAoJHNoYXJlZF90YXJnZXQgZXEgIiIpCgl7Cgkkbm9fc2hhcmVkX3dhcm4gPSAxIGlmICEkbm9fc2hhcmVkOwoJJG5vX3NoYXJlZCA9IDE7Cgl9CmlmICghJG5vX3NoYXJlZCkKCXsKCWlmICgkc2hhcmVkX2NmbGFnIG5lICIiKQoJCXsKCQkkY2ZsYWdzID0gIiRzaGFyZWRfY2ZsYWcgLURPUEVOU1NMX1BJQyAkY2ZsYWdzIjsKCQl9Cgl9CgppZiAoJG5vX3NoYXJlZCkKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfTk9fRFlOQU1JQ19FTkdJTkUgJGNmbGFncyI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX0RZTkFNSUNfRU5HSU5FXG4iOwoJfQplbHNlCgl7CgkjJGNmbGFncz0iLURPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkUgJGNmbGFncyI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkVcbiI7Cgl9CgojIENvbXBpbGVyIGZpeC11cHMKaWYgKCR0YXJnZXQgPX4gL2ljYyQvKQoJewoJbXkoJGljY3Zlcik9YCRjYyAtViAyPiYxYDsKCWlmICgkaWNjdmVyID1+IC9WZXJzaW9uIChbMC05XSspXC4vKQl7ICRpY2N2ZXI9JDE7IH0KCWVsc2UJCQkJCXsgJGljY3Zlcj0wOyAgfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJfQoKaWYgKCRzeXNfaWQgbmUgIiIpCgl7CgkjJGNmbGFncz0iLURPUEVOU1NMX1NZU05BTUVfJHN5c19pZCAkY2ZsYWdzIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIjZGVmaW5lIE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkXG4iOwoJfQoKaWYgKCRyYW5saWIgZXEgIiIpCgl7CgkkcmFubGliID0gJGRlZmF1bHRfcmFubGliOwoJfQoKI215ICgkYm4xKT1zcGxpdCgvXHMrLywkYm5fb2JqKTsKIyRibjEgPSAiIiB1bmxlc3MgZGVmaW5lZCAkYm4xOwojJGJuMT0kYm5fYXNtIHVubGVzcyAoJGJuMSA9fiAvXC5vJC8pOwojJGJuX29iaj0iJGJuMSI7CgokYm5fb2JqID0gJGJuX2FzbSB1bmxlc3MgJGJuX29iaiBuZSAiIjsKIyBibjg2KiBpcyB0aGUgb25seSBvbmUgaW1wbGVtZW50aW5nIGJuXypfcGFydF93b3JkcwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fUEFSVF9XT1JEUyIgaWYgKCRibl9vYmogPX4gL2JuODYvKTsKCiRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmogPX4gL1wubyQvKTsKJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKJGNhc3Rfb2JqPSRjYXN0X2VuYwl1bmxlc3MgKCRjYXN0X29iaiA9fiAvXC5vJC8pOwokcmM0X29iaj0kcmM0X2VuYwl1bmxlc3MgKCRyYzRfb2JqID1+IC9cLm8kLyk7CiRyYzVfb2JqPSRyYzVfZW5jCXVubGVzcyAoJHJjNV9vYmogPX4gL1wubyQvKTsKaWYgKCRzaGExX29iaiA9fiAvXC5vJC8pCgl7CiMJJHNoYTFfb2JqPSRzaGExX2VuYzsKCSRjZmxhZ3MuPSIgLURTSEExX0FTTSI7Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CgojICJTdHJpbmdpZnkiIHRoZSBDIGZsYWdzIHN0cmluZy4gIFRoaXMgcGVybWl0cyBpdCB0byBiZSBtYWRlIHBhcnQgb2YgYSBzdHJpbmcKIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgokY2ZsYWdzID1+IHMvKFtcXFwiXSkvXFxcMS9nOwoKbXkgJHZlcnNpb24gPSAidW5rbm93biI7Cm15ICR2ZXJzaW9uX251bSA9ICJ1bmtub3duIjsKbXkgJG1ham9yID0gInVua25vd24iOwpteSAkbWlub3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX251bWJlciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25faGlzdG9yeSA9ICJ1bmtub3duIjsKbXkgJHNobGliX21ham9yID0gInVua25vd24iOwpteSAkc2hsaWJfbWlub3IgPSAidW5rbm93biI7CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2x2LmgnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIG9wZW5zc2x2Lmg6JCFcbiI7CndoaWxlICg8SU4+KQoJewoJJHZlcnNpb249JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5URVhULipPcGVuU1NMIChcUyspIC87CgkkdmVyc2lvbl9udW09JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5OVU1CRVIuKjB4KFxTKykvOwoJJHNobGliX3ZlcnNpb25fbnVtYmVyPSQxIGlmIC9TSExJQl9WRVJTSU9OX05VTUJFUiAqIihbXiJdKykiLzsKCSRzaGxpYl92ZXJzaW9uX2hpc3Rvcnk9JDEgaWYgL1NITElCX1ZFUlNJT05fSElTVE9SWSAqIihbXiJdKikiLzsKCX0KY2xvc2UoSU4pOwppZiAoJHNobGliX3ZlcnNpb25faGlzdG9yeSBuZSAiIikgeyAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IC49ICI6IjsgfQoKaWYgKCR2ZXJzaW9uID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJG1ham9yPSQxOwoJJG1pbm9yPSQyOwoJfQoKaWYgKCRzaGxpYl92ZXJzaW9uX251bWJlciA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRzaGxpYl9tYWpvcj0kMTsKCSRzaGxpYl9taW5vcj0kMjsKCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhbIAldKSRkaXIgL1wxLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglzL15DQz0uKiQvQ0M9ICRjYy87CglzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9ICRkZXBmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkJGX0VOQz0uKiQvQkZfRU5DPSAkYmZfb2JqLzsKCXMvXkNBU1RfRU5DPS4qJC9DQVNUX0VOQz0gJGNhc3Rfb2JqLzsKCXMvXlJDNF9FTkM9LiokL1JDNF9FTkM9ICRyYzRfb2JqLzsKCXMvXlJDNV9FTkM9LiokL1JDNV9FTkM9ICRyYzVfb2JqLzsKCXMvXk1ENV9BU01fT0JKPS4qJC9NRDVfQVNNX09CSj0gJG1kNV9vYmovOwoJcy9eU0hBMV9BU01fT0JKPS4qJC9TSEExX0FTTV9PQko9ICRzaGExX29iai87CglzL15STUQxNjBfQVNNX09CSj0uKiQvUk1EMTYwX0FTTV9PQko9ICRybWQxNjBfb2JqLzsKCXMvXlBST0NFU1NPUj0uKi9QUk9DRVNTT1I9ICRwcm9jZXNzb3IvOwoJcy9eUkFOTElCPS4qL1JBTkxJQj0gJHJhbmxpYi87CglzL15BUkZMQUdTPS4qL0FSRkxBR1M9ICRhcmZsYWdzLzsKCXMvXlBFUkw9LiovUEVSTD0gJHBlcmwvOwoJcy9eS1JCNV9JTkNMVURFUz0uKi9LUkI1X0lOQ0xVREVTPSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0vOwoJcy9eTElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87CglzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwoJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CglpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uZHlsaWIvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC5cJChTSExJQl9NQUpPUikgLnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LlwkKFNITElCX01BSk9SKS5keWxpYiAuZHlsaWIvOwoJCX0KCXMvXlNIQVJFRF9MREZMQUdTPS4qL1NIQVJFRF9MREZMQUdTPSRzaGFyZWRfbGRmbGFnLzsKCXByaW50IE9VVCAkXy4iXG4iOwoJfQpjbG9zZShJTik7CmNsb3NlKE9VVCk7CnJlbmFtZSgkTWFrZWZpbGUsIiRNYWtlZmlsZS5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlXG4iIGlmIC1lICRNYWtlZmlsZTsKcmVuYW1lKCIkTWFrZWZpbGUubmV3IiwkTWFrZWZpbGUpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGUubmV3XG4iOwoKcHJpbnQgIkNDICAgICAgICAgICAgPSRjY1xuIjsKcHJpbnQgIkNGTEFHICAgICAgICAgPSRjZmxhZ3NcbiI7CnByaW50ICJFWF9MSUJTICAgICAgID0kbGZsYWdzXG4iOwpwcmludCAiQk5fQVNNICAgICAgICA9JGJuX29ialxuIjsKcHJpbnQgIkRFU19FTkMgICAgICAgPSRkZXNfb2JqXG4iOwpwcmludCAiQkZfRU5DICAgICAgICA9JGJmX29ialxuIjsKcHJpbnQgIkNBU1RfRU5DICAgICAgPSRjYXN0X29ialxuIjsKcHJpbnQgIlJDNF9FTkMgICAgICAgPSRyYzRfb2JqXG4iOwpwcmludCAiUkM1X0VOQyAgICAgICA9JHJjNV9vYmpcbiI7CnByaW50ICJNRDVfT0JKX0FTTSAgID0kbWQ1X29ialxuIjsKcHJpbnQgIlNIQTFfT0JKX0FTTSAgPSRzaGExX29ialxuIjsKcHJpbnQgIlJNRDE2MF9PQkpfQVNNPSRybWQxNjBfb2JqXG4iOwpwcmludCAiUFJPQ0VTU09SICAgICA9JHByb2Nlc3NvclxuIjsKcHJpbnQgIlJBTkxJQiAgICAgICAgPSRyYW5saWJcbiI7CnByaW50ICJBUkZMQUdTICAgICAgID0kYXJmbGFnc1xuIjsKcHJpbnQgIlBFUkwgICAgICAgICAgPSRwZXJsXG4iOwpwcmludCAiS1JCNV9JTkNMVURFUyA9Iiwkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LCJcbiIKCWlmICR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gbmUgIiI7CgpteSAkZGVzX3B0cj0wOwpteSAkZGVzX3Jpc2MxPTA7Cm15ICRkZXNfcmlzYzI9MDsKbXkgJGRlc191bnJvbGw9MDsKbXkgJGJuX2xsPTA7Cm15ICRkZWZfaW50PTI7Cm15ICRyYzRfaW50PSRkZWZfaW50OwpteSAkbWQyX2ludD0kZGVmX2ludDsKbXkgJGlkZWFfaW50PSRkZWZfaW50OwpteSAkcmMyX2ludD0kZGVmX2ludDsKbXkgJHJjNF9pZHg9MDsKbXkgJHJjNF9jaHVuaz0wOwpteSAkYmZfcHRyPTA7Cm15IEB0eXBlPSgiY2hhciIsInNob3J0IiwiaW50IiwibG9uZyIpOwpteSAoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKTsKbXkgJGV4cG9ydF92YXJfYXNfZm49MDsKCm15ICRkZXNfaW50OwoKZm9yZWFjaCAoc29ydCBzcGxpdCgvXHMrLywkYm5fb3BzKSkKCXsKCSRkZXNfcHRyPTEgaWYgL0RFU19QVFIvOwoJJGRlc19yaXNjMT0xIGlmIC9ERVNfUklTQzEvOwoJJGRlc19yaXNjMj0xIGlmIC9ERVNfUklTQzIvOwoJJGRlc191bnJvbGw9MSBpZiAvREVTX1VOUk9MTC87CgkkZGVzX2ludD0xIGlmIC9ERVNfSU5ULzsKCSRibl9sbD0xIGlmIC9CTl9MTE9ORy87CgkkcmM0X2ludD0wIGlmIC9SQzRfQ0hBUi87CgkkcmM0X2ludD0zIGlmIC9SQzRfTE9ORy87CgkkcmM0X2lkeD0xIGlmIC9SQzRfSU5ERVgvOwoJJHJjNF9jaHVuaz0xIGlmIC9SQzRfQ0hVTksvOwoJJHJjNF9jaHVuaz0yIGlmIC9SQzRfQ0hVTktfTEwvOwoJJG1kMl9pbnQ9MCBpZiAvTUQyX0NIQVIvOwoJJG1kMl9pbnQ9MyBpZiAvTUQyX0xPTkcvOwoJJGlkZWFfaW50PTEgaWYgL0lERUFfU0hPUlQvOwoJJGlkZWFfaW50PTMgaWYgL0lERUFfTE9ORy87CgkkcmMyX2ludD0xIGlmIC9SQzJfU0hPUlQvOwoJJHJjMl9pbnQ9MyBpZiAvUkMyX0xPTkcvOwoJJGJmX3B0cj0xIGlmICRfIGVxICJCRl9QVFIiOwoJJGJmX3B0cj0yIGlmICRfIGVxICJCRl9QVFIyIjsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDEsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMSwwLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVRfTE9ORy87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKSBpZiAvVEhJUlRZX1RXT19CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDEsMCkgaWYgL1NJWFRFRU5fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwwLDEpIGlmIC9FSUdIVF9CSVQvOwoJJGV4cG9ydF92YXJfYXNfZm49MSBpZiAvRVhQT1JUX1ZBUl9BU19GTi87Cgl9CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2xjb25mLmguaW4nKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIGNyeXB0by9vcGVuc3NsY29uZi5oLmluOiQhXG4iOwp1bmxpbmsoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iIGlmIC1lICJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciOwpvcGVuKE9VVCwnPmNyeXB0by9vcGVuc3NsY29uZi5oLm5ldycpIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiI7CnByaW50IE9VVCAiLyogb3BlbnNzbGNvbmYuaCAqL1xuIjsKcHJpbnQgT1VUICIvKiBXQVJOSU5HOiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG9wZW5zc2xjb25mLmguaW4gYnkgQ29uZmlndXJlLiAqL1xuXG4iOwoKcHJpbnQgT1VUICIvKiBPcGVuU1NMIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOiAqL1xuIjsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfKC4qKS8jIGlmIGRlZmluZWQoT1BFTlNTTF8kMSkgXCZcJiAhZGVmaW5lZCgkMSlcbiMgIGRlZmluZSAkMVxuIyBlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPSAiICAgLyogbm8gY2lwaGVycyBleGNsdWRlZCAqL1xuIiBpZiAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyBlcSAiIjsKJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfc3lzX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwpwcmludCBPVVQgJG9wZW5zc2xfc3lzX2RlZmluZXM7CnByaW50IE9VVCAiI2lmbmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkRcblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpwcmludCBPVVQgIlxuI2VuZGlmIC8qIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORCAqL1xuIjsKcHJpbnQgT1VUICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpwcmludCBPVVQgJG9wZW5zc2xfb3RoZXJfZGVmaW5lcywiXG4iOwoKcHJpbnQgT1VUICIvKiBUaGUgT1BFTlNTTF9OT18qIG1hY3JvcyBhcmUgYWxzbyBkZWZpbmVkIGFzIE5PXyogaWYgdGhlIGFwcGxpY2F0aW9uXG4iOwpwcmludCBPVVQgIiAgIGFza3MgZm9yIGl0LiAgVGhpcyBpcyBhIHRyYW5zaWVudCBmZWF0dXJlIHRoYXQgaXMgcHJvdmlkZWQgZm9yIHRob3NlXG4iOwpwcmludCBPVVQgIiAgIHdobyBoYXZlbid0IGhhZCB0aGUgdGltZSB0byBkbyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBpbiB0aGVpclxuIjsKcHJpbnQgT1VUICIgICBhcHBsaWNhdGlvbnMuICAqL1xuIjsKcHJpbnQgT1VUICIjaWZkZWYgT1BFTlNTTF9BTEdPUklUSE1fREVGSU5FU1xuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zOwpwcmludCBPVVQgIiNlbmRpZlxuXG4iOwoKd2hpbGUgKDxJTj4pCgl7CglpZgkoL14jZGVmaW5lXHMrT1BFTlNTTERJUi8pCgkJeyBwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTERJUiBcIiRvcGVuc3NsZGlyXCJcbiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yID09IDM4Nik/CgkJCSJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytNRDJfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBNRDJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRtZDJfaW50XTsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0lERUFfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIElERUFfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRpZGVhX2ludF07fQoJZWxzaWYJKC9eI2RlZmluZVxzK1JDMl9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgUkMyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmMyX2ludF07fQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrQkZfUFRSLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDA7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAxOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSMlxuIiBpZiAkYmZfcHRyID09IDI7CgkgICAgICAgIH0KCWVsc2UKCQl7IHByaW50IE9VVCAkXzsgfQoJfQpjbG9zZShJTik7CmNsb3NlKE9VVCk7CnJlbmFtZSgiY3J5cHRvL29wZW5zc2xjb25mLmgiLCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgY3J5cHRvL29wZW5zc2xjb25mLmhcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oIjsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciLCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXdcbiI7CgoKIyBGaXggdGhlIGRhdGUKCnByaW50ICJTSVhUWV9GT1VSX0JJVF9MT05HIG1vZGVcbiIgaWYgJGI2NGw7CnByaW50ICJTSVhUWV9GT1VSX0JJVCBtb2RlXG4iIGlmICRiNjQ7CnByaW50ICJUSElSVFlfVFdPX0JJVCBtb2RlXG4iIGlmICRiMzI7CnByaW50ICJTSVhURUVOX0JJVCBtb2RlXG4iIGlmICRiMTY7CnByaW50ICJFSUdIVF9CSVQgbW9kZVxuIiBpZiAkYjg7CnByaW50ICJERVNfUFRSIHVzZWRcbiIgaWYgJGRlc19wdHI7CnByaW50ICJERVNfUklTQzEgdXNlZFxuIiBpZiAkZGVzX3Jpc2MxOwpwcmludCAiREVTX1JJU0MyIHVzZWRcbiIgaWYgJGRlc19yaXNjMjsKcHJpbnQgIkRFU19VTlJPTEwgdXNlZFxuIiBpZiAkZGVzX3Vucm9sbDsKcHJpbnQgIkRFU19JTlQgdXNlZFxuIiBpZiAkZGVzX2ludDsKcHJpbnQgIkJOX0xMT05HIG1vZGVcbiIgaWYgJGJuX2xsOwpwcmludCAiUkM0IHVzZXMgdSR0eXBlWyRyYzRfaW50XVxuIiBpZiAkcmM0X2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIlJDNF9JTkRFWCBtb2RlXG4iIGlmICRyYzRfaWR4OwpwcmludCAiUkM0X0NIVU5LIGlzIHVuZGVmaW5lZFxuIiBpZiAkcmM0X2NodW5rPT0wOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKcHJpbnQgIk1EMiB1c2VzIHUkdHlwZVskbWQyX2ludF1cbiIgaWYgJG1kMl9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJJREVBIHVzZXMgdSR0eXBlWyRpZGVhX2ludF1cbiIgaWYgJGlkZWFfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkMyIHVzZXMgdSR0eXBlWyRyYzJfaW50XVxuIiBpZiAkcmMyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIkJGX1BUUiB1c2VkXG4iIGlmICRiZl9wdHIgPT0gMTsgCnByaW50ICJCRl9QVFIyIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAyOyAKCmlmKCRJc01LMU1GKSB7CglvcGVuIChPVVQsIj5jcnlwdG8vYnVpbGRpbmYuaCIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiBidWlsZGluZi5oIjsKCXByaW50ZiBPVVQgPDxFT0Y7CiNpZm5kZWYgTUsxTUZfQlVJTEQKICAvKiBhdXRvLWdlbmVyYXRlZCBieSBDb25maWd1cmUgZm9yIGNyeXB0by9jdmVyc2lvbi5jOgogICAqIGZvciBVbml4IGJ1aWxkcywgY3J5cHRvL01ha2VmaWxlLnNzbCBnZW5lcmF0ZXMgZnVuY3Rpb25hbCBkZWZpbml0aW9uczsKICAgKiBXaW5kb3dzIGJ1aWxkcyAoYW5kIG90aGVyIG1rMW1mIGJ1aWxkcykgY29tcGlsZSBjdmVyc2lvbi5jIHdpdGgKICAgKiAtRE1LMU1GX0JVSUxEIGFuZCB1c2UgZGVmaW5pdGlvbnMgYWRkZWQgdG8gdGhpcyBmaWxlIGJ5IHV0aWwvbWsxbWYucGwuICovCiAgI2Vycm9yICJXaW5kb3dzIGJ1aWxkcyAoUExBVEZPUk09JHRhcmdldCkgdXNlIG1rMW1mLnBsLWNyZWF0ZWQgTWFrZWZpbGVzIgojZW5kaWYKRU9GCgljbG9zZShPVVQpOwp9IGVsc2UgewoJbXkgJG1ha2VfY29tbWFuZCA9ICJtYWtlIC1mIE1ha2VmaWxlLnNzbCBQRVJMPVwnJHBlcmxcJyI7CglteSAkbWFrZV90YXJnZXRzID0gIiI7CgkkbWFrZV90YXJnZXRzIC49ICIgbGlua3MiIGlmICRzeW1saW5rOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGRlcGVuZCIgaWYgJGRlcGZsYWdzIG5lICIiICYmICRtYWtlX2RlcGVuZDsKCSRtYWtlX3RhcmdldHMgLj0gIiBnZW50ZXN0cyIgaWYgJHN5bWxpbms7Cgkoc3lzdGVtICRtYWtlX2NvbW1hbmQuJG1ha2VfdGFyZ2V0cykgPT0gMCBvciBleGl0ICQ/CgkJaWYgJG1ha2VfdGFyZ2V0cyBuZSAiIjsKCWlmICggJHBlcmwgPX4gbUBeL0ApIHsKCSAgICAmZG9maWxlKCJ0b29scy9jX3JlaGFzaCIsJHBlcmwsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9kZXJfY2hvcCIsJHBlcmwsJ14jIS8nLCAnIyElcycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9kZXJfY2hvcCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycpOwoJfQoJaWYgKCRkZXBmbGFncyBuZSAiIiAmJiAhJG1ha2VfZGVwZW5kKSB7CgkJcHJpbnQgPDxFT0Y7CgpTaW5jZSB5b3UndmUgZGlzYWJsZWQgYXQgbGVhc3Qgb25lIGFsZ29yaXRobSwgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZwpiZWZvcmUgYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgl9Cn0KCiMgY3JlYXRlIHRoZSBtcy92ZXJzaW9uMzIucmMgZmlsZSBpZiBuZWVkZWQKaWYgKCRJc01LMU1GKSB7CglteSAoJHYxLCAkdjIsICR2MywgJHY0KTsKCWlmICgkdmVyc2lvbl9udW0gPX4gLyheWzAtOWEtZl17MX0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pL2kpIHsKCQkkdjE9aGV4ICQxOwoJCSR2Mj1oZXggJDI7CgkJJHYzPWhleCAkMzsKCQkkdjQ9aGV4ICQ0OwoJfQoJb3BlbiAoT1VULCI+bXMvdmVyc2lvbjMyLnJjIikgfHwgZGllICJDYW4ndCBvcGVuIG1zL3ZlcnNpb24zMi5yYyI7CglwcmludCBPVVQgPDxFT0Y7CiNpbmNsdWRlIDx3aW52ZXIuaD4KCkxBTkdVQUdFIDB4MDksMHgwMQoKMSBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIFBST0RVQ1RWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogIEZJTEVGTEFHUyAweDAxTAojZWxzZQogIEZJTEVGTEFHUyAweDAwTAojZW5kaWYKICBGSUxFT1MgVk9TX19XSU5ET1dTMzIKICBGSUxFVFlQRSBWRlRfRExMCiAgRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KCUJMT0NLICIwNDA5MDRiMCIKCUJFR0lOCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgoJICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIkdmVyc2lvblxcMCIKI2lmIGRlZmluZWQoQ1JZUFRPKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKFNTTCkKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInNzbGVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInNzbGVheTMyLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lIiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lIiB1bmxlc3MgKCRuYW1lIGVxICJwZXJsIiBhbmQKCQkJIHN5c3RlbSgiJHBhdGgvJG5hbWUgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRibl9vYmosbXkgJGRlc19vYmosbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkZHNvX3NjaGVtZSxteSAkc2hhcmVkX3RhcmdldCxteSAkc2hhcmVkX2NmbGFnLAoJbXkgJHNoYXJlZF9sZGZsYWcsbXkgJHNoYXJlZF9leHRlbnNpb24sbXkgJHJhbmxpYixteSAkYXJmbGFncyk9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkYm5fb2JqICAgICAgID0gJGJuX29iagpcJGRlc19vYmogICAgICA9ICRkZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZSsxXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdICF+IC9eKGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2RsJywgJ2RsZmNuJywgJ3dpbjMyJyBhbmQgJ3ZtcydcbiI7CgkJCX0KCQl9CglwcmludCBTVERFUlIgIk5vIHNhbml0eSBlcnJvcnMgZGV0ZWN0ZWQhXG4iIGlmICRlcnJvcmNudCA9PSAwOwoJcmV0dXJuICRlcnJvcmNudDsKCX0K